Skip to content

Releases: njsgdd10086/LilToNonToonSwitcher

1.3.3

Choose a tag to compare

@njsgdd10086 njsgdd10086 released this 12 Oct 12:03

1.3.3

修复

  • MatCap 导致头发出现金属光泽
    lilToon 的 _MatCapColor 允许超过 1(HDR),而 NonToon 的 sd.add += matcap * _MatCapAddColor
    缺少 lil 的两个衰减环节:

    1. _MatCapNormalStrength —— 把模型法线混进采样方向、打散反光
    2. 乘 sd.shadow —— 暗处不反光

    于是同一个 HDR 值在 NonToon 下过亮成金属。实测(shinano 的头发):
    _MatCapColor = (2.1185, 1.8952, 1.7888),原样搬运后高光(>0.35)像素占比 3.10%,
    峰值归一化后降到 0.00%,色相不变。

    现在第一层与第二层 _MatCapColor 都做峰值归一化(除以 max(R,G,B));
    想要更亮可以在 MatCap 模块面板里自行调回,日志里会记录归一化前后的值。


包含自 1.3.2 以来的全部内容(遮罩复用、.scmask 尺寸优化、整数属性落盘、亮度均匀化等)。

1.3.2

Choose a tag to compare

@njsgdd10086 njsgdd10086 released this 11 Oct 09:52

1.3.2

修复

  • 转换中途抛 IndexOutOfRangeException 导致整个流程中断(无遮罩源但有自发光的材质,如配件/衣物)
  • 整数属性写不进序列化数据 ⇒ ShadeGradientIndex 实际为 -1 ⇒ Shade 模块处于关闭、烘好的色带完全没用上
    ⇒ 表现为「暗的时候不均匀、受灯光影响大」
  • 亮度不均匀:逐材质亮度补偿实测差 6.6 倍、色带差 40 倍,多组开关切换时同框出现 ⇒ 一块亮一块暗
  • 聚光灯下脸偏亮(LightLimit 的亮度被 _Max = 1 钳掉,补偿失效)

优化(体积 / 显存)

  • .scmask 尺寸不再写死 1024(原来每个材质都吃 1024x1024 RGBA32 + mipmap = 5.33 MB)
  • 单源材质直接复用源贴图做遮罩,零精度损失
  • 无自发光材质共用一个占位图

实测效果

旧版 新版
纹理显存 231.65 MB 130.31 MB(-44%)
解压体积 270.06 MB 168.73 MB(-37%)
下载体积 33.50 MB 32.28 MB

LilToNonToon Switcher 1.3.1

Choose a tag to compare

@njsgdd10086 njsgdd10086 released this 04 Oct 13:15

1.3.1

修复

  • 共享遮罩被 PNG 覆盖 ⇒ 整个模型被染青(mirufy 模型实测)

    转换器先接好了正确的 .scmask(RGBA32,R/G/B 装自发光、A 装原遮罩),
    但紧接着一段无条件代码又把 _NTMask.png 写了回去 —— 那张 PNG 是 RGB24,
    其 R/G/B 是旧版遮罩内容(实测 Body_base 为 (0.001, 1, 1))。
    于是自发光相位 sd.col.rgb += sd.mask.rgb 给整身加了一层青色:
    白色物体变青、皮肤变灰蓝,而红色通道恰好正常 ⇒ 眼睛仍然正确。

    现在用一个标志记住 .scmask 是否接上,只有失败时才退回 PNG,并补上 SetDirty。

  • 同时补上 CHANGELOG.md 里 1.3.0 与 1.3.1 的完整条目。

LilToNonToon Switcher 1.3.0

Choose a tag to compare

@njsgdd10086 njsgdd10086 released this 04 Oct 11:42

1.3.0

修复(重要)

  • 色带对比度为 0 ⇒ 法线贴图完全不可见、模型没有明暗分层:去掉 avgAlbedo 除法与逐通道 min(1)。
    开衫实测 _ShadowColor=0.771、avgAlbedo=0.529 ⇒ 商 1.46 被钳成 1 ⇒ 整条色带纯白。
  • 自发光形状:改回按贴图是否存在判断。此前按 LIL_FEATURE_* 关键字判断,而 lilToon 的功能开关是
    multi_compile 关键字、Material.shaderKeywords 读不到 ⇒ 误判为「不乘贴图」⇒ 自发光铺满整张脸。
  • .scmask 输出无损 RGBA32:默认 BC7 会把稀疏高对比的发光数据糊开(渲染偏青/洋红)。
  • 相位去掉 if (_Enable) 外壳:SCConstValue 会把它折叠成编译期常量 0 ⇒ 相位在生成源码里看得见、
    编译后整段消失。
  • ModuleInstaller 引用了已删除的常量 ⇒ error CS0103,整个 Editor 不编译(菜单消失)。
  • package.json 描述改为单行:里面若有真实换行,Unity 会报 is not valid JSON。

变更

  • 移除自建的 Fabric 模块:实测贡献 < 2%;织物纹理由 Shade 色带 + 法线贴图保证
    (_BumpMap/_BumpScale 现在走 NonToon 正规通道 _NormalMap/_NormalScale)。
  • 色带「比值忠实化」:除以 阴影色 / 平均底色,并自动把 NonToon 的「亮度」(LightLimit Brightness)
    设为同一倍数补回(可在菜单里手改)。
  • 加入防重复转换闸:源材质已是 NonToon 时拒绝并警告。
  • FabricModuleInstaller → ModuleInstaller。

LilToNonToon Switcher 1.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 05:17

LilToNonToon Switcher 1.2.0 —— 自发光(眼睛高光)完全重做、新增渲染器阴影开关诊断、高级设置默认全 1

[1.2.0] - 2026-10-04

这一版集中修自发光(眼睛高光)与画面观感,并新增了一批「转换时就告诉你哪里不对」的诊断。
以下内容全部是相对上一个版本 1.1.16 的变化。

修复

  • 眼睛高光(自发光)完全重做 ✅ —— 此前有多种独立缺陷叠加,导致「无光照场景下眼睛不亮」:
    1. 源材质 _EmissionMap 为空时被误判成「没有自发光」⇒ 直接跳过(lilToon 那里空贴图等于白贴图,形状其实来自 _EmissionBlendMask);
    2. 转换顺序颠倒:基础贴图先烘、遮罩后建,而发射贴图是遮罩阶段才写出的 ⇒ 永远读到旧文件;
    3. 依赖 LIL_FEATURE_EmissionBlendMask 关键字,而实测材质的 m_ValidKeywords 是空的 ⇒ 条件永不成立;
    4. 烘焙里「无需色调校正就直接沿用原贴图」的提前返回挡在合并之前 ⇒ 合并永远不执行。
      现在严格按 lilToon 的公式(lil_common_frag.hlsl 1819~1861)逐材质烘焙,并在 postpixel 阶段加算
      ⇒ 无光照场景下眼睛会正常发光 ✅。
  • 自发光不再污染其它材质 ✅ —— 曾经它借用共享遮罩的 R/G/B,而那是全模块共用资源,
    导致身上出现洋红/黄块(用户实测「删掉 _SharedMask 画面就正常」)。现在只有真的烘出内容的材质才保留数据,
    其余清零;A 通道照旧承载真遮罩,Lighten / MatCap 等模块不受影响。
  • 高光颜色与清晰度 ✅ —— 发光颜色改为按亮度去饱和、并以单通道加算 ⇒ 高光呈中性白(不再偏青/偏紫);
    遮罩与发射贴图改为无损、无 mipmap 导入 ⇒ 高光不再发糊。
  • 描边 ✅ —— 判定改回「按 shader 变体」,修复头发描边被误关(_UseOutline 在 lilToon 的 shader 里并未被引用,只是面板折叠开关)。
  • 阴影色带 ✅ —— 修掉「阴影色/平均基础色 > 1 时整条色带被钳成纯白」造成的画面发平(衣服没有褶皱层次)。
  • 开关 ✅ —— 恢复「一次转换 = 一个新开关」,不再复用/追加;圈 abc 出一个、圈 def 再出一个。

新增

  • 转换时检查渲染器的阴影开关 ✅ —— Mesh Renderer → 照明 → 「接受阴影」没勾选时,任何着色器都收不到阴影
    (表现为脸在阴影里始终很亮),这类问题跟着色器无关、极难定位。现在转换结果里会直接列出具体对象路径。
    「投射阴影」为 Off 的也会一并说明(通常是有意为之)。
  • 高级设置(色调标定) ✅ —— 色带过渡窗口倍数 / 色带暗端收缩 / 烘焙曝光 / 色调 gamma / 色调增益。
    默认全部为 1(= 完全照搬 lilToon,不做任何观感补偿,需要的人自己调);
    另有「默认(最忠实)」与「设为拟合值」两个按钮,后者填入对着 lilToon 渲染实测标定的一组值。
  • 菜单项 Tools/LilToNonToon Switcher/重新生成 NonToon 着色器 ✅ —— Shader Core 只在它认为模块文件变化时才重生成,
    Unity 在后台运行时常常不及时,导致改了模块相位却看不到效果。现在可手动强制一次。

说明

  • 出厂的 5 个高级选项全部为 1,即最忠实档;如果觉得整体偏暗或阴影过重,请在高级设置里自行调整后重新转换。
  • 「设为拟合值」按钮里的一组值(窗口 2.6 / 暗端 0.70 / 曝光 1.30)是针对 lilToon 的实际渲染做四分位实测得到的,
    仅供需要更接近 lil 观感的人参考,不是默认值。

LilToNonToon Switcher 1.1.16 —— 放宽依赖范围,兼容 NonToon 0.2.0 / Shader Core 0.2.0

[1.1.16] - 2026-10-02

变更

  • 放宽依赖范围:jp.lilxyzw.shadercore / jp.lilxyzw.nontoon 由 ^0.1.5 / ^0.1.3 改成
    >=0.1.5 / >=0.1.3,com.nontoon.modules 改成 >=0.1.0 ✓ ——
    否则 NonToon 0.2.0 一发布,本插件就会因为版本冲突装不上 ✗。

兼容性说明

逐文件对比了 NonToon 0.1.3 → 0.2.0 与 Shader Core 0.1.12 → 0.2.0:转换器与织物模块依赖的内部细节都没变 ✓
(phase 钩子、ProjectSettings 白名单 API、SCConstValue 关键字机制、SCShaderImporter 全部一致 ✓),
所以本版代码无变化,只是依赖范围放开。NonToon 0.2.0 的新功能是接入 VRC Light Volumes ✓(对我们无影响 ✓)。

LilToNonToon Switcher 1.1.16

Choose a tag to compare

@github-actions github-actions released this 02 Oct 15:00

LilToNonToon Switcher 1.1.16 —— 放宽依赖范围,兼容 NonToon 0.2.0 / Shader Core 0.2.0

[1.1.16] - 2026-10-02

变更

  • 放宽依赖范围:jp.lilxyzw.shadercore / jp.lilxyzw.nontoon 由 ^0.1.5 / ^0.1.3 改成
    >=0.1.5 / >=0.1.3,com.nontoon.modules 改成 >=0.1.0 ✓ ——
    否则 NonToon 0.2.0 一发布,本插件就会因为版本冲突装不上 ✗。

兼容性说明

逐文件对比了 NonToon 0.1.3 → 0.2.0 与 Shader Core 0.1.12 → 0.2.0:转换器与织物模块依赖的内部细节都没变 ✓
(phase 钩子、ProjectSettings 白名单 API、SCConstValue 关键字机制、SCShaderImporter 全部一致 ✓),
所以本版代码无变化,只是依赖范围放开。NonToon 0.2.0 的新功能是接入 VRC Light Volumes ✓(对我们无影响 ✓)。

LilToNonToon Switcher 1.1.15

Choose a tag to compare

@github-actions github-actions released this 19 Sep 16:59

LilToNonToon Switcher 1.1.15 —— 织物模块拆分为独立的 NonToon Modules 包

[1.1.15] - 2026-09-17

这一版做了架构调整:把 Shader Core 模块从插件里拆出去,做成独立的模块包。功能不变,但模块可以单独安装使用了。

变更

  • 织物/法线细节模块搬到新包 com.nontoon.modules(仓库 NonToon Modules)✓ ——
    本插件现在通过 VPM 依赖订阅它(vpmDependencies)✓,插件里不再包含任何 Shader Core 模块文件 ✓;
  • 转换时会调用模块包的 API 自动勾选织物模块(幂等 ✓,没登记就登记 + 重新生成 NonToon shader ✓);
  • 调用的方式是反射 ✓ —— 模块包万一没装,本插件仍能正常编译 ✓,只在转换日志里给一条明确提示 ✓;
  • 菜单新增 Tools/LilToNonToon Switcher/打开 NonToon 模块管理 ✓(跳到模块包的勾选界面 ✓)。

说明

  • 升级后请让 VCC/ALCOM 一并安装 com.nontoon.modules(依赖会自动带上 ✓);
  • 如果之前手动把本插件的 Shaders 目录拷进过工程,请删掉那份旧副本 ✗ ——
    同一个模块 id 出现两次会被 Shader Core 重复编入 shader 导致编译错误;
    模块包的勾选界面发现重复时也会在 Console 里提示该删哪一份 ✓。

模块本身没变

织物模块的算法与默认值同 1.1.14(强度 0.25 ✓、方向 0.35 / -0.5 ✓、软压缩 ✓),只是换了家。

LilToNonToon Switcher 1.1.14

Choose a tag to compare

@github-actions github-actions released this 18 Sep 19:25

LilToNonToon Switcher 1.1.14 —— 补上「第二层 MatCap」,并修掉模块开关不生效的问题(金饰/装饰终于能对上了)。

一、第二层 MatCap 从来没转过

lilToon 有两层 MatCap:_MatCapTex(第一层)和 _MatCap2ndTex(第二层)。
我们以前只转第一层 ✗ —— 所以走第二层的装饰(帽子的羽毛 / 玫瑰)转换后一直是灰的 ✗。

NonToon 恰好有两个槽 ✓,现在:

第一层(_MatCapTex,模式 0/1/2 → Add、3 → Multiply)→ 占一个槽
第二层(_MatCap2ndTex)                              → 用剩下那个槽

配套:_MatCap2ndColor × _MatCap2ndBlend 写进对应颜色 ✓、_MatCap2ndBlendMask 按第二层的槽位分配遮罩通道 ✓、
_UseMatCap2nd = 0 时留空 ✓。

二、模块开关「勾着但不生效」

NonToon 的模块开关带 SCConstValue,真正让它生效的是材质上的关键字
<属性名大写>_<值>(MatCap 是 _JP_LILXYZW_NONTOON_MATCAPS_ENABLE_1)。
我们以前只写 _Enable 整数 ✗ —— 表现就是「开关明明勾着,却要手动在 Inspector 里取消再勾一次才亮」✗。
现在整数 + 关键字都写 ✓,并在转换后强制重新导入材质(模块状态需要这次刷新 ✓)。

三、顺带一起修的

  • 遮罩通道按实际使用的槽位分配(以前写死 MatCapMultiply ✗ → 数据烘进 R、模块读 A ✗,被乘成 ~0),写完还读回校验 ✓
  • _BumpMap 现在同时接到 Details 模块的 _Detail0NormalMap(喂 sd.N_detail,Shade 模块真的用它算明暗 ✓),
    并把四层 Detail*Boost 钉成 1 ✓(详情层会 albedo *= detailTex * boost,boost 不是 1 会整体改亮度 ✗)
  • 不需要烘焙时 _BaseTexture 指回源贴图 ✓(不再残留旧烘焙图 ✓)
  • 烘焙贴图保持原长宽比 ✓;MatCap 颜色总是写入 ✓

已知限制

  • 金属反射:lilToon 的 _UseReflection(_Metallic / _Smoothness / 环境反射)NonToon 没有对应能力 ✗,
    只能近似成高光 —— 「靠反射变金」的部分会比原版偏灰 ✓。
  • 织物质感 / 法线细节:NonToon 是 toon 硬色阶 + 硬高光 ✗,法线扰动没有足够的输出通道 ✓ ——
    主 _NormalMap、Details 的 _Detail0NormalMap、调高 _NormalScale、降低 _Roughness 都试过 ✓,
    效果都不理想(降低 roughness 反而变塑料 ✗)。要完全一致只能自建 shader / 写模块 ✓。

升级后

ALCOM 更新到 1.1.14 → 重新转换用了 MatCap(尤其是有第二层的)的材质。

安装 / 升级

VCC / ALCOM 仓库地址(总仓库,本插件与 NonToon Light Limit 都在这份索引里):

https://njsgdd10086.github.io/vpm-listing/index.json

LilToNonToon Switcher 1.1.13

Choose a tag to compare

@github-actions github-actions released this 18 Sep 18:45

LilToNonToon Switcher 1.1.13 —— 修掉「白金色服装的金饰变成灰色」(MatCap / 金属质感整片失效)。

三个叠加的原因

1. Shader Core 的模块开关要写「关键字」

NonToon 每个模块的开关带 SCConstValue,真正让模块生效的是材质上的关键字
<属性名大写>_<值>(MatCap 就是 _JP_LILXYZW_NONTOON_MATCAPS_ENABLE_1)。
我们以前只写了 _Enable 这个整数、没加关键字 ✗ ——
表现就是「开关明明是勾着的,却要手动在 Inspector 里取消再勾一次才亮」✗。现在两者都写 ✓。

2. MatCap 混合模式理解反了

lilToon 的 lilBlendColor:

0 = Normal(直接用 matcap 颜色替换)   1 = Add   2 = Screen   3 = Multiply

我们以前把 0(Normal)丢进了 Multiply ✗ —— 白布 × 金色 matcap 会算成发灰 ✗。
现在 0/1/2 走 MatCap (Add)(叠加最接近「替换」),只有 3 才用 Multiply,
并清空另一个槽
(材质是复用的,上次留在里面的贴图会双重生效)。

3. 遮罩通道与模块读取的通道不一致

MatCap 的遮罩以前写死挂到 MatCapMultiply 模块 ✗,而贴图其实放在 MatCapAdd ✗ →
数据烘进 R 通道、模块却读 A ✗(被乘成 ~0)。现在按实际槽位分配通道,
写回模块并读回校验;同时去掉了第二层 MatCap 的无用遮罩(它没转、却会占通道并改模块通道)。

另外还修了:转换后强制重新导入材质(Shader Core 的模块状态需要刷新)、
不需要烘焙时 _BaseTexture 指回源贴图(不再残留旧烘焙图)、MatCap 颜色总是写入。

已知限制:金属反射

lilToon 的 _UseReflection(_Metallic / _Smoothness / 环境反射)NonToon 没有对应能力,
只能近似成一个高光 —— 所以「靠反射变金」的部分(帽子的羽毛 / 玫瑰花)转换后会比原版偏灰 ✓。
需要完全一致的话,这部分建议保留 lilToon 材质、或手动把 NonToon 的 Specular 调暖 + 降低 Roughness 近似。

升级后

ALCOM 更新到 1.1.13 → 重新转换受影响的材质(用了 MatCap / 金属感的那些)。

安装 / 升级

VCC / ALCOM 仓库地址(总仓库,本插件与 NonToon Light Limit 都在这份索引里):

https://njsgdd10086.github.io/vpm-listing/index.json

LilToNonToon Switcher 1.1.12

Choose a tag to compare

@github-actions github-actions released this 18 Sep 17:48

LilToNonToon Switcher 1.1.12 —— 加了版本号显示与更新检查。

新增

  • 菜单 Tools > LilToNonToon Switcher > 关于与更新检查…
    显示当前版本 vX.Y.Z、索引里的最新版本,并提供「检查更新 / 打开发布页」。
  • 菜单 Tools > LilToNonToon Switcher > 检查更新 —— 直接检查,有新版会弹窗。
  • 设置窗口顶部显示「版本 vX.Y.Z」+「检查更新 / 发布页」按钮。
  • 编辑器启动后每天自动检查一次(失败静默;发现新版只在 Console 提示一行)。

检查读的是本仓库的 VPM 索引(就是你在 VCC / ALCOM 里加的那个地址),不用额外设置。
说明一下:Unity 的菜单名是编译期固定的([MenuItem]),所以版本号没法直接写进菜单文字 ——
放在了菜单打开的对话框和设置窗口里。

安装 / 升级

VCC / ALCOM 仓库地址(总仓库,本插件与 NonToon Light Limit 都在这份索引里):

https://njsgdd10086.github.io/vpm-listing/index.json