[转]游戏中各种性能优化方法(不断更新)

http://www.cppblog.com/liangairan/archive/2013/03/23/198749.aspx

 

谈到游戏中的性能优化,说白了就是如何提高帧率和降低内存
提高帧率的基本原则就是减少DP次数,还有是找出时间消耗高的程序代码加以修改。
但引擎涉及的东西非常多,有时优化要从多方面入手,下面一个一个来说明。

首先是水体渲染的优化:
现在很多游戏的习惯做法就是把水放在地某个高度的位置,然后地形在上面,从裁剪的角度来看,只要看得到地形,水是必然会渲染的,但如果我们看到的地形都是在水的上面,那这样渲染就太浪费了。其实有个很简单的做法,就是把地形的block,当然,我们可以把block再细分成一逻辑上的block,每个block要记录是否有地形的顶点在水的下面,有的话,如果这些block要渲染,那水也就渲染,否则水就不渲染。

地形优化:
四叉树地形LOD是最基本的优化方法了,不过这里要注意一点,每个地块对应不同LOD加上不同裂缝组合的indexbuffer,如果一开始把所有这些可能存在的indexbuffer都创建出来,那内存会非常大。我的做法是:当用到某个IndexBuffer的时候才实时创建,这样大大减少了内存。因为有很多种情况下的IndexBuffer在实际情况下是不会用到的。

粒子系统的优化:
传统的粒子系统的做法是在CPU上计算好粒子的四个顶点位置然后再填入纹理,现在有种优化方案是:定义粒子的顶点格式只有中心点和width,height,在CPU上只计算实时的中心点位置与width和height的大小,然后在GPU上再根据这些数据计算回粒子的四个顶点。
这种优化方案可以减少粒子在CPU上的运算量,但虽然利用到shader。
还有是粒子系统要共享VB和IB哦。

骨骼动画优化:
利用GPU计算顶点是骨骼动画优化的最有效手段,现在很多人的做法是只把骨骼动画的矩阵转到GPU,然后在GPU计算每个顶点的位置。这种做法受到了shader寄存器数量的限制。其实还有一种做法是把矩阵写入一个1行的浮点纹理,试想一下,如果是1X1024的浮点纹理,那可以存1024 / 4 = 256个矩阵(1个像素是R32G32B32A32F四个浮点的纹理),这种方式要求显卡支持并占一定的带宽。

模型渲染优化:
可以利用hardware instancing,LOD等方法。带骨骼动画的模型,在DX10以上可以实现骨骼动画instancing。

场景优化:
现在流行occullsion优化,就是把被遮挡的物体不渲染出来,我简单地说一下这种实现的原理:
开一个RTT,把在视锥范围内的渲染物取AABB,然后把这个AABB赋一个颜色(每个物体的AABB颜色都不一样),然后渲染的时候把这个颜色作为输出颜色渲染出来。因为开了深度,如果在后面被完全遮挡的物体,那最终这张RTT纹理是不存在这个物体的颜色,根据一些方法可以知道这个纹理是否有这颜色,然后通过这个颜色索引回该物体,然后把它剔除掉。DX9的occullsion query就是这样弄。还有Occlusion Culling,我相信原理也是类似这样。

陆续更新中……

转载于:https://www.cnblogs.com/pulas/archive/2013/03/24/2978308.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值