如何确定unity shader中pass的执行顺序

来源:互联网 发布:chromium linux 64 编辑:程序博客网 时间:2024/04/27 13:36
这周看了《unity3D Shader Lab开发实战详解》的六章内容,让我对unity SubShader中的pass执行规律有了更进一步的了解。

这是我之前的疑问:
SubShader里Pass是以怎样的顺序来执行的?可以灵活定制吗?

unity shader中的pass的执行顺序是依据pass在shader中出现的先后顺序来确定的。
然后通过配制每个pass的LightMode Tag,来选择具体执行哪个pass。

以surface shader举例说明:
surface shader展开来后,可以看到如下pass。
pass{ Tags{"LightMode"="Vertex"} }
pass{ Tags{"LightMode"="ForwardBass"} }
pass{ Tags{"LightMode"="Deferred"} }

这三个pass是相互排斥的,永远只可能执行其中一个pass。
那unity是根据什么来选择执行哪个pass的呢?
unity通过摄像机下的Rendering path来选择相应的pass。

Rendering path=Legacy Vertex Lit时,选择"LightMode"="Vertex"的pass。ForwardBass与Deferred将不会被执行。

Rendering path= ForwardBass时,优先选择"LightMode"="ForwardBass"的pass,ForwardBass不存在时,选择Vertex。Deferred将不会被执行。

Rendering path= Deferred时,优先选择"LightMode"="Deferred"的pass,Deferred不存在时,选择ForwardBass,ForwardBass不存在时选择Vertex。

以上就是passt选择的规律。

还有一些别的pass,如"LightMode"="ShadowCaster"依赖的就不是摄像机的Rendering path,而是Mesh Render里的Cast Shadows了,这里就不一一举例了。
0 0
原创粉丝点击