这里写自定义目录标题
Universal RP自带的Shader脚本
各脚本的作用
Unity的Universal RP中给了不同的Shader脚本,分别是Lit,Simple Lit,Baked Lit,UnLit。从做左到右边性能损耗越低。Lit的性能损耗最好,使用了PBR的原则来实现光照,而Simple Lit会简单一些,不考虑PBR来实现的一种简单的光照,而Baked Lit会更简单,仅仅使用贴图去完成光照信息的输入,UnLit就没有任何的光照计算
Lit脚本
这是一个最复杂的脚本,需要对其进行一步步拆解。其实Lit是考虑PBR来实现光照的。
PBR
这里主要是拆解一下PBR的。
PBR,全称Physically Base Render,基于物理的渲染。工作流程主要是分为两种流程,主要是分成金属工作流和高光反射工作流,从截图可以看到。
PBR材质的两个工作流
PBR材质主要是分成两种材质工作流,主要是为了更好的去支持PBR。
金属工作流程(M/R workflow)
金属具有导电性和传热性,也会产生光的折射和光的反射,折射部分被金属材质完全吸收,反射部分则就是金属所呈现的颜色。
按照上面的截图可以看出来,金属工作流需要的参数为三张贴图,base color、metallic、roughness。
base color贴图:一张rgb贴图,通道数为3,表示非金属部分的反射率即基础颜色,不包含光照信息,代表金属的F0(什么是F0往后解释)。
metallic 贴图:一张灰度贴图,通道数为1,贴图上的值1代表100%纯金属,0代表100%非金属,用于金属和非金属的混合。
roughness 贴图:一张灰度贴图,通道数为1,贴图上的数值越大代表的粗糙度越高。
金属工作流(M/R workflow)的优势:
非金属固定的F0为0.04,不需要调整。
主流的工作流,通用性高。
镜面工作流(S/G workflow)
镜面工作流(S/G workflow),主要拆分成三张贴图。Diffuse,Specular,Glossiness。
Diffuse贴图:一张RGB贴图,通道数为3,相当于是Albedo,反射率本征图,如果金属就是纯黑。
Specular贴图:一张RGB贴图,通道数为3,定义金属和非金属的F0
Glossiness贴图:一张灰度贴图,通道数为1,数值越大,物体表面就越光滑
镜面工作流的优劣:
F0需要定义,容易产生一些违反能量守恒的材质
非主流工作流,通用性弱,某些软件工作可能需要自行下载才会支持镜面工作流
相比金属工作流,多了一张RGB贴图,采样开销加大
两种工作流公用的贴图
两种工作流都会使用的贴图主要有,Ambient Occlusion,Normal,Height
Ambient Occlusion 贴图:灰度贴图,表现环境光对物体表面的影响
Normal 贴图:法线贴图,提供物体表面的法线映射,模拟物体表面细节
Height 贴图:置换贴图,提供物体表面的高度差置换映射,模拟物体表面细节
Snell定律
Snell定律就是一条光线有介质1入射进入介质2时,产生的折射角度之间的关系。
按照上图的符号都有:
λ:入射光
λ1:反射光
λ2:折射光
n:入射平面法线
假设入射平面的上方是介质1,下方为介质2,则有介质1的音速常量为c1和介质2的音速常量c2。假设λ和n的夹角为θ,假设λ1和n的夹角为θ1,θ1=θ,λ2和n的夹角为θ2。
则有一下关系:
Sinθ/c1 = Sinθ2/c2。
因为我们是应用学科,对于Snell定律的推导过程网上有很多资料。
菲涅尔定律
双向反射分布函数BRDF
PBR的光照模型
PBR总结
整理一下PBR的几个关键要点。
1,需要遵守能量守恒定律,每次产生反射的时候都要能量的耗损,反射光比入射光永远要暗。
2,遵守涅菲尔定律,光滑的物体在边缘处会产生完全镜像,非金属的F0值范围是2% - 5%,金属的F0值为的取值为70% - 100 %
3,光照必须是在线性空间下进行计算的
4,Specular强度通过BRFD,roughness或者glossiness和F0反射控制