ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

参考图分解与有机表面老化全流程:从PBR贴图到材质逻辑

参考图分解与有机表面老化全流程:从PBR贴图到材质逻辑 1. 从参考图到成品材质一套可复用的有机表面老化工作流做材质贴图这行十来年我见过太多人卡在同一个地方拿到一张参考图知道它好看但不知道从哪儿下手把它“翻译”成一套能用的PBR贴图。尤其是做有机表面老化——皮革、木头、锈蚀金属、风化的石头——很多人要么做得太干净像塑料要么堆得太脏像垃圾堆。这个项目标题里提到的“参考图分解与有机表面老化全流程”恰好切中了这个痛点。这套流程的核心逻辑其实不复杂把一张参考图拆解成材质构成的各个要素再按照物理老化的规律逐层叠加。听起来简单但每一步都有讲究。它适合已经有基础PBR概念、能操作Substance Painter或类似工具的中级从业者也适合想从“照搬素材”转向“理解材质逻辑”的进阶学习者。接下来我会把这套流程从思路到实操完整拆一遍包括每一步为什么这么做、参数怎么定、哪些坑我亲自踩过。2. 参考图分解把一张图拆成六层信息2.1 为什么要分解参考图而不是直接对着画很多人做材质的第一步是打开Substance Painter新建项目然后对着参考图开始画。这个做法在做一个简单材质时勉强能用但一旦涉及有机表面老化几乎必然翻车。原因很简单参考图是一张已经被光照、环境、相机参数“污染”过的二维图像它上面的颜色不等于albedo明暗不等于height高光不等于roughness。你直接对着画画出来的是“那张照片的复制品”而不是“那个材质本身”。分解参考图的本质是把一张“结果图”逆向拆解成“成因图”。我习惯把任何一张有机材质参考图拆成六个独立通道来理解基础色层Base Albedo材质在没有老化、没有污渍时的本征颜色粗糙度层Roughness表面微观起伏决定的反射散射程度高度层Height宏观和微观的几何起伏老化层Aging/Damage磨损、开裂、褪色、污渍等时间痕迹环境沉积层Deposition灰尘、泥垢、油渍等外来物边缘与接触层Edge/Contact Wear高频接触区域的特殊磨损这六层不是随便分的。前三个是材质的“本体”后三个是材质的“经历”。有机表面老化的难点从来不在本体而在经历——因为经历是随机的、有逻辑的、需要你理解物理过程才能做对的。2.2 拆解实操以一块老化皮革为例拿一块老皮沙发扶手做例子。你拿到一张高清参考图第一步不是吸色而是分区。先看整体把画面分成几个功能区域主体平整区、边缘磨损区、缝线区、褶皱区、污渍沉积区。每个区域的材质表现逻辑是不一样的。主体平整区告诉你这块皮的基础albedo和基础roughness边缘磨损区告诉你磨损后露出的底层是什么颜色、粗糙度怎么变化缝线区告诉你线材和皮面的高度差关系褶皱区告诉你height的宏观走向污渍区告诉你沉积层的分布规律。分区之后对每个区域单独取色。这里有个关键技巧取色时永远取该区域中间调的颜色不要取高光或阴影处的颜色。因为高光和阴影是光照信息不是材质信息。我一般会在Photoshop里把参考图去色只看明度分布这样能更清楚地判断哪些是材质本身的明暗、哪些是光照造成的。取完色之后把每个区域的颜色填入一个横向对比表。这个表是你后续所有工作的基准。我自己的习惯是用一个简单的表格记录区域基础色Hex粗糙度估计高度特征老化类型主体平整区#6B4A3A0.55-0.65细微粒面轻微褪色边缘磨损区#8A6B550.35-0.45平滑物理磨损缝线区#4A35280.70-0.80凸起线状无褶皱区#5C3F300.60-0.70深沟槽积垢污渍区#3D2B200.75-0.85填充感油渍沉积这张表看起来简单但它决定了你后面所有图层的工作方向。没有这张表你就是在盲画。2.3 从参考图提取Height信息的三种手段Height map是很多人做有机材质时最头疼的部分。参考图是二维的你怎么知道哪里高哪里低我的经验是三种手段结合用。第一种是明度推断在去色后的参考图上通常亮的地方偏高、暗的地方偏低但这个规律只适用于漫反射主导的区域遇到高光或深色污渍就会失效。第二种是边缘推断材质的轮廓边缘、裂缝边缘、磨损边缘往往有明确的高度变化方向顺着边缘走能判断出高低关系。第三种是逻辑推断基于你对这种材质物理结构的理解——比如皮革的粒面是凸起的、缝线是高于皮面的、褶皱是凹陷的——直接根据材质类型补全高度逻辑。这三种手段里逻辑推断最重要。我见过太多人过度依赖明度推断结果把深色污渍做成了凹陷实际上油渍沉积应该是填充在低处的、甚至略微凸起的。Height map做错后面所有贴图都会跟着错因为roughness和albedo的很多细节都依赖height来驱动。3. 有机表面老化的物理逻辑与分层实现3.1 老化的四种基本类型有机表面老化看起来千变万化但拆到底层其实就四种基本类型所有复杂老化都是这四种的组合物理磨损摩擦导致的表面材料损失。表现为边缘变圆、凸起被磨平、露出底层材质。皮革扶手、木桌边缘、金属把手都是典型。物理磨损的关键特征是方向性——磨损总是沿着接触方向发生不会均匀分布。化学老化氧化、水解、紫外线照射导致的材料变质。表现为褪色、变黄、变脆、开裂。老化的皮革会从棕色变成灰褐色老化的木头会从暖黄变成灰白。化学老化的关键特征是均匀性——它不挑位置整体都在发生只是程度不同。生物老化霉菌、苔藓、细菌导致的表面变化。表现为黑斑、绿斑、局部变色。这个在潮湿环境的材质上很常见。生物老化的关键特征是聚集性——总是从某个点开始向外扩散。沉积老化灰尘、油渍、泥垢等外来物堆积。表现为表面覆盖层、缝隙填充、颜色变深。沉积老化的关键特征是重力性——总是堆积在朝上的面、缝隙里、不常接触的地方。理解这四种类型的区别你才能在做材质时做出“有逻辑的老化”而不是随机撒噪点。3.2 分层叠加的顺序与原因做有机表面老化图层顺序极其重要。我的标准顺序是基础材质 → 化学老化 → 物理磨损 → 生物老化 → 沉积老化 → 边缘接触磨损。为什么是这个顺序因为老化的物理过程就是这个顺序。一块皮子先经历日晒氧化化学然后被手摩擦物理然后在潮湿角落长霉生物然后积灰积油沉积最后边缘被反复接触磨得最狠边缘接触。你按这个顺序叠每一层都建立在前一层的基础上逻辑就是通的。反过来如果你先做沉积再做磨损就会出现“磨损把灰尘磨掉了但灰尘又盖在磨损上”的矛盾。这种矛盾在最终渲染里会非常明显观众说不出哪里不对但就是觉得假。3.3 每一层的具体实现方法基础材质层这一层不需要任何老化就是干净的材质本体。用参考图主体平整区取到的颜色作为albedo用估计的roughness值作为基础粗糙度用逻辑推断的粒面作为基础height。这一层要做得干净、均匀因为后面所有层都会在这上面叠加。化学老化层用一个大尺度的噪声Noise驱动颜色偏移和粗糙度变化。具体做法是在Substance Painter里加一个Fill层颜色设为偏黄或偏灰的色调混合模式用Overlay或Soft Light然后用一个低频Noise作为遮罩。粗糙度上化学老化通常会让表面变粗糙所以roughness要整体上调0.05-0.15。这一层的关键是尺度要大不要用高频噪声否则看起来像噪点而不是老化。物理磨损层这一层需要手动绘制。用参考图里的磨损区域作为参考在3D视图里找到对应的位置用笔刷画出磨损。磨损区域的albedo要偏向底层材质的颜色比如皮革磨损后露出的是更浅的纤维层roughness要降低磨损面通常更光滑height要略微降低材料被磨掉了。这里有个技巧磨损边缘不要画得太整齐用带噪点的笔刷边缘要有渐变过渡。生物老化层用点状或斑块状的遮罩颜色偏黑绿或黑褐roughness调高霉菌表面粗糙height略微凸起霉菌有厚度。这一层的分布要遵循“从缝隙开始向外扩散”的逻辑不要均匀撒在表面。沉积老化层用重力方向的遮罩朝上的面权重高颜色偏灰或偏褐roughness调高height略微填充低处。油渍沉积则相反roughness要降低油是光滑的颜色偏深。这一层的关键是区分灰尘和油渍两者物理表现完全不同。边缘接触磨损层这是最后也是最关键的一层。用Curvature map或手动绘制把边缘和凸起处的磨损加强。albedo偏向底层色roughness降低height降低。这一层做得好材质的“使用感”立刻就出来了。4. 实操全流程从零到一套可用的PBR贴图4.1 项目准备与基础设置打开Substance Painter新建项目导入你的模型。这里有个容易被忽略的点UV的texel密度要足够。有机表面老化的细节很多如果texel密度不够你画的磨损和粒面都会糊成一片。我的经验是对于需要表现粒面细节的材质texel密度至少要到1024像素/米最好到2048。导入参考图作为背景参考。我习惯把参考图放在视图的侧边随时对照。然后设置好渲染环境——用一个中性HDRI不要用太花哨的环境否则你判断不准颜色。基础材质层先铺好。用之前表格里的主体平整区颜色作为Base Colorroughness设0.6左右metallic为0有机材质基本不导电height用一个低频噪声起个底。4.2 Height map的精细制作Height map我一般不在Substance Painter里直接画而是在外面用Photoshop或专门的高度图软件先做一版基础的再导入进来叠加细节。原因很简单Substance Painter的笔刷适合做局部细节不适合做大面积的宏观高度。基础height的做法把参考图去色用曲线调整对比度让明暗关系更明确。然后用高通滤波提取细节用低通滤波提取宏观起伏。两者叠加得到一版基础height。导入Substance Painter后再用笔刷补画缝线、裂缝、磨损凹陷等细节。这里有个参数要特别注意Height的缩放值。在Substance Painter的材质设置里height scale决定了高度信息的强度。这个值太小高度感出不来太大又会显得太夸张。我的经验值是0.02-0.05之间具体要看模型的尺度和材质的类型。皮革的粒面很浅用0.02就够了木头的裂纹很深可以用到0.05。4.3 Albedo的分层绘制Albedo的绘制要严格遵循之前的分层顺序。每一层用一个独立的Fill层或Paint层用遮罩控制分布。基础层铺好后先做化学老化。加一个Fill层颜色选一个偏黄的色调比如#8B7355混合模式用Overlay不透明度30%左右。遮罩用一个低频Noise对比度调低让老化分布有渐变。然后做物理磨损。新建一个Paint层用带噪点的笔刷在边缘和凸起处画磨损。颜色选底层材质的颜色比如皮革的纤维层是浅棕色#A08060。画的时候注意磨损的宽度要有变化不要一条线画到底要有粗有细、有断有续。生物老化用点状笔刷颜色选黑绿色#2A3A20在缝隙和角落点几下然后用模糊工具晕开边缘。沉积老化用大笔刷颜色选灰褐色#5A4A3A在朝上的面和缝隙里涂不透明度调低让沉积感若有若无。最后做边缘接触磨损。用Curvature map作为遮罩加一个Fill层颜色选底层色混合模式用Multiply或Overlay不透明度50%左右。这一层会让边缘自然变亮或变暗取决于底层色和表面色的关系。4.4 Roughness的逻辑推导Roughness是很多人做得最随意的通道但它其实是最能体现材质真实感的通道。我的做法是用height和albedo来驱动roughness而不是单独画。具体逻辑height高的地方凸起通常roughness低因为凸起容易被摩擦变光滑height低的地方凹陷roughness高因为凹陷容易积灰积垢。albedo深的地方污渍、沉积roughness高albedo浅的地方磨损露出的底层roughness低。在Substance Painter里可以用一个Fill层把roughness的输入源设为height map然后调整曲线让高低和粗糙度的对应关系符合你的材质逻辑。然后再叠加一层手动调整把特殊区域比如油渍的roughness单独改掉。这里有个常见错误把roughness做得太均匀。真实的有机表面roughness变化是很大的同一块皮子上磨损处可能只有0.3积垢处可能到0.9。你要敢于拉开差距不要怕“太花”。4.5 导出与引擎适配导出贴图时根据你的目标引擎选择预设。Unity用Standard或HDRP预设Unreal用UE4或UE5预设。注意法线贴图的格式DirectX和OpenGL的绿通道是反的导错了法线会看起来凹凸颠倒。如果目标引擎支持尽量导出Height map并在引擎里用视差材质Parallax Mapping或曲面细分Tessellation来表现高度。视差材质在Unity里可以通过Shader Graph实现效果比单纯的法线贴图好很多尤其是做砖墙、地板这类有明确深度变化的材质。5. 常见问题与排查技巧实录5.1 材质看起来“平”没有立体感这是最常见的问题。原因通常有三个height scale太小、roughness变化不够、法线贴图强度太低。排查顺序先检查height scale把它调大到0.05试试如果还平检查roughness的分布是不是所有区域roughness都差不多最后检查法线贴图的强度在Substance Painter里把Normal intensity调到1.5-2.0。我自己的经验是立体感主要来自roughness的变化而不是height。很多人把height做得很夸张但roughness很均匀结果看起来还是像塑料。把roughness的对比度拉大立体感立刻就出来了。5.2 老化看起来“假”像随机撒的噪点这个问题几乎都是因为老化没有逻辑。检查你的磨损是不是沿着接触方向、你的沉积是不是在朝上的面、你的生物老化是不是从缝隙开始。一个快速判断方法把材质贴到模型上从侧面看。如果老化痕迹在侧面看还是合理的说明逻辑对了如果侧面看像贴上去的贴纸说明老化没有和几何体结合。5.3 Height map导入引擎后没有效果先检查引擎的材质设置里有没有启用height map。Unity的Standard shader默认不支持height需要用HDRP或自定义shader。Unreal默认支持但要在材质里把height map连到Parallax Occlusion Mapping节点。如果启用了还是没有效果检查height map的灰度范围。有些软件导出的height map是16位的引擎可能只读8位导致高度信息丢失。导出时确认位深度设置。5.4 不同软件之间贴图对不上这是UV和切线空间的问题。Substance Painter默认用OpenGL法线Unity用OpenGLUnreal用DirectX。如果法线对不上在Substance Painter的导出设置里翻转绿通道即可。另外如果模型在3ds Max里做了修改但没重新导出FBXSubstance Painter里的UV可能和引擎里的不一致。每次修改模型后都要重新导入Substance Painter不要偷懒。5.5 性能优化什么时候该用视差材质什么时候不该用视差材质很吃性能尤其是POMParallax Occlusion Mapping。我的建议是只在近距离观察的材质上用POM比如第一人称游戏里的墙面、地板。远距离的材质用普通法线贴图就够了或者用简单的视差贴图Parallax Mapping而不是POM。如果目标平台是移动端基本不要考虑POM用高度图做顶点偏移Vertex Offset更划算。Unity的Shader Graph里可以用Height map驱动顶点位移效果不错性能开销也可控。6. 一些我踩过的坑和压箱底的技巧做有机表面老化这些年最大的体会是参考图分解的精度决定了最终材质的上限。你分解得越细后面做起来越有方向。我见过很多人跳过分解直接画画到一半发现颜色不对、粗糙度不对回头再改成本翻倍。另一个体会是不要怕“脏”。新手做材质往往太干净因为怕做脏了不好看。但真实的有机表面就是脏的、花的、不均匀的。你去看任何一块用了三年的皮子、木头、金属上面全是痕迹。敢于做脏材质才有生命力。最后分享一个技巧用真实照片的灰度图作为height的底图。找一张和你的材质同类型的真实照片去色调整对比度直接作为height的基础。这比你自己画要快得多而且真实感强很多。然后再在上面叠加手绘的细节效率和效果都能兼顾。还有一个技巧是关于缝线的缝线不要画成一条直线。真实的缝线有松紧变化、有轻微的弯曲、有局部的磨损。用带噪点的笔刷画画完后用液化工具轻微扭曲一下立刻就不一样了。至于Unity双面材质shader、gazebo贴图、3dmax贴图丢失重新导入、substance painter材质路径、flow贴图、ug表面材质渲染、su贴图不显示纹理、vu贴图这些热词涉及的问题本质上都是工具链的适配问题。核心逻辑是一样的理解材质的物理本质理解工具的数据流然后针对性地解决。工具会变但材质老化的物理逻辑不会变。把今天这套参考图分解和分层老化的思路吃透换任何工具你都能做出有说服力的有机表面材质。
返回列表