如何解决在 bevy-engine 中处理许多精灵的最快方法
我正在使用 Rust 和 BevyEngine 构建一个元胞自动机可视化“游戏”。目前,在初始化世界时,我为每个单元格生成一个精灵。在每次更新中,精灵的颜色会根据它是活着还是死了而改变。
for (grid_pos,mut color_mat) in query.iter_mut() {
let cell_state = world.0[grid_pos.1][grid_pos.0];
match cell_state {
0 => *color_mat = materials.dead_cell.clone(),1 => *color_mat = materials.alive_cell.clone(),_ => (),}
}
问题是,当处理越来越大的地图时,精灵的数量会变得非常高。所以我想知道如果我只在活细胞的位置生成一个精灵并在细胞死亡时移除它会不会更快。
所以我的问题是:如果我为每个网格位置生成所有精灵会更快还是只在细胞存活时生成精灵并在细胞死亡时移除精灵的更好方法。
解决方法
我不熟悉 Bevy 的性能特征,但通常情况下,为了获得良好的绘制元胞自动机的性能,您不希望为每个单元格存储“精灵”对象,而是存储一组只是细胞状态,并以某种有效的批处理形式绘制它们。
元胞自动机的状态基本上是一个图像(可能具有相当大的像素)。所以,这样对待它:将单元格状态复制到纹理中,然后绘制纹理。如果您希望单元格看起来比小方块更漂亮,请编写片段着色器来执行此操作。 (例如,您可以读取 CA 状态纹理并使用它来决定要在一个正方形的边界内绘制其他几个纹理中的哪一个。)
这对于为您的用例获得可接受的性能可能是也可能不是必要,但它肯定会比管理单个精灵更快。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。