gpt4 book ai didi

c++ - 游戏引擎的线程模型

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:34 26 4
gpt4 key购买 nike

我有兴趣在业余时间开发我正在开发的小型引擎,但我很好奇最好的方法是什么。我很好奇将物理线程与引擎的其余部分同步的推荐方法,类似于 ThisGuy .我正在使用 Bullet Physics SDK,它已经使用了他所描述的数据复制方法,但我想知道,一旦 bullet 通过一个模拟然后将数据同步回其他线程,它不会导致类似垂直同步,渲染线程在处理数据的一半时突然开始使用一组更新的不同信息?

这是观众能够注意到的东西吗?如果要销毁的物体出现某种爆炸怎么办?

如果这是一个问题,那么解决它的最佳方法是什么?

锁定物理线程,使其在渲染线程(以及基本上所有其他线程)完成其帧之前无法执行任何操作?这似乎会浪费一些 CPU 时间。还是最好的方法是三倍缓冲,将物理数据复制到第二个位置,继续物理模拟,然后在准备好后将该数据复制到渲染线程?

你们推荐什么方法?

最佳答案

最简单且可能最常用的变体是并行运行 physic、render、ai... 线程,并在每个线程完成一个帧/时间步后同步它们。这不是最快的解决方案,但却是问题最少的解决方案。在运行时将数据写回渲染线程,会导致大量同步问题(例如,您必须在更新时锁定每个 vector/矩阵)。为了使并行化有效,您必须最小化要同步的数据量,例如只将数据写入渲染线程,可以渲染。

当每帧之后不同步时,您可能会得到这样的效果,即物理/AI 使用所有 CPU 功率产生 60fps,而渲染器仅渲染 10fps,这在大多数情况下不是您想要的。

双缓冲也会提高性能,但您仍然需要同步您的线程。一个问题是 ai 和 physic 或类似的线程,因为它们可能想要修改相同的数据

关于c++ - 游戏引擎的线程模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3099360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com