4.8 KiB
MemoryProcess Sprite Shader Notes
本文记录 FixSystem/Memory 记忆调频表现的结构与维护边界。该系统属于旧版 FixSystem,但仍承载佩佩修复场景里的记忆播放、打孔带检索和双滑杆调频表现。
相关文件
Assets/Scripts/FixSystem/Memory/MemoryProcess.csAssets/Scripts/FixSystem/Memory/MemorySlider.csAssets/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/记忆像素滑块.assetPixelationVolBlurVol
Assets/Scenes/VFXtest/记忆清晰度滑块.assetChromaticVolDistortVol
加载与屏幕类历史 profile:
Assets/Scenes/VFXtest/花屏.asset- 用于放入记忆卡带后的加载花屏。
- 不属于双滑杆调频效果。
Assets/Scenes/VFXtest/记忆屏幕.asset- 曾用于
mainEffect的默认记忆屏幕后处理。
- 曾用于
这些 profile 的用途不同,迁移或复刻时需要先确认当前目标是“调频反馈”、“卡带加载过场”,还是“进入记忆界面的默认屏幕质感”。
Volume 字段现状
MemoryProcess 中仍保留若干 Volume 字段:
memoryClarityVolumememoryFrequencyVolumememoryProcessVolumemainEffect
当 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。
- 涉及两层记忆图像时,优先考虑两层同步。
- 如果要迁移新的后处理效果,先确认它属于调频、加载过场还是默认屏幕氛围。