Skip to content

Physically based rendering Wolfire Games Blog

Physically based rendering - Wolfire Games Blog 原文发布于 October 2nd, 2015

基于物理的渲染

什么是 PBR?

在过去几年中,基于物理的渲染(PBR)已经变得越来越流行。Unity 5、Unreal Engine 4、Frostbite、Fox Engine 和更多的游戏引擎都在使用它,还有越来越多的资产创作工具,如 Marmoset Toolbag。

下图是 Overgrowth 中当前的渲染和基于物理的渲染的比较。PBR 允许我们对金带和刀片的反射进行着色,使其看起来更像黄金,并允许我们对刀片的反射进行锐化,使其更像抛光的金属。

镜面反射与漫反射

漫反射指的是光线进入一个表面,在周围反弹,然后以一个随机的方向再次出现。在这个过程中,一些波长的入射光线被吸收了,从而导致了表面的感知颜色。一个常见的例子是乒乓球,它是一种非常漫射的材料。镜面光指的是在一次反弹中立即从表面上反射出来的光,导致环境的反射,根据表面的粗糙度,可以或多或少的模糊。

能量守恒

任何表面都不可能反射比它接受的更多的光。这意味着,如果一个表面是 100%的镜面反射,那么它就不可能有漫反射,反之亦然。我们需要注意确保镜面反射和漫反射的总和不会超过 100%,因为这种情况在物理上是不可能的。

菲涅尔效应

漫反射和镜面反射之间的平衡根据你观察表面的角度而改变。例如,如果你从湖面上看过去,你会看到对岸和天空的镜面反射。然而,如果你从上面直视湖面,你会看到湖里的泥土和藻类的漫反射。这种效应是由菲涅尔方程控制的,通常被称为菲涅尔效应。

你可以用几乎所有的表面来测试这个效果,首先直视它:如果它有一个高的镜面成分和低的粗糙度,你可能在某种程度上看到你的反射,或者你可能只是从漫反射中看到表面的颜色。现在沿着表面从侧面看。你的视线和表面的方向之间的角度越大,它的反射就会越多。用你的手机屏幕试试吧!在现实世界中,当从侧面看时,所有材料都接近 100% 的镜面成分。

这里有两张桌子上的绳索的照片,以展示现实生活中的菲涅尔效应。首先,你可以看到黑色的绳索是如何沿着边缘突出的,因为视角和表面之间的角度越来越大。其次,你可以看到在第二张照片中,从一个较低的角度拍摄,桌子上的绳索有更多的反射。

金属的情况不同

大多数不是金属的材料对进入的光线有 4% 的反射是镜面反射(当直视时),其余的是漫反射。这在不同的材料之间仅有几个百分点的差异,而且永远不可能达到 0% 的镜面反射。然而,金属几乎只产生镜面反射,几乎没有漫反射。它们也会根据金属的不同而使反射光产生不同的色调:这就是我们如何区分金、铜或青铜的原因,镜面反射的色调是不同的。

PBR 实践

在为 PBR 进行纹理处理时,有许多准则需要遵循,以达到最佳效果;你可以在本博文的末尾找到这些信息。使用 PBR 的意义因项目而异,但在最常用的模型--金属粗糙度模型中,需要以下数据。

  • 颜色 Color,如果金属成分为 0%(黑色),这被用作简单的漫反射颜色,当金属成分接近 100%(白色)时,被用作反射光的色调。现实世界中的每一种金属都有一个测量值,可以在 PBR 中使用,以近似该金属的外观。这使得艺术家可以简单地从现实世界的测量调色板中为大多数材料工作,而不必担心他们的 "金子 "在所有的照明条件下是否真的看起来像金子。
  • 粗糙度 Roughness,这使得高光更宽,反射更模糊,它越高。一个滚珠轴承可能有一个非常低的粗糙度值,而一个起雾的镜子会有一个较高的粗糙度值。
  • 金属感 Metallic,如果这个值是 100%,表面会表现得更像金属,把漫反射调到 0%,把镜面反射光调到 100%,把颜色通道应用到镜面而不是漫反射。

PBR 并不是在每一种情况下都是正确的选择:如果一个游戏并不试图模仿光线在现实世界中的表现,那么这些关于现实世界如何工作的概念可能就没有用。然而,旨在实现真实光照的游戏可以从基于物理的渲染中大大受益。使用 PBR 可以...

  • 在不同的光照条件下给出更可预测的结果。
  • 给予更真实和统一的结果,因为所有东西都是基于真实世界的。
  • 让艺术家们更容易制作内容,因为少了猜测的成分。

进一步阅读

The comprehensive PBR guide by Allegorithmic

theory practice texture conversion by Marmoset

关于 PBR 背后的数学的课程笔记 Self Shadow blog