我对游戏开发非常陌生,我一直试图了解屏幕空间反射和基于物理的渲染之间的区别。
我已经读过有关PBR的知识,据我了解,它试图模仿光在现实生活中的反射方式,这通常是根据材料的类型将其分为两个部分,镜面反射和散射。
至于SSR,如果我错了,请纠正我,这是表面反射的样子。
如果我对SSR的理解是正确的,那么它们是否在某种程度上是相同的?我的意思是,反射在表面上的外观是否取决于表面粗糙度等,这将影响镜面反射的光量和扩散反射的光量。再次,请在我错的任何地方纠正我。
我对游戏开发非常陌生,我一直试图了解屏幕空间反射和基于物理的渲染之间的区别。
我已经读过有关PBR的知识,据我了解,它试图模仿光在现实生活中的反射方式,这通常是根据材料的类型将其分为两个部分,镜面反射和散射。
至于SSR,如果我错了,请纠正我,这是表面反射的样子。
如果我对SSR的理解是正确的,那么它们是否在某种程度上是相同的?我的意思是,反射在表面上的外观是否取决于表面粗糙度等,这将影响镜面反射的光量和扩散反射的光量。再次,请在我错的任何地方纠正我。
Answers:
当您说“它试图模仿光线在现实生活中的反射方式时,您将走在正确的轨道上,这通常取决于材料的类型,它通常分为两个部分,镜面反射和散射”。
但是,我们长期以来一直在游戏和计算机图形学中对具有镜面反射和漫反射的材质进行建模。诀窍在于,我们过去将这些事情当作完全独立的方法来处理-更改镜面反射并不会更改漫反射:
这是Blender Wiki中的Phong着色 示例。您可以看到它提供了镜面反射强度和镜面硬度两个参数,这些参数仅更改反射的发白部分。蓝色漫反射完全不改变。
游戏使用这种方式的方式是,美术师将负责手动调整每种材料的这些值,直到“看起来正确”为止。因为“镜面硬度”不是我们可以精确测量的材料的真实物理属性,所以必须用肉眼才能做到。
这种方法有点脆弱。更改照明条件(例如,动态对象在不同区域移动,或在一天中有天气的环境中移动)时,它的外观可能会有些微错误-太亮或太暗-因为观看条件与对其镜面反射参数进行了调整。
输入基于物理的渲染,这是尝试将我们的材料描述基于真实表面的更客观,可测量的属性。最明显的特性之一是能量守恒-较粗糙的表面将散射光,而较光滑/金属性更强的表面将更直接地反射光,但是它们都是从相同的光源池中反射的。因此,在其他条件相同的情况下,当我们使材质变亮时,漫反射分量应该变暗:
此示例来自Marmoset文章,解释了Syntac_最初共享的PBR
基于物理的渲染比节省能源要多得多,但这可能是您正在使用基于物理的系统的最明显的迹象。
通过使反射模型与材料在现实生活中的工作方式相似,我们减少了软化因素和艺术家主观性的需要,以使真实的材料(例如木材或混凝土或皮革)在各种照明条件下看起来都是真实的。
请注意,另一个答案是根据光线从场景中其他物体反射回来的间接照明来描述的。尽管许多使用基于物理的模型的照明系统也将包括对此模型进行建模的工具,但通常以“ 全局照明”的单独名称来称呼它。这是使此图像中的漫反射头的一侧显示为绿色的效果,并通过从绿色墙壁弹起的光进行照明:
从该图像文章上的全局照明
当PBR尝试对材料如何反射光进行建模时,“屏幕空间反射”尝试捕获被反射的内容-特别是对于发亮的镜面表面,我应该在反射中看到什么?
同样,这是一种相对较新的渲染技术,与以前的游戏方式相比,它可能最容易理解:
翻转渲染 -在水平面或平面镜中很常见,我们实际上是第二次渲染所有反射的几何图形,并在反射面的平面上进行镜像。这样可以产生高质量的反射(完整的细节,与曲面接触的对象与其反射对齐),但仅适用于平坦表面。表面越波状或起伏,其表现得越像真实的反射,该反射应以复杂的方式失真或模糊。
立方体贴图 -让我们存储从其中心点放射出的任何可见光线所能看到的颜色。通过从场景中的选定点动态渲染立方体贴图,我们可以估计应该从任意曲面上反射出什么颜色。这里的麻烦在于,立方体贴图仅在其中心点处完全正确-当我们模拟反射的点在场景中移动时,它应该看到一些视差,而这在立方体贴图中是不存在的。这意味着对象不会倾向于与其反射对齐。
屏幕空间反射尝试通过使用渲染的场景本身作为反射信息的源来解决这些限制。它使用场景的深度对反射的视线进行光线散射,直到它与渲染的场景中的某些东西相交为止。
这是EA DICE演示文稿中的一张幻灯片,介绍了他们对《冰冻之眼》引擎进行反射的方法。
这意味着(通过一些聪明的算法工作)我们可以从游戏中的任意表面上以合理的类似射线追踪的精度获得反射,只要在表面上可见反射的表面,就可以使接触,扭曲和模糊的表面正确对齐。 -screen(即未离屏幕或其他东西遮挡)。如果无法通过光线渐进来准确确定反射,通常可以使用附近的样本或代表相机视图旁边/后面的场景的后备立方体贴图来近似估计反射。
您可以在此屏幕空间反射的示例中看到,印象虽然非常小,但印象却非常令人信服(请参见立方体底面的反射,这些底面在渲染的帧中不可见,因此只需涂抹并重复相邻像素,或花盆旁边和屏幕底部的右绿色窗帘反射中的孔,光线行进无法找到右反射像素。通常将此技术用于中等光泽/略粗糙的表面,以帮助减少偶尔出现的错误。