The log said "1 of 31 materials corrected" and that read like a one-off fix for one lamp, which prompted the reasonable question of why far more than one lamp got better. The count was right and the unit was wrong. Materials are heavily shared here: roughly 1500 renderers across live10149 draw from 31 unique materials. The single corrected one, mtl_env_live10149_blinklight000 on LightBlinkBlend, is the blink-light material for the entire stage — it appears in all 27 BlinkLight groups, about 1450 renderers: audience_light 95, mob000 570, glow_object 67, glow_ramp 58, the mirror ball flare quads 83, every wash group, and the LED panels. So the same fix that cleared the ground wash wedges is also why the small bulbs stopped rendering as black blocks, which had been sitting in LIVE_TRACKS.md as an unexplained symptom. The log now counts affected renderers alongside materials and prints the per-material tally, so the blast radius is legible without cross-referencing the BlinkLight lines by hand. Both docs are corrected in the same pass. The earlier note narrowed the claim correctly — only materials whose current shader declares the property are touched — but by leading with "only 1" it understated the result in the other direction. That is three scope misstatements about this one fix in a day, so the rule now sits next to it: report the unit that matches the question being asked. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UzXXkLzVC8pNA3JjyUGMbq
27 KiB
name, description, type, originSessionId
| name | description | type | originSessionId |
|---|---|---|---|
| Live 轨道全览 | UmaViewer Live 时间轴全部103条轨道的ID、名称、作用、实现状态及已知Bug(2026-05-07核查) | reference | 319ae839-0292-4b1e-80de-2f3c91b1f40e |
Live 轨道全览(LiveTimelineKeyDataType 枚举,ID 0–102)
数据来源:LiveTimelineDefine.cs 枚举 + WorkSheet CS字段核查 + scan_full.py全量扫描(58首歌,2026-05-07)+ Director/Control代码审查
术语:下文「WorkSheet 有/无 XXX 字段」指的是游戏 bundle 的 TypeTree,不是本仓库的 C#
LiveTimelineWorkSheet类。两者是分开的:postFilmKeys、radialBlurKeys、tiltShiftKeys、flashPlayerKeys、charaFootLightKeys、MultiLightShadowKeys、lightProjectionList、postFilm1MultiCameraKeys、postEffectDOFKeys在 bundle 里有,在 C# 里都还没声明。覆盖率数字同理——「N/58 首」量的是 bundle 里有没有数据,不代表 C# 收得到。分发层的过滤可能让有数据的轨道照样落空(BgColor1 就是如此,见 ID 8)。
⚠️ 2026-08-04:旧扫描数据不可信,已用新工具全量重测
tools/下的 dump 工具链已重建(见CLAUDE.md)。cutt bundle 自带完整 TypeTree,字段名和 keyframe 数是权威的。全 59 首、70 张 worksheet 共享同一套 schema(128 字段),无版本漂移。重测结果与本文件原有记录冲突严重,下表中带「✅实测」标记的才是可信数据,其余未标记的行仍是旧扫描结论,谨慎对待。两类系统性错误:
- 「WorkSheet无XXX字段」全部是错的 —— 那些字段都存在,而且多数有大量数据(见 ID 26/27/51/52/59/70/77/84/85/98/99)
- 「全0 keyframe空占位」多数是错的 —— RadialBlur/PostFilm/TiltShift/FlashPlayer/CharaFootLight/MultiLightShadow 实测都有真实数据(见 ID 15/39/63/66/72/83)
真正确认为空的只有:
hdrBloomKeys、other4EyeTrackKeys、ScreenCaptureDataList、tailMotionDataList(0/59 首)。复查命令:
~/.venvs/umatools/bin/python3 tools/dump_cutt_typetree.py --fields <songid>;全量表在tools/out/scan_summary.txt。
实现状态图例
- ✅ 完整
- ⚠️ 部分实现(有TODO)
- ⚠️🔇 仅数据(无视觉输出)
- 🔴 Bug(声明但从不触发)
- ❌ 未实现
★ = song 1001 有真实数据(括号内条数)
摄像机 / 基础轨道
| ID | 名称 | 作用 | 状态 | Bug |
|---|---|---|---|---|
| 0 | Timescale | 播放倍速 | ✅ Control内部 | — |
| 1 | CameraPos | 主摄像机位置 | ✅ | — |
| 2 | CameraLookAt | 主摄像机朝向 | ✅ | — |
| 3 | CameraFov | 视野角 | ✅ | — |
| 4 | CameraRoll | 摄像机滚转 | ✅ | — |
| 5 | HandShakeCamera | 手持抖动效果 | ❌ | ✅实测 handShakeCameraKeys 56/59首 / 594 keys |
| 6 | Event | 时间轴触发事件 | ❌ | — |
| 7 | CharaMotionSequence ★(5) | 角色动作序列切换 | ✅ | — |
| 8 | BgColor1 ★(13) | 角色和舞台物件的色调/轮廓/阴影颜色 | ⚠️ | 曾误标 ✅。AlterUpdate_BgColor1 原本用 validBgColorNames 只放行 4 个角色组,其余全丢——实测约 92% 的 key 被丢弃(全语料 43617 keys / 59首,是最大的轨道)。2026-08-04 已拆掉过滤并加舞台分支,舞台侧写 _MulColor0(运行时枚举 shader 确认,每个舞台 shader 都有;_AmbientColor 归 BgColor2,两者是同一 shader 上的独立通道)。song 1177 的 20 组里 16 组已正常写入,仍未解析:BgBL(256 keys)、FollowSpotColor(16)、Shadow(2)、mob_00(2) —— 这 4 个不是物件名,疑为全局通道 |
| 9 | BgColor2 ★(1) | 背景渐变/环境色(两色混合)【15/58首】 | ✅ | 写含 _AmbientColor 属性的舞台材质,颜色 = Lerp(color1, color2, value);color2 恒为白色 |
| 10 | MonitorControl ★(2) | LED舞台屏幕内容控制 | ❌ | ✅实测 monitorControlList 55/59首 / 3911 keys。舞台上的黑色大屏就是它没实现导致的:monitor 材质的 _MainTex/_FadeTex/_FilterTex 三个贴图槽在 bundle 里全未绑定,内容靠运行时喂。字段:dispID / speed / outputTextureLabel / blendFactor / Src·DstBlendMode / RenderQueueNo / LightImageNo / CrossFadeRate / FilterTexScale。内容资源已定位:live/uvmovie/gal_uvmovie_<songid>_<001..017>(图片序列,带 _tex_NN),另有 gal_uvmovie_<songid>_light 对应 LightImageNo。全库 219 个 uvmovie 目录。但 dispID→资源的映射未解:song 1177 的 key 是 dispID=1,却既没有 gal_uvmovie_1177_001,也没有 monitorCamera 数据(monitorCameraPosKeys 0 keys),两条路都不通 |
| 11 | CameraSwitcher | 切换活动摄像机 | ✅ | — |
| 12 | LipSync | 口型同步 | ✅ | — |
| 13 | PostEffectDOF | 景深模糊(单机) | ❌ | ✅实测 postEffectDOFKeys 59/59首 / 3879 keys。URP 有内置 DepthOfField,属路径 A |
| 14 | PostEffectBloomDiffusion | 泛光扩散(单机) | ❌ | ✅实测 postEffectBloomDiffusionKeys 59/59首 / 1969 keys |
| 15 | RadialBlur | 径向运动模糊(单机) | ❌ | ✅实测 radialBlurKeys 59/59首 / 1667 keys(单曲最多95)。旧记录「全部0 keyframe」是错的 |
| 16 | CameraLayer | 摄像机渲染层遮罩 | ❌ | ✅实测 cameraLayerKeys 58/59首 / 3306 keys |
| 17 | Projector ★(4) | 舞台投影仪(gobo图案) | ❌ | — |
角色表情 / 动作
| ID | 名称 | 作用 | 状态 | Bug |
|---|---|---|---|---|
| 18 | FacialFace | 面部整体表情 | ✅ AlterUpdate_FacialData | — |
| 19 | FacialMouth | 嘴部表情 | ✅ | — |
| 20 | FacialCheek | 脸颊表情 | ✅ | — |
| 21 | FacialEye | 眼部表情 | ✅ | — |
| 22 | FacialEyebrow | 眉毛 | ✅ | — |
| 23 | FacialEyeTrack | 眼球追踪目标 | ✅ | — |
| 24 | FacialEar | 耳部动画 | ✅ | — |
| 25 | FacialEffect | 表情叠加特效 | ✅ | — |
| 26 | FacialNoise | 表情随机扰动 | ❌ | ✅实测 facialNoiseKeys 存在,50/59首 / 127 keys。旧记录「无字段」是错的 |
| 27 | CharaMotionNoise | 动作随机扰动 | ❌ | ✅实测 charaMotionNoiseKeys 存在,59/59首 / 135 keys。旧记录「无字段」是错的 |
| 28 | FormationOffset | 角色队形位置偏移 | ✅ | — |
| 29 | Animation ★(1) | GameObject Animation组件序列 | ❌ | ✅实测 animationList 39/59首 / 1575 keys(单曲最多218),比 ★(1) 高得多 |
| 30 | TextureAnimation | 材质纹理帧动画 | ❌ | — |
舞台物件
| ID | 名称 | 作用 | 状态 | Bug |
|---|---|---|---|---|
| 31 | Transform | 舞台物件位移/旋转/缩放 | ✅ StageController | — |
| 32 | Renderer | 舞台Renderer启用/禁用 | ❌ | — |
| 33 | Object ★(10) | 舞台GameObject激活/隐藏**+ 位移** | ✅ StageController | 2026-08-04 修了两个静默失效:① 组名可能是 _stageObjectUnits 的单元名而非 GameObject 名(live10149 的 neonsign 就是 unit,底下挂 3 个子对象;没有任何 GameObject 叫 neonsign,整条轨道此前从不触发,灯牌不会从吊顶降下);② OffsetType 字段分发层一直在填但 UpdateObject 从不读,Add 语义被当绝对坐标写,物件被挪到父物体原点。现按 Direct/Add 分别处理,Add 在物件原始 local TRS 上叠加 |
| 34 | Audience ★(12) | 观众人群动画参数 | ❌ | — |
| 35 | Props | 舞台道具激活控制 | ❌ | ✅实测 propsList 28/59首 / 1940 keys(单曲最多567) |
| 36 | PropsAttach | 角色附着道具 | ❌ | ✅实测 propsAttachList 28/59首 / 298 keys |
灯光 / 特效
| ID | 名称 | 作用 | 状态 | Bug |
|---|---|---|---|---|
| 37 | VolumeLight ★(1) | 体积光/SunShafts | ⚠️🔇 | 无SunShafts组件,仅数据。✅实测 volumeLightKeys 58/59首 / 2048 keys |
| 38 | HdrBloom | HDR泛光强度/阈值 | ⚠️🔇 | 0/58首有数据,但已经实现了(Director 有 handler,走 URP Bloom)→ 是本仓库里的死代码,建议删。song 1177 实测 hdrBloomKeys 为空 |
| 39 | PostFilm | 全屏后期叠加(晕影/颜色/UV电影) | ⚠️🔇 | ✅实测三字段全有大量数据:postFilmKeys 59/59首6689 keys、postFilm2Keys 59/59首7290 keys、postFilm3Keys 59/59首6240 keys(song 1177 为 100/161/87)。旧记录「全部0 keyframe」是错的。2026-08-05 已完成数据层:数据类字段按 TypeTree 顺序重排并补齐 5 个 BlinkLight*、新增 LiveTimelineKeyPostFilmDataList、WorkSheet 三字段、AlterUpdate_PostFilm 分发与插值、PostFilmUpdateInfo、PostFilmRendererFeature + Resources/Shaders/PostFilm.shader。渲染层默认关闭(PostFilmRendererFeature._enableRendering = false):song 1177 的 100 个 key 全是 Vignette 变体,而 filmOptionParam(取值如 (0.2,0.05)/(0,0.05)/(0.2,0.25))的几何语义无法从资源中还原 —— 游戏自己的 PostFilm shader 不在 shader bundle 里(499 个 shader 按名字和属性签名都搜过),应在 app 本体的 resources.assets。要继续做只能对着参考视频标定 Width/Strength 两个系数 |
| 40 | Fade | 场景淡入淡出 | ❌ | ✅实测 fadeKeys 59/59首 / 243 keys。量小但覆盖全 |
| 41 | Particle ★(3) | 粒子系统发射速率 | ✅ | — |
| 42 | ParticleGroup ★(3) | 粒子组闪烁速率(双速率曲线) | ✅ | — |
| 43 | WashLight | 洗光灯 SetActive+颜色亮度 | ⚠️ | RaycastDistance/CameraProjectionSide/MulColor0未使用。低优先级:song 1177 仅 1 组 11 keys,真正的"洗光"效果由 ID 45 的 *_wash_* 组承担。字段名 WashLightList(大写 W)已用 A/B 探针确认;上游 katboi01 写作 washLightList,永远填不上,其 WashLightController 是死代码 |
| 44 | Laser | 激光灯变换+SetActive | ⚠️ | blinkRate/blinkOffset/rotateFollowCamera/RaycastDistance未实现。song 1177 该轨道为空 |
| 45 | BlinkLight ★(9) | 频闪灯亮灭周期/颜色/亮度 | ⚠️ | 灯光线最大权重:全语料 19420 keys / 57首;song 1177 实测 27 组,一半以上组名是 *_wash_*。★(9) 是 song 1001 的数字,严重低估。2026-08-04 修:写入属性从 _Color(这些 shader 上不存在,写入是空操作,灯全渲染成黑)改为按存在性探测 _BlinkLightColor/_MulColor0/_Color。仍未解:color0Array/powerArray 恒为 10 项(调色板),与 renderer 数(可达 570)无关,灯→槽位的映射规则未逆出,暂统一取第 0 槽;pattern 语义未逆出,逐灯相位(U闪→M闪→A闪)未实现;color1Array/LightBlendMode/isReverseHueArray 未用。另注意部分 renderer 用 StageTransmittedLightMask/StageMirrorBallShine,shader 里一个 Color 属性都没有,BlinkLight 点不亮(对应未实现的 95/96 TransmittedLight 轨道) |
| 46 | UVScrollLight ★(1) | 材质UV滚动灯光效果 | ⚠️ | mulColor1/ColorType/CharacterIndex等未使用 |
| 47 | FacialToon | 角色卡通着色参数 | ❌ | ✅实测 facialToonSet 59/59首 / 6341 keys(单曲最多600)。未实现轨道里数据量第二大 |
| 48 | GlobalLight ★(2) | 全局光方向/RimLight参数 | ✅ | — |
| 49 | GlobalFog ★(1) | 全局雾效(颜色/密度/范围) | ✅ | — |
| 50 | LightShafts ★(1) | 光轴/丁达尔效果 | ⚠️🔇 | 无LightShaftsController组件,仅数据 |
| 51 | MonitorCameraPos ★(1) | 舞台监控摄像机位置 | ❌ | ✅实测 monitorCameraPosKeys 存在,34/59首 / 964 keys。旧记录「无字段」是错的。用途推测是 LED 大屏的副摄像机实时画面(IMAG),与 ID 10 配套 |
| 52 | MonitorCameraLookAt ★(1) | 舞台监控摄像机朝向 | ❌ | ✅实测 monitorCameraLookAtKeys 存在,34/59首 / 971 keys。旧记录「无字段」是错的 |
| 53 | MultiCameraPos ★(2) | 多机位摄像机位置 | ✅ | — |
| 54 | MultiCameraLookAt ★(2) | 多机位摄像机朝向 | ✅ | — |
| 55 | EyeCameraPos | 眼部特写摄像机位置 | ❌ | — |
| 56 | EyeCameraLookAt | 眼部特写摄像机朝向 | ❌ | — |
| 57 | LensFlare | 镜头光晕 | ❌ | ✅实测 lensFlareList 45/59首 / 993 keys(单曲最多181)。舞台用 CustomLensFlare 脚本无源码;可先做 SetActive 层 |
| 58 | Environment ★(1) | 地板镜面反射/水面波纹/阴影/FovShift | ❌ | ✅实测 environmentDataLists 49/59首 / 1375 keys。注意 schema 里另有独立字段 MirrorReflectionDataList,两者不是一回事(上游 katboi01 把它俩混为一谈,按 name 分流)。核心是 Planar Reflection,工程量大 |
| 59 | SweatLocator ★(3) | 角色汗珠特效挂点 | ❌ | ✅实测 sweatLocatorList 存在,32/59首 / 608 keys。旧记录「无字段」是错的 |
| 60 | Effect ★(8) | 特效Prefab加载/播放(3d/effect/live/) | ✅ | — |
| 61 | ColorCorrection | 色彩校正(饱和度/RGB曲线) | ⚠️ | depthRedCurve/Green/Blue/blendCurve/mode/selective/keyColor/targetColor无URP对应 |
| 62 | PreColorCorrection | 前置色彩校正 | ❌ | — |
| 63 | TiltShift | 移轴模糊 | ❌ | ✅实测 tiltShiftKeys 58/59首 / 1202 keys(单曲最多127)。旧记录「全部0 keyframe」是错的 |
| 64 | A2U | 内部动作系统参数 | ❌ | 非视觉轨道 |
| 65 | A2UConfig | A2U配置 | ❌ | 非视觉轨道 |
| 66 | FlashPlayer | 全屏闪光播放 | ❌ | ✅实测 flashPlayerKeys 20/59首 / 50 keys。旧记录「全部0 keyframe」是错的,但确实量小 |
| 67 | Title | 歌曲名字幕显示 | ❌ | ✅实测 titleKeys 55/59首 / 137 keys |
| 68 | Spotlight3d ★(3) | 3D聚光灯 SetActive+颜色/强度 | ✅ | — |
| 69 | CharaNode | 角色骨骼节点位置控制 | ❌ | — |
| 70 | NodeScale ★(2) | 舞台节点缩放 | ❌ | ✅实测 nodeScaleList 存在,57/59首 / 541 keys。旧记录「无字段」是错的,且覆盖率远高于原估计 |
| 71 | Fluctuation | 画面波动/震颤效果 | ❌ | ✅实测 FluctuationKeys 51/59首 / 330 keys |
| 72 | CharaFootLight | 角色脚部补光灯 | ❌ | ✅实测 charaFootLightKeys 49/59首 / 340 keys。旧记录「全部0 keyframe」是错的 |
| 73 | ChromaticAberration ★(1) | 色差后处理 | ⚠️ | redOffset/greenOffset/blueOffset(通道偏移)无URP内置对应;effectType未使用 |
| 74 | LightProjection ★(18!) | 投影灯(Gobo图案灯) | ❌ | ✅实测 lightProjectionList 37/59首 / 3793 keys(单曲最多566)。URP 下 Projector 组件不工作,需 DecalProjector 或自写 |
| 75 | Billboard | 广告牌(始终面向摄像机的面片)【12/58首】 | ❌ | — |
多机位后处理
| ID | 名称 | 作用 | 状态 | Bug |
|---|---|---|---|---|
| 76 | MultiCameraPostFilm ★(2) | 多机位全屏后期叠加 | ❌ | ✅实测 postFilm1MultiCameraKeys 51/59首 / 708 keys |
| 77 | MultiCameraPostEffectBloomDiffusion ★(2) | 多机位泛光 | ❌ | ✅实测 postEffectBloomDiffusionMultiCameraKeys 存在,49/59首 / 381 keys。旧记录「无字段」是错的 |
| 78 | MultiCameraColorCorrection | 多机位色彩校正 | ❌ | — |
| 79 | MultiCameraTiltShift | 多机位移轴模糊 | ❌ | — |
| 80 | MultiCameraRadialBlur | 多机位径向模糊 | ❌ | — |
| 81 | MultiCameraPostEffectDOF | 多机位景深 | ❌ | — |
附加灯光 / 系统
| ID | 名称 | 作用 | 状态 | Bug |
|---|---|---|---|---|
| 82 | AdditionalLight | 附加动态光源【22/58首】 | ❌ | — |
| 83 | MultiLightShadow | 多光源阴影 | ❌ | ✅实测 MultiLightShadowKeys 37/59首 / 183 keys。旧记录「全部0 keyframe」是错的 |
| 84 | MobControl ★(4) | 观众人群行为/动画控制 | ❌ | ✅实测 MobControlKeys 存在,32/59首 / 2392 keys(单曲最多495)。旧记录「无字段」是错的 |
| 85 | CyalumeControl ★(4) | 荧光棒颜色/同步控制 | ❌ | ✅实测 CyalumeControlKeys 存在,33/59首 / 2372 keys(单曲最多496)。旧记录「无字段」是错的。CyalumeController3D.cs 已存在,只差接时间轴 |
| 86 | CameraMotion | 摄像机动作曲线轨道 | ❌ | — |
| 87 | WaveObject | 波浪变形物体 | ❌ | — |
| 88 | CharaWind | 角色风效(头发/裙摆) | ❌ | ✅实测 charaWind 24/59首 / 744 keys |
| 89 | CharaParts | 角色部件显隐控制 | ❌ | — |
| 90 | CameraCutNo | 镜头编号标记(元数据) | ❌ | — |
| 91 | ToneCurve | 色调曲线(ACES/自定义) | ❌ | — |
| 92 | Exposure | 曝光值控制 | ❌ | — |
| 93 | Vortex | 旋涡/扭曲屏幕效果 | ❌ | — |
| 94 | CharaCollision | 角色碰撞辅助(非视觉) | ❌ | — |
| 95 | TransmittedLight | 透射光(次表面散射) | ❌ | — |
| 96 | TransmittedLightMask | 透射光遮罩 | ❌ | — |
| 97 | Voice | 语音切换控制 | ❌ | — |
| 98 | LipSyncPatternRange | 口型模式范围定义 | ❌ | ✅实测 LipSyncPatternRangeKeys 存在 |
| 99 | LipSyncPattern | 口型模式数据 | ❌ | ✅实测 LipSyncPatternDataList 存在 |
| 100 | LensDistortion | 镜头桶形/枕形畸变 | ❌ | — |
| 101 | CharaNodeOffset | 角色骨骼节点偏移 | ❌ | — |
| 102 | TransparentCamera | 透明度摄像机控制 | ❌ | — |
统计摘要
| 状态 | 数量 |
|---|---|
| ✅ 完整 | 21 |
| ⚠️ 部分实现 | 7 |
| ⚠️🔇 仅数据 | 2 |
| 🔴 Bug(已修) | 1 |
| ❌ 未实现 | 72 |
已知未解问题(2026-08-05)
按「是否有 ground truth」分类。缺依据的一律不实现,代码里保留 TODO 注释而不是猜一个值上去。
有依据、可以直接做
| 问题 | 依据 |
|---|---|
槽位号 = 渲染器自身或最近祖先的 lightNNN_/alphaNNN_ 名字前缀。live10149 全组实测「前缀种数 N」与「槽 0..N-1 的去重颜色数」精确相等,槽 N..9 一律白色填充,7 组无一例外。此前统一取第 0 槽,于是镜面球整个发粉红、truss wash 丢掉黄绿蓝紫四色 |
|
BlinkLight pattern 语义 |
实测有 0 和 2 两种;相位公式是推测,pattern != 0 时按 cycle * i / N 错开 |
| BgColor1 剩余 4 组 | BgBL(256 keys) / FollowSpotColor(16) / Shadow(2) / mob_00(2) 不是物件名也不是材质名 |
BgColor1 的 power → _ColorPower? |
_ColorPower 属性确实存在,但映射关系无证据,已撤回 |
缺 ground truth,已禁用
| 问题 | 为什么查不到 |
|---|---|
| 舞台自带 Animation 的播放(283 个组件,全曲全场景不播) | 见下方专条 |
PostFilm 的 filmOptionParam 几何语义 |
游戏自己的 PostFilm shader 不在 shader bundle(499 个按名字和属性签名都搜过),应在 app 本体 resources.assets |
MonitorControl 的 dispID → 资源 |
内容资源族已定位为 live/uvmovie/gal_uvmovie_<songid>_<NNN>(全库 219 个目录),但 song 1177 只有 _light 没有 _001,且 monitorCameraPosKeys 为 0,两条路都不通 |
专条:舞台自带 Animation 为什么不播(2026-08-07 决定撤除实现)
现状:舞台上 283 个 legacy Animation 组件一个都不播,这是有意的,不是漏了。
迪斯科灯球不转、wash 灯不扫、霓虹灯牌不动,都属于这一条。
机制:这些组件全部 playAutomatically = true,但默认 clip(m_Animation)全是空的。
Unity 的 playAutomatically 播的是默认 clip,为空就什么都不播 —— 原版靠
Gallop.Live.AnimationObjectController 显式 Play("clip名")。
为什么补不了:AnimationObjectController 实测 282 个实例、零序列化字段。
它是纯行为类,「播哪个 clip / 该不该播 / 播多快」全在方法体里,而方法体随 IL2CPP 元数据
一起拿不到(见 CLAUDE.md → Blocked)。按原签名重建它拿不到任何信息 ——
这条路是死的,别被 282 这个实例数勾回去。
素材本身是全可读的,这正是容易上当的地方:clip 曲线、时长、wrapMode 全能 dump。
例如镜面球那条是恒定 −179.50°/s 绕 Y、2.0 s 一圈;wash_ground 那条是 swing_* 节点
90°→0°→90°、2.0 s 一个来回、12 盏同步。但「素材是什么」推不出「原版何时以何速播它」。
试过一版替代品 StageAnimationPlayer,已整体撤除。 它的策略是「只有一个 clip 就播」,
错在把「这物件只有一个状态」当成了「这个状态一直在播」—— 后者恰恰是那个缺失的类
每帧做的决定。实机后果:一排地面 wash 灯 2 秒一个来回疯狂摆头(原版是不扫只闪),
镜面球虽然该转但转速无从校验。缩到最后它只让一颗球转,且转得对不对说不清 ——
一个转错的替代品比不转更糟:既错,又让人以为这块已经做过了。
唯一值得留下的结论(将来任何人重做都适用):
驱动舞台动画不要用 Animation.Play() —— 那跑 Unity 自己的时钟,live 暂停时舞台照转、
拖动进度条不跟随。正确做法是每帧把 AnimationState.time 设成
LiveTimelineControl.currentLiveTime(单位是秒)再 Sample(),与演出时间同源。
什么条件下可以重做:拿到参考视频逐首标定(属于经验值,不是 ground truth,且大概率
一舞台一套),或者 IL2CPP 元数据解锁(见 CLAUDE.md → Blocked)。在那之前不做。
与时间轴无关的渲染问题
| 现象 | 状态 |
|---|---|
| 舞台地板长期偏亮发白 | ✅ 2026-08-06 解决。白的不是文档里记的那三个物件 —— 是与 plane_000 同位同尺度、叠在一起的 mirror_a(同在 pfb_env_live10149_main000 下,局部变换全为单位)。它用 Cygames/MirrorAndShadow/ReceiveMirror,_ReflectionRate 默认 1.0 而 _ReflectionTex 从没赋值,Unity 对未绑定采样器代入白贴图 = 满强度白反射。实现 Gallop.MirrorReflection 接上反射 RT 后恢复正常。教训见 CLAUDE.md「现象描述不是 ground truth」:整轮排查都围着文档里那三个名字转,那个「_EnvRate 归零无变化」的实验切的是另一批物件 |
| 小灯泡渲染成黑块 / 光柱变实心黑墙 | 🔧 2026-08-07 找到根因并已修(待实机确认):Gallop 发光类 shader 的混合状态写作 Blend [_SrcBlend] [_DstBlend],从材质属性读;而 live10149 26/26 个材质都被盖上了 URP Lit 的属性表,_DstBlend 是 URP Lit 不透明预设的 Zero。全库 16 个声明该属性的 shader 里 14 个作者默认是 One/One(加法),于是凡是当前 shader 真读这两个属性的光柱/闪光/投影都被按不透明画 —— 加法下「颜色为黑=不可见」变成了「实心黑墙」。StageController.RestoreAuthoredBlendState() 已把这两个属性恢复成 shader 声明的默认值,实机确认修复。⚠ 两个方向都别照抄数字:受害材质比存档表窄(31 个里只有 1 个真被 shader 读到 —— mtl_env_live10149_blinklight000 / LightBlinkBlend,_DstBlend 0→1,其余存的是无人问津的过期条目);但受害渲染器远比「1 个材质」多 —— 材质高度共享,那一个铺满 27 个 BlinkLight 组约 1450 个渲染器,所以「小灯泡渲染成黑块」和地面 wash 黑楔子是同一个根因,实机确认一并修好。注:StageTransmittedLightMask/StageMirrorBallShine 无颜色属性是另一回事,仍未解 |
| LED 大屏黑屏 | MonitorControl (10) 未实现,见上 |
优先级排序
2026-08-04 用 tools/ 全量重测后重排。 依据 = 实测数据量 × 覆盖率 × 工作性质。
全量表:tools/out/scan_summary.txt。
第一优先:数据早就在手,只是没用上(性价比最高)
| 轨道 | 实测数据量 | 难度 | 说明 |
|---|---|---|---|
| BgColor1 (8) 舞台分支 | 43617 keys / 59首 | ★☆☆~★★☆ | 全语料最大的轨道。分发过滤已拆,剩下确认舞台侧 shader 属性 |
| BlinkLight (45) 补字段 | 19420 keys / 57首 | ★★☆ | 灯光线最大权重,含全部 *_wash_* 效果 |
| Laser (44) / UVScrollLight (46) 补字段 | 2661 keys / 33首 | ★☆☆ | 纯管道 |
第二优先:URP 后处理 Feature(路径见 live-shader-todo.md)
| 轨道 | 实测数据量 | 路径 |
|---|---|---|
| PostFilm (39) | ~20200 keys / 59首(三个字段合计) | B,最大的一块 |
| PostEffectDOF (13) | 3879 keys / 59首 | A(URP 内置 DepthOfField) |
| VolumeLight/SunShafts (37) | 2048 keys / 58首 | B,数据类已有,字段表齐全 |
| PostEffectBloomDiffusion (14) | 1969 keys / 59首 | B |
| RadialBlur (15) | 1667 keys / 59首 | B |
| TiltShift (63) | 1202 keys / 58首 | B |
第三优先:只差 C# 字段声明 + handler(bundle 里数据齐备)
FacialToon(47, 6341 keys/59首) > MonitorControl(10, 3911/55首,dispID 语义仍未知) > CameraLayer(16, 3306/58首) > MobControl(84, 2392/32首) > CyalumeControl(85, 2372/33首,CyalumeController3D.cs 已存在) > Props(35, 1940/28首) > Animation(29, 1575/39首) > MonitorCameraPos/LookAt(51/52, ~1900/34首) > CharaWind(88, 744/24首) > AdditionalLight(82, 657/23首) > SweatLocator(59, 608/32首) > NodeScale(70, 541/57首) > Fluctuation(71, 330/51首) > CharaFootLight(72, 340/49首) > Fade(40, 243/59首) > Title(67, 137/55首) > FacialNoise(26)/CharaMotionNoise(27)
第四优先:要从零搭渲染系统 ★★★
LensFlare(57, 993/45首) 应当从这一档移到第一档 —— 2026-08-07 dump 确认它不需要「从零搭」:CustomLensFlare 的 Flare 指向 Gallop.RenderPipeline.LensFlareData(可按签名重建的 ScriptableObject),字段是 Unity legacy Flare 的逐字翻版,URP 侧有 LensFlareComponentSRP 现成对应。
LightProjection(74, 3793/37首,URP 下 Projector 不工作) > Environment(58, 1375/49首,注意还有独立的 MirrorReflectionDataList;Planar Reflection 本身已不用从零搭 —— Gallop.MirrorReflection 已实现,缺的是把轨道关键帧接上去)
MirrorBallProjector不在此列但值得记一笔:它是卡住而不是没做。shader 需要_MirrorBallPosWS/_MirrorBallScale/_MirrorBallRotateValue,而组件里没有任何指向灯球的 引用字段,4 个 projector 全在原点且共用一个材质 —— 绑定关系只存在于拿不到的方法体里。 顺带:灯球转速已不是未知(clip 恒定 −179.50°/s,见LIVE_DEV_MAP.md)。
不该做
HdrBloom (38) —— 0/59 首,却已经实现了,是死代码,建议删。
其余确认为空:other4EyeTrackKeys、ScreenCaptureDataList、tailMotionDataList。
A2U / A2UConfig / CameraCutNo —— 非视觉轨道。
之前「PostFilm 到底有没有数据」的矛盾已解决:
live-shader-todo.md是对的,本文件旧版记的「全部 0 keyframe」是错的。