zyl910

优化技巧、硬件体系、图像处理、图形学、游戏编程、国际化与文本信息处理。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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条指令。将当前像素坐标变换到屏幕坐标只需要一次矩阵乘法就行了,而且查询纹理图也是速度很快的操作,最后再多一条条件跳转指令。增加的开销微乎其微,理论上能达到与非念摄模式下一样的帧率。

 

(完)

posted on 2011-12-12 23:34  zyl910  阅读(2806)  评论(0编辑  收藏  举报