跳转至

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. 实施步骤

第一步:准备资产

  1. 原版主贴图 (Cazalis_Hair.png):
    • 不要修改! 保持它指向 _MainTex
    • 材质球的 _Color 必须设为 纯白 (1, 1, 1),以允许原图和渐变层完全显色。
  2. 渐变条 (Gradient.png):
    • 创建一张 1x256 像素 (宽 x 高) 的图片。
    • 绘制从下(发根)到上(发梢)的垂直渐变。
    • 示例配色:
      • 底部 (0%): #1A0005 (深酒红)
      • 中部 (50%): #B31217 (绯红)
      • 顶部 (100%): #E65C00 (火焰橙)

第二步:材质球参数配置

参数属性 设置值 说明
_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. 避坑指南

  1. UV 方向问题: 此方法依赖于模型的 UV 映射。通常二次元头发的 UV 是垂直排列的。如果发现颜色是横着变的,说明该模型 UV 特殊,需要旋转渐变贴图或使用其他方法。
  2. MatCap 冲突: 渐变贴图处理颜色,而 MatCap 处理高光反射。确保 MatCap 的颜色不要太抢(建议暖白/微金色),否则会掩盖住渐变带来的颜色层次。
  3. 不要用全黑渐变: 即使发根很黑,也建议使用深酒红或深蓝黑,否则看起来像头发烧焦了。