变量
Unity 内置的变换矩阵





函数



光照模型
漫反射
公式
$$\mathtt{c}_{diffuse}=(\mathtt{c}_{light}\cdot \mathtt{m}_{diffuse})max(0,\vec n \cdot \vec l)$$n⃗\vec nn 是表面法线,l⃗\vec ll 指向光源的单位矢量,mdiffusem_{diffuse}mdiffuse 材质漫反射颜色,clightc_{light}clight 是光源颜色。
高光反射
phong 模型
$$c_{\text{specular}} = (c_{\text{light}} \cdot m_{\text{specular}}) \cdot \max(0, (\vec{v} \cdot \vec{r}))^{m_{\text{gloss}}}$$参数解释:
-
mglossm_{\text{gloss}}mgloss:材质的光泽度(gloss)或反光度(shininess)
- 控制高光区域的大小:值越大,高光区域越小、越集中
- 典型范围:8-256(金属材质通常100+,塑料通常20-80)
-
mspecularm_{\text{specular}}mspecular:材质高光反射颜色
- 控制高光反射的强度和颜色(如金色材质:(1.0,0.8,0.2)(1.0, 0.8, 0.2)(1.0,0.8,0.2))
- 数据类型:RGB向量(例:(0.8,0.8,0.8)(0.8, 0.8, 0.8)(0.8,0.8,0.8)为银白色)
-
clightc_{\text{light}}clight:光源的颜色和强度
- 与材质高光颜色相乘(clight⋅mspecularc_{\text{light}} \cdot m_{\text{specular}}clight⋅mspecular)
- 数据类型:RGB向量
-
r⃗\vec{r}r:反射方向
- 计算公式:r⃗=2(n⃗⋅l⃗)n⃗−l⃗\vec{r} = 2(\vec{n} \cdot \vec{l})\vec{n} - \vec{l}r=2(n⋅l)n−l
- 其中n⃗\vec{n}n为表面法线,l⃗\vec{l}l为指向光源的单位矢量
-
v⃗\vec{v}v:视线方向
- 从表面点到摄像机的单位矢量
公式修复说明:
-
移除冗余项:
- 删除cdot\mathrm{c}_{\text{dot}}cdot(不是标准Phong模型的一部分)
- 简化表达式:(clight⋅cdot⋅→clight⋅(\mathrm{c}_{\text{light}} \cdot \mathrm{c}_{\text{dot}} \cdot → c_{\text{light}} \cdot(clight⋅cdot⋅→clight⋅
-
修正点积表示:
- vec v⋅c⋅→v⃗⋅\mathrm{vec}\ v \cdot \mathrm{c} \cdot → \vec{v} \cdotvec v⋅c⋅→v⋅
- 点积是标量运算,正确表达:v⃗⋅r⃗\vec{v} \cdot \vec{r}v⋅r
-
指数位置修正:
- )mgloss)^{m_{\text{gloss}}})mgloss → )mgloss)^{m_{\text{gloss}}})mgloss(确保指数作用于点积结果)
-
向量表示规范化:
- vec n→n⃗\mathrm{vec}\ n → \vec{n}vec n→n(统一使用标准向量表示法)
- vec r→r⃗\mathrm{vec}\ r → \vec{r}vec r→r
半兰伯特模型
公式
$$\mathtt{c}_{diffuse}=(\mathtt{c}_{light}\cdot \mathtt{m}_{diffuse})(\alpha(0,\vec n \cdot \vec l)+\beta)$$半兰伯特模型没有使用max操作来防止n⃗\vec nn和l⃗\vec ll和的点积为负值,而是进行了α\alphaα倍的缩放和再加上一个β\betaβ的偏移。
在绝大多数情况下,α\alphaα和β\betaβ的值均为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个渲染队列

2482

被折叠的 条评论
为什么被折叠?



