Shader编程是游戏图形学中非常重要的一部分,但是其门槛较高。下面我们以Unity为例,来看一下Shader编程的入门教程,帮助大家对Shader编程有一个整体了解。
Unity Shader由Properties、SubShader、Pass等结构组成。Properties声明变量,SubShader定义Shader,Pass描述渲染状态。ShaderLab语法可快速实现。
Unity有许多内置的输入输出变量,如顶点坐标(_WorldSpacePosition)、法线(_Normal)、纹理坐标(_UV)等。了解这些变量对编写Shader很重要。
半精度浮点(half)、整型(int)、向量(float2-4)和矩阵(float3x3)是常用的数据类型。向量和矩阵进行点积、叉积等运算。
tex2D获取纹理颜色,采样器sampler2D声明纹理。可以进行各向异性过滤,修改UV坐标实现动画效果。还可以采样环境贴图。
顶点接口语义定义顶点参数,片元接口可定义插值修饰符如smooth、noperspective。了解这些语义和修饰符也很关键。
Unity CG提供了大量内置函数如saturate、lerp、dot等,还有gamma、法线映射等实用函数。充分利用这些函数可以优化代码。
漫反射光照、高光、阴影等效果可基于内置变量实现。场景光照可由半兰伯特模型表示。这些是实现基本光照的基础。
简单来说,掌握上面这些基础知识,就可以实现常见的Shader效果。之后可以学习更复杂的光照模型、BRDF等expand你的Shader编程能力。