ARTICLE DETAIL

资讯详情

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

从单张图到全套PBR贴图:Materialize地表材质工作流实战

从单张图到全套PBR贴图:Materialize地表材质工作流实战 做环境美术和独立游戏这几年我栽过最大的跟头就是手绘地表贴图。你在PS里扣了两个通宵的泥土细节刷了一堆颜色变化肉眼看着挺像回事一进引擎方向光打下来那块地面瞬间变成了一层磨砂纸贴在平面上——怎么打光都假。问题不在你的画功在于你手里只有一张颜色图。后来我把工作流切到PBR用Materialize这类工具从单张图直接炼出全套次世代材质5分钟出活效果比我手绘一周的还真实。今天这篇就掰开揉碎聊聊我平时是怎么用这个免费的纹理炼金炉从一张普通照片或手绘稿生成一套能在Unreal、Unity里直接用的PBR贴图以及哪些参数必须手动调、哪些坑我踩得最惨。如果你也是那种被手绘地表折磨得怀疑人生的场景美术、独立开发者或者正在摸索PBR流程的转行小白这篇文章应该能帮你省掉一大截弯路。1. 贴图看着假的病根不在画功而在信息分层1.1 一张Diffuse撑不起真实的表面先捋一个基础概念我们平时说的手绘贴图绝大多数时候指的是Diffuse或Albedo也就是颜色图。但当引擎渲染一个表面时决定它真实感的并不是颜色而是表面对光的响应方式。你可以把漫反射贴图想象成一张打印好的彩色照片贴在一个光滑的塑料板上。照片里就算有泥土、碎石、裂缝的颜色信息光照一打下来整块表面依然是一个均匀的、像塑料一样的反光体。为什么因为真实世界里一块粗糙地表对光的响应是极其不均匀的凸起的位置高光更强凹陷的位置光线进不去形成阴影不同角度的微小表面反射方向完全不同干燥土壤和潮湿石头的粗糙度差异也极大。这些信息一张颜色图根本装不下。我做第一个3D场景时花了将近一周的业余时间手绘一张草原地表自认为细节丰富、笔触细腻。放进引擎后方向光一开整个草原像块绿色地毯毫无质感。当时我以为是光影设置不对试了一堆环境参数浪费了几个晚上。后来才意识到问题出在资产本身——缺了法线、缺了粗糙度、缺了AO再好的光照方案也救不回来。1.2 PBR其实就是把表面信息拆层装PBRPhysically Based Rendering物理基础渲染最核心的思想不是某个软件或某个公式而是分层。它把真实表面的光学特征拆成几个独立通道每个通道只负责一类信息Albedo表面本身的颜色不包含光照信息Normal表面的微小凹凸方向Roughness表面的微观粗糙程度控制高光的扩散范围Metallic表面是金属还是非金属AO环境光遮蔽凹陷处被遮挡产生的接触阴影Height表面的高度信息也是生成法线的基础这种拆分方式很像做菜时的备料颜色是主料法线是切工粗糙度是火候AO是摆盘。打好光之前所有风味都已经在材质里了。引擎拿到这堆信息层按照光照物理规则去烹饪才能得到真实的结果。这也是手绘流程做不出真实感的核心原因手绘时所有信息都糊在一张图上引擎根本没有办法从中单独提取这里应该暗这里应该反光的物理线索。1.3 Materialize在PBR流程里扮演什么角色Materialize是一款免费的单机工具。它的核心能力可以概括成一句有点玄学的话给你一张图帮你把其余五张图猜出来。它不是绘图软件你在里面不需要一笔一笔画贴图。它是一个烘焙与生成工具依靠算法从你提供的基础颜色或高度信息中推导出法线、AO、粗糙度等派生贴图。同时它也提供了一定程度的手动干预能力比如用蒙版控制粗糙度的局部变化让结果不完全是一键生成的公式感。放在整个PBR流程里Materialize的位置是素材加工厂。你用相机拍一张真实的泥土地面、从网上找一张带无缝平铺属性的石头图或者手绘一张灰度图丢进去几分钟后拿出来的就是一套完整可用的PBR贴图。这个过程不需要 Photoshop 里复杂的滤波计算也不需要 Substance Designer 的节点编程基础门槛低见效快。2. 从一张照片到六张PBR贴图完整操作流程2.1 素材准备一张好源图决定八成上限Materialize号称能从单张图生成全套贴图但不同的源图出图质量差距极大。我试过直接把游戏截图、手机拍摄的杂图丢进去出来的法线图基本是灾难。实践证明好源图需要满足三个条件平铺无缝Tileable地表材质在引擎里通常是平铺的。源图如果有明显接缝或者不规则分布的大块特征平铺时接缝会非常扎眼。你可以在Materialize里直接处理平铺问题但源头材质越接近无缝后期调校越省心均匀光照源图最好是阴天、阴影不太重的环境拍的。大面积硬阴影会被算法误判成高度起伏导致法线图出现假凹凸无高光反射有高光的区域会被当作发光或者凸起生成法线后那一片会鼓起修复起来很麻烦如果素材是从网上找的尽量选texture atlas或者seamless texture类型的图库。我自己常用的是从CC0图库比如ambientCG下载的无缝贴图它们本身质量高兼容性也好。把素材拖进Materialize窗口主预览区会显示这张图。左侧控制面板会列出各个输出通道默认已经生成了简单的初始结果。2.2 Height高度图所有派生贴图的起点Materialize的所有派生通道几乎都以Height为基础。所以我的习惯是永远先调Height。Height通道的本质是亮度到高度的映射源图里亮度高的区域被当成较高位置亮度低的当成凹陷。所以你要在Height设置里找到几个关键控制项强度Strength整体凹凸幅度。数值过高会让表面像月球坑过低则几乎没起伏。地表材质我一般取0.5到0.8之间岩石可以到1.0以上模糊Blur对高度图做平滑处理抑制噪点。源图噪点多的话模糊开大一点不然法线会花成一团对比度/增益控制高度图的黑白跨度。拉高对比度细节更硬朗但也更容易出现硬边调节过程中实时预览面板可以看到高度图的效果。注意如果你后面要用法线图Height的细节质量直接影响法线的质感所以这一步值得花两分钟细调。2.3 一口气生成Normal、AO、Roughness、MetallicHeight调满意之后切换通道生成就快了。Normal法线在通道列表里打开Normal算法会自动从Height计算梯度方向生成反映表面微观起伏的向量图。这里唯一需要调的是强度Normal Intensity默认值往往偏温和。室内场景、近距离观察的地表法线强度建议调到1.5到2.5之间远景可以低一些。调太高的话光照斜射时凹凸会显得发泡不自然。AOAO通道生成的是接触阴影。Materialize有独立的AO计算逻辑需要调整的参数主要是半径和对比度。半径决定阴影扩散范围小石块纹理用3到5像素的半径就够了大裂缝、深槽纹理可以调到15像素以上。对比度控制明暗分界的锐利程度太高容易显得脏。Roughness粗糙度Materialize会从源图的局部对比度和高度信息推算一个基础粗糙度分布。地表非金属材质整体粗糙度应该在0.6到1.0这个区间但需要局部分布沙土更糙、裸露岩石略光滑、水洼或湿润处接近0.2到0.3。这块算法给的结果通常是个平均脸我会手动拉曲线或者配合蒙版修正高光区域。Metallic金属度地表工艺中绝大多数是非金属整个Metallic通道填黑色0.0即可。如果某些区域有碎金属片、工具残骸在那块手动画白色。默认生成器经常把一些深色区域误判为金属记得检查并抹掉。2.4 导出时的引擎预设与格式选择Materialize支持直接按引擎预设导出。菜单里的Export面板可以看到Unity、Unreal、CryEngine、Blender等选项它们实际上是把同样的贴图按各引擎的命名规范和格式偏好打包。如果你用UnrealBaseColor对应AlbedoNormalDirectX版本绿色通道方向按引擎规范Roughness、Metallic、AO分别导出为独立的灰度图如果你用Unity命名需要符合URP/HDRP的约定比如MetallicSmoothness或者Metallic与Smoothness合并具体看你的管线设置导出格式我推荐TGA或者PNG16位深度在某些引擎里支持更好但8位对于地表大多数情况够用。记得导出的尺寸要设置成2的幂次方常见如1024、2048、4096这个细节后面会聊。3. 这张贴图是真的猜出来的吗原理与参数怎么配合3.1 法线图高度图的导数很多人觉得法线生成是黑魔法其实就是数学。法线贴图保存的是每个像素处表面法向量相对于基准方向的偏移。而法向量偏移量与高度图的梯度有关就是说高度图中亮度变化越剧烈的地方法线偏转越厉害。说人话法线图是从Height里求斜率得到的。哪怕你只有一张灰度图只要它有明暗变化算法就能算出每个点的表面朝向然后把这些朝向信息编码成RGB。当引擎的光照计算碰到这些朝向差异时平坦的平面就会呈现凹凸不平的视觉效果。所以Height的细节一旦糊了法线一定糊因为根源丢了。这也是为什么我特别强调源图和Height这一步。3.2 粗糙度的工作原理为何乱一点更真实粗糙度贴图严格来说不是从照片里提取的而是靠启发式推导加上你的人为修正。它的物理依据是微观表面的不规则程度微观不平整会让反射光分散形成较柔和的漫反射微观较平整则反射集中形成锐利高光。真实地表几乎没有完全一致的粗糙度。一块土地里细沙区域粗糙度接近1.0露出的石头可能0.7水坑0.1。哪怕同一块表面因为颗粒分布不同粗糙度也有微变化。这种变化正是生活感的来源。Materialize的默认粗糙度生成逻辑是从高度图局部方差推断表面乱不乱方差大的地方粗糙度偏高。这个方向大致正确但幅度太平均。我的做法是先接受它的结果然后在需要重点表现的区域用蒙版或局部磨皮工具手动把粗糙度调花一点——这里更糙、那里更滑哪怕实际差不了多少人眼也会觉得材质内容更丰富。3.3 三组核心参数的手感区间我整理了一张日常参数参考表按地表材质类型分类。不同用途可以直接照着起步再按实际效果微调材质类型Height强度法线强度AO对比度粗糙度范围泥土地0.5~0.71.5~2.00.4~0.60.75~1.0岩石地表0.8~1.22.0~2.50.5~0.80.6~0.85草地/苔藓地0.4~0.61.2~1.80.3~0.50.8~1.0沙地0.3~0.51.0~1.50.2~0.40.85~1.0这些数值不是绝对的但它们是一个差不多的起步点。每次我在新场景里调材质都是先把这些参数放进去然后再依照引擎里的光效微调。如果你完全没概念从这张表抄作业不会出大错。4. 让材质摆脱一键生成公式感的进阶操作4.1 用蒙版打破平均化一键生成的材质最大的问题就是太均匀。真实地表有区域分布石头边上的土更干、树根下的落叶更多、车辙里的土更实。这个不均匀性可以用Materialize的Mask蒙版来解决。你可以手绘一张蒙版或者用源图的某个通道生成一个Mask。比如把亮度比较低的阴影区域抠出来再基于这个Mask去调整局部粗糙度或AO强度。听起来抽象举一个我做泥泞林间地面的例子我用蒙版选中一些较暗、湿润的区域给它们降低粗糙度、稍微加深AO中间干燥的区域保持粗糙度偏高。这样引擎里阳光一打湿润泥泞的地方有微弱反光干燥土路是完全哑光的层次立刻出来了。Materialize对蒙版的支持不算豪华但基础画笔和阈值调整够用。如果追求更高级的蒙版控制建议配合Substance或PS但简单情况下完全不用出这个软件。4.2 多源图融合不要只靠一张图当你做一整片地形时单张逐步论PBR贴图是不够的。同一块地表放大到近景和远景时需要不同级别的细节。Materialize允许你把多张源图叠加融合比如把一张整体的土壤图作为基色再把一张碎石图叠加在上面通过透明度控制碎石的密集程度。这个操作在Materialize里对应的功能是图层的Compositing。你可以把每张源图想象成一个PS图层调节混合模式Overlay、Multiply等和透明度。我常用Overlay模式给已经铺好的地表叠加一层细微颗粒纹理增加近景时的细节密度不需要重新生成一套完整贴图。4.3 3D预览验证光照角度是照妖镜Materialize自带3D预览可以放一个球体或者平面模型并且可以实时调整光照方向。这一步千万别跳。做PBR贴图时最怕的就是2D看起来完美3D见光死。因为法线贴图的凹凸效果在斜射光下最明显当头光照射时会减弱很多。我习惯在预览里把光源拉到接近水平的角度观察地面凹凸轮廓再把光源转到正上方确认整体明暗没有发闷。两个角度都过关放进引擎基本稳。另外一个实用技巧是在3D预览里用拉近的摄像头距离检查近距离细节再用拉远的距离检查整体色调是否统一。很多新手只盯着100%视图里的细节忽略了大比例下材质的整体阅读性。5. 贴图进了引擎才发现的问题压缩、平铺与翻车排查5.1 纹理压缩格式直接决定画面糊不糊很多人在Materialize里导出的贴图看起来清晰锐利进引擎以后就糊成一团。十有八九是压缩格式没选对。常见引擎在移动端和PC端对纹理压缩有不同要求桌面端BC7或BC5。BC7质量高但体积大法线图建议用BC5因为它保留精度更好移动端ASTC4x4或6x6均衡性不错也可以选用ETC2但细节损失比较明显重点法线贴图千万不要用和处理漫反射一样的压缩格式。法线图的RGB通道编码的是向量方向压缩算法会把向量挤变形导致光照方向错乱轻则凹凸发虚重则出现紫黑斑块。做实验时我吃过好几次亏后来固定把法线单独设置成高质量格式才解决问题。5.2 接缝问题从源图阶段就掐死平铺材质的接缝问题最好在进引擎前解决不要指望引擎自动处理。Materialize不能像Substance那样一行节点就搞定无限平铺但配Tiling属性可以控制平铺次数。如果你用的是2048贴图、平铺4次接缝在单块边界就会比较明显。解决办法是回到源图用Photoshop的高通滤波或偏移滤镜检查接缝把有明显亮度跳变的地方修复掉再重新走一遍Materialize流程。另一个技巧平铺时不要让某一层的纹理方向太规律化。比如一层泥土基础间距铺4x4一层次级碎石也铺4x4两者完全重合画面会出现明显的网格感。我通常把主纹理设置为4x4叠加细节层设置为5x3或者3x7打破周期视觉上更自然。5.3 常见翻车现象排查清单现象可能原因解决办法法线凹凸方向反了法线贴图版本和引擎要求不匹配蓝绿色通道翻转一下或导出时选对DX/GL版本材质发灰发闷AO太强或者Albedo有光照信息AO对比度调低Albedo重新去除光照高光像塑料粗糙度贴图全黑或过于平均整体粗糙度拉高加局部变化接缝明显源图本身不是无缝处理源图平铺或换无缝素材远景花成一片每个通道压缩太狠法线和粗糙度用高精度压缩格式表面浮着一层“油”Metallic通道有白色噪点Metallic蒙版清理非金属全黑这份清单是我在实际项目里反复遇到的高频问题几乎每次做新材质都要顺手检查一遍。养成导出前查清单、进引擎后先打斜光的习惯能省掉至少一半的返工时间。6. 我的个人工作流总结与提速技巧说到最后分享一套我跑顺了的完整工作流适合独立开发者和美术外包小团队素材阶段用相机拍或从CC0图库下载无缝源图保证光照均匀Materialize阶段先调Height再生成Normal接着AO最后手动修正Roughness和Metallic导出阶段按引擎预设导出法线单独走高质量压缩引擎阶段用Directional Light低角度测试用PostProcess调节曝光后再看材质迭代阶段主要是法和粗糙度每次调整之后都需要重新看一遍近景和远景效果提速方面我最大的心得是永远不要在原始生成结果上反复手调通道。如果你发现自己为了提高某个特征在Materialize里拼命调参数很可能说明源图没选对。最快的路径是换一张更合适的源图重新跑一遍流程而不是在错误素材的基础上修补半天。另外如果你的工作流已经过了单张图出全套贴图的阶段开始做更复杂的杂交材质比如泥土混合碎石、草地渐变到泥地Materialize可以配合Substance Designer一起用。先用Materialize快速生成基础贴图再把它们作为输入喂给Substance做更精细的图层混合。这套组合拳在保证效率的同时还能做到不改主流程结构。Materialize确实不是Substance那样的工业级怪兽但作为免费工具它能做到5分钟从一张图生成一套合格PBR地表贴图的水平。对一个时间永远不够用的独立开发者和场景美术来说这样简单直接的纹理炼金术真的已经是性价比拉满的选择了。
返回列表