shader入门基础-内置变量,标签,函数,光照模型
变量
函数
光照模型
漫反射
公式 \(\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)\)
指令
常见的渲染状态设置选项
状态名称 | 设置指令 | 解释 |
---|---|---|
Cull | Cull Back Front Off | 设置剔除模式:剔除背面/正面/关闭 |
ZTest | ZTest Less Greater/LEqula/GEqual/Equal/NotEqual/Always | 设置深度测试 |
ZWrite | ZWrite On/Off | 开启/关闭深度写入 |
Blend | Blend SrcFactor DstFactor | 开启并设置混合模式 |
用于SubShader则会对所有Pass生效,用于特定Pass则对特定Pass生效。
Tags
SubShader的标签类型 Pass的标签类型
Unity提前定影的5个渲染队列
$$