概念:Compute Shader是shader的一种,他的存在是显卡渲染管线进化的结果。vertex & fragement shader对顶点和像素的计算是在GPU不同unit进行。管线进化一个unit既可以运算 vertex shader 也可以运算fragment shader。进化到现在,每个unit不仅可以计算vertex & fragment,还可以用来计算渲染管线中其它的阶段。并且unit还有自己的memory,可以用来储存信息传递到其它shader stage。这个强大的unit叫做compute unit,而对应的shader,就叫做compute shader。
使用:Unity Compute Shader不像普通shader用material渲染物体,它必须由C# Script驱动:C# Script 创建渲染所需的信息包括模型、贴图、参数等然后调用Compute Shader。Compute Shader计算出新的模型位置 对贴图进行处理 改变参数等。Vertex Fragment Shader获得Compute Shader产生的信息进行渲染。
好处:只要是涉及到大量的数学计算,并且是可以并行的没有很多分支的计算,都可以采用ComputeShader。位于渲染流水线之外,但支持读写GPU资源,可以将运行结果直接传递到渲染管线。这样就没有了从显存到内存的时间开销。
缺点:我们需要把数据从CPU传到GPU,然后GPU运算完之后,又从GPU传到CPU,这样的话可能会有点延迟,而且他们之间的传输速率也是一个瓶颈。
有大量的计算需求的话,不要犹豫地使用ComputeShader,它能带来的性能提升绝对是值得的。