Wakeari(有诡)中有一个有趣的渲染模式——念摄模式。但在该模式下帧率暴跌。于是我对其进行了分析。
非念摄模式下有60帧——
念摄模式下仅有14帧——
60变为14,帧率暴跌至原来的1/4左右。
技术分析
估计该游戏采取的是“渲染两次”方案。具体步骤为——
1.根据鼠标拖动的区域,生成一张掩码位图(念摄区域图);
2.将外衣的模型标记为可见,渲染场景,输出到纹理A;
3.将外衣的模型标记为隐藏,渲染场景,输出到纹理B;
4.根据掩码位图,合并纹理A 和 纹理B,然后输出到屏幕。
该方案有两个缺点——
1.第2步、第3步共渲染两次,使帧率下降一半。
2.在第4步合并纹理图时,需等待第2步、第3步的渲染操作彻底完成后才能执行。堵塞了渲染流水线,严重影响帧率。
优化方案
“渲染两次”方案真的太渣了。在DirectX 9.0c下明明可以很简单就能渲染出类似的效果,只需要渲染一次。具体步骤为——
1.根据鼠标拖动的区域,生成一张掩码位图,并将其作为纹理(念摄区域纹理图);
2.其他模型仍然按老方式渲染,仅需要修改外衣渲染的像素着色器代码——将当前像素坐标变换到屏幕坐标,根据屏幕坐标查询念摄区域纹理图,若在区域外直接返回透明颜色,若在区域内就按老方法进行渲染。
仅增加了3条指令。将当前像素坐标变换到屏幕坐标只需要一次矩阵乘法就行了,而且查询纹理图也是速度很快的操作,最后再多一条条件跳转指令。增加的开销微乎其微,理论上能达到与非念摄模式下一样的帧率。
(完)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库