异步物理更新

为了平衡负载,减轻主线程压力,对于一些表现层的物理模拟我们放在另一个线程异步更新。有人说,让GPU干物理的活不行吗?像Physx一样。实话说,现在的游戏GPU的负担已经很重了,放在GPU运算必定导致FPS下降。而CPU的负载一般集中在一个核心,因为游戏系统的特殊性,各个模块的依赖比较紧密,每一步都需要上一步的结果,所以不容易做多线程。但是对于某些不参与游戏逻辑的效果,完全是可以异步更新的,某些粒子效果啊,视觉的物理效果啊…

如何实现

在这里插入图片描述
图片来源:https://www.gameres.com/484680.html

异步更新的好处是可以用逻辑更新和渲染更新的时间做多线程模拟(T1 + T2时间段),降低表现物理层的模拟时间,这个方案会导致渲染层晚一帧得到物理模拟结果。但是,如果物理对象的模拟数据需要拿去做逻辑更新,那么还是需要使用同步模拟机制,否则会增大系统的复杂性。

实例

在战地1中,我估计残骸和布娃娃是纯客户端的异步模拟。某个房屋被打碎了,在服务端应该就是简单地移除这个游戏对象,然后发一条消息给客户端通知这个房屋碎了,客户端生成纯客户端可见的房屋残骸,进行异步物理模拟。
如何看出来的呢?因为可破坏的物体被破坏后玩家和被破坏的物体就不再有碰撞了。
生成的残骸是阻挡不了玩家的移动的,玩家也不能站到上面;残骸还能被玩家推着走,证明了这是纯客户端的游戏对象。(即使不是,这些特性使他完全可以作为纯客户端游戏对象,支持异步模拟)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值