☰
2D角色告别塑料感:PBR材质化与光追重构完整工作流
2026/10/20 13:30:50 网站建设 项目流程

各位同行好。今天聊聊一个我最近完整跑通的工作流:2D 角色 PBR 材质化与光追重构。简单说,就是把那些一眼看上去“塑料感”爆棚的二次元角色,通过物理化材质赋予和光线追踪重构,让它在保持卡通气质的同时,拥有经得起细看的真实光泽、皮肤质感和面料细节。这个流程适合角色模型师、TA(技术美术)、独立游戏开发者,以及所有受够了“渲染出来像手办涂装、不像活人”这种评价的人。

我最初接触这个方向,是因为一个项目需求:甲方要求角色既要保留二次元的审美,还要在特写镜头下拥有“像影视级CG”的质感。那时候我才意识到,过去那套“Matcap+固定假光”的卡通渲染方案,在静态截图里还行,一旦放进动态光照环境,尤其是交给光追去计算,立刻原形毕露:皮肤像蜡、头发像塑料片、眼睛像是贴上去的贴纸。问题不在模型,而在整套渲染逻辑的底层材质假设。

这篇文章不会聊虚的,我会从底层原理讲清楚“塑料感”到底怎么来的,然后把我实际采用的 PBR 材质化流程、光追重构的参数配置、以及踩过的坑全部拆开揉碎讲给你。你有基础模型就行,接下来要做的每一步,我都会给出可以直接抄作业的操作方案。

1. 内容整体设计与思路拆解

1.1 先搞清楚“塑料感”到底是怎么来的

很多人以为“塑料感”是渲染器不行,其实根源在模型的材质通道上。传统二次元角色的渲染,普遍用的是一套“简化版”光照模型:漫反射靠一张固有色贴图乘一个半兰伯特系数,高光靠一张粗糙度贴图叠加一个Blinn-Phong高光,最后再加一圈边缘光模拟次表面散射。这套方案的核心问题在于:它把材质属性全部“烘焙”到了颜色上,而不是真实的物理属性。

打个比方,你去看一块塑料和一块真皮,它们的颜色可能很接近,但塑料的微观表面极其光滑,光线集中在很窄的方向上反射,所以高光又硬又亮;真皮表面有大量微小的凹凸,光线被打散到各个方向,高光范围大但强度柔和。传统卡通渲染为了让角色“干净好看”,通常把高光做成一块边界清晰的光斑,这等于默认了所有材质都是“高光泽塑料”。这就是塑料感的第一个来源:材质通道缺失。

第二个来源是光照模式的“游戏化”。传统卡通渲染必须依赖手动放置定向光、点光,通过固定角度制造“好看的光影”。一旦光源移动,或者场景门从实时光照换成光追,光照计算方式变成物理真实的全局光照,材质对光源的反应方式就完全暴露了问题:没有正确的粗糙度分布,光追算出来的反射就是一块均匀的白斑;没有正确的法线细节,间接光照下物体就像被洗掉颜色一样惨白。

所以我们这个流程的总体设计思路是三步走:第一步,给角色重新拆解材质属性,引入 PBR 的 Albedo/Roughness/Metalness/Normal 通道;第二步,在 DCC 软件里针对每个材质区(皮肤、头发、眼睛、布料、装饰件)单独调整 PBR 参数;第三步,切换到支持光线追踪的渲染管线,重新布置灯光,让光追的物理光照去验证并强化这些材质属性。三步缺一不可,哪怕只做了第一步,渲染出来的效果也会比原来好一个档次。

1.2 为什么这个方案能解决“塑料感”

PBR(Physically Based Rendering)的核心逻辑,不是“让渲染更真实”,而是“让材质对光照的响应符合物理规律”。它的好处在于,你不需要再为每一张贴图单独设计一个光照响应公式,只需要给出材质属性(底色、粗糙度、金属度、法线),渲染器就能算出符合逻辑的颜色。这就把我们过去“靠经验手调高光形状”的试错过程,彻底变成了“根据物理属性决定材质外观”的确定性过程。

放在 2D 角色上,最关键的是“保形”问题。二次元角色原本有非常明确的风格化轮廓和简约配色,直接上 PBR 很容易变成“写实但脏乱差”。所以实操中我给角色的各个部件设定了不同的“PBR风格化区间”:皮肤保留较高粗糙度(0.45~0.65),同时用次级贴图叠加微小的毛孔和汗毛;头发的粗糙度设在 0.2~0.35,但通过在法线贴图里增强发丝分层结构,让高光呈“条形破碎”,而不是一片矩形光斑;眼睛的材质最特殊,需要把它拆成透明角膜层、虹膜色素层、内反光层三层叠加,这才能做出干净透亮、像玻璃珠一样的质感。后面我会展开讲每一层的具体做法。

这套工作流的另一个好处是兼容性强。你可以在传统渲染引擎里先做好预览,等到需要做高质量渲染或接入光追管线时,材质参数不用推翻重做,只需要切换环境灯光和增加光追采样数。这也是为什么我先把材质化做到位,再去做光追重构——顺序错了,后面全部要推翻。

2. 核心细节解析与实操要点

2.1 材质通道拆解的实操顺序

拿到一个基础模型后,不少人的第一反应是直接打开材质编辑器开刷参数。千万别这么干。我的习惯是把所有材质拆成四个大组:皮肤组、头发组、眼睛组、服装配件组。然后按顺序处理每一组的通道贴图。

先说皮肤组。皮肤在 PBR 里最重要的不是颜色,而是粗糙度和次表面散射。基础操作是把模型的 UV 展开好,用雕刻软件烘焙出一张 AO(环境光遮蔽)贴图、一张曲率贴图、一张世界法线贴图。然后在 Substance Painter 这类软件里,叠加材质球(比如皮肤预设),重点把 Roughness 调节成使用基于曲率的蒙版——面部凹窝、眼窝、鼻翼两侧要偏粗糙,因为这些区域的汗毛和毛孔更多;额头和下巴可以偏光滑。我给默认皮肤预设的参数是:Base Color 用固有色贴图(albedo),Roughness 在 0.45~0.55 之间浮动,Subsurface 权重在 0.8 左右。

细节上要特别留意图层的边缘。如果直接给整张脸一个统一的粗糙度,模型在侧面角度看起来就像戴了一张塑料面具,因为真实皮肤在面颊边缘会因为透光而微微泛红、粗糙度也会因为角质层厚薄变化而不同。我常用的一个技巧是,单独拿一张面具形状的灰度遮罩,把脸颊边缘区域的粗糙度提高 0.1,同时增加一些随机的频率噪声,避免看起来太规律。

再说头发组。头发“塑料感”的罪魁祸首通常是高光太大太圆。哪怕你调整了高光的强度和锥角,只要还是基于 Blinn-Phong,效果都不自然。PBR 的正确做法是:用 Specular 层上的条状高光贴图,或者更好的方式是直接在法线贴图里画出发丝层次。我在 Substance Painter 里会生成一个“发丝扰流”效果,给法线贴图叠加一组沿着发根到发梢方向的条纹,强度控制在 0.4~0.6,然后用金属度通道把发梢末端调成接近 0 的绝缘体,这样光追计算时,发丝的反射会产生断续但朝向分明的光带。

服装配件组就相对直观,但有一个高频错误需要提醒:所有布料类的材质,都不应该用很高的金属度。很多独立游戏作者为了让衣服亮闪闪,会把 Metallic 推到 0.4 甚至更高,结果就是一件油亮亮像雨衣的衣服。正确逻辑是,布料类材质 Metallic 几乎为 0,Roughness 根据面料类型设定:棉麻 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.05,Roughness 从 0.3 改成 0.45,同时给法线加入了一些横向纤维纹理,质感变得柔和且自然。这些微调看着都是小参数,但组合起来就是把“塑料二次元”变成“有质感二次元”的关键。

4. 常见问题与排查技巧实录

4.1 问题速查表:一图对照解决高频故障

我把实操中最常见的故障和处理方式整理成一个速查表,方便你出问题时快速定位。这张表可以说是整个工作流中最值钱的部分,我花了很多时间才把每个现象和根因对应起来。

故障现象根本原因处理方案
皮肤像塑胶玩具Roughness 过高且没有变化,或主光太硬降低整体粗糙度,增加区域遮罩;改用软面积光
皮肤局部发白褪色高光区法线细节不足在高光易爆区域加噪点粗糙度,调整法线强度
头发高光像贴纸法线扰流方向单一,Roughness 太均匀增加法线扰流条纹,叠噪声扰动 roughness
眼睛反光死板缺少角膜折射层给眼球加透明折射壳层,单独做虹膜法线
布料像油布Metallic 太高绝缘布料 Metallic 归零,粗糙度拉高到 0.7 以上
金属饰品发黑缺少环境反射源添加 HDRI 环境贴图,确保金属物体周围有可反射物
光追画面噪点多采样数不足或反弹数过高提升采样至 512,降噪开时域模式,拉低反弹次数
边缘轮廓被光追吃掉材质 base color 对比度低增强 Base Color 的明暗对比度,必要时叠回线稿 AO

4.2 性能与效果的平衡技巧

光追渲染的性能代价是真实存在的。我测试的参考场景里,开启光追并降低采样后,单帧渲染时间从光栅化的 2 秒暴涨到 23 秒。对静态高分辨率输出来说完全可以接受,但如果要做动画,就必须用“光追生成基础光照 + 烘焙复用于动画帧”的思路。

推荐一个混合方案:先在各个关键动作帧上用光追渲染得到光照缓存,然后把它烘焙到 T 笼网格的 Lightmap 上,后续动画帧回退到光栅化管线。这样既保住了光追的光照真实感,又把动画播放时的每秒帧数优化到流畅水平。这个方案适合独立制作和中小团队,大型团队的实时光线追踪属于另一个领域,对显卡要求极高,不在本文讨论范围内。

另外,光追开启的时候要注意材质嵌套层级。个别引擎对透明折射材质之间的多层叠加计算非常慢,甚至会闪退。我的排查经验是,材质叠加层级控制在三层以内,不要让眼睛、眉毛和发型上同时存在多个折射材质球,不然会触发渲染器的递归限制。真需要多层透明效果时,用烘焙贴图替代,别硬吃实时计算。

4.3 一套我踩过坑后总结出的顺序建议

最后,按照我的经验给你一个顺序建议,避免走回头路。先做模型检查,确保 UV 没有重叠、法线方向正确;再做基础固有色清理,去掉手绘假阴影;接下来做 AO 和法线烘焙,这是后续所有细节的地基;然后依次做皮肤、头发、眼睛、服装的材质参数;调完一组就进引擎预览一次,不要全部调完再进,不然错误会叠加,排查难度翻倍。

预览时不一定要开全光追,先把材质参数调对,再开光追调灯和采样。如果第一次开光追画面太亮或者太暗,不用急着调材质,先调节场景的环境光强度和 HDRI 亮度。大部分 PBR 材质在新光照环境下需要一到两档曝光修正,这是正常现象。

我个人在实际操作中的体会是:做这套流程需要的不是“会调很多参数”,而是“知道每个参数为什么会带来那样的视觉变化”。你照着别人的参数抄,永远解决不了自己模型上的独特问题。关键在于理解材质属性与光线的物理关系,然后用这个理解去指导你每一步的调整。

最后再分享一个小技巧:做好材质之后,给角色加一个围绕自身的缓慢转盘动画,输出一段 360 度旋转的视频。你会非常直观地看到哪些材质在某个角度下“露馅”了——这是检验工作流是否成功的最终标尺。做完这段视频,你就能准确判断这套流程在你项目里是否真正达到了“告别塑料二次元”的目标。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询