Repository navigation
Releases: njsgdd10086/NonToonLightLimit
Release list
NonToon Light Limit 1.2.1
NonToon Light Limit 1.2.1 —— 放宽依赖范围,兼容 NonToon 0.2.0 / Shader Core 0.2.0
[1.2.1] - 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 一发布,本插件就会因为版本冲突装不上 ✗。
兼容性说明
亮度模块依赖的 Shader Core 模块机制(ProjectSettings 白名单、SCConstValue 关键字)在 0.2.0 里没有变化 ✓,
所以本版代码无变化,只是依赖范围放开。
NonToon Light Limit 1.2.0
NonToon Light Limit 1.2.0 —— 亮度模块拆分为独立的 NonToon Modules 包
[1.2.0] - 2026-09-17
这一版做了架构调整:亮度模块从插件里拆出去,做成独立的模块包。功能不变,但模块可以单独安装使用了。
变更
- 亮度上下限(LightLimit)模块搬到新包
com.nontoon.modules(仓库 NonToon Modules)✓ ——
本插件现在通过 VPM 依赖订阅它(vpmDependencies)✓,插件里不再包含任何 Shader Core 模块文件 ✓; - 登记模块的逻辑改为调用模块包的 API ✓(通过反射 ✓ —— 模块包没装时仍能编译 ✓,并回退到本插件自带的老实现 ✓,功能不中断 ✓);
- 用本插件时会自动勾选亮度模块 ✓(保持原来的行为 ✓:编辑器就绪后自动登记 ✓,也可以在
Tools/NonToon 模块里手动开关 ✓)。
说明
- 升级后请让 VCC/ALCOM 一并安装
com.nontoon.modules(依赖会自动带上 ✓); - 如果之前手动把本插件的
Shaders目录拷进过工程,请删掉那份旧副本 ✗ ——
同一个模块 id 出现两次会被 Shader Core 重复编入 shader 导致编译错误。
模块本身没变
亮度模块的算法与参数同 1.1.9,只是换了家。
NonToon Light Limit 1.1.9
NonToon 亮度控制 1.1.9 —— 加了版本号显示与更新检查。
新增
- 菜单 Tools > NonToon 亮度控制 > 关于与更新检查…:显示当前版本、索引里的最新版本,可「检查更新 / 打开发布页」。
- 菜单 Tools > NonToon 亮度控制 > 检查更新。
- 窗口顶部显示版本号 + 检查更新 / 发布页按钮。
- 编辑器启动后每天自动检查一次(失败静默,发现新版只在 Console 提示)。
检查读的是总 VPM 索引:https://njsgdd10086.github.io/vpm-listing/index.json(不用额外设置)。
安装 / 升级
VCC / ALCOM 仓库地址(总仓库):
https://njsgdd10086.github.io/vpm-listing/index.json
NonToon Light Limit 1.1.8
NonToon Light Limit 1.1.8 —— 修掉「某些材质怎么调亮度都没反应」,原因是共享遮罩的通道被别处占用。
根因
亮度模块的「生效范围」以前是直接读 NonToon 共享遮罩(_SharedMask)的 A 通道,没设遮罩时才全生效。
但 _SharedMask 是 NonToon 所有模块共用的一张 RGBA 贴图:转换插件(LilToNonToon Switcher)
会把 lilToon 的描边 / 高光 / 材质捕获等遮罩烘进各自的通道。只要有一个模块占用了 A 通道,
其它材质在 A 通道是黑色的部位就会 llMask = 0 —— 表现就是:
- 这块材质(例如身体 / 脖子)怎么调亮度都不动;
- 把材质上的共享遮罩删掉,又一切正常。
现在
「生效范围」改成显式开关:
Mask Range(默认关闭) 关闭 = 整块材质都生效
Mask Channel 勾上以后用共享遮罩的哪个通道(R/G/B/A)
默认关闭意味着:转换插件烘出来的共享遮罩留着也没关系,亮度依旧整块生效;
想要「只在某个范围内提亮」再自己勾上并选通道。
升级后
- ALCOM 更新到 1.1.8;
- 之前为了绕开这个问题删掉的共享遮罩可以放回去了(放回去能让描边 / 高光 / 材质捕获的遮罩继续起作用);
- 如果你的材质确实需要按范围生效,打开材质上的
NonToon Light Limit → Mask Range并选通道。
安装 / 升级
VCC / ALCOM 仓库地址(总仓库,本插件与转换插件都在这份索引里):
https://njsgdd10086.github.io/vpm-listing/index.json
NonToon Light Limit 1.1.7
NonToon Light Limit 1.1.7 —— 修掉「退出菜单数值归零 / 滑过一半跳回 0 / 部分部件不跟着走」的问题。
根因
VRChat 官方文档(Expressions Menu and Controls)规定:
Puppet 类控件的 Parameter 字段不是数值参数,而是「这个 puppet 是否打开」的开关(打开时=1,退出菜单时清零);
真正的数值要写在 Sub-Parameters 里(径向就是 0..1 的那一个)。
之前把数值参数写进了 Parameter,于是:
- 拖动时客户端往这个字段写 0/1 → 动画只收到跳变;
- 退出菜单时该字段按语义清零 → 你看到的"退出变 0";
- 滑过一半触发状态翻转 → "滑到 50 以上变回 0";
- 数值参数从未真正被写入 → 部分材质看起来"不跟着走"。
现在改成
type: 203 # RadialPuppet
parameter: { name: "" } # 开关字段留空,不额外占参数
subParameters:
- { name: NonToonBrightness } # 0..1 的数值写到这里已验证(从构建产物 .vrca 里读出来的)
参数: NonToonBrightness valueType=Float saved=True defaultValue=0.5714286 synced=False
菜单项: type=RadialPuppet "NonToon亮度菜单"
parameter = ""
subParameters = NonToonBrightness
synced=False是正常的:Puppet 参数在 VRChat 里本来就是"打开时用 IK 同步"的本地参数,
官方文档里也写了 Puppet 的参数不走普通 Playable 同步。
升级后请这样做
- ALCOM 更新到 1.1.7;
- 工具窗口点 删除已生成 → 生成 / 更新;
- 上传,在真机里确认:拖动滑块 → 亮度连续变化;退出菜单后数值保留。
安装 / 升级
VCC / ALCOM 仓库地址(总仓库,本插件与 LilToNonToon Switcher 都在这份索引里):
https://njsgdd10086.github.io/vpm-listing/index.json
NonToon Light Limit 1.1.6
NonToon Light Limit 1.1.6 —— 修掉「生成菜单和参数」后上传失败(Index was outside the bounds of the array)的问题。
修复内容
-
菜单改用 Modular Avatar 自己的组件来挂,和 MA 的
GameObject → Modular Avatar → Create Toggle
完全同一条路:同一个物体上放- MA Menu Item(
RadialPuppet控件 + 参数名,isSynced / isSaved / isDefault都开) - MA Menu Installer(
Menu to Append留空)
菜单由 Modular Avatar 在构建时生成。之前的写法是插件自己
CreateInstance造一个
VRCExpressionsMenu资源再挂到Menu to Append上,有用户的工程在这种写法下上传会失败
(BuilderException: Index was outside the bounds of the array),换成 MA 的标准写法后恢复正常。 - MA Menu Item(
-
因此不再生成
*_Brightness_Menu.asset,输出文件夹里只剩两条动画 + 一个 AnimatorController。 -
另外这一版把生成内容拆成两个可单独勾选的部分(动画层 / 菜单和参数),方便只想用一半的情况。
已经验证过
- 生成后组件为:
MA Merge Animator+MA Menu Item(RadialPuppet / NonToonBrightness)+MA Menu Installer+MA Parameters; - 完整构建(Build & Test 的导出路径)通过,构建产物里的合并菜单包含
NonToon亮度菜单 / type 203 / NonToonBrightness; - 动画层单独生成时上传也正常(用户实测)。
升级后请这样做
- ALCOM 更新到 1.1.6;
- 工具窗口点 删除已生成(清掉旧写法留下的菜单资源引用),再点 生成 / 更新;
- 旧版本生成的
*_Brightness_Menu.asset已经没用了,可以连同Assets/NonToonLightLimit里那一份一起删掉; - 然后 Build & Test。
安装 / 升级
VCC / ALCOM 仓库地址(总仓库,本插件与 LilToNonToon Switcher 都在这份索引里):
https://njsgdd10086.github.io/vpm-listing/index.json
NonToon Light Limit 1.1.5
NonToon Light Limit 1.1.3 —— 修掉「生成物被挪进 prefab 实例后清理不掉」导致菜单挂错位置 / 构建报错的问题。
修复内容
- 清理生成物改用
Undo.DestroyObjectImmediate:之前用DestroyImmediate,如果_NonToonLightLimit
被挪进了服装的「装饰开关」之类属于 prefab 实例 的物体里,就删不掉,会留下重复的
MA Merge Animator / Menu Installer / Menu Install Target,于是:- Modular Avatar 把菜单挂到了别的位置 → 游戏 / Gesture Manager 里看不到亮度滑块;
- 构建阶段报
Index was outside the bounds of the array。
- 现在生成/删除时还会:
- 把被挪到别处的同名物体删掉,并在 Console 里说明它在哪;
- 发现同名物体上挂着 MA 的「菜单安装点」(Menu Install Target)时一并清掉;
- 始终把新建的
_NonToonLightLimit放在 avatar 根目录下。
建议操作
- ALCOM 更新到 1.1.3;
- 打开 Tools → NonToon 亮度控制 → 生成全局亮度动画 + 菜单;
- 先点 删除已生成(会清掉所有同名物体,包括被挪走的和带 Menu Install Target 的),
再点 生成 / 更新; - 生成的
_NonToonLightLimit不要再拖进服装的装饰开关里(保持在 avatar 根目录),然后 Build & Test。
安装 / 升级
VCC / ALCOM 仓库地址(总仓库,本插件与 LilToNonToon Switcher 都在这份索引里):
https://njsgdd10086.github.io/vpm-listing/index.json
NonToon Light Limit 1.1.4
NonToon Light Limit 1.1.3 —— 修掉「生成物被挪进 prefab 实例后清理不掉」导致菜单挂错位置 / 构建报错的问题。
修复内容
- 清理生成物改用
Undo.DestroyObjectImmediate:之前用DestroyImmediate,如果_NonToonLightLimit
被挪进了服装的「装饰开关」之类属于 prefab 实例 的物体里,就删不掉,会留下重复的
MA Merge Animator / Menu Installer / Menu Install Target,于是:- Modular Avatar 把菜单挂到了别的位置 → 游戏 / Gesture Manager 里看不到亮度滑块;
- 构建阶段报
Index was outside the bounds of the array。
- 现在生成/删除时还会:
- 把被挪到别处的同名物体删掉,并在 Console 里说明它在哪;
- 发现同名物体上挂着 MA 的「菜单安装点」(Menu Install Target)时一并清掉;
- 始终把新建的
_NonToonLightLimit放在 avatar 根目录下。
建议操作
- ALCOM 更新到 1.1.3;
- 打开 Tools → NonToon 亮度控制 → 生成全局亮度动画 + 菜单;
- 先点 删除已生成(会清掉所有同名物体,包括被挪走的和带 Menu Install Target 的),
再点 生成 / 更新; - 生成的
_NonToonLightLimit不要再拖进服装的装饰开关里(保持在 avatar 根目录),然后 Build & Test。
安装 / 升级
VCC / ALCOM 仓库地址(总仓库,本插件与 LilToNonToon Switcher 都在这份索引里):
https://njsgdd10086.github.io/vpm-listing/index.json
NonToon Light Limit 1.1.3
NonToon Light Limit 1.1.3 —— 修掉「生成物被挪进 prefab 实例后清理不掉」导致菜单挂错位置 / 构建报错的问题。
修复内容
- 清理生成物改用
Undo.DestroyObjectImmediate:之前用DestroyImmediate,如果_NonToonLightLimit
被挪进了服装的「装饰开关」之类属于 prefab 实例 的物体里,就删不掉,会留下重复的
MA Merge Animator / Menu Installer / Menu Install Target,于是:- Modular Avatar 把菜单挂到了别的位置 → 游戏 / Gesture Manager 里看不到亮度滑块;
- 构建阶段报
Index was outside the bounds of the array。
- 现在生成/删除时还会:
- 把被挪到别处的同名物体删掉,并在 Console 里说明它在哪;
- 发现同名物体上挂着 MA 的「菜单安装点」(Menu Install Target)时一并清掉;
- 始终把新建的
_NonToonLightLimit放在 avatar 根目录下。
建议操作
- ALCOM 更新到 1.1.3;
- 打开 Tools → NonToon 亮度控制 → 生成全局亮度动画 + 菜单;
- 先点 删除已生成(会清掉所有同名物体,包括被挪走的和带 Menu Install Target 的),
再点 生成 / 更新; - 生成的
_NonToonLightLimit不要再拖进服装的装饰开关里(保持在 avatar 根目录),然后 Build & Test。
安装 / 升级
VCC / ALCOM 仓库地址(总仓库,本插件与 LilToNonToon Switcher 都在这份索引里):
https://njsgdd10086.github.io/vpm-listing/index.json
NonToon Light Limit 1.1.2
NonToon Light Limit 1.1.2 —— 生成/删除小工具会清理掉所有重复的 _NonToonLightLimit 物体。
修复内容
- 重复的生成物体:之前只查找 avatar 根目录下的第一个
_NonToonLightLimit,
如果把它挪到别处、或者复制出了多份,再次生成就会留下多个同名的
MA Merge Animator / Menu Installer / Parameters。
重复挂菜单、重复声明参数会让上传阶段出错。
现在改成在整个 avatar 下递归查找并全部清掉,再在 avatar 根目录下建一个干净的。
建议操作
- 在 ALCOM 里更新到 1.1.2;
- 打开 Tools → NonToon 亮度控制 → 生成全局亮度动画 + 菜单,点一次 删除已生成,再点 生成 / 更新;
- 如果你的场景里还有手改过 / 复制出来的同名
_NonToonLightLimit(例如只有MA Menu Install Target的那种),
一并删掉再生成。
安装 / 升级
VCC / ALCOM 仓库地址(总仓库,本插件与 LilToNonToon Switcher 都在这份索引里):
https://njsgdd10086.github.io/vpm-listing/index.json