一位追了十几年原著的老粉给《仙逆》的王林做了个模型。
他把一个跑偏的生成结果,改成了参考图里的样子。
整套方法只动贴图,不动几何。

△原文首图,画面以王林为主体,右下角带作者署名水印。
一、四十轮手工建模,卡在神韵上
《仙逆》剧场版定档国庆当天中午上线,预约量三百二十五万。
他想用自己手里的模型做个致敬。
素材只有一张 AI图片,直接喂给图生 3D 出来的。
打开预览图,他愣了三秒。
满头品红长发。
金线肩甲。
黑底紧身衣。
这分明是个偏女性化的二次元角色。
参考图里的化神王林是深绯红长发、金色战甲的冷峻战神。
差得不是一星半点。

△图生 3D 的原始输出,发型在品红与浅紫之间渐变,金甲华丽但气质偏移。
但在这之前,他先走过一条更硬的路。
全程不打开建模软件界面。
身体和长袍、展示台和光环,全都由脚本生成几何。
所有参数集中在一个配置模块里。
每轮迭代只改参数重跑。
最费功夫的是头发。
他写了一套透镜截面发缕的系统。
每缕头发是有宽厚的扁截面,沿头皮法向铺开。
再叠一层束棱竖褶和少量逃逸细丝模拟绒感。
最终头发部分约十八万顶点,三千五百多个发缕实体。
从珠帘感熬到一缕一缕有绒感,用了一整晚。

△纯程序化建模的成果,白发与黑袍出自脚本,展示台和光环也是。
布光同样全部代码化。
场景十二盏灯。
按点光源平方衰减公式,逐灯算出脸部测点的照度与占比。
任何一盏灯占比过高,就会在该处烧出亮斑。

△程序化布光的照度测算,十二盏灯在脸部测点的能量占比一目了然。
四十轮迭代后,模型作为风格化手办已经能看。
卡点全在脸上。
鼻梁、眼睑和眉形每轮只能前进一小步。
像不像王林的神韵差距却始终明显。
程序化几何能把形推到八十分。
神却需要海量美术直觉。
皮肤质感、眼神微光这些细节,每一项都是无底洞。
于是他主动止损。
把两条路的账算在了一张表里。
形体轮廓上,手工可控但费轮次,图生 3D 一次生成且轮廓完整。
面部神韵上,手工的底子天花板高却卡在八十分,图生 3D 底子好,脸部立体眉眼锐利。

△面部迭代对比,每轮只前进一小步,神韵差距依然明显。
配色还原上,手工完全可控,图生 3D 会跑偏。
总耗时上,手工是一整晚四十轮迭代,走算法精修约两小时。
结论一目了然。
形交给模型,色和质交给算法。
二、为什么生成出来的模型容易跑偏
要把话说清楚,先得知道图生 3D 是什么。
它是多模态模型把一张或多张参考图直接转成带贴图的网格。
你不需要拉顶点,也不用布线。
模型会一次性吐出一张高密度网格,再附一套烘焙好的颜色贴图。
这类产物有个共同特征。
几何细节靠顶点堆,视觉信息却几乎全烘焙进一张 4096 见方的贴图。
他手上那个文件就是典型案例。
三十一万顶点,五十万三角面,单材质。
三十五兆的体积里绝大部分是贴图数据。
好处是零成本出形。
坏处是改色等于改贴图,几何层反而动不得。
手工模型把颜色写进材质、把细节写进几何。
改一次色只需调一个材质球。
图生 3D 的产物把一切压成一张照片裹在网格上。
任何视觉修正都变成了图像处理问题。
你不能用建模思路去选中头发。
只能回到像素和贴图坐标层面作战。
那这次到底错在哪。
一款 AI工具 能准确抓出长发和肩甲这类要素。
配色却完全理解错了。
它给王林安了一头品红长发,还配了一整套金线嫁衣般的装饰。
活脱脱把冷峻剑客生成成了梦幻少女。
这类工具的通病正是结构能抓,气质却靠训练集的平均脸兜底。
一旦参考图信息密度高、配色非常规,它就用最常见的解法糊弄过去。
所以纯生成不够,还得人工收尾。
他给这次修正做了一次选型对比。
重拓扑要重绑定几何和骨骼,工作量极高。
它还会破坏现有三十一万顶点的细节。
否决。
贴图重上色只动那张 4096 的贴图,算法驱动。
可能串色,但能用掩罩保护。
采用。
材质分级只改材质槽和节点,在软件内就能完成。
几乎无风险。
采用。
生成式重绘用绘图模型直接改贴图,风格不可控,容易失真。
备选。
核心判断是几何底子好,重拓扑等于为了修色把房子拆了重建。
更深一层的原因是风险不对称。
重拓扑意味着重新理解这份几何,重新布线,还要重新展一次贴图坐标。
任何一步失误,都会让最值钱的脸部精度付之东流。
贴图重上色和材质分级是非破坏性的。
原贴图永远留着,改坏了覆盖重来即可。
三、不改几何,改贴图,掩罩重上色的五步
整套流水线是单向的,从导出面数据开始,到模型回写结束。
一共五步。
第一步是导出每个三角面的贴图坐标与世界坐标。
在无头环境里导入模型,先定位唯一的网格对象。
顶点坐标要先用世界矩阵变换一次。
因为导入后局部坐标仍是 Y 轴朝上。
不转成世界坐标,就没法按高度分类。
然后遍历所有三角,取出三个角点的坐标和世界质心。
五十万个三角的坐标数组会存成一个压缩文件。
这个文件供后面聚类和掩罩使用。
第二步是颜色与高度聚类,定出安全阈值。
逐三角采样质心处的贴图颜色,转成色相、饱和度和明度三个分量。
再按高度打一张直方图。
他在 0.42 到 0.50 之间发现了明显的断档。
这个间隙正好把头顶的头发和下身暗紫红的袍子分开。
阈值来自真实面数据的分布,不是凭感觉拍的。
第三步是画掩罩。
掩罩就是一张和贴图同尺寸的黑白图。
白色像素表示这个区域要改,黑色表示别动。
难点在于不能直接拿贴图颜色做选区。
头发是粉色。
嘴唇也是粉调。
火焰纹偏红。
颜色域会重叠,一重叠就串色。
几何引导的意思,就是用颜色带和高度带的与条件锁定目标。
品红色并且高度在头顶区间,才算头发。
这里有个反例很值得记一笔。
他最初偷懒,只按色相选头发。
只要是品红就改。
渲染出来啼笑皆非。
王林的红腰封、胸口火焰纹和嘴唇的高光,全被一起染成了银白。
整张脸像打了劣质粉底。
原因是烘焙贴图里红腰封和头发在色相空间高度重叠。
单靠颜色根本分不开。
后来他把头发阈值锁在高度 0.46 到 0.83。
并且要求品红和头顶高度同时成立,串色问题瞬间消失。
掩罩画完还要做膨胀和高斯模糊,防止三角之间有缝隙。

△几何引导生成的头发掩罩,白色是待改区域,三角缝隙已膨胀填平。
第四步是在色相空间重上色。
v1 版本先做了一个银白发。
品红的色相被转到 217,饱和度压到极低,明度保留暗根。
这一版的大红腰封和火焰纹毫发无伤。
v2 版本再往参考图靠。
头发改成深绯红,色相锁在 350,同时保留明暗渐变。
头顶的悬浮片转成暖金,色相 40。

△重上色后的 4096 贴图,发缕已是深绯红,金色掩罩集中在饰件上。
第五步是材质分级。
原模型只有一个粗糙度 1.0 的纯哑光材质。
所以金甲看起来像塑料。
这次拆成 Base、Hair 和 Skin 三个材质槽。
按高度和色相把面分到三个槽里,再写回每个面的材质索引。
金甲那个槽额外挂一张金属粗糙度贴图。
物理渲染标准用两张图描述表面。
一张是基础色。
另一张是金属粗糙度,绿通道存粗糙度,蓝通道存金属度。
金属度 1 表示纯金属,0 表示绝缘体。
粗糙度 0.3 表示光滑高光,1.0 表示完全哑光。
他把金色饰件设成金属度 1、粗糙度 0.35。
凹槽处的火焰纹保持哑光。
质感立刻拉开层次。
渲染也没用默认平光。
他搭了一套四灯布光。
正面主光给脸部立体感。
两侧辅光压暗发丝缝隙。
最关键的是背后那束暖金逆光。
它模拟参考图里王林头顶的金环辉光,让红发边缘泛起金边。
气质一下从塑料玩偶跳到了战神降临。
四、三个真 bug 与最终成品
复盘这次打磨,最耗时的不是算法。
是三个很隐蔽的 bug。
第一个是颜色分支出错。
v1 用的是累积比较条件,配合顺序赋值。
后匹配的分支会覆盖先匹配的分支。
色相 40 的暖金被错送进了第五个分支,直接映射成紫色。
修法是把每个分支都改成互斥区间。
覆盖被彻底消除。
这个 bug 在 v1 里根本没暴露。
因为当时饱和度被压到 0.1 以下,色相看不出来。
v2 一提高饱和度去表现金甲,潜伏的雷立刻现形。
第二个是悬浮片阈值漏底。
阈值定在 0.825,比实际需要的 0.77 高了一截。
底面残留了一片粉紫。
他先把 0.76 到 0.825 这段高度带的面在平面上的范围打出来,确认和悬浮片完全重合,才敢放心把阈值降下去。
这一手把误伤其他区域的可能性也排掉了。
第三个是环境坑。
在这台 Windows 机器上,渲染一开 CUDA 就会卡在初始化。
日志里刷一堆警告,进程内存长时间不动。
最后只能强杀。
这不是代码错,是显卡驱动和软件版本的兼容问题。
解决办法很朴素,在启动参数里强制用 CPU 设备。
单次渲染从几十秒变成一到两分钟,但至少能稳定出图。
如果你也遇到渲染进程假死,先别怀疑脚本。
验证环节他也没省。
他没有急着导出,而是先写了一段回读脚本。
把模型重新加载一遍,确认三个材质槽和两张新贴图都完整嵌了进去。
再往下才是量化对比。
最终成品三十一点二万顶点,四十九点九万三角面。
三个材质槽,两张 4096 见方的贴图,导出体积三十二点七兆。
目标还原度逐项核过。
头发从品红渐变变成深绯红,达标。
头顶悬浮片从浅紫发冠变成暖金冠饰,达标。
金甲从哑光塑料感变成金属反射,达标。
肤色从灰紫偏冷变成白皙,达标。
嘴唇和眉毛没被掩罩碰到,达标。

△左为参考图的化神王林,中为 v1 银白发版,右为 v2 红发金甲版,配色与金属质感明显靠拢。

△v2 模型的三十四度侧身渲染,红发与金甲轮廓清晰。

△v2 模型的正面特写,脸部立体感和暖金逆光氛围都到位。
四张成品图对应剧场版海报常用的英雄构图。
正面。
三十四度侧身。
背面。
脸部特写。
采样设在 128 加降噪,既压得住噪点,又不至于让 CPU 渲染太久。
适用边界他写得很清楚。
这套方法只适合几何不错、仅贴图和材质跑偏的产物。
如果模型本身拓扑崩坏,或者面部已经畸变,贴图重上色救不回来。
跨版本复现也要留意。
节点接口在 4.x 到 5.x 之间有差异,本文基于 5.2.2 验证。
如果你用 3.x,某个拆通道的节点可能叫另一个名字。
功能等价,直接替换即可。
原理层面那三件事是长期有效的。
几何引导选区、色相域重映射,还有物理渲染的金属粗糙度标准,都不依赖具体版本。
方法也不只服务一个角色。
任何生成出来但配色不对的模型,都可以套用这条流水线。
导出面坐标,聚类颜色和高度,画掩罩,重上色,再拆材质槽。
这套做法说穿了并不玄,就是 AI编程 里最常见的思路,写脚本批量算。
这一次,形是模型给的,色是脚本调的。
他没跟模型较劲,而是把它按参考图重新校准了一遍。
