尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

PBR材质制作全解析:从金属度与粗糙度原理到UE4旧木门实战

PBR材质制作全解析:从金属度与粗糙度原理到UE4旧木门实战 1. 项目概述从死记硬背到理解底层逻辑每次打开虚幻引擎的材质编辑器面对基础颜色、金属度、粗糙度这几个输入框你是不是也曾经感到迷茫网上能找到一堆“黄金参数表”告诉你木头的基础颜色大概是(0.4, 0.3, 0.2)金属度设为0粗糙度0.7。然后你就照着填结果做出来的材质在特定光照下还行换个环境就感觉“假”或者“不对味”。这其实就是典型的“知其然而不知其所以然”。PBR基于物理的渲染的核心魅力恰恰在于它有一套与现实世界物理规律对应的、自洽的逻辑体系而不是一堆需要死记硬背的魔法数字。今天我们就用一个最生活化的案例——一扇旧木门来彻底拆解金属度和粗糙度纹理的底层逻辑。为什么是木门因为它足够复杂也足够常见。一扇历经风雨的木门上面可能有裸露的原木、斑驳的旧漆、锈蚀的金属合页、甚至还有灰尘和污渍。这些元素完美地涵盖了从非金属到金属从光滑到粗糙的完整光谱。通过亲手为这扇门制作材质你将不再需要记忆参数而是真正理解为什么这里的金属度是0为什么那里的粗糙度纹理是那样画的最终你将获得一种“材质直觉”能够面对任何物体都能分析其表面特性并转化为正确的PBR参数。这不仅是UE4的技能更是所有现代实时渲染和离线渲染的通用核心知识。2. PBR核心逻辑与木门材质设计思路在动手之前我们必须先统一思想理解PBR材质模型的几个基石性原则。这能帮你从根上明白我们在做什么而不是盲目操作。2.1 金属工作流Metallic Workflow的本质一个二选一的开关这是最容易混淆的点。很多人把“金属度”Metallic理解为一个“金属含量”滑块从0非金属滑到1金属中间值代表“半金属”。这是一个巨大的误区。在标准的金属工作流中“金属度”更应该被理解为一个“二选一”的开关它决定了当前像素点使用哪一套完全不同的光学计算模型。当金属度 0非金属/电介质表面遵循非金属的光学规律。光线射入表面后一部分在表面直接被反射形成镜面反射/高光另一部分会进入物体内部经过复杂的散射和吸收后再部分射出形成漫反射/固有色。关键点在于非金属的镜面反射颜色是固定的通常是单色的灰白色其强度由另一个参数“高光度”控制而漫反射颜色则由“基础颜色”控制。所以对于木头、塑料、油漆你看到的本体颜色是“基础颜色”其高光则是白色的。当金属度 1金属表面遵循金属的光学规律。对于金属几乎所有的光线都在表面被反射极少理想情况下为0进入内部。这意味着金属没有“漫反射”这个概念它的“基础颜色”直接定义了其镜面反射的颜色。你看到的金子的黄色就是它反射光的颜色。因此对于金属基础颜色通常是有色的如金子的暖黄、铜的红色而它的高光颜色和基础颜色是一致的。应用到我们的木门木门的主体木头、油漆毫无疑问是非金属金属度必须为0。门上的金属合页、把手金属度必须为1。那么生锈的合页呢这是一个经典的混合情况。铁锈本身是氧化铁是非金属。所以在生锈的区域金属度应该是0基础颜色是铁锈的红褐色在未被锈蚀、依然光亮的金属区域金属度是1基础颜色是铁本身的灰白色。这里绝不能简单地给整个合页一个0.5的金属度而必须通过纹理来精确控制每个像素是0还是1。2.2 粗糙度Roughness表面微观几何的“平均坡度”粗糙度描述的是表面在微观层面的不规则程度。你可以想象成在显微镜下看表面是像玻璃一样平整还是像砂纸一样坑坑洼洼。粗糙度 0完全光滑微观表面完美平整。入射光线会按照完美的镜面反射角集中反射出去形成清晰、锐利的倒影和耀眼的高光点。比如崭新的金属、抛光的大理石、平静的水面。粗糙度 1完全粗糙微观表面极度混乱无序。入射光线会被散射到各个方向形成完全漫反射。表面看起来是“哑光”的没有清晰的反射和高光。比如毛毡、粉笔、未经处理的混凝土。中间值表面同时存在镜面反射和漫反射反射的高光会呈现为一定大小的光斑反射的倒影会变得模糊。粗糙度值越大高光光斑越大、越柔和倒影越模糊。应用到我们的木门新刷的油漆表面相对平整粗糙度较低例如0.2-0.3会有较清晰但柔和的高光。风化剥落的木头表面纤维暴露凹凸不平粗糙度很高例如0.7-0.9呈现哑光质感。沾了油污的手印区域油脂填充了木头纤维的缝隙让局部变得光滑所以这里的粗糙度应该比周围干净的木头要低。锈蚀的金属铁锈是疏松多孔的非常粗糙接近1而锈块剥落后露出的光亮金属则非常光滑接近0。核心洞见粗糙度纹理是一张灰阶图但它不是随意画的明暗。白色值1代表“粗糙”黑色值0代表“光滑”。你需要根据表面物理状态来“绘制”或“生成”这张图。通常凹凸不平的地方划痕、凹坑、纹理缝隙会更粗糙更白而磨损、抛光、被液体浸润的地方会更光滑更黑。2.3 基础颜色Base Color剥离了光照信息的“本色”基础颜色纹理是物体在理想均匀白光、无镜面高光照射下呈现的颜色。对于非金属它就是物体本身的固有色。对于金属如前所述它就是反射光的颜色。制作基础颜色纹理的关键是“去光照”。你不能直接拿一张在复杂光照下拍摄的照片当基础颜色贴图因为照片里已经包含了阴影、高光和环境光反射。你需要的是一个经过校准的、在极化光下拍摄的以消除非金属高光或通过专业软件从照片中反算出来的“本色”图。应用到我们的木门我们的基础颜色纹理需要包含木头本体的颜色和木纹。油漆的颜色可能有多层剥落露出不同颜色的底漆。铁锈的红褐色。金属合页的灰白色。注意这里不应该包含任何阴影、污渍的明暗变化那些明暗信息应该由粗糙度、法线贴图和环境光遮蔽AO贴图来表现。基础颜色纹理应该是一张颜色饱和、对比度适中的图主要体现材质的色素信息。基于以上理解我们为这扇旧木门设计的材质方案就清晰了核心输入我们将准备四张纹理——基础颜色Base Color、金属度Metallic、粗糙度Roughness、法线Normal。纹理绘制逻辑基础颜色区分木头、油漆、铁锈、金属等不同物质的颜色。金属度一张纯粹的黑白遮罩金属部分为白1其他所有部分为黑0。粗糙度一张灰阶图根据表面磨损、污渍、物质类型如铁锈很粗糙来定义光滑与粗糙的区域。材质节点思路我们将使用简单的纹理采样Texture Sample节点分别连接到材质主节点的对应输入口让引擎的着色器基于我们提供的物理属性进行渲染计算。3. 纹理制作实战从零到一生成PBR纹理集理解了理论接下来就是实战。我们将使用Substance Painter作为主要工具因为它与PBR工作流无缝契合。当然你也可以使用Photoshop等软件但逻辑是相通的。3.1 模型准备与烘焙基础信息首先你需要一个木门的3D模型。确保UV展开合理没有严重拉伸。将模型导入Substance Painter。烘焙基础贴图这是至关重要的一步它为后续绘画提供了“画布”和“指导”。环境光遮蔽Ambient Occlusion, AO模拟物体缝隙、凹陷处因光线难以到达而产生的柔和阴影。这能极大地增强体积感和真实感。曲率Curvature识别模型的边缘和凸起。边缘通常更光滑磨损导致凸起部分更容易磨损或积灰。位置Position提供模型在空间中的高度信息可用于制作从上到下的渐变污渍。法线Normal从高模烘焙到低模提供微观几何细节。如果你的模型本身细节足够也可以使用自己的法线贴图。实操心得烘焙设置中的“最大 frontal 距离”和“最大 rear 距离”需要根据模型厚度仔细调整否则AO和曲率贴图会出现难看的“漏光”或“黑边”。对于木门这种较薄的物体这两个值可以设小一些比如5-10厘米。3.2 绘制基础颜色Base Color纹理在Substance Painter中新建一个填充层作为木门的基底。我通常会从一个中性的木头颜色开始。建立木质基底使用“智能材质”或“生成器”快速创建木纹。Substance Painter自带的“Wood”生成器非常强大可以调整木纹的尺度、方向、颜色变化。我一般会先得到一个基础木纹然后通过手绘层用不同的笔刷叠加更多细节比如木节、色差、年轮等。关键是要参考真实木材照片注意木纹的走向与门板结构的关系。添加油漆层新建一个图层设置为“油漆”材质。利用之前烘焙的“曲率”贴图作为蒙版让油漆只覆盖在平面区域而在边缘和棱角处“剥落”露出底下的木头。可以通过调整蒙版的对比度和亮度来控制剥落的程度和范围。你可以做多层油漆比如底层是深绿色表层是浅黄色模拟多次粉刷的历史感。添加锈迹和金属在门把手和合页的位置新建图层。首先用纯灰色RGB约0.5填充作为金属底色。然后使用“Rust”生成器或锈迹笔刷在金属表面添加锈蚀。这里的核心是锈迹部分的颜色是红褐色基础颜色而未被锈蚀的金属部分保持灰白色。去光照化检查这是检验基础颜色纹理是否合格的关键。在视口中切换到“Flat”或“Base Color”显示模式关闭所有光照和阴影。你的纹理应该看起来颜色准确但“平淡”没有不该有的明暗阴影。如果发现某些区域因为AO或阴影而显得太暗你需要在该区域手绘提亮确保它代表的是材质本身的颜色而非光照结果。3.3 生成金属度Metallic纹理金属度纹理是所有纹理中最“简单粗暴”的因为它几乎是一张非黑即白的遮罩。创建黑白遮罩在Substance Painter中金属度信息通常通过材质的“属性”直接定义或者通过黑白遮罩图来定义。为“金属”材质如合页、把手所在的图层在其“金属度”属性通道上直接设置为“1”。为所有非金属材质木头、油漆、铁锈所在的图层将其“金属度”属性设置为“0”。导出检查在纹理导出设置中确保金属度通道被正确导出。导出的图片应该只有极端的黑0和白1中间灰度值越少越好。铁锈虽然是金属的氧化物但其化学和光学性质已变为非金属所以铁锈区域的金属度必须是0。你可以通过查看导出的金属度图来验证应该只有光亮的金属部分是纯白其余全是纯黑。注意事项绝对不要用一张带有渐变灰度的图作为金属度贴图除非你明确知道自己在做某种特殊的、非标准的混合材质。对于99%的真实世界物体一个像素要么是金属要么不是没有“半金属”这种状态。错误的灰度值会导致渲染引擎在金属和非金属着色模型之间进行错误的插值产生能量不守恒的、看起来“塑料感”或“油腻”的错误效果。3.4 绘制粗糙度Roughness纹理粗糙度纹理是赋予材质“灵魂”和“故事性”的关键。它需要你像一个侦探一样去推理表面可能发生的故事。确立基础粗糙度为不同物质类型设定基础值。在图层属性中直接设置风化木头0.7 - 0.9新油漆0.2 - 0.4光亮金属0.1 - 0.3铁锈0.8 - 0.95灰尘0.9添加磨损痕迹边缘磨损门把手经常被触摸的地方、门板的边缘会因为摩擦而变得光滑。利用烘焙的“曲率”贴图创建一个蒙版让这些边缘区域的粗糙度降低变黑。划痕和凹坑这些地方会积累污垢并破坏表面平整度因此粗糙度应该升高变白。可以用刮痕笔刷或通过“Dirt”生成器配合“高度”或“AO”信息来生成。液体浸润痕迹比如门板下方的雨水溅渍、门把手上的油渍。液体填充了微观凹陷使表面暂时变得光滑。所以这些区域的粗糙度应该比周围干燥区域更低。可以用手绘或利用“位置”贴图模拟自上而下的水渍来制作。添加表面污染灰尘灰尘是极细的颗粒会覆盖在表面大大增加粗糙度。通常积聚在水平表面门板顶部和凹陷处。利用烘焙的“AO”或“位置”贴图识别顶部表面来生成灰尘蒙版并在这些区域大幅提高粗糙度。泥点泥点干涸后形成粗糙的硬壳。可以用粒子笔刷或贴花来添加并赋予很高的粗糙度值。细节打磨切换视图到粗糙度通道单独显示仔细检查。一个好的粗糙度图应该有丰富的、符合逻辑的灰度变化。光滑的区域黑和粗糙的区域白应该分布合理并且与基础颜色图上的物质变化区域相呼应例如铁锈区域在粗糙度图上应该是亮的。一个高级技巧在Substance Painter中你可以将“高度”贴图或“法线”贴图的细节通过一个“Grayscale Conversion”节点转换后混合到粗糙度通道中。这样微观的几何凹凸也会影响粗糙度使得凹槽处更粗糙凸起处更光滑这非常符合物理规律。4. UE4材质编辑器中的连接与调试纹理制作完毕后我们将它们导入UE4并在材质编辑器中构建最终材质。4.1 创建材质与纹理采样在内容浏览器中创建新材质命名为M_WoodenDoor。打开材质编辑器创建三个TextureSample节点基础颜色、金属度、粗糙度通常可以合并为一张RGB通道图但为清晰起见我们假设是分开的三张图。分别将三张纹理拖入材质图表并连接到对应的TextureSample节点上。将TextureSample节点的RGB引脚连接到材质主节点的Base Color、Metallic、Roughness输入口。对于金属度和粗糙度通常需要连接RGB通道的单个分量如R通道因为它们是灰度图。4.2 关键参数设置与实时调试连接好后将材质赋予门模型。但工作还没结束调试至关重要。光照环境验证UE4的PBR渲染高度依赖环境光照。不要在默认的、简陋的关卡里评判材质。将模型放入一个具有HDRI环境球高质量全景图照明的场景中或者使用SkyLight和Post Process Volume来模拟复杂的全局光照。这样你才能看到材质在不同光照角度和强度下的真实反应。使用材质实例进行动态调试不要直接修改主材质。右键点击主材质选择“创建材质实例”。在材质实例中你可以实时滑动调整参数。基础颜色可以乘上一个VectorParameter来整体调色。粗糙度可以连接一个ScalarParameter进行整体加减或乘算。例如你可以创建一个叫Roughness_Scale的参数默认值1.0将其与纹理采样输出相乘。这样在实例中从0.8调到1.2就能快速让整个门看起来更光滑或更粗糙以适应不同的艺术风格或磨损程度。金属度通常不建议整体调整但可以用于极端情况下的微调。调试视图模式UE4提供了强大的材质调试工具。在视口左上角点击“视图模式”View Mode选择基础颜色单独查看基础颜色纹理检查是否有不该有的阴影。粗糙度单独查看粗糙度纹理检查黑白分布是否合理。金属度检查是否为干净的黑白遮罩。着色模型查看不同区域被识别为金属还是非金属。4.3 性能与优化考量纹理尺寸与压缩木门这类中型物体2048x2048的纹理通常足够。在纹理资产详情里选择合适的压缩设置基础颜色BC7/DXT5高质量支持Alpha。金属度/粗糙度可以打包到一张纹理的两个通道中例如金属度存R通道粗糙度存G通道然后使用BC7或DXT1压缩。这能有效减少纹理采样次数和显存占用。法线贴图使用BC7或BC5后者专门用于双通道数据如法线XY。材质复杂度我们这个基础材质节点很少性能很好。但如果后续需要增加如视差遮挡、细节纹理混合、动态污渍等效果需要注意材质指令数。可以通过将部分计算转移到材质函数中或利用材质图层来管理复杂度。5. 常见问题、排查技巧与进阶思路即使理解了原理实操中依然会遇到各种“翻车”现场。这里记录了一些典型问题和我的解决思路。5.1 材质看起来“塑料感”或“油腻”这是PBR新手最常遇到的问题。原因1金属度纹理含有灰度值。这是头号杀手。检查你的金属度贴图确保金属部分是纯白255非金属部分是纯黑0。在Photoshop里可以用“阈值”调整在Substance Painter里检查图层属性是否被正确设置为0或1。原因2基础颜色过亮或过饱和。真实世界物体的颜色很少是纯色或高饱和度的。尤其是非金属其基础颜色值亮度通常在一个相对较低的范围内。参考UE4官方文档提供的真实世界测量值新雪才0.81旧沥青只有0.08。将你的基础颜色纹理整体去饱和、压暗一点通常会立刻提升真实感。原因3粗糙度缺乏变化或整体过低。一个完全均匀的粗糙度表面看起来会很假。确保你的粗糙度图有丰富的细节。另外很多新手因为想让物体看起来“新”会把粗糙度设得太低如0.1导致过度反光产生塑料感。适当提高整体粗糙度比如从0.3调到0.5会有奇效。原因4光照环境太差。在平淡、无方向性的光照下任何材质都难以展现其质感。务必在好的HDRI环境或精心布置的灯光下评估材质。5.2 金属部分看起来“发灰”或不反射环境原因1基础颜色不对。金属的基础颜色就是其反射色。铁的基色是偏冷的浅灰色~0.56金是黄色。如果你用了中性灰0.5, 0.5, 0.5它反射的就是中性灰的环境看起来就会“发灰”且平淡。参考真实金属的RGB值进行校正。原因2环境反射缺失或太弱。金属依赖环境反射来呈现自身。确保SkyLight已启用并且其Cubemap是一张高动态范围HDR、内容丰富的环境贴图。也可以添加Reflection Capture反射捕获球体或盒子来提供局部更准确的反射信息。原因3粗糙度过高。如果金属的粗糙度值设得和周围非金属一样高比如0.7它的反射就会非常模糊看起来就像磨砂金属而不是光亮金属。确保光亮金属区域的粗糙度值足够低0.1-0.3。5.3 纹理接缝明显或拉伸原因UV展开不当。这是模型阶段的问题。回到3D软件检查门的UV岛是否合理分布是否有严重拉伸检查器通常会显示拉伸热力图。对于门板这种大平面确保UV充分利用了0-1空间并且保持比例一致。必要时使用UDIM或多重UV通道。5.4 进阶使用材质函数与图层混合对于更复杂的门比如有玻璃窗、多种金属零件你可以使用更高级的技法材质函数将木头、金属、油漆等每种材质的PBR属性计算包括细节纹理平铺、视差效果等封装成独立的材质函数。然后在主材质中通过Layer Blend节点按需混合。这使材质结构清晰易于复用。顶点绘制如果你想实现动态的破坏效果如油漆逐渐剥落露出木头可以使用顶点颜色通道。在模型上绘制顶点色然后在材质中用VertexColor节点作为蒙版来动态混合两种不同的材质属性集。程序化纹理辅助完全手绘所有细节耗时耗力。可以结合使用程序化节点。例如用WorldAlignedTexture节点让泥渍根据世界坐标附着在门的底部用Triplanar投影来避免UV接缝问题尤其适用于复杂雕刻的门框区域。最后我想分享一个最重要的心得PBR参数不是艺术创作的枷锁而是基于物理规律的沟通语言。一旦你理解了金属度是“物质类型的开关”粗糙度是“表面磨损的故事书”基础颜色是“去除了光影的素颜”你就掌握了这门语言。你可以严格遵守物理值来追求极致的真实也可以为了艺术风格而进行有目的的“违背”比如故意提高金属的粗糙度来表现独特的质感。但无论如何选择你都知道自己在调整什么以及它会带来怎样的视觉变化。这才是从“死记硬背”到“理解运用”的飞跃。下次面对任何材质挑战时不妨先问自己这是什么物质它是金属吗它的表面故事是什么回答这些问题你的纹理画笔就有了方向。
返回列表