跳转至

title: VRChat/Unity 综合特性验证 (第二波) created: 2026-05-06 status: VERIFIED sources: - "https://raw.githubusercontent.com/lilxyzw/lilToon/master/Assets/lilToon/Shader/lts.shader" - "https://raw.githubusercontent.com/lilxyzw/lilToon/master/Assets/lilToon/Shader/Includes/lil_common_input.hlsl" - "https://raw.githubusercontent.com/bdunderscore/modular-avatar/main/docs%7E/docs/reference/parameters.md" - "https://docs.unity3d.com/Manual/class-BlendTree.html" - "https://docs.unity3d.com/ScriptReference/Animator.SetLayerWeight.html"


VRChat/Unity 综合特性验证报告 (第二波)

验证时间: 2026-05-06
验证重点: lilToon 高级特性、Unity 动画系统、MA Parameters 机制

1. lilToon 关键特性属性验证 (源码级)

1.1 Outline (描边) 属性

来源: lts.shader + lil_common_input.hlsl

属性名 类型 作用 关键参数
_OutlineColor Color 描边颜色 (HDR) 默认 (0.6, 0.56, 0.73)
_OutlineTex 2D 描边纹理 支持 UV 动画
_OutlineWidth Range(0,1) 描边宽度 默认 0.08
_OutlineWidthMask 2D 描边遮罩 控制局部粗细
_OutlineFixWidth Range(0,1) 固定描边宽度 0=跟随模型缩放, 1=固定像素宽度
_OutlineVertexR2Width Enum 顶点红通道控制宽度 0=关, 1=开
_OutlineDeleteMesh Toggle 删除背向面 优化内表面不可见时的性能
_OutlineDisableInVR Toggle VR 中禁用描边 解决 VR 视角穿模问题

避坑: * 内表面描边: 如果模型有内表面 (如口腔),描边会出现在内部导致视觉异常。可使用 _OutlineDeleteMesh 或 Mask 修复。 * VR 视角: VR 中相机在头部内部,描边可能导致头部模型被遮挡,建议开启 _OutlineDisableInVR_OutlineDeleteMesh 或 Mask 修复。 * VR 视角: VR 中相机在头部内部,描边可能导致头部模型被遮挡,建议开启 _OutlineDisableInVR。### 1.2 Emission (自发光) 属性 来源: lil_common_input.hlsl

属性名 类型 作用 关键参数
_EmissionColor Color (HDR) 发光颜色
_EmissionMap 2D 发光纹理 支持 UV 动画
_EmissionBlink Vector 闪烁设置 (频率/相位) (0, 0, 3.141593, 0)
_EmissionBlend Range(0,1) 混合强度
_EmissionBlendMode Enum 混合模式 0=Add, 1=Mul, 2=Screen 等
_EmissionGradTex 2D 渐变纹理 随时间变化的流光效果
_EmissionParallaxDepth Float 视差深度 配合 UV 模式使用
_EmissionFluorescence Range(0,1) 荧光效果 模拟荧光棒/霓虹灯

高级用法: * 闪烁: _EmissionBlink 控制闪烁频率。z 分量通常为 PI (3.14159) 作为基础频率。 * 流光: 使用 _EmissionGradTex_EmissionGradSpeed 实现流光效果 (如发光武器、能量槽)。 * 两层发光: 支持 _Emission2ndColor 等第二层发光属性,可叠加不同纹理。

1.3 Rim (边缘光) & MatCap (材质捕获)

来源: lil_common_input.hlsl

特性 关键属性 作用
RimShade _RimShadeColor, _RimShadeMask 边缘阴影 (增加立体感)
RimLight _RimColor, _RimBorder, _RimBlur 边缘高光 (金属感/轮廓光)
MatCap _MatCapTex, _MatCapColor, _MatCapBlend 材质捕获 (反射环境/金属质感)
MatCap 2nd _MatCap2ndTex, _MatCap2ndBlend 第二层 MatCap (叠加细节)

注意事项: * VR 视差: _RimVRParallaxStrength_MatCapVRParallaxStrength 控制在 VR 中是否跟随视线移动。设为 0 可固定反射方向。 * 法线影响: _RimNormalStrength_MatCapNormalStrength 控制法线贴图对边缘光/MatCap 的影响程度。 。设为 0 可固定反射方向。 * 法线影响: _RimNormalStrength_MatCapNormalStrength 控制法线贴图对边缘光/MatCap 的影响程度。### 1.4 Backlight (背光) 来源: lts.shader

属性名 作用
_BacklightColor 背光颜色
_BacklightBorder 背光边界
_BacklightBlur 背光模糊
_BacklightDirectivity 方向性 (模拟逆光)
_BacklightViewStrength 视角强度

1.5 IDMask (ID 遮罩)

来源: lts.shader + lil_common_functions.hlsl

原理: 利用顶点 ID (Vertex ID) 在 Shader 中判断顶点属于哪个区域 (0-7),从而在不拆分网格的情况下实现局部材质控制。

属性名 作用
_IDMaskCompile 编译开关 (必须为 1 才能启用)
_IDMaskFrom ID 来源 (UV0-UV7 或 VertexColor)
_IDMask1 - _IDMask8 8 个 ID 区域的开关
_IDMaskIndex1 - _IDMaskIndex8 每个 ID 区域对应的索引值

应用场景: * 局部溶解 (只溶解衣服不溶解身体) * 局部换色 (只改变某一部分颜色) * 局部透明 (不需要拆分 Mesh)

2. Unity 动画系统补充验证

2.1 Animation Blend Trees (混合树)

来源: Unity Manual (class-BlendTree.html)

核心概念: * 用途: 在两个或多个相似动画之间平滑混合 (如走路 -> 跑步)。 * 类型: * 1D: 单个参数控制混合 (最常用,如 Speed 控制走/跑) * 2D Freeform Cartesian: 两个参数独立控制 (如 SpeedDirection) * 2D Simple Directional: 两个参数表示方向 (如 8 方向移动) * Motion Field: 混合树的每个节点是一个动画片段 (Motion)。 * Threshold: 每个运动对应的阈值参数值。

VRChat 中的应用: * 呼吸/站立混合: 根据玩家是否静止混合呼吸动画。 * 手势过渡: 在 Finger 动画之间平滑过渡。 *: 每个运动对应的阈值参数值。

VRChat 中的应用: * 呼吸/站立混合: 根据玩家是否静止混合呼吸动画。 * 手势过渡: 在 Finger 动画之间平滑过渡。### 2.2 Animator Layer Weight (层权重) 来源: Unity API (Animator.SetLayerWeight)

API:

public void SetLayerWeight(int layerIndex, float weight);
// weight 范围: 0.0 (完全不影响) -> 1.0 (完全覆盖)

VRChat 中的关键层: | 层名 | 默认权重 | 作用 | |:---|:---:|:---| | Base Layer | 1.0 | 基础动作 (站立/行走) | | Additive Layer | 1.0 | 叠加动作 (呼吸/晃动) | | Gesture Layer | 1.0 | 手势 (手指/手形) | | Action Layer | 1.0 | 全身动作 (舞蹈/坐姿) | | FX Layer | 1.0 | 特效/功能 (溶解/换色/物理) |

注意事项: * FX 层通常设为 1.0,以确保特效完全生效。 * 如果要临时禁用某个层,可以将权重设为 0.0

3. MA Parameters 组件深层机制

来源: MA 官方文档 (parameters.md)

3.1 参数类型详解

类型 是否占用参数槽位 用途
Bool/Int/Float ✅ 是 常规 Animator 参数
Animator Only ❌ 否 仅 Animator 内部使用 (如 MergeAnimator 中间状态)
Prefix ❌ 否 PhysBone 前缀 (用于重命名 PhysBone 参数)

3.2 参数重命名 (Renaming)

  • Change name to: 将参数重命名为新名称 (对 MA Parameters 外部生效)。
  • Auto rename: 自动选择一个未被占用的名称,避免冲突。
  • 嵌套重命名:
  • 内部 MA Parameters 将 foo 重命名为 bar
  • 外部 MA Parameters 将 bar 设置为 auto rename
  • 最终结果:内部组件依然使用 bar,外部自动分配新名。

3.3 Saved/Synced 控制

  • Saved: 跨 Avatar 切换和 VRChat 重启后保存参数值。
  • Synced: 在网络中同步参数值 (其他人能看到你的状态)。
  • Synced = False: 不占用网络同步带宽,仅本地生效 (适合本地特效)。

3.4 默认值 (Default Values)

  • 如果留空:使用主 Expressions Parameters 中的值,或零/false。
  • Override Animator Defaults: 强制覆盖 Animator Controller 中的默认值。
  • 如果选中 Animator Only 并设置了默认值,此选项会被忽略,Animator 默认值始终被替换。 lts**: 强制覆盖 Animator Controller 中的默认值。
  • 如果选中 Animator Only 并设置了默认值,此选项会被忽略,Animator 默认值始终被替换。## 4. 验证结论总结
特性 验证状态 关键发现
lilToon Outline 支持 VR 禁用、顶点宽度控制、内表面删除
lilToon Emission 支持两层发光、闪烁、流光渐变、荧光
lilToon Rim/MatCap 支持 VR 视差修正、法线影响控制
lilToon IDMask 利用 Vertex ID 实现局部材质控制,无需拆分网格
Unity Blend Trees 1D/2D 混合树支持平滑动画过渡
Animator Layer Weight SetLayerWeight(0-1) 控制层影响力
MA Parameters 支持 Animator Only (不占槽位)、嵌套重命名