首页 / 资讯中心 / 文章详情

2D角色告别塑料感:PBR材质化与光追重构完整工作流

2D角色告别塑料感:PBR材质化与光追重构完整工作流 ★ FEATURED ARTICLE
各位同行好。今天聊聊一个我最近完整跑通的工作流2D 角色 PBR 材质化与光追重构。简单说就是把那些一眼看上去“塑料感”爆棚的二次元角色通过物理化材质赋予和光线追踪重构让它在保持卡通气质的同时拥有经得起细看的真实光泽、皮肤质感和面料细节。这个流程适合角色模型师、TA技术美术、独立游戏开发者以及所有受够了“渲染出来像手办涂装、不像活人”这种评价的人。我最初接触这个方向是因为一个项目需求甲方要求角色既要保留二次元的审美还要在特写镜头下拥有“像影视级CG”的质感。那时候我才意识到过去那套“Matcap固定假光”的卡通渲染方案在静态截图里还行一旦放进动态光照环境尤其是交给光追去计算立刻原形毕露皮肤像蜡、头发像塑料片、眼睛像是贴上去的贴纸。问题不在模型而在整套渲染逻辑的底层材质假设。这篇文章不会聊虚的我会从底层原理讲清楚“塑料感”到底怎么来的然后把我实际采用的 PBR 材质化流程、光追重构的参数配置、以及踩过的坑全部拆开揉碎讲给你。你有基础模型就行接下来要做的每一步我都会给出可以直接抄作业的操作方案。1. 内容整体设计与思路拆解1.1 先搞清楚“塑料感”到底是怎么来的很多人以为“塑料感”是渲染器不行其实根源在模型的材质通道上。传统二次元角色的渲染普遍用的是一套“简化版”光照模型漫反射靠一张固有色贴图乘一个半兰伯特系数高光靠一张粗糙度贴图叠加一个Blinn-Phong高光最后再加一圈边缘光模拟次表面散射。这套方案的核心问题在于它把材质属性全部“烘焙”到了颜色上而不是真实的物理属性。打个比方你去看一块塑料和一块真皮它们的颜色可能很接近但塑料的微观表面极其光滑光线集中在很窄的方向上反射所以高光又硬又亮真皮表面有大量微小的凹凸光线被打散到各个方向高光范围大但强度柔和。传统卡通渲染为了让角色“干净好看”通常把高光做成一块边界清晰的光斑这等于默认了所有材质都是“高光泽塑料”。这就是塑料感的第一个来源材质通道缺失。第二个来源是光照模式的“游戏化”。传统卡通渲染必须依赖手动放置定向光、点光通过固定角度制造“好看的光影”。一旦光源移动或者场景门从实时光照换成光追光照计算方式变成物理真实的全局光照材质对光源的反应方式就完全暴露了问题没有正确的粗糙度分布光追算出来的反射就是一块均匀的白斑没有正确的法线细节间接光照下物体就像被洗掉颜色一样惨白。所以我们这个流程的总体设计思路是三步走第一步给角色重新拆解材质属性引入 PBR 的 Albedo/Roughness/Metalness/Normal 通道第二步在 DCC 软件里针对每个材质区皮肤、头发、眼睛、布料、装饰件单独调整 PBR 参数第三步切换到支持光线追踪的渲染管线重新布置灯光让光追的物理光照去验证并强化这些材质属性。三步缺一不可哪怕只做了第一步渲染出来的效果也会比原来好一个档次。1.2 为什么这个方案能解决“塑料感”PBRPhysically Based Rendering的核心逻辑不是“让渲染更真实”而是“让材质对光照的响应符合物理规律”。它的好处在于你不需要再为每一张贴图单独设计一个光照响应公式只需要给出材质属性底色、粗糙度、金属度、法线渲染器就能算出符合逻辑的颜色。这就把我们过去“靠经验手调高光形状”的试错过程彻底变成了“根据物理属性决定材质外观”的确定性过程。放在 2D 角色上最关键的是“保形”问题。二次元角色原本有非常明确的风格化轮廓和简约配色直接上 PBR 很容易变成“写实但脏乱差”。所以实操中我给角色的各个部件设定了不同的“PBR风格化区间”皮肤保留较高粗糙度0.45~0.65同时用次级贴图叠加微小的毛孔和汗毛头发的粗糙度设在 0.2~0.35但通过在法线贴图里增强发丝分层结构让高光呈“条形破碎”而不是一片矩形光斑眼睛的材质最特殊需要把它拆成透明角膜层、虹膜色素层、内反光层三层叠加这才能做出干净透亮、像玻璃珠一样的质感。后面我会展开讲每一层的具体做法。这套工作流的另一个好处是兼容性强。你可以在传统渲染引擎里先做好预览等到需要做高质量渲染或接入光追管线时材质参数不用推翻重做只需要切换环境灯光和增加光追采样数。这也是为什么我先把材质化做到位再去做光追重构——顺序错了后面全部要推翻。2. 核心细节解析与实操要点2.1 材质通道拆解的实操顺序拿到一个基础模型后不少人的第一反应是直接打开材质编辑器开刷参数。千万别这么干。我的习惯是把所有材质拆成四个大组皮肤组、头发组、眼睛组、服装配件组。然后按顺序处理每一组的通道贴图。先说皮肤组。皮肤在 PBR 里最重要的不是颜色而是粗糙度和次表面散射。基础操作是把模型的 UV 展开好用雕刻软件烘焙出一张 AO环境光遮蔽贴图、一张曲率贴图、一张世界法线贴图。然后在 Substance Painter 这类软件里叠加材质球比如皮肤预设重点把 Roughness 调节成使用基于曲率的蒙版——面部凹窝、眼窝、鼻翼两侧要偏粗糙因为这些区域的汗毛和毛孔更多额头和下巴可以偏光滑。我给默认皮肤预设的参数是Base Color 用固有色贴图albedoRoughness 在 0.45~0.55 之间浮动Subsurface 权重在 0.8 左右。细节上要特别留意图层的边缘。如果直接给整张脸一个统一的粗糙度模型在侧面角度看起来就像戴了一张塑料面具因为真实皮肤在面颊边缘会因为透光而微微泛红、粗糙度也会因为角质层厚薄变化而不同。我常用的一个技巧是单独拿一张面具形状的灰度遮罩把脸颊边缘区域的粗糙度提高 0.1同时增加一些随机的频率噪声避免看起来太规律。再说头发组。头发“塑料感”的罪魁祸首通常是高光太大太圆。哪怕你调整了高光的强度和锥角只要还是基于 Blinn-Phong效果都不自然。PBR 的正确做法是用 Specular 层上的条状高光贴图或者更好的方式是直接在法线贴图里画出发丝层次。我在 Substance Painter 里会生成一个“发丝扰流”效果给法线贴图叠加一组沿着发根到发梢方向的条纹强度控制在 0.4~0.6然后用金属度通道把发梢末端调成接近 0 的绝缘体这样光追计算时发丝的反射会产生断续但朝向分明的光带。服装配件组就相对直观但有一个高频错误需要提醒所有布料类的材质都不应该用很高的金属度。很多独立游戏作者为了让衣服亮闪闪会把 Metallic 推到 0.4 甚至更高结果就是一件油亮亮像雨衣的衣服。正确逻辑是布料类材质 Metallic 几乎为 0Roughness 根据面料类型设定棉麻 0.7~0.9丝绸 0.3~0.5皮衣 0.2~0.4。金属装饰物纽扣、拉链、首饰才需要偏高的 Metallic 和低 Roughness。这套逻辑理顺了材质化的底层就稳了。2.2 PBR 风格化的“数值区间手感”做 2D 角色 PBR 和做写实角色最大的区别就是你不能完全照搬真实材质数值而要做一些“风格化的夸张”。比如写实角色的皮肤 Roughness 可以低到 0.3~0.4但二次元角色为了维持柔和明亮感我会把整体 Roughness 抬到 0.5~0.6同时在接近光源的高光区域局部压回 0.35。这里分享一套我实测后比较稳定的数值区间你可以照抄作为起点材质组Base Color 设定RoughnessMetallic附加层皮肤固有色 曲率调亮0.45~0.65 遮罩0Subsurface 0.6~0.8还要加微法线头发固有色 发梢微调0.2~0.350~0.1各向异性高光层或法线扰流眼球角膜透明/浅灰0.050带折射的透明壳层虹膜高饱和固有色0.20法线做辐射状凹陷棉质布料固有色0.7~0.850粗法线织物纹理皮衣固有色0.25~0.40.05高频法线褶皱金属饰品金属固有色0.1~0.31环境反射强度依赖光滑度注意表格里的 Subsurface 和透明壳层都是额外的材质节点不是 PBR 基础通道直接提供的需要手动画出来。每一个数值都要经过实际渲染验证。比如你把皮肤 Roughness 改成 0.3在光追环境下皮肤的漫反射会被压缩看起来像涂了一层油那就得再调回去。数值不是越高越好而是要让它在目标环境下“刚刚好”。2.3 为什么一定要用光追重构而不靠传统布光凑到了这一步模型已经拥有合格的 PBR 材质参数了。如果把这份模型直接放回传统光栅化渲染器效果会比原来提升不少但离“告别塑料感”还差半步——这半步就是间接光照和反射细节。传统光栅化渲染依靠的是“直接光照 预烘焙光照贴图”漫反射的反弹全靠美术手动画。这意味着你必须在场景里假想出来的环境光源都对齐不然材质在阴影区的颜色会发死。光追重构的核心优势是它能算出真实的光线反弹。举例来说角色站在一面红色墙旁边光追渲染会自动在角色的暗部混合一点红色反光皮肤和衣服都会因为环境色而变得生动。这不是贴图能模拟的。我在项目里把渲染管线的 Light Tracing 设定为两到三次反弹每次反弹都会让角色的材质在二次元审美的前提下多一层真实感。但多说一句光追不是开关一开就万事大吉。它要求场景中的所有物体都必须有正确的 PBR 材质定义。如果你场景里的地面是一个高光爆掉的默认材质角色的脸上会出现一块诡异的白斑——那不是光追的问题是材质定义不完整。所以做光追重构之前先做一个全场景“材质审查”把所有纯默认材质都替换成合理的 PBR 值这是必须的准备工作。3. 实操过程与核心环节实现3.1 从传统卡通材质迁移到 PBR 的具体步骤如果你手上是一个已经做好了传统卡通贴图的模型不要直接推翻重来那样太浪费前期工作量。我建议走一个“迁移-增强”流程第一步把原来的固有色贴图albedo直接复用为 PBR 的 Base Color 通道。但注意原卡通贴图通常有大量手工绘制的“假阴影”这些阴影在 PBR 里会让模型看起来像涂了一层不均匀的颜料所以需要把它处理一下。可以开一个 Level 节点把贴图的暗部提亮或者是用“直方图匹配”把颜色压到中间灰范围。目标是把固有色的亮度范围控制在反射信息的“底色”而不是“光影”光影交给渲染器去算。第二步生成 Roughness 贴图。最快的方式是先建一个纯灰图层0.5然后根据美术需求在各区域用笔刷涂抹或生成器遮罩。这个过程比想象的快一套角色大概 2~3 小时就能做出比较丰富的 Roughness 变化。第三步烘焙法线贴图。如果原始模型是高模拓补的低模直接用高模低模烘焙就可以。如果是低模那就必须用细节雕刻软件给皮肤和布料加额外的凹凸感。这里有一个关键考量法线强度不要过大40~60% 的强度才适合 2D 角色太强的法线会让轮廓变得肉滚滚失去二次元的干净线条。第四步统一材质命名规范。强烈建议用“Char_Group_Part_Property_Map”的命名例如 Char_Skin_Face_Roughness。这样在调参和检查时会节省大量时间光追重构的时候也能一眼确认哪些材质还没处理。3.2 光追场景搭建与关键参数配置到光追这一步我把选用的引擎管线切换为支持硬件光追的渲染模式并在场景设置里做了三件事。第一件事调节有效的反弹次数。渲染器默认两到三次反弹往往不够因为二次元角色材质以漫反射为主漫反射需要更多次弹射才能把环境光线“浸”入角色暗部。但也别拉太高我最终定在三次再高会导致暗部噪点增加且性能下降明显。如果你发现暗部有噪点不是渲染器坏了是采样不够。第二件事设置采样参考。光追的收敛速度跟噪声直接相关我将采样数从默认的 256 提到 512配合降噪滤镜一个通用的时域降噪器来稳定画面。但要提醒降噪滤镜会轻微模糊反射细节如果你在做脸部特写建议局部把降噪强度降低保住眼睛和嘴唇的锐利反射。第三件事布置灯光。因为角色是二次元风格光追并不能完全取代审美照明它只是让材质响应更真实。我的布光方案是主光用面积光软盒色温 5600K强度调到让角色脸部亮部与暗部比在 3:1 左右补光用冷色天光从侧后方给轮廓光最关键的是一盏“环境反射光”用一个大的 HDRI 环境贴图提供微弱的反射细节让金属饰品和头发有内容可反射而不是全黑状态。如果没有这盏环境反射光光追渲染出来的角色会像摄影棚里笼罩在死黑环境里一样毫无生气。3.3 眼部材质特殊处理材质与折射的局部技巧眼睛是 2D 角色最容易暴露“塑料感”的地方因为眼睛贴图通常是平面的放在一个球面上以后光线反射时会变成一片规则的高光看起来像是塑料珠子。我处理眼睛材质的方法是做“三层分离”最外层是透明的角膜层用折射材质IOR 约 1.33跟水接近厚度感靠模型表面的一个薄壳层实现。这个壳层只覆盖眼球突出的部分不要包住眼白不然会破坏眼球轮廓干净感。中间层是虹膜颜色贴图沿用原画的风格化虹膜但要额外做一张辐射状的法线贴图附着在虹膜表面让虹膜纹理呈现放射状的细微倒刺。最内层是反光内层也就是眼球的“内反光”层它的作用是在透明层折射下给虹膜底面上一个小区域的反射模拟光线从眼睛内部透射的效果。三层材质叠加以后眼睛在转动的时候高光位置会随着视角变化虹膜的颜色也会因为折射略发生变化视觉效果一下子就从“贴纸”变成了“玻璃珠”。做这一块时要注意折射材质的采样开销默认会增加较多渲染时间。我在预览阶段会先把角膜层的折射关闭调好之后再开因为折射采样一旦拉高预览就卡得没法用。3.4 光照与角色调参的联动实验记录调参过程不是一次成功的我记录了一个典型的实验过程展示中间遇到的情况。第一次测试我把皮肤粗糙度统一设为 0.5主光从 45 度方向打过来。渲染出来面部整体很柔和但鼻尖和颧骨出现两团异常发白的小亮点——这是高光压缩了漫反射导致的“褪色”现象。排查后发现局部粗糙度太均匀没有在鼻尖高光区域添加额外的粗糙扰动。于是我在鼻翼和颧骨位置手动加了两层带噪点的粗糙度遮罩把局部粗糙度从 0.5 提高到 0.65问题立刻消失。第二次测试头发高光在光追下变成一道边缘尖锐的长条。因为头发法线贴图力量太强扰流太规整导致反射分布在非常集中的方向。我把法线强度从 70% 下调到 45%同时在 Roughness 贴图上给发梢加了 20% 的白色噪声头发的反射就开始呈现出自然的碎裂感高光看起来更“毛躁”但又有方向感。这类细节跟你参考动画截图的真实感直接挂钩值得花时间来回调试。第三次测试是布料问题。原本胸前的一块丝绸材质在光追下显得油腻我查了 Metallic 是 0.2明显太高。调到 0.05Roughness 从 0.3 改成 0.45同时给法线加入了一些横向纤维纹理质感变得柔和且自然。这些微调看着都是小参数但组合起来就是把“塑料二次元”变成“有质感二次元”的关键。4. 常见问题与排查技巧实录4.1 问题速查表一图对照解决高频故障我把实操中最常见的故障和处理方式整理成一个速查表方便你出问题时快速定位。这张表可以说是整个工作流中最值钱的部分我花了很多时间才把每个现象和根因对应起来。故障现象根本原因处理方案皮肤像塑胶玩具Roughness 过高且没有变化或主光太硬降低整体粗糙度增加区域遮罩改用软面积光皮肤局部发白褪色高光区法线细节不足在高光易爆区域加噪点粗糙度调整法线强度头发高光像贴纸法线扰流方向单一Roughness 太均匀增加法线扰流条纹叠噪声扰动 roughness眼睛反光死板缺少角膜折射层给眼球加透明折射壳层单独做虹膜法线布料像油布Metallic 太高绝缘布料 Metallic 归零粗糙度拉高到 0.7 以上金属饰品发黑缺少环境反射源添加 HDRI 环境贴图确保金属物体周围有可反射物光追画面噪点多采样数不足或反弹数过高提升采样至 512降噪开时域模式拉低反弹次数边缘轮廓被光追吃掉材质 base color 对比度低增强 Base Color 的明暗对比度必要时叠回线稿 AO4.2 性能与效果的平衡技巧光追渲染的性能代价是真实存在的。我测试的参考场景里开启光追并降低采样后单帧渲染时间从光栅化的 2 秒暴涨到 23 秒。对静态高分辨率输出来说完全可以接受但如果要做动画就必须用“光追生成基础光照 烘焙复用于动画帧”的思路。推荐一个混合方案先在各个关键动作帧上用光追渲染得到光照缓存然后把它烘焙到 T 笼网格的 Lightmap 上后续动画帧回退到光栅化管线。这样既保住了光追的光照真实感又把动画播放时的每秒帧数优化到流畅水平。这个方案适合独立制作和中小团队大型团队的实时光线追踪属于另一个领域对显卡要求极高不在本文讨论范围内。另外光追开启的时候要注意材质嵌套层级。个别引擎对透明折射材质之间的多层叠加计算非常慢甚至会闪退。我的排查经验是材质叠加层级控制在三层以内不要让眼睛、眉毛和发型上同时存在多个折射材质球不然会触发渲染器的递归限制。真需要多层透明效果时用烘焙贴图替代别硬吃实时计算。4.3 一套我踩过坑后总结出的顺序建议最后按照我的经验给你一个顺序建议避免走回头路。先做模型检查确保 UV 没有重叠、法线方向正确再做基础固有色清理去掉手绘假阴影接下来做 AO 和法线烘焙这是后续所有细节的地基然后依次做皮肤、头发、眼睛、服装的材质参数调完一组就进引擎预览一次不要全部调完再进不然错误会叠加排查难度翻倍。预览时不一定要开全光追先把材质参数调对再开光追调灯和采样。如果第一次开光追画面太亮或者太暗不用急着调材质先调节场景的环境光强度和 HDRI 亮度。大部分 PBR 材质在新光照环境下需要一到两档曝光修正这是正常现象。我个人在实际操作中的体会是做这套流程需要的不是“会调很多参数”而是“知道每个参数为什么会带来那样的视觉变化”。你照着别人的参数抄永远解决不了自己模型上的独特问题。关键在于理解材质属性与光线的物理关系然后用这个理解去指导你每一步的调整。最后再分享一个小技巧做好材质之后给角色加一个围绕自身的缓慢转盘动画输出一段 360 度旋转的视频。你会非常直观地看到哪些材质在某个角度下“露馅”了——这是检验工作流是否成功的最终标尺。做完这段视频你就能准确判断这套流程在你项目里是否真正达到了“告别塑料二次元”的目标。
阅读完成 · 觉得有帮助?
咨询建站