Unity着色器CGINCLUDE与pass复用

这里总结一下在unity中如何实现代码的复用,如何自己造轮子。

1. CGINCLUDE和ENDCG代码块

unity会把 CGINCLUDE 和 ENDCG 之间的代码插入到每一个pass中,已达到声明一遍,多次使用的目的。例如,可以在 CGINCLUDE 和 ENDCG 之间 定义多个 顶点和片段方法,在pass里只要写明 #pragma vertex 顶点方法名 #pragma fragment 片段方法名 即可,而不用写具体的函数实现。

2. .cginc文件

我们经常会用到unity的一些内置文件,它们都是.cginc后缀格式,其实我们也可以自己写这种文件,写完以后直接引用即可。使用CgInclude文件来模块化Unity Shader。

模块化shader就像模块化C语言一样,步骤如下

  • 创建一个文本文件,修改后缀.cginc;(unity shader其实也是个文本文件)
  • 文件内代码要用#ifndef#define#endif包起来防止重复引用,里面可以自定义一些常量、结构体和函数。

如果需要引用它,就要把它放入到和unity内置的cginc文件相同的目录中,因为在文件包含的时候,unity会到该目录中寻找该文件。

3. pass的复用,在pass内添加Name属性

pass{
     Name "MyPass"
}

然后使用这个pass对应的shader名称即可,比如shader名为Custom/MyShader

那么就可以使用 UsePass "Custom/MyShader/MYPASS"

注意:这里的pass名要大写,因为unity内部会把所有的pass名称转换成大写字母的表示。

来源:CSDN,作者:莫之,转载此文目的在于传递更多信息,版权归原作者所有。
原文链接:https://blog.csdn.net/qq_36383623/article/details/86139712

最新文章