下载 App
【开发日志08】《我记得》|从爆显存开始的Debug
昨天 21:394 浏览综合
这两天,《我记得》的开发时间有很大一部分花在了 Debug 上。最折腾的一处,就藏在第一境切换到第二境的这道光柱里。
画面的一边是落日下的屋顶,另一边是雪夜。为了让两边各自保留自己的光照、雾和环境,我给它们做了独立的 Realm:每一境都有自己的三维世界、相机和子视口,最后再合成到同一张画面里。玩家跨过去的时候,两个世界会同时参与渲染。
效果是我想要的,Windows 上却出现了很严重的卡顿。继续查日志,发现这套双独立视口的组合触发了当前 DLSS 接入路径里的 bug:显存占用异常,DLSS 反复报告显存不足。显存保护已经连续降低设置,画面仍然会卡。
排查时有个很关键的现象:一次切境附近,引擎自己统计的显存约 2.9 GB,系统看到的游戏进程占用却接近 7 GB。两个数字的统计口径不同,差值不能直接全算成泄漏,但它提醒我,问题不能只盯着场景里的模型和贴图。各个子视口还分别持有 DLSS 的资源;结合当前引擎接入代码,排查重点落到了这些资源在视口撤下、尺寸变化时的释放上。
这次的处理方案,是把《涨水》里这些 Realm 的超分路径改用 FSR 2.2,先绕开多视口下出问题的 DLSS 路径,同时保留两边独立的环境和原来的跨境效果。这一段的帧生成也随之关闭,其他章节继续保留 DLSS。接下来会用同一段路线复测显存、报错和帧时间,确认切过去、走回来、继续推进时都能正确回收资源。
配图取自这一段的实机录屏:光柱两侧,是同时渲染的两个独立世界。

手机上还遇到了另一种很显眼的 bug:树叶和水面倒影里冒出“黑芯白晕”,镜头一动还会闪。最初看着像水的问题,但把水藏掉,树上的异常仍然在;继续对照,才追到部分材质的高光计算。低精度浮点运算产生的异常亮值,再经过辉光扩散,就变成了一团白雾包着黑点。
修法落在光照计算本身:给第一境受影响的材质换上经过精度检查的计算路径,保留原有的贴图、受光和辉光效果。在同一台手机、同一机位的修前修后对照里,树冠和倒影的异常消失了,连续帧也不再出现原来的闪烁。这个修复已经进入源码,新包还要继续回归。
下面是手机调试时留下的对照图。上方三组左边是修前、右边是修后;底部是逐项检查木头、墙面材质时的局部对照。

还有一个会直接挡住剧情的 bug:音频设备异常时,角色的一句话能一直停在屏幕上。原因是流程在等“语音播放完毕”,但音频播放停住以后,这个结束信号始终不来。
我给统一的对白播放逻辑加了等待上限,按录音长度留出余量,也保证字幕有足够的阅读时间。如果声音真的卡住,就结束这次等待,让剧情继续往下走;正常播放时仍然跟随原来的配音节奏。模拟音频停滞的复现里,修前会卡死,修后可以继续过桥和推进对白。异常声卡的 Windows 实机仍需要再确认。
最后是一种特别容易被误认为“场景太重”的停顿。Windows 的渲染管线缓存已经积累到约 775 MB,原来的设置却是每增加 0.5 MB 就保存一次,而且每次都要重写整份缓存。日志里的保存时刻,正好对应一次次约半秒的卡顿。
这部分已经调整了保存策略:Windows 大幅提高中途保存的门槛,把常规保存留到正常退出时;安卓改为更大的保存间隔,兼顾后台退出可能丢缓存的情况。首次进入时需要编译的内容仍然存在,所以加载时长还要把冷缓存、热缓存分开测。
这篇记录的是这两天具体怎么找问题、怎么改。双视口的 FSR 方案还在做实机回归,其他修复也要随新包继续检查。我很想保住这道光柱两边的世界,也想让玩家能顺畅地陪爷爷走过去。












