文章

shader入门基础-内置变量,标签,函数,光照模型

shader入门基础-内置变量,标签,函数,光照模型

变量

Unity 内置的变换矩阵 变量
变量
变量
变量
变量

函数

函数
函数
函数

光照模型

漫反射

公式 \(\mathtt{c}_{diffuse}=(\mathtt{c}_{light}\cdot \mathtt{m}_{diffuse})max(0,\vec n \cdot \vec l)\)
$\vec n$ 是表面法线,$\vec l$ 指向光源的单位矢量,$m_{diffuse}$ 材质漫反射颜色,$c_{light}$ 是光源颜色。

高光反射

phong 模型

公式$$ \mathtt{c}{specular}=(\mathtt{c}{light}\cdot\mathtt{m}{specular})max(0,\vec v\cdot\vec r)^{m{gloss}}

\[$m_{gloss}$是材质的光泽度(gloss),也被称为反光度(shininess),它用于控制高光区域的亮点有多大,$m_{gloss}$越大,亮点越小。 $m_{specular}$是材质高光反射颜色,它用于控制该材质对于高光反射的强度和颜色。$c_{light}$则是光源的颜色和强度。 $\vec r$是反射方向,反射可以通过计算获得 $\vec r=2(\vec n\cdot\vec l)\vec n-\vec l$ #### Blinn模型 公式\]

\mathtt{c}{specular}=(\mathtt{c}{light}\cdot\mathtt{m}{specular})max(0,\vec n\cdot\vec h)^{m{gloss}}

\(Blinn 基本思想是 避免计算反射方向$\vec r$,引入新的矢量 $\vec h$。\)\vec h=\frac{\vec v+\vec l}{|\vec v+\vec l|}$$

半兰伯特模型

公式 \(\mathtt{c}_{diffuse}=(\mathtt{c}_{light}\cdot \mathtt{m}_{diffuse})(\alpha(0,\vec n \cdot \vec l)+\beta)\) 半兰伯特模型没有使用max操作来防止$\vec n$和$\vec l$和的点积为负值,而是进行了$\alpha$倍的缩放和再加上一个$\beta$的偏移。 在绝大多数情况下,$\alpha$和$\beta$的值均为0.5。一般公式为 \(\mathtt{c}_{diffuse}=(\mathtt{c}_{light}\cdot \mathtt{m}_{diffuse})(0.5(0,\vec n \cdot \vec l)+0.5)\)

指令

常见的渲染状态设置选项

状态名称设置指令解释
CullCull Back Front Off设置剔除模式:剔除背面/正面/关闭
ZTestZTest Less Greater/LEqula/GEqual/Equal/NotEqual/Always设置深度测试
ZWriteZWrite On/Off开启/关闭深度写入
BlendBlend SrcFactor DstFactor开启并设置混合模式

用于SubShader则会对所有Pass生效,用于特定Pass则对特定Pass生效。

透明度混合 标签 标签 标签 标签

Tags

SubShader的标签类型 标签 Pass的标签类型 标签 Unity提前定影的5个渲染队列 标签

$$

本文由作者按照 CC BY 4.0 进行授权