Unity Shader编程入门
Shader是Unity实现精美图形效果的关键。本文将简要介绍Unity Shader编程的基本概念和语法,助你完成Shader编程入门。
Shader是运行在GPU上的小程序,它将材质的面向对象表示转换为GPU可执行的代码,来实现材质各种视觉效果。UnityShader使用类C语法,采用Surface Shader模型。
Unity Surface Shader包含Properties、SubShader、CGPROGRAM等结构。Properties声明可编辑参数;SubShader定义子着色器;CGPROGRAM实现算法。典型结构:
Properties{ _Color("Color Tint", Color) = (1, 1, 1, 1) } SubShader{ CGPROGRAM // shader code ENDCG }
1. 使用半精度float类型节约性能。
2. IN/OUT结构定义输入输出参数。
3. Unity内置对象(_WorldSpaceCameraPos等)可直接使用。
4. 访问Properties中变量用_变量名。
5. 实现算法要包含surf函数。
1. Unlit - 不受光照影响的Shader。
2. Diffuse - 简单反射光照的Shader。
3. Bumped - 实现法线贴图的Shader。
4. Transparent - 实现透明效果的Shader。
Properties { _Diffuse ("Diffuse Texture", 2D) = "white" {} } SubShader { CGPROGRAM #pragma surface surf Lambert sampler2D _Diffuse; struct Input { float2 uv_Diffuse; }; void surf (Input IN, inout SurfaceOutput o) { o.Albedo = tex2D(_Diffuse, IN.uv_Diffuse).rgb; } ENDCG }
Unity Shader学习需要大量编程实践,以 progressive 掌握各种光照效果的实现。多参考官方示例可快速上手。Shader编程将让你的 Unity 项目视觉效果走到下一个层次。