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

变量

Unity 内置的变换矩阵
imageimageimageimageimage

函数

imageimageimage

光照模型

漫反射

公式

$$\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}}}$$

参数解释:

  1. mglossm_{\text{gloss}}mgloss:材质的光泽度(gloss)或反光度(shininess)

    • 控制高光区域的大小:值越大,高光区域越小、越集中
    • 典型范围:8-256(金属材质通常100+,塑料通常20-80)
  2. 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)为银白色)
  3. clightc_{\text{light}}clight:光源的颜色和强度

    • 与材质高光颜色相乘(clight⋅mspecularc_{\text{light}} \cdot m_{\text{specular}}clightmspecular
    • 数据类型:RGB向量
  4. r⃗\vec{r}r:反射方向

    • 计算公式:r⃗=2(n⃗⋅l⃗)n⃗−l⃗\vec{r} = 2(\vec{n} \cdot \vec{l})\vec{n} - \vec{l}r=2(nl)nl
    • 其中n⃗\vec{n}n为表面法线,l⃗\vec{l}l为指向光源的单位矢量
  5. v⃗\vec{v}v:视线方向

    • 从表面点到摄像机的单位矢量

公式修复说明:

  1. 移除冗余项

    • 删除cdot\mathrm{c}_{\text{dot}}cdot(不是标准Phong模型的一部分)
    • 简化表达式:(clight⋅cdot⋅→clight⋅(\mathrm{c}_{\text{light}} \cdot \mathrm{c}_{\text{dot}} \cdot → c_{\text{light}} \cdot(clightcdotclight
  2. 修正点积表示

    • vec v⋅c⋅→v⃗⋅\mathrm{vec}\ v \cdot \mathrm{c} \cdot → \vec{v} \cdotvec vcv
    • 点积是标量运算,正确表达:v⃗⋅r⃗\vec{v} \cdot \vec{r}vr
  3. 指数位置修正

    • )mgloss)^{m_{\text{gloss}}})mgloss)mgloss)^{m_{\text{gloss}}})mgloss(确保指数作用于点积结果)
  4. 向量表示规范化

    • vec n→n⃗\mathrm{vec}\ n → \vec{n}vec nn(统一使用标准向量表示法)
    • vec r→r⃗\mathrm{vec}\ r → \vec{r}vec rr

半兰伯特模型

公式

$$\mathtt{c}_{diffuse}=(\mathtt{c}_{light}\cdot \mathtt{m}_{diffuse})(\alpha(0,\vec n \cdot \vec l)+\beta)$$

半兰伯特模型没有使用max操作来防止n⃗\vec nnl⃗\vec ll和的点积为负值,而是进行了α\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生效。

透明度混合
imageimage![标签]({{ image
image

Tags

SubShader的标签类型
imagePass的标签类型
imageUnity提前定影的5个渲染队列
image

$$$$
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值