在UE4中验证PBR材质
介绍
我的名字是Harrison Eilers,我是来自德克萨斯州休斯顿的环境和技术艺术家。我对游戏开发的热情始于我很小的时候,当时我开始修改《指环王:中土之战》和《湮灭》等游戏,尽管直到我参加暑期课程我才意识到这将是一条可行的职业道路在萨凡纳艺术与设计学院。一年后,我被学校录取,主要从事环境艺术。
2017年6月毕业后,我开始了寻找第一份工作的艰辛旅程。同年 11 月,我加入了Escalation 1985的团队,作为一名材料和纹理艺术家,主要使用Substance Designer。2018 年 4 月,我在 Macktek LLC 担任自由环境艺术家的未公布头衔。今年六月,我开始在Brain Zoo Studios工作, 担任虚幻引擎技术美工。我从事任何工作,从创建工具和着色器到设置敷料和照明。
当我有空闲时间时,我喜欢在 Unreal Engine、Substance Painter或 Designer 中创建工具。我一直被效率所吸引,我相信这就是为什么我如此喜欢技术艺术家的角色。目前,我正在学习SpeedTree,以便我可以熟悉工作流程并找到改进引擎中树叶渲染的方法。
基于物理的渲染
基于物理的渲染 (PBR) 是一种着色和渲染方法,可更准确地表示光如何与表面相互作用。PBR 消除了材质创建的某些方面的猜测,例如基于物理精确公式的镜面反射。这些材料在所有照明情况下看起来也很准确,并为艺术家提供一致的工作流程。
在虚幻引擎 4 中,我们使用金属和粗糙度工作流程。特定于此工作流程的纹理贴图是基色、金属色和粗糙度。在 UE4 中,我们实际上无法控制金属材料的镜面反射值,对于大多数介电材料(非金属),镜面反射值为 0.5 即可。这些镜面反射值被硬编码到金属物体的着色器中并且无法更改。这最大限度地减少了由用户造成的不准确,但如果您想在特定情况下完全控制着色器,也会导致沮丧。
基色贴图决定了材质的颜色,在 UE4 中使用 PBR 时,我们必须遵循一些规则以确保该纹理尽可能准确。一条规则是基色中不应包含任何照明信息。我们希望该材质在任何环境中都能正确渲染,因此如果将任何光照烘焙到基色中,它会在不同环境中错误地渲染。我们必须遵循的另一个规则是基色不应太深或太浅。就像在现实世界中一样,几乎没有绝对的黑色或白色,因此纹理也必须如此。
基色应不含照明信息
暗值不应低于 30 sRGB(容忍范围)或50 sRGB(严格范围)
亮度值不应高于 240 sRGB
粗糙度贴图描述了导致光漫射的表面不规则性。在这张地图中,黑色 (0.0) 代表光滑的表面,白色 (1.0) 代表粗糙的表面。大多数人都会同意粗糙度值是艺术家最有创造力的地方。话虽如此,我相信极端粗糙度值是不现实的,所以我为自己创建了一个简单的指南。
平滑值不应低于 0.05
粗略值不应高于0.95
粗糙度在材料读取方式中起着重要作用。为任何事物创建粗糙度纹理时,最好的情况是拥有一个真实世界的参考,您可以握住它并查看光线如何与其相互作用。现实世界中的一切都具有非常复杂的粗糙度,复制它的一个很好的方法是出去与您尝试创建的对象或材料进行交互。
测试材料
监控和测试材料的最佳方法是在管道的每个阶段验证它们。如果您在 Substance Designer 中创建材质,则有一个名为PBR BaseColor / Metallic Validate的节点,以便您可以检查这些值。同样在 Substance Painter 中,Wes McDermott 创建了有用的 PBR 验证工具。在您进入任何游戏引擎之前,您可以测试这些内容,以确保您的管道是 PBR 安全的。
PBR 验证工具分解
该工具的主要组件是由蓝图 Actor 控制的后期处理材质。这是材料内部的外观。
我正在使用SceneTexture节点访问特定的缓冲区通道。在本例中,我使用了 Base Color、Metallic 和 Roughness。然后我重新映射特定的值范围以创建我的验证渐变。我必须使用此工具将上面的 sRGB 值转换为线性(第一行是 sRGB,第三行是线性 sRGB)。我正在使用重映射值材质函数,以便我可以获得渐变。例如,对于 Base Color 来说,容忍严格的低范围是黄色到绿色的渐变。下面来看看重映射材质函数。
对于Base Color validate,我屏蔽了所有金属区域,因为它仅适用于介电材料。我严重依赖 IF 语句进行基于值的屏蔽。
对于Roughness validate,我必须创建两个梯度,低容差和高容差。然后我确保我的正确值都是 0,1,0(绿色)。
这些都被推送到屏幕屏蔽部分。在本节中,我将使用ScreenPosition UV创建我的视图模式,以便它可以缩放到任何屏幕尺寸。在功能方面,我还加入了Base Color 和 Roughness 缓冲通道,这样艺术家就可以看到他们在哪里犯了错误,而无需每次都关闭工具。之后,我创建了两个简单的开关以在我的蓝图 Actor 中使用。然后我屏蔽了 Skybox 并为该工具创建了一个主开/关开关。
如果我在这里停下来,该工具会很好地工作,但为了使其对艺术家更友好,我构建了一个蓝图 Actor来容纳后期处理和材质参数。下面是蓝图构造图。
首先,我正在创建一个动态材质实例,让我可以访问蓝图中的材质参数。然后我将动态材质实例分配给我作为组件添加的后期处理体积。然后我运行一个序列来根据我制作的自定义枚举(下拉列表)更改我的材料中的标量参数。最后,我添加了一个影响蒙版的滑块。