title: "lilToon 头发无损重色方案 (渐变叠加法)" description: "利用 lilToon 内置渐变贴图功能实现头发改色,完美保留原贴图发丝细节,避免直接替换贴图导致的塑料感。" date: 2026-05-04 tags: - VRChat - lilToon - Shader Magic - Hair Recoloring
lilToon 头发无损重色方案 (渐变叠加法)
应用场景: 当需要将角色的头发从“黑白灰/单色”改为“渐变色”(如莱万汀红橙渐变),且必须保留原画师绘制的发丝细节、高光和阴影纹理时。 核心优势: 解决了直接替换
_MainTex导致头发变成“塑料色块”或丢失立体感的问题。
1. 原理分析
传统的“直接替换贴图”方法会覆盖掉原图所有的灰度信息,导致头发失去体积感。
本方案利用 lilToon 着色器的 _MainGradationTex (渐变贴图) 功能,采用叠加混合的逻辑:
- 底层 (骨骼): 保持原版灰度贴图 (
_MainTex)。 - 顶层 (皮肉): 叠加自定义的 1x256 渐变条 (
_MainGradationTex)。
Shader 会自动根据 UV 坐标(通常从下往上)将渐变条的颜色映射到头发上,从而在不破坏原图黑白灰关系的前提下染上颜色。
2. 实施步骤
第一步:准备资产
- 原版主贴图 (
Cazalis_Hair.png):- 不要修改! 保持它指向
_MainTex。 - 材质球的
_Color必须设为 纯白 (1, 1, 1),以允许原图和渐变层完全显色。
- 不要修改! 保持它指向
- 渐变条 (
Gradient.png):- 创建一张 1x256 像素 (宽 x 高) 的图片。
- 绘制从下(发根)到上(发梢)的垂直渐变。
- 示例配色:
- 底部 (0%):
#1A0005(深酒红) - 中部 (50%):
#B31217(绯红) - 顶部 (100%):
#E65C00(火焰橙)
- 底部 (0%):
第二步:材质球参数配置
| 参数属性 | 设置值 | 说明 |
|---|---|---|
_MainTex |
原版灰度贴图 | 必须保留,负责提供头发纹理 |
_Color |
白色 (1,1,1,1) | 基础色设为白,不干扰渐变 |
_MainGradationTex |
渐变条图片 | 核心步骤:赋予新颜色 |
_MainGradationStrength |
0.65 ~ 0.80 | 关键参数:控制渐变层不透明度 |
_ShadowColor |
极深红 (0.2, 0, 0) | 辅助阴影色,增加立体感 |
注意:
_MainGradationStrength不宜设为 1.0,否则颜色会过于死板,建议 0.75 左右,让底层的灰度细节透出来一点,质感最自然。
体感 |
注意:
_MainGradationStrength不宜设为 1.0,否则颜色会过于死板,建议 0.75 左右,让底层的灰度细节透出来一点,质感最自然。
---## 3. Unity 自动化脚本示例
通过 Unity MCP 执行以下代码,即可一键实现该方案:
// 1. 恢复原版贴图
newMat.SetTexture("_MainTex", AssetDatabase.LoadAssetAtPath<Texture2D>("OriginalHairPath"));
// 2. 生成并赋值 1x256 渐变条
Texture2D gradTex = new Texture2D(1, 256);
// ... (在此处绘制颜色循环)
gradTex.Apply();
string gradPath = "Assets/NewGradient.png";
System.IO.File.WriteAllBytes(gradPath, gradTex.EncodeToPNG());
newMat.SetTexture("_MainGradationTex", AssetDatabase.LoadAssetAtPath<Texture2D>(gradPath));
newMat.SetFloat("_MainGradationStrength", 0.75f); // 设置混合强度
// 3. 清理干扰项 (防止之前尝试留下的缓存)
newMat.SetTexture("_Main2ndTex", null);
newMat.SetColor("_Color", Color.white);
4. 避坑指南
- UV 方向问题: 此方法依赖于模型的 UV 映射。通常二次元头发的 UV 是垂直排列的。如果发现颜色是横着变的,说明该模型 UV 特殊,需要旋转渐变贴图或使用其他方法。
- MatCap 冲突: 渐变贴图处理颜色,而
MatCap处理高光反射。确保MatCap的颜色不要太抢(建议暖白/微金色),否则会掩盖住渐变带来的颜色层次。 - 不要用全黑渐变: 即使发根很黑,也建议使用深酒红或深蓝黑,否则看起来像头发烧焦了。