4.7 PBR的工作流

1.非金属的光学物理导性

2.金属的光学物理导性

3.高光工作流

4.金属工作流


1.非金属的光学物理导性

当光线照射到非金属表面时, 会发生两个过程(一分为二):

1).表面反射(镜面反射)

a.比例: 很小, 通常只有2% - 5%的光会立即被反射

b.特性: 反射不会改变颜色, 保持入射光的颜色, 比如白光反射为白光, 蓝光反射为蓝光; 遵循菲涅尔效应, 反射强度随观

察角度变化, 垂直看时反射最弱, 掠射角看反射最强

c.对应的PBR参数: Smoothness(控制反射清晰度)和Specular的强度(控制反射量)

2).内部散射(漫反射)

a.比例: 大部分光线(95% - 98%)会折射进入物体内部

b.内部过程:

  - 穿透表面: 光线进入材质内部

  - 吸收与散射: 光线在内部的微观结构中不断反射, 穿梭

  - 选择性吸收: 材质的分子结构会吸收特定波长的光; 比如苹果的色素吸收蓝色和绿色波长, 主要反射红色波长光

  - 重新射出: 剩余的光线从表面的各个点随机散射出来, 形成漫反射

c.对应PBR参数: Albedo颜色, 就是材质吸收后剩余的光的颜色, 即它的"本色"

3).非金属总结: 反射 + 散射 + 内部染色

2.金属的光学物理导性

金属与非金属的光的物理特性截然不同, 其核心在于其内部有大量的自由电子

1).表面反射(镜面反射)

a.比例: 极高, 70% - 100%的光会被立即反射

b.特性: 颜色鲜明, 自由电子对不同波长光的响应不同, 导致反射光带有颜色; 同样遵循菲涅尔效应

c.对应PBR参数: 金属Albedo颜色直接定义了其反射颜色, Smoothness同样控制反射的清晰度

2).内部过程: 几乎为零

a.极速衰减: 那极少部分折射进入金属内部的光, 会瞬间被自由电子吸收并转化为热量

b.结果: 没有有效的漫反射, 光线无法进入内部并重新散射出来

3).金属总结: 几乎全部反射 + 选择性吸收 = 有色反射

3.高光工作流

高光工作流是一种传统的工作流, 现在用的相对较少, 但是在某些特定情况下能提供更精细的控制

a.核心思想: 它不区分金属和非金属, 直接指定镜面反射的颜色和强度

b.所需贴图/参数

- Albedo: 漫反射颜色

- Specular: 高光颜色和强度

- Smoothness: 光滑度(光滑度越高,高光点越集中、越清晰)

对于金属和非金属参数的解释:

a.非金属, Aldebo是物体的本色, Specular是灰白色(镜面反射很弱)

b.金属, Albedo是偏黑色(漫反射很弱), Specular是金属的本色

1).仅仅将漫反射和镜面反射相加是有问题的, 结果可能会比光源更亮(不符合能量守恒定律)

在这里插入图片描述
在这里插入图片描述

2).确保材质的漫反射和镜面反射的和永远不超过1

a.可以简单的将反照率色调乘以(1 - 镜面色调)进行调整, 镜面反射和漫反射已经建立了关联

在这里插入图片描述

镜面反射越强, 漫反射部分就越暗

当高光色调是灰度色(RGBA相等), 这种方法效果很好; 但当使用其他颜色, 会产生奇怪的结果; 例如, 红色的高光色调只

会减少漫反射部分的红色分量, 对于其他颜色通道不会产生影响; 漫反照会产生一个错误的效果

在这里插入图片描述

为了防止这种现象, 我们使用高光色的最强分量来降低反照率

在这里插入图片描述

- Unity已经给我们准备了处理能量守恒的函数: EnergyConservationBetweenDiffuseAndSpecular

  需包含头文件 #include "UnityStandardUtils.cginc"

- 该函数以反照率和高光色作为输入, 输出一个调整后的漫反射值, 第三个参数表示1 - 反射率即计算出的漫反射能量比

  例Reflectivity表示反射率, 镜面反射部分所占的能量比例

在这里插入图片描述


4.金属工作流

金属工作流是目前最主流, 最推荐使用的工作流, 因为它更直观, 更容易调出真实的效果

a.核心思想

  它使用一个关键参数Metallic(金属度)来区分一个表面是金属还是非金属(绝缘体), 它是一个从0(完全非金属, 如塑料, 

  木头, 橡胶)1(完全金属, 如铁,,)的滑杆

b.所需贴图/参数

  - Albedo(反照率贴图)

    对于非金属, 存放的是物体本身的漫反射颜色(比如塑料的红色, 树叶的绿色)

    对于金属, 存放的是物体本身的镜面反射颜色(比如金子的金黄色, 铜的橙红色)

  - Metallic(金属度贴图/参数) 

    若是贴图, 则为一个灰度图, 白色1表示金属部分, 黑色0表示非金属部分

  - Smoothness(光滑度贴图/参数) 

    控制表面的粗糙程度, 光滑度越高, 反射越清晰, 高光点越小; 光滑度越低, 反射越模糊, 高光点越扩散

Metallic参数就像一个开关:

a.Metallic = 0, Albedo用作漫反射, 高光使用(0.04, 0.04, 0.04)

b.Metallic = 1, Albedo用作高光颜色, 漫反射颜色压暗甚至接近黑色

我们可以使用另一个滑块属性作为金属开关, 来替换高光色调; 通常, 它应该设置为01, 介于两者之间的值表示了一种混

合了金属和非金属成分的材料

在这里插入图片描述

金属工作流中, 我们只提供了两个主要输入:

a.albedo 基础颜色

b.metallic 金属度(01)

但Shader进行光照计算时, 实际需要两个数据:

a.漫反射颜色用于计算漫反射光照的部分

b.高光反射颜色用于计算镜面高光的部分

DiffuseAndSpecularFromMetallic负责将albeo和metallic转换成shader真正需要的 diffuseColor和specularColor
有一个细节是, 金属滑块本身应该在伽马空间中, 但是在线性空间中渲染时, unity不会对单个值进行伽马校正; 因此Gamma

属性来告诉Unity也应该对我们的金属滑块应用伽马校正

在这里插入图片描述


1).上面我们仅仅考虑的是将参数进行守恒

a.EnergyConservationBetweenDiffuseAndSpecular

  强制让漫反射颜色衰减, 使其与高光颜色的能量强度之和不超过1

b.DiffuseAndSpecularFromMetallic

  根据金属度属性, 正确地分配入射能量到反射和漫反射两部分

2).Unity已经给我们提供了实现了完整PBR光照模型的函数UNITY_BRDF_PBS

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值