禁用 NTSync 和 FSync,只启用 ESync 即可,比如把游戏添加到 Steam 后可设置如下启动选项:
PROTON_NO_NTSYNC=1 PROTON_NO_FSYNC=1 PROTON_NO_ESYNC=0 %command%
如果直接用 wine 启动就设置:
export WINENTSYNC=0
export WINEFSYNC=0
export WINEESYNC=1
如果加载/传送还是很慢,可以再把 ESync 也禁用了:
PROTON_NO_NTSYNC=1 PROTON_NO_FSYNC=1 PROTON_NO_ESYNC=1 %command%
如果直接用 wine 启动就设置:
export WINENTSYNC=0
export WINEFSYNC=0
export WINEESYNC=0
NTSync 似乎会导致燕云十六声的加载并行度下降,部分线程出现长时间等待,导致传送需要特别久。
FSync 在我的机器上会导致燕云十六声出现加载错误,大量贴图未正常加载,游戏渲染完全异常。
ESync 加载正常并且传送也很快。
完全禁用上述三种Sync,改用默认的 wineserver sync,加载和传送也正常,感觉速度和 ESync 差不多。
我知道了,问题要在玩了一段时间,在大世界传送过几次之后才会发生。
现在 FSync 又出现贴图错误了。NTSync 的传送慢倒是还没有复现。
找到 FSync 贴图错误的原因了,是游戏退出后 /dev/shm 存在残留共享内存文件,被重新启动的游戏进程加载了。
可以这样清理(在启动器已运行,游戏还没运行的时候执行):
comm -23 <(ls /dev/shm|sort) <(grep -ho '/dev/shm/[^ ]*' /proc/[0-9]*/maps 2>/dev/null|xargs -r -n1 basename|sort -u) | grep 'Shm_' | sed 's|^|/dev/shm/|'
comm -23 <(ls /dev/shm|sort) <(grep -ho '/dev/shm/[^ ]*' /proc/[0-9]*/maps 2>/dev/null|xargs -r -n1 basename|sort -u) | grep 'Shm_' | sed 's|^|/dev/shm/|' | xargs -r rm -v
好像是 Progon-GE 的 Bug,换成 Proton Experimental 似乎就没有这个问题了。
不对,Proton Experimental 的 FSync 现在也出问题了,而且就算删了残留,在游戏内多传送几个地方就又可能会受到残留影响导致资源加载失败。
看起来 FSync 就是与燕云十六声不兼容。
我今天重启电脑后再把 NTSync 打开(把启动选项完全删掉),传送速度恢复正常了……
而且实测NTSync/FSync/ESync/wineserver sync的传送速度没有任何差异,在春蚕山庄正门用界碑记忆原地传送10次的耗时都是23秒……
并且FSync的贴图载入错误问题也消失了……
不明觉厉……