docs: bring the maps up to where the code actually is
Several rows had gone stale, and two of them were actively misleading — the kind that sends
the next session down a path that has already been closed.
Corrected claims:
* "LensFlare — UmaBuild has no source" is wrong. Rebuilding a class from its signature gets
the real serialized fields; only the method bodies are unrecoverable. The row is marked as
a correction rather than quietly edited, because it is the assumption that kept 892
MonoBehaviour slots written off as unreachable.
* "Environment (58) — planar reflection does not exist at all" is no longer true.
MirrorReflection implements the whole second-camera -> RT -> mirror-shader path; what the
track still needs is its keyframes routed into it, which is a much smaller job than the
"build a rendering system from scratch" tier it was filed under.
* The floor blow-out and the BlinkLight palette slot mapping are both listed as open
problems in LIVE_TRACKS.md. Both are solved; the slot rule is recorded (slot = the
lightNNN_/alphaNNN_ prefix of the renderer or its nearest ancestor), and the floor entry
keeps the fact that the symptom belonged to a different object than the one documented,
since that is the reusable part.
* The audit's C4 row still said "located to DefaultEnvMapNoAmbient, diagnostic added", which
the section below it had already overturned.
Added: the stage-script table now carries per-class status, so the two that are built are
distinguishable from the eight that are not; what a rebuilt signature does and does not give
you (MirrorReflection got behaviour because the receiving shader was identifiable,
BillboardController stopped at data because _rotationType is an enum); StageAnimationPlayer
and why it samples currentLiveTime instead of calling Animation.Play(); the shared property
block convention and the Get -> modify -> Set rule that goes with it; HdrBloom marked as
deliberately handler-less rather than "safe to delete".
The audit gains a closing section for the work that came after it, and its suggested order now
records which items landed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UzXXkLzVC8pNA3JjyUGMbq
This commit is contained in:
@@ -90,6 +90,15 @@ StageController.cs ← manages stage GameObjects, StageObjectMap
|
||||
|
||||
**Brightness is a separate channel — do not fold it into the colour.** Write the key's colour to the colour property and its `power` to `_ColorPower`; let the shader combine them. Only fall back to `colour * power` where `_ColorPower` is absent (`BgMirrorBall`).
|
||||
|
||||
**Writing shader properties: one shared block, always Get → modify → Set.** All of `Director`'s
|
||||
handlers write through the single `PropBlock` (`Director._propBlock`) and must call
|
||||
`renderer.GetPropertyBlock(block)` first — `SetPropertyBlock()` **replaces** the block rather than
|
||||
merging, so a handler that starts from an empty block wipes whatever another track wrote to the
|
||||
same renderer earlier in the same frame. That is exactly how GlobalLight was silently dead for
|
||||
59/59 songs (BgColor1's character branch runs right after it and cleared all 13 rim properties).
|
||||
Never `new MaterialPropertyBlock()` per frame, and never write `_Color` without first checking the
|
||||
target shader's real property table — three separate tracks shipped no-op colour writes that way.
|
||||
|
||||
Dump any shader's real property table with:
|
||||
|
||||
```python
|
||||
@@ -141,22 +150,42 @@ MonoBehaviour 实例脚本为空。**但这些脚本是可以「接管」的**
|
||||
|
||||
签名清单(`Assets/Scripts/` 下任意位置均可,只要在 umamusume 程序集内):
|
||||
|
||||
| namespace | 类 | live10149 实例数 |
|
||||
|---|---|---|
|
||||
| `Gallop.Live` | `AnimationObjectController` | 282 |
|
||||
| `Gallop.Live` | `BillboardController` ✅已建 | 164 |
|
||||
| `Gallop.Live` | `UnityLensFlareController` | 205 |
|
||||
| `Gallop.Live` | `WashLightController` | 27 |
|
||||
| `Gallop.Live` | `LightProjection` | 4 |
|
||||
| `Gallop.RenderPipeline` | `CustomLensFlare` | 200 |
|
||||
| `Gallop.RenderPipeline` | `MirrorBallProjector` | 4 |
|
||||
| `Gallop.RenderPipeline` | `CustomProjector` | 4 |
|
||||
| `Gallop` | `MirrorReflection` | 1 |
|
||||
| `Gallop.Live.ShaderParam` | `ShaderParamController` | 1 |
|
||||
| namespace | 类 | live10149 实例数 | 状态 |
|
||||
|---|---|---|---|
|
||||
| `Gallop.Live` | `AnimationObjectController` | 282 | ❌(动画播放已由 `StageAnimationPlayer` 顶上,见下)|
|
||||
| `Gallop.Live` | `UnityLensFlareController` | 205 | ❌ |
|
||||
| `Gallop.Live` | `BillboardController` | 164 | ✅ 已建(字段已读到,朝向行为待定)|
|
||||
| `Gallop.Live` | `WashLightController` | 27 | ❌ |
|
||||
| `Gallop.Live` | `LightProjection` | 4 | ❌ |
|
||||
| `Gallop.RenderPipeline` | `CustomLensFlare` | 200 | ❌ |
|
||||
| `Gallop.RenderPipeline` | `MirrorBallProjector` | 4 | ❌ |
|
||||
| `Gallop.RenderPipeline` | `CustomProjector` | 4 | ❌ |
|
||||
| `Gallop` | `MirrorReflection` | 1 | ✅ 已建并实现(平面镜反射,见下)|
|
||||
| `Gallop.Live.ShaderParam` | `ShaderParamController` | 1 | ❌ |
|
||||
|
||||
字段名必须和 TypeTree 逐字一致(大小写敏感),dump 一下即可。
|
||||
这条同样适用于任何其它 bundle 里的 MonoBehaviour。
|
||||
|
||||
**重建签名只拿得到数据,拿不到方法体。** 两个已建的类正好是两种情形:
|
||||
|
||||
- `MirrorReflection`(`Assets/Scripts/umamusume/Gallop/MirrorReflection.cs`)—— 接收端能
|
||||
自己查出来,所以能补完行为:宿主 `mirror_a` 的材质用 `Cygames/MirrorAndShadow/ReceiveMirror`,
|
||||
该 shader 只有 `_MainTex`/`_ReflectionTex`/`_Color`/`_ReflectionRate`,而组件字段
|
||||
`_mirrorReflectionColor`/`_mirrorReflectionRate` 与后两者逐字对应。实现方式是第二摄像机
|
||||
+ 反射矩阵 + 斜投影渲进 RT 再写回 `_ReflectionTex`(URP 下不能用 `Camera.Render()`,
|
||||
必须挂 `beginCameraRendering` 拿 `ScriptableRenderContext` 后 `RenderSingleCamera`)。
|
||||
这同时解决了长期的「地板发白」——`_ReflectionTex` 未绑定时 Unity 代入白贴图,
|
||||
而 `_ReflectionRate` 默认 1.0,等于满强度白反射。
|
||||
- `BillboardController` —— 字段读到了,但 `_rotationType` 是枚举,语义随 IL2CPP 元数据一起
|
||||
拿不到,所以只有数据、没有行为。这是「重建签名」的能力边界。
|
||||
|
||||
**舞台自带 Animation 的播放**(`StageAnimationPlayer`,顶替缺失的 `AnimationObjectController`):
|
||||
283 个 `Animation` 组件全部 `playAutomatically = true` 但默认 clip 为空,Unity 因此什么都不播。
|
||||
只接管**唯一解**的情形(1 个 clip,live10149 上 4 个对象);3 个 / 5 个 clip 的状态机选择规则
|
||||
没有依据,只打日志不猜。播放不走 `Animation.Play()` —— 那用的是 Unity 自己的时钟,暂停和拖动
|
||||
进度条都会脱节;改为每帧按 `LiveTimelineControl.currentLiveTime` 设 `AnimationState.time` 再
|
||||
`Sample()`,与演出时间同源。
|
||||
|
||||
### Blocked
|
||||
|
||||
**IL2CPP 元数据拿不到。** 游戏是 IL2CPP 构建,但 `global-metadata.dat` 既不在
|
||||
@@ -235,9 +264,9 @@ Open items and why each is blocked are tracked in `LIVE_TRACKS.md` → 「已知
|
||||
| Particle (41) | `LiveTimelineParticleData` | sets ParticleSystem.emission.rateOverTime |
|
||||
| ParticleGroup (42) | `LiveTimelineParticleGroupData` | sets FlickerLightRate |
|
||||
| ChromaticAberration (73) | `LiveTimelineChromaticAberrationData` | URP `ChromaticAberration.intensity` ← `power`;per-channel offset 无法映射 |
|
||||
| HdrBloom (38) | `LiveTimelineHdrBloomData` | **dead code** — 0/58 songs carry data (`hdrBloomKeys` empty in every scan and in the song-1177 dump). Safe to delete. |
|
||||
| HdrBloom (38) | `LiveTimelineHdrBloomData` | **no handler, deliberately** — 0/58 songs carry data (`hdrBloomKeys` empty in every scan and in the song-1177 dump), and the field→URP-`Bloom` mapping was never verifiable. Data layer (data class, worksheet field, event) is kept; the Director handler and the `Bloom` volume override were removed 2026-08-07. |
|
||||
| ColorCorrection (61) | `LiveTimelineColorCorrectionData` | URP `ColorAdjustments.saturation` + `ColorCurves` RGB;depth/blend curve 无 URP 对应 |
|
||||
| BlinkLight | `LiveTimelineBlinkLightData` | SetActive + child Light color/intensity (56/58 songs). **Biggest lighting payload by far** — 全语料 19420 keys / 57 songs, and over half are named `*_wash_*` (`wash_truss_a` 147, `wash_truss_b` 147, `wash_ground_a` 51, …). `color1Array` / `LightBlendMode` / `isReverseHueArray` still unused. |
|
||||
| BlinkLight | `LiveTimelineBlinkLightData` | SetActive + writes `_BlinkLightColor`/`_ColorPower` on the group's renderers (56/58 songs). **Biggest lighting payload by far** — 全语料 19420 keys / 57 songs, and over half are named `*_wash_*` (`wash_truss_a` 147, `wash_truss_b` 147, `wash_ground_a` 51, …). Palette slot = the `lightNNN_`/`alphaNNN_` prefix of the renderer or its nearest ancestor; renderers with no prefix are left to their real owner (BgColor1) when the group has slotted ones. `color1Array` / `LightBlendMode` / `isReverseHueArray` still unused. |
|
||||
| WashLight | `LiveTimelineWashLightData` | SetActive only (5/58 songs). Low value: real "wash light" output comes from the BlinkLight `*_wash_*` groups above, not this track — song 1177 has just 1 group / 11 keys here. |
|
||||
| Laser | `LiveTimelineLaserData` | SetActive + position/rotation/scale — blink/raycast not implemented (6/58 songs) |
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
| B1–B4 | 每帧 `r.materials` / 全场景遍历 / 每帧 new MPB | ✅ 随 A1–A3 一并修掉(Wash/Laser 的 `r.materials` 仍在,属 ⚠️ 轨道,未动) |
|
||||
| C1 | GlobalFog 把高度雾当距离雾 | ❌ 未动,需先做语料统计定方案 |
|
||||
| C2 | 初始化时同名子物件只有第一个被关,且没人再打开 | ✅ 已修(**前两稿的诊断都是错的**,见下文) |
|
||||
| C4 | 舞台地板 / 高光面发白 | 🔍 已定位到 `DefaultEnvMapNoAmbient` 的 `_EnvMap`/`_EnvRate`;只剩「运行时贴图有没有解析出来」一个未知项,已加 `StageEnvMapDiag` 打印 |
|
||||
| C4 | 舞台地板 / 高光面发白 | ✅ 已解决 —— 但**排查对象从头到尾都错了**:白的是叠在同位置的 `mirror_a`,不是 `DefaultEnvMapNoAmbient` 那三个物件。实现 `Gallop.MirrorReflection` 后正常。诊断用的 `StageEnvMapDiag`/`StageEnvRateToggle`(F9)验证假设不成立后已于 2026-08-07 删除 |
|
||||
| C3 | ParticleGroup 覆盖 Particle | ❌ 未动,优先级低 |
|
||||
|
||||
**均未经实机验证** —— 环境里没有 Unity,也没有 C# 编译器,只做了括号配平和符号引用检查。
|
||||
@@ -454,6 +454,10 @@ URP Lit 的属性(`_WorkflowMode`、`_Smoothness`、`_ClearCoatMask`、`_Blend
|
||||
> 发白消失 → 就是 env 反射项;发白照旧 → env 路径无关。
|
||||
> 已实现为 `StageEnvRateToggle`(按 **F9** 在「原始值 ↔ 0」间来回切,走 MPB 不动材质,
|
||||
> 随 `StageEnvMapDiag.Dump()` 自动挂上)。
|
||||
>
|
||||
> **2026-08-07:这两个诊断类已删除。** 判决实验做完了、结论是「env 路径无关」,
|
||||
> 而真正的成因(`mirror_a`)也已查明并修复,它们没有留下来的理由 ——
|
||||
> 留着只会让每次载入舞台都多跑一遍无用的全场景遍历,还挂一个 F9 热键。
|
||||
|
||||
**候选 B(可能相关,未证实):缺失的平面镜面反射系统**
|
||||
|
||||
@@ -525,6 +529,24 @@ F9 实测。日志确认开关确实生效(9 次切换 × 3 个渲染器,`[E
|
||||
前 4 项之后建议重跑 `LiveTimelineWorksheetDiag.Dump()` 对照歌曲 1177 与 1006,
|
||||
确认组名解析命中率,再更新 `LIVE_DEV_MAP.md` 里这几行的 ✅/⚠️ 标记。
|
||||
|
||||
**进度(2026-08-07)**:1(A1)、2(A2,部分)、3(A3)、4(C2)、5(A4)均已落地,
|
||||
A5 一并做掉;剩 6(B 类残余:WashLight/Laser 的 `r.materials`)与 7(C1 / C3,都需要先做语料统计)。
|
||||
|
||||
---
|
||||
|
||||
## 审计之后(2026-08-06 ~ 08-07)
|
||||
|
||||
审计只覆盖了「已标 ✅ 的轨道对不对」。这两天做的是另一类问题 —— **舞台侧原版脚本缺失**,
|
||||
以及随之而来的一次代码整理。
|
||||
|
||||
| 事项 | 结果 |
|
||||
|---|---|
|
||||
| 舞台 Animation 全都不播 | 283 个 `Animation` 组件 `playAutomatically = true` 但默认 clip 为空,Unity 什么都不播;原版靠 `AnimationObjectController` 显式 `Play("clip名")`。已由 `StageAnimationPlayer` 顶上,**只接管单 clip 的唯一解情形**(4 个对象),3/5 个 clip 的状态机选择规则没依据,只打日志 |
|
||||
| 按签名重建原版脚本 | 打通了。类名 + namespace + 程序集名对上就能让 Unity 真正反序列化字段 —— `BillboardController` 令 `[StageScripts]` 丢失数 892→728(正好 −164)。**但只拿得到数据,拿不到方法体**:`_rotationType` 的枚举语义随 IL2CPP 元数据一起没有 |
|
||||
| 地板发白(C4) | 查明是 `mirror_a`,实现 `Gallop.MirrorReflection` 后解决。详见 C4 条目 —— 这条的过程比结论值钱 |
|
||||
| BlinkLight 调色板槽位 | 槽位号 = `lightNNN_`/`alphaNNN_` 名字前缀,7 组实测无一例外。顺带修掉镜面球球体被 BlinkLight 涂成粉红的问题(`_MulColor0` 是 BgColor1 的通道,BlinkLight 排在它之后,抢了) |
|
||||
| 代码整理 | 六个各自为政的 `MaterialPropertyBlock` 字段合成一个共享块(用法本来就是 Get→改→Set,不带跨帧状态);`ResolveStageTargets` 的四个诊断实例字段改成显式返回的 `StageResolveReport`;effect 载入、vocal 音源解析、VMD 的 FOV 标记三处重复各去掉一份;`StageEnvMapDiag`/`StageEnvRateToggle` 删除;HdrBloom 的 handler 与 `Bloom` volume override 撤掉(全语料 0 keys,映射也没核实过)|
|
||||
|
||||
---
|
||||
|
||||
## 附:本次用到的验证命令
|
||||
|
||||
+23
-6
@@ -45,7 +45,7 @@ Toon shader 已移植,卡住的主要是全屏后处理和几个逆向未完
|
||||
| Transform (31) | ✅ | position / rotation / scale。2026-08-05 修:原先只查 `StageObjectUnitMap`,组名是 GameObject 名(son1028 的 `light001_glow_001`)时整条轨道静默失效,12 首 / 681 keys 从未生效 |
|
||||
| WashLight (43) | ⚠️ | `SetActive`(颜色/投影未做) |
|
||||
| Laser (44) | ⚠️ | `SetActive` + transform(blink 未做) |
|
||||
| BlinkLight (45) | ⚠️ | `SetActive` + 写 Renderer 的 `_BlinkLightColor`/`_ColorPower`(color1Array/BlendMode 未做) |
|
||||
| BlinkLight (45) | ⚠️ | `SetActive` + 写 Renderer 的 `_BlinkLightColor`/`_ColorPower`。2026-08-05 补:**调色板槽位映射已逆出** —— 槽位号 = 渲染器自身或最近祖先的 `lightNNN_`/`alphaNNN_` 名字前缀,live10149 每组「前缀种数」与「调色板去重颜色数」精确相等;组内无前缀的渲染器(镜面球球体等)留给它真正的所有者 BgColor1,不再被涂成粉红。剩 color1Array/BlendMode 未做 |
|
||||
| Spotlight3d (68) | ✅ | `SetActive` + 写 Renderer 颜色属性(**不是** Unity `Light`)。2026-08-05 修:原先写 `_Color`,而 `Gallop/3D/Live/Stage/*` 下**没有任何 shader** 声明该属性(133 个全枚举过),颜色写入一直是空操作;灯柱是 `StageBeamLight` 系列 → `_MulColor0` + `_ColorPower`,改用 BlinkLight 的 shader 探测 |
|
||||
| Effect (60) | ✅? | `Instantiate` prefab |
|
||||
|
||||
@@ -86,8 +86,22 @@ Toon shader 已移植,卡住的主要是全屏后处理和几个逆向未完
|
||||
|------|------|
|
||||
| ChromaticAberration (73) | ⚠️ intensity 完成,通道偏移无 URP 对应 |
|
||||
| ColorCorrection (61) | ⚠️ saturation 完成,depth/blend curve 无 URP 对应 |
|
||||
| HdrBloom (38) | ❌ 0/58 首无数据,无需实现 |
|
||||
| PostFilm (39) / RadialBlur (15) / TiltShift (63) / SunShafts (37) | ❌ 见后处理 TODO |
|
||||
| HdrBloom (38) | ❌ 0/58 首无数据。2026-08-07 起**连 handler 和 Bloom override 一并撤掉**,只留数据层 |
|
||||
| PostFilm (39) | ⚠️ 数据层已通(三条轨道 → `PostFilmRendererFeature.Layers`),Feature 已注册进 Renderer 资产但 `_enableRendering = false` —— 定义 vignette 几何的 shader 不在任何 bundle 里,开着只会画错 |
|
||||
| RadialBlur (15) / TiltShift (63) / SunShafts (37) | ❌ 见后处理 TODO |
|
||||
|
||||
### 舞台自带脚本(原版 MonoBehaviour,按签名重建)
|
||||
|
||||
`Assets/Scripts/umamusume.asmdef` 的程序集名与 bundle 里写的 `umamusume` 一致,所以按
|
||||
**类名 + namespace + 程序集名** 建类就能让 Unity 把原版的序列化字段真正填进来。
|
||||
清单和实例数见 `CLAUDE.md`「用原签名重建脚本」。
|
||||
|
||||
| 脚本 | 状态 |
|
||||
|------|------|
|
||||
| `Gallop.MirrorReflection` | ✅ 已建并实现。第二摄像机 + 反射矩阵 + 斜投影 → RT → `_ReflectionTex`。**顺带解决了长期的「舞台地板发白」** —— `mirror_a` 的 `_ReflectionTex` 从没被赋值,Unity 代入白贴图 × 默认 `_ReflectionRate = 1.0` |
|
||||
| `Gallop.Live.BillboardController` | ⚠️ 已建,字段可读(`[StageScripts]` 丢失数 892→728),但 `_rotationType` 枚举语义随 IL2CPP 元数据一起拿不到,行为未实现 |
|
||||
| `Gallop.Live.AnimationObjectController` | ⚠️ 未建;其最直接的后果(283 个 `Animation` 一个都不播)已由 `StageAnimationPlayer` 顶上:只接管单 clip 的唯一解情形,按 `currentLiveTime` 采样而不是 `Animation.Play()`,暂停/拖动进度条都跟随 |
|
||||
| 其余 7 个 | ❌ 未建,见 `CLAUDE.md` 清单 |
|
||||
|
||||
### 内部系统
|
||||
| 轨道 | 状态 |
|
||||
@@ -105,8 +119,8 @@ Toon shader 已移植,卡住的主要是全屏后处理和几个逆向未完
|
||||
|------|-------|
|
||||
| PostFilm (39) / RadialBlur (15) / TiltShift (63) / SunShafts (37) | URP 无对应,需自写 ScriptableRendererFeature + shader → 见 `live-shader-todo.md` |
|
||||
| LightProjection (74) | `Projector` 组件在 URP 不工作,需 DecalProjector 或自定义(36/58 首)|
|
||||
| Environment (58) | Planar Reflection 系统完全没有(第二摄像机→RenderTexture→地板 shader)(48/58 首)|
|
||||
| LensFlare (57) | 舞台用 `CustomLensFlare` 脚本,UmaBuild 无源码;可先做 SetActive(45/58 首)|
|
||||
| Environment (58) | 轨道本身仍未接。但 Planar Reflection **已经不是从零** —— `Gallop.MirrorReflection` 已实现整条第二摄像机→RT→镜面 shader 的路径,轨道要做的是把 `mirrorReflectionRate` 这类关键帧接到它上面(48/58 首)|
|
||||
| LensFlare (57) | 舞台用 `CustomLensFlare`(`Gallop.RenderPipeline`,200 实例)。~~UmaBuild 无源码~~ —— **这句是错的**:按签名建类就能拿到它的序列化字段(见上一节),拿不到的只有方法体。可先做 SetActive(45/58 首)|
|
||||
|
||||
### 没 dump 找明白(不知道打哪里)
|
||||
|
||||
@@ -153,7 +167,10 @@ Toon shader 已移植,卡住的主要是全屏后处理和几个逆向未完
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `Assets/Scripts/umamusume/Gallop/Live/Director.cs` | 事件订阅 + 所有 handler |
|
||||
| `Assets/Scripts/umamusume/Gallop/Live/Director.cs` | 事件订阅 + 所有 handler。写 shader 属性统一走共享的 `PropBlock`,且必须 Get→改→Set |
|
||||
| `Assets/Scripts/umamusume/Gallop/MirrorReflection.cs` | 平面镜反射(原版脚本按签名重建)|
|
||||
| `Assets/Scripts/umamusume/Gallop/Live/StageAnimationPlayer.cs` | 舞台 Animation 播放 + 缺失脚本普查(`[StageAnim]` / `[StageScripts]` 日志)|
|
||||
| `Assets/Scripts/umamusume/Gallop/Live/PostEffect/PostFilmRendererFeature.cs` | PostFilm 的 URP Feature,默认 `_enableRendering = false` |
|
||||
| `Assets/Scripts/umamusume/Gallop/Live/Cutt/LiveTimelineControl.cs` | 每帧插值 + 事件触发 |
|
||||
| `Assets/Scripts/umamusume/Gallop/Live/Cutt/LiveTimelineWorkSheet.cs` | 所有轨道字段声明 |
|
||||
| `Assets/Scripts/umamusume/Gallop/Live/Cutt/LiveTimelineDataList/` | 各轨道数据类 |
|
||||
|
||||
+3
-3
@@ -199,7 +199,7 @@ originSessionId: 319ae839-0292-4b1e-80de-2f3c91b1f40e
|
||||
|
||||
| 问题 | 依据 |
|
||||
|---|---|
|
||||
| BlinkLight 调色板槽位映射 | `color0Array`/`powerArray` 恒为 10 项而 renderer 可达 570,映射规则未逆出,暂统一取第 0 槽 |
|
||||
| ~~BlinkLight 调色板槽位映射~~ ✅ 2026-08-05 解决 | 槽位号 = 渲染器自身或最近祖先的 `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` 属性确实存在,但映射关系无证据,已撤回 |
|
||||
@@ -215,7 +215,7 @@ originSessionId: 319ae839-0292-4b1e-80de-2f3c91b1f40e
|
||||
|
||||
| 现象 | 状态 |
|
||||
|---|---|
|
||||
| 舞台地板 `plane_000` / `stage_object_001` / `specular_002` 长期偏亮发白 | **早于本次所有改动就存在**,与 BgColor1/`_ColorPower` 无关,未排查 |
|
||||
| 舞台地板长期偏亮发白 | ✅ 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` 归零无变化」的实验切的是另一批物件 |
|
||||
| 小灯泡渲染成黑块 | 用 `StageTransmittedLightMask` / `StageMirrorBallShine`,这两个 shader **没有任何颜色属性**,BlinkLight 点不亮。疑为 URP 移植问题,对应未实现的 95/96 TransmittedLight 轨道 |
|
||||
| LED 大屏黑屏 | MonitorControl (10) 未实现,见上 |
|
||||
|
||||
@@ -251,7 +251,7 @@ FacialToon(47, **6341 keys/59首**) > MonitorControl(10, 3911/55首,dispID 语
|
||||
|
||||
### 第四优先:要从零搭渲染系统 ★★★
|
||||
|
||||
LightProjection(74, 3793/37首,URP 下 Projector 不工作) > Environment(58, 1375/49首,Planar Reflection 整套;注意还有独立的 `MirrorReflectionDataList`) > LensFlare(57, 993/45首,可先做 SetActive 层)
|
||||
LightProjection(74, 3793/37首,URP 下 Projector 不工作) > Environment(58, 1375/49首,注意还有独立的 `MirrorReflectionDataList`;**Planar Reflection 本身已不用从零搭** —— `Gallop.MirrorReflection` 已实现,缺的是把轨道关键帧接上去) > LensFlare(57, 993/45首,可先做 SetActive 层;`CustomLensFlare` 的字段可按签名重建拿到)
|
||||
|
||||
### 不该做
|
||||
|
||||
|
||||
Reference in New Issue
Block a user