基于物理法则设计材质可以简化着色和照明,即使我们不追求完全的写实。理解和遵循一些原则,可以使图像更可信,以及让材质在不同的照明组合下都有可预见的效果。
在现代渲染器中,基于物理渲染(PBR)是指某些概念,诸如能量守恒定律、物理上可信的散射、材质分层、线性色彩空间(energy conservation, physically plausible scattering and layering in materials and linear color spaces)。虽然阿诺德是基于物理渲染器,但可以根据所需允许你打破这些规则,创造不符合物理法则的材质。在这份文档中,我们会解析基本理论,以及如何使你的shader遵循这些原则。
光子和散射
在渲染中我们模拟光子从灯光中发射,透过空气或体积物,经过表面反射,最终落在相机的传感器上。无数光子在传感器的组合,便形成了渲染出来的画面。
这意味着在物理的观点看来,表面shader描述了表面是如何跟光子相互作用的。光子落在物体上,有可能被吸收、反射、穿过表面折射、或者在物体的内部散射。这些元素的组合,构成了多种多样的材质。
能量守恒定律
除非一个物体是发射光子的光源,否则它不能返回比接收的光线更多的能量。为了材质能量守恒,离开表面的光子数量会少于或等于接收的光子数量。如果一个材质不能量守恒,它会表现得过亮、渲染出更多噪点,特别是开启全局照明(GI)的时候。
为了保证能量守恒,一个材质各元素的分量(weight)和颜色不能超过1,我们也要小心地确保各元素的总合成也遵循能量守恒,之后会进一步解释。
材质
在微观层面,物体表面有复杂的细节。在渲染的时候,我们不需要用几何体表现这些细节,而是使用含有简单易懂的调节参数的统计学模型。阿诺德的Standard Surface shader有1或2个镜面反射层,还有漫反射或透明的内部。这个shader能表现大量的材质,接下看看各个独立的部分。
漫反射和次表面散射
首先考虑漫反射内部。迎面而来的光子会进入物体内部,在里面散射,被吸收或者从别的位置离开物体。如果光子散射了很多次,我们会得到一个漫反射的外观,由于光子从不同的位置和角度离开物体。对于一些物体例如皮肤,光子可以在表面以下散射得相对较远,得到一个柔软的外观,因此使用次表面散射渲染。对于一些物体例如未加工的木头,光子不会散射得太远,造成一个坚硬的外观,所以使用漫反射渲染。对于薄的物体例如树叶,光子可以散射到物体的另一边,所以我们使用sss漫反射渲染,并开启thin_wall。
注意,这些种类的物体根本上都有着相同的深层物理结构,即使我们在shader中提供了独立的控制点。
漫反射内部也对物体整体颜色有着巨大影响。每一个光子有着相关联的波长,取决于材质的属性,拥有某些波长的光子会比其他光子更易被吸收。相反地,某些光子也更容易离开物体表面,这就产生了颜色。
红色的苹果反射红光。只有红色波长的光会被散射到表面,其他波长的都被吸收了。能量守恒
单个光子只可以参与漫反射、次表面散射、背光这些元素的其中之一。为了物理正确性,我们不希望离开表面的光子比进来的多。Standard Surface shader会自动确保这些元素的总量不会高于1。
镜面散射
粗糙度
镜面层是使用微片面分布(microfacet distribution)来模拟的。我们假设表面是无数随机指向的小平面组成。一个低粗糙度的平面例如镜子,小平面之间的差异非常小,导致一个清晰的反射。而高粗糙度的平面由各种朝向不同的小平面构成,得出的反射就非常柔软。
苹果上有一个清晰可见的高光。注意桌面的高光反射模糊不清,是因为用了较高的粗糙度 粗糙的反射是由散射的光线造成的 光滑表面,入射角等于反射角粗糙度贴图
让表面的高光得到更丰富效果,需要用到粗糙度贴图。这不仅会影响高光的亮度,而且影响环境反射的清晰度。
低粗糙度 高粗糙度穿透(Transmission)
光子不仅在表面反射,还会穿过表面折射。光子会透过镜面反射层,在另一边离开时通常会改变方向,这通过折射系数控制(IOR)。
如果物体内部是透明的,例如干净的玻璃,光子会穿过物体并从另一端出来。如果是一个漫反射内部,光子会在物体内散射,被吸收或透过另一边离开。镜面反射层的折射越强,深层的漫反射内部越容易看得见。对于金属物体,光子透过镜面折射后会立刻被吸收,所以内在的漫反射是不可见的。
菲涅尔(Fresnel)
光子被镜面层反射或折射的百分比取决于视角。当观察迎面的表面,大部分光被折射了,同时在边角的大部分光被反射了。这就是菲涅尔效应。折射系数精确控制了这个效果随着视角变化而变化的程度。
镜面双向反射分布随角度变化而变化透明度和穿透
使用贴图来做表面建模时透明度是最容易理解的。这不影响光子和表面的相互作用,而是直接表明哪里的几何体是不可见的,光子可以直接穿过。
渐变贴图连到透明度节点对透明度一个典型的使用是面片类的效果(sprite type),例如从多边形面片上切出树叶的形状,或使毛发的尖端变透明。注意如果使用了太多透明的面片,会减慢渲染速度。
透明度开 透明度关 连接到透明度的alpha贴图穿透深度(Transmission depth)类似,不过相比表面,它控制了物体内部的密度。密度高的体积物会吸收更多的光子,使物体深度越深颜色越暗。
穿透颜色:白色 穿透颜色:浅蓝色
网友评论