Unity着色器CGINCLUDE与pass复用

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

1.CGINCLUDE和ENDCG代码块

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

2. .cginc文件

我们经常会用到unity的一些内置文件,它们都是.cginc后缀格式,其实我们也可以自己写这种文件,写完以后直接引用即可。使用CgInclude文件来模块化Unity Shader。
模块化shader就像模块化C语言一样,步骤如下
a.创建一个文本文件,修改后缀.cginc;(unity shader其实也是个文本文件)
b.文件内代码要用#ifndef#define#endif包起来防止重复引用,里面可以自定义一些常量、结构体和函数。

如果需要引用它,则需要按照一定规则放置到相应的目录下,一共有三种方式,如下所示;分别是放置到工程路径下,和shader文件同路径,以及unity编辑器安装路径的CGIncludes文件夹下,前两种用的比较多,尤其是我们可以根据工程路径作为root,然后自定义一个文件夹,如#include "Assets/Resources/Shader/CGInc/CustomLightModel.cginc";

也可以使用文件的相对路径,比如自己建立一个cginc文件夹,可以使用"../cginc/xxx.cginc"

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

pass{
     Name "MyPass"
}
然后使用这个pass对应的shader名称即可,比如shader名为Custom/MyShader
那么就可以使用 UsePass "Custom/MyShader/MYPASS"
注意:这里的pass名要大写,因为unity内部会把所有的pass名称转换成大写字母的表示。

4.Category命令

在逻辑上统一组织它下面的命令,通常用于设置通用的渲染状态;

Shader "example" {
Category {
    Fog { Mode Off }
    Blend One One
    SubShader {
        // ...
    }
    SubShader {
        // ...
    }
    // ...
}

Category {
    Cull Off
    Blend One One
    SubShader {
        // ...
    }
    SubShader {
        // ...
    }
    // ...
}
}

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值