Rust 在其地图上拥有数以百万计的草、岩石和树木实例,这些实例长达 8 公里。
草在运行时是否在玩家周围动态放置?如果是这样,是在 GPU 上以某种方式完成还是使用着色器?
在我的游戏中,我们使用顶点颜色和光线投射来放置植被,并存储在运行时通过间接 GPU 实例初始化的变换数据。
但是,我无法想象这会与树木之类的东西很好地扩展。场景中是否真的有成千上万个网格对撞机始终处于活动状态?我想也许他们可能会将所有这些网格碰撞器存储在场景中,并且可以标记游戏对象,如果你用工具击中它,它会向它添加一个“树”组件。
我是否采用“预先生成所有内容,在运行时实例化”的方法朝着正确的方向前进?
我已经对此进行了测试,它确实有效,产生了 2400 万个实例(需要 20 分钟进行光线投射),然后用这些实例初始化 GPU。
这很酷,尽管它会导致我的 Unity 编辑器在一段时间后崩溃(内存泄漏?)。
也许您在运行前存储实例,然后当您启动分离服务器时,您会进行所有光线投射并放置所有树木、岩石和其他交互式对象。
但我担心,如果我尝试存储 10000 个游戏对象(用于交互,诸如可砍伐的树木、可开采的岩石之类的东西),性能会下降。