# 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。 - 涉及两层记忆图像时,优先考虑两层同步。 - 如果要迁移新的后处理效果,先确认它属于调频、加载过场还是默认屏幕氛围。