Unity Shader 学习笔记(31) 基于物理的渲染技术(PBS)、BRDF

Unity Shader 学习笔记(31) 基于物理的渲染技术(PBS)、BRDF

参考书籍:《Unity Shader 入门精要》
【《Real-Time Rendering 3rd》 提炼总结】(六) 第七章 · 高级着色:BRDF及相关技术


基于物理的渲染技术(Physically Based Shading, PBS)

是为了对光和材质之间的行为进行更加真实的建模。


在物理学上,光是一种电磁波。光与物体相交,一些光线被吸收(absorption),另一些被散射(scattering),最后被感应器(眼镜)吸收成像。
Unity Shader 学习笔记(31) 基于物理的渲染技术(PBS)、BRDF_第1张图片

  • 对于金属材质,一般所有折射的光线都会被直接吸收。
  • 对于非金属材质,则会同时表现吸收和散射两种现象。散射出去的光称为次表面散射光(subsurface-scattered light)。

如下图:蓝色的就是次表面散射。
Unity Shader 学习笔记(31) 基于物理的渲染技术(PBS)、BRDF_第2张图片


双向反射分布函数(Bidirectional Reflectance Distribution Function, BRDF)

辐射率(radiance):通常用L表示,量化光的单位。指单位面积、单位方向上光源的辐射通量。

绕着表面法线旋转入射方向或观察方向不会影响BRDF结果,称作各项同性(isotropic)的BRDF,对应各项异性(anisotropic)。

BRDF可以用 f(I, v)表示,I为入射方向,v为观察方向(双向的含义)。表示一束光延入射方向I到达表面时,能有多少部分的能力会反射到观察方向v上。BRDF的两种理解方式:

  • 给定入射角度,BRDF可以给出所有出射方向上,反射和散射光线的相对分布情况。
  • 给定观察方向(出射方向),BRDF可以给出所有入射方向上,到该出射方向的光线分布。

反射等式(reflection equation):出射辐射率Lo(v) = 所有(做积分)入射方向的辐射率(Li(I)) × 对应观察方向所占权重(BRDF值f(I, v)) × 该表面投影结果(余弦值(n · I)) 。
在这里插入图片描述

游戏中通常和精确光源打交道,可以简化公式:Ic为该光源方向,clight为光源颜色。
在这里插入图片描述

判断BRDF是否基于物理:是否满足交换律f(I, v) = f(v, l))和能量守恒(表面反射的能量不能超过入射的光能,即 Lo ≤ 1)。

BRDF两种不同现象:表面反射和次表面散射。
Unity Shader 学习笔记(31) 基于物理的渲染技术(PBS)、BRDF_第3张图片


漫反射项(diffuse term),描述次表面散射

Unity中漫反射项:roughness为表面粗糙度。
在这里插入图片描述


高光反射项(specular term),描述表面反射

微面元理论:物体表面由许多微面元组成,这些微面元被认为是光学平滑的,即有高光反射。
I:入射方向,v:观察方向,m为法线( I 和 v 的一半h)。
Unity Shader 学习笔记(31) 基于物理的渲染技术(PBS)、BRDF_第4张图片

BRDF的高光反射项表示形式:
在这里插入图片描述

  • D(h):法线分布函数(normal distribution function, NDF)。用于计算有多少比例的微面元满足m=h。
  • G(I, v, h):阴影-遮掩函数(shadowing-masking function)。用于计算满足m=h中,没被遮挡的,能成功反射到视角的微面元浓度。
  • F(I, h):菲涅尔反射函数(Fresnel reflectance)。上面两步之后,反射光占入射光的比例。
  • 4(n · I)(n · v):校正因子。用于校正从微面元从局部空间到整体宏观表面数量的差异。

你可能感兴趣的:(Unity,Shader,图形学,Unity,Shader,学习笔记,unity,shader)