129 lines
4.8 KiB
Markdown
129 lines
4.8 KiB
Markdown
# MemoryProcess Sprite Shader Notes
|
||
|
||
本文记录 `FixSystem/Memory` 记忆调频表现的结构与维护边界。该系统属于旧版 `FixSystem`,但仍承载佩佩修复场景里的记忆播放、打孔带检索和双滑杆调频表现。
|
||
|
||
## 相关文件
|
||
|
||
- `Assets/Scripts/FixSystem/Memory/MemoryProcess.cs`
|
||
- `Assets/Scripts/FixSystem/Memory/MemorySlider.cs`
|
||
- `Assets/Shader/Shader/MemoryTuningSprite.shader`
|
||
- 历史 VolFx profile 参考位于 `Assets/Scenes/VFXtest/`
|
||
|
||
## 当前结构
|
||
|
||
记忆图像由两层 `SpriteRenderer` 叠加:
|
||
|
||
- `memoryFinishedSpriteRenderer`:彩色记忆层。
|
||
- `memoryFinishedImageNoColor`:无色底图层。
|
||
|
||
旧版表现主要依赖 VolFx 后处理。现在调频阶段默认由 `AibisDream/MemoryTuningSprite` 在 sprite 材质上完成。运行时会为两层分别创建材质实例,并把同一组调频参数同步写入两层,避免只扰动彩色层时露出或错开无色底图。
|
||
|
||
`memoryFinishedImageNoColor` 使用同一个 shader,但通过材质参数保留无色底图观感:
|
||
|
||
- `_MemoryGrayscale = 1`
|
||
- `_MemoryContrast = 1.8`
|
||
|
||
彩色层保持:
|
||
|
||
- `_MemoryGrayscale = 0`
|
||
- `_MemoryContrast = 1`
|
||
|
||
## 调频语义
|
||
|
||
`MemorySlider` 输出的是距离目标值的归一化偏差:
|
||
|
||
- 越接近目标区间,传出的值越接近 `0`。
|
||
- 越远离目标区间,传出的值越接近 `1`。
|
||
|
||
因此 shader 表现应遵循“远离目标时混乱,靠近目标时清晰稳定”的方向。
|
||
|
||
目前两个轴的职责是:
|
||
|
||
- 频率轴:像素化、颗粒化、焦糊感。
|
||
- 清晰度轴:色散、轻微相位错位、弱 UV 扭曲。
|
||
|
||
后续如果要增强反馈,优先保持两个轴的视觉语义差异,不要让两个轴都只表现为普通模糊。
|
||
|
||
## 后处理迁移边界
|
||
|
||
旧 VolFx profile 可以作为视觉参考,但不要直接照搬参数到 sprite shader。原因是后处理作用于最终合成画面,而 sprite shader 只作用于单个 sprite 层。尤其是 UV 扭曲:
|
||
|
||
- 后处理中的强扭曲通常不会暴露底层。
|
||
- sprite 层上的强扭曲会撕开当前层边缘,露出下面的 `nocolor` 层或背景。
|
||
|
||
因此 sprite shader 中的扭曲应保持较弱,并在 UV 边缘做衰减。
|
||
|
||
## 旧 VolFx 参考
|
||
|
||
调频滑杆的历史 profile:
|
||
|
||
- `Assets/Scenes/VFXtest/记忆像素滑块.asset`
|
||
- `PixelationVol`
|
||
- `BlurVol`
|
||
- `Assets/Scenes/VFXtest/记忆清晰度滑块.asset`
|
||
- `ChromaticVol`
|
||
- `DistortVol`
|
||
|
||
加载与屏幕类历史 profile:
|
||
|
||
- `Assets/Scenes/VFXtest/花屏.asset`
|
||
- 用于放入记忆卡带后的加载花屏。
|
||
- 不属于双滑杆调频效果。
|
||
- `Assets/Scenes/VFXtest/记忆屏幕.asset`
|
||
- 曾用于 `mainEffect` 的默认记忆屏幕后处理。
|
||
|
||
这些 profile 的用途不同,迁移或复刻时需要先确认当前目标是“调频反馈”、“卡带加载过场”,还是“进入记忆界面的默认屏幕质感”。
|
||
|
||
## Volume 字段现状
|
||
|
||
`MemoryProcess` 中仍保留若干 Volume 字段:
|
||
|
||
- `memoryClarityVolume`
|
||
- `memoryFrequencyVolume`
|
||
- `memoryProcessVolume`
|
||
- `mainEffect`
|
||
|
||
当 `useSpriteShaderTuning = true` 时,`memoryClarityVolume` 与 `memoryFrequencyVolume` 不再驱动调频表现,只作为后处理模式的兼容入口。
|
||
|
||
`memoryProcessVolume` 仍可用于放入记忆卡带后的加载花屏,并已做空引用安全处理。
|
||
|
||
`mainEffect` 曾指向默认记忆屏幕后处理。如果未来要恢复或迁移它,需要先明确是否要作为常驻屏幕质感,而不是误接到卡带加载流程中。
|
||
|
||
## 常见问题
|
||
|
||
### sprite 变紫
|
||
|
||
优先检查 `MemoryTuningSprite.shader` 编译错误。Unity 的紫色材质通常表示 shader 编译失败或材质 shader 丢失。
|
||
|
||
如果 Unity Console 不方便读取,可以查看:
|
||
|
||
`%LOCALAPPDATA%\Unity\Editor\Editor.log`
|
||
|
||
曾经出现过的坑:
|
||
|
||
- HLSL 局部变量命名为 `line` 会触发 `syntax error: unexpected token 'line'`。
|
||
- 与 Unity/URP include 中的函数名冲突也可能导致编译失败,工具函数建议使用项目专属前缀。
|
||
|
||
### nocolor 层露出
|
||
|
||
通常是彩色层和无色层没有同步应用同一套采样扰动,或 UV 扭曲太强。检查:
|
||
|
||
- 两层是否都使用运行时材质。
|
||
- 调频参数是否同步写入两层。
|
||
- 扭曲是否有边缘衰减。
|
||
|
||
### 调频差异不明显
|
||
|
||
优先调整 shader 内响应曲线,而不是恢复 VolFx 后处理。可以从以下方向处理:
|
||
|
||
- 频率轴加强像素密度、模糊半径或响应曲线。
|
||
- 清晰度轴加强色散方向、相位错位或轻微漂移。
|
||
- 避免把两个轴都调成类似的模糊/噪声效果。
|
||
|
||
## 维护建议
|
||
|
||
- 手动编辑 shader 后,及时检查 Unity Console 或 `Editor.log`。
|
||
- 不要把后处理参数机械映射到 sprite shader。
|
||
- 涉及两层记忆图像时,优先考虑两层同步。
|
||
- 如果要迁移新的后处理效果,先确认它属于调频、加载过场还是默认屏幕氛围。
|