Unity ShaderLab 框架全解析1 —— Properties
Unity ShaderLab 框架全解析1
该系列主要是根据Unity官方文档和个人搜集的知识对Unity ShaderLab框架进行总结,比较基础,用于提高知识学习、复习的效率。对于文中给到的文章链接的作者表示感谢
Properties
官方链接:ShaderLab: Properties
属性是ShaderLab当中比较容易理解的,在Shader当中定义了变量之后,它可以将Shader当中所用到的变量暴露出来,方便我们在材质面板进行调节和在代码中进行调用。下面展示一个ShaderLab当中比较全面的属性代码:
Properties{
//数值和滑动条
_Num1("Num1Name",Range(8,256)) = 20
_Num2("Num2Name",Float) = 1
_Num3("Num3Name",Int) = 1
//颜色和向量
_Color("ColorName",Color) = (1,1,1,1)
_Vector("VectorName",Vector) = (1,1,1,1)
//纹理
_Texture1("Texture1Name",2D) = "defaulttexture"{}
_Texture2("Texture2Name",Cube) = "defaulttexture"{}
_Texture3("Texture3Name",3D) = "defaulttexture"{}
}
对应的材质inspector
更多细节:
其中2D纹理可以设定Unity内置的默认纹理,比如将上面的"defaulttexture"写为“white” (RGBA: 1,1,1,1), “black” (RGBA: 0,0,0,0), “gray” (RGBA: 0.5,0.5,0.5,0.5), “bump” (RGBA: 0.5,0.5,1,0.5) or “red” (RGBA: 1,0,0,0)。
Cube和3D纹理在材质没有被外部赋值时,则默认采用gray(RGBA: 0.5,0.5,0.5,0.5)。
属性特性
在每一个属性代码的前面加"[特性名]"可以设置属性在面板上面的显示和配置方式,Unity可以辨识的属性特性有:
[HideInInspector] - 在材质面板上不显示该属性
[NoScaleOffset] - 材质面板不显示纹理的缩放和偏移控制输入框,也就是上图中的Tilling和Offset。
[Normal] - 表示该纹理需要一个法线纹理输入
[HDR] - 表示需要高动态范围的纹理或者颜色
[Gamma] - 表示该向量或者浮点数值需要采用Gamma矫正。
具体了解参考这位大佬文章:Gamma、Linear、sRGB 和Unity Color Space,你真懂了吗?
还有这篇:Gamma & Linear Color Space
[PerRendererData] - 表示对应属性需要在MaterialPropertyBlock进行设置来进行per-render。这里暂时了解不深入,贴上相关官方文档链接Accessing shader properties in Cg/HLSL
上面特性的具体效果可以自行测试。
上一篇: Unity Shader 屏幕后处理反相
下一篇: Topk问题及代码实现