Unity3D Computer Shader 实例讲解

前端时间 做一个unity内部的视频录制工具,每帧需要对图片进行处理,因为图片是逐像素处理,这里的运算量比较大;我就利用GPU运算数据速度快的特性对图像进行处理。

Unity3D Computer Shader  是unity的GPU运算的方式之一,computershader在网上的资料偏少,下面我将对computershader的研究发布。


1.CPUComputerShader之间的数据交互

ComputeShader 到底是什么

   简单来说,Compute Shader 就是一段运行在GPU上的程序,这段程序并不需要用来处理网格数据或者是纹理数据的,它是工作在OpenGL或者DirectX的内存空间中的(不像OpenCL那样拥有自己的内存空间),它们可以输出缓冲数据或者纹理并且在多个执行的线程间共享内存。

●打破常规的ComputeShader

       自从DirectX 10对底层ALU的开放之后,怎样让shader变得更加灵活就一直是业界孜孜不倦的探索的重要方向。尽管开放式的指令环境使得其灵活度达到了一个前所未有的高度,但图形指令本身毕竟存在着诸多限制,比如无法使用树结构,所有指令都必须严格套用汇至三角形和贴图映射的格式来完成,串行线程模式使得像素线程间的数据共享也极为困难而且开销极大等等。简单地说,传统格式的shader已经无法满足业界更加灵活和高效的需求了。

ComputeShader 的局限

ComputeShader打破了shader指令与几何之间的必然联系并因此丢失了一些便利的功能如自动对应LOD等,所有涉及Z值的操作比如阴面隐去(HSR)类操作和常规抗锯齿采样等功能也将受到影响。

2. 现在unity只支持DirectX11computeshader,如果等到了OpenGL4.3,苹果mac用户也能用他们了。也就是说现在只能用于windows平台

ComputeShader 采用HLSL语言编写

语言网址:http://blog.csdn.net/u011926277/article/details/51458577

GPU为什么这么快

1)由于GPU具有高并行结构(highlyparallel structure),所以GPU在处理图形数据和复杂算法方面拥有比CPU更高的效率

2)图1 GPUVS CPU展示了GPUCPU在结构上的差异,CPU大部分面积为控制器和寄存器,与之相比,GPU拥有更多的ALUArithmeticLogic Unit,逻辑运算单元)用于数据处理,而非数据高速缓存和流控制,这样的结构适合对密集型数据进行并行处理

3CPU执行计算任务时,一个时刻只处理一个数据,不存在真正意义上的并行,而GPU具有多个处理器核,在一个时刻可以并行处理多个数据。




GPU采用流式并行计算模式,可对每个数据进行独立的并行计算,所谓“对数据进行独立计算”,即,流内任意元素的计算不依赖于其它同类型数据,例如,计算一个顶点的世界位置坐标,不依赖于其他顶点的位置。而所谓“并行计算”是指“多个数据可以同时被使用,多个数据并行运算的时间和1个数据单独执行的时间是一样的”。

网址:http://m.blog.csdn.net/article/details?id=3817400

http://blog.csdn.net/baidu_26153715/article/details/45752349




猜你喜欢

转载自blog.csdn.net/gtofei013/article/details/73873476