Shader中,编译指令分为两种,一种是常规的编译指令,也就是顶点片元着色器(Vetex & Fragment Shader)使用的编译指令,另一种就是表面着色器(Surface Shader)使用的编译指令。二者都使用#pragma语句来编写,并且都需要写在CGPROGRAM和ENDCG之间。区别在于,VF编译指令写在Pass里面,而表面着色器编译指令写在SubShader里面,表面着色器会自行编译到多通道里去,并且需要使用#pragma surface …指令来标识这是一个表面着色器。
VF编译指令:
| #pragma vertex name | 编译name函数为顶点着色器 |
| #pragma fragment name | 编译name函数为片元着色器 |
| #pragma geometry name | 编译name函数为DX10的几何着色器 注:会自动开启#pragma target 4.0 |
| #pragma hull name | 编译name函数为DX10的壳着色器 注:会自动开启#pragma target 5.0 |
| #pragma domain name | 编译name函数为DX10的域着色器 注:会自动开启#pragma target 5.0 |
| #pragma target name | 表明编译目标 参考着色器编译目标等级 |
| #pragma only_renderers space_separated_names | 只为指定的渲染平台渲染着色器 包括下列值: d3d9:Direct3D 9 d3d11:Direct3D 11/12 glcore:OpenGL 3.x/4.x gles:OpenGL ES 2.0 gles:OpenGL ES 3.x metal:IOS&Mac Metal d3d11_9x:Direct3D 11 9.x特性等级一般用于WSA平台 xbox360:Xbox 360 xboxone:Xbox One ps4:PlayStation 4 psp2:PlayStation Vita n3ds:Nintendo 3DS wiiu:Nintendo Wii U |
| #pragma exclude_renderers space_separated_name |

本文探讨Shader中的编译指令,包括顶点片元着色器和表面着色器的使用。编译指令通过#pragma语句在CGPROGRAM和ENDCG之间指定,VF编译指令置于Pass内,表面着色器指令则在SubShader内,并使用#pragma surface指令定义,该指令可配置多种选项。
最低0.47元/天 解锁文章
3792

被折叠的 条评论
为什么被折叠?



