最近我开始开发体素引擎。我需要的只是没有纹理的彩色体素,但数量非常大(比我的世界小得多)——问题是如何快速绘制场景?我使用的是 c#/xna,但我认为这在这种情况下不是很重要,让我们谈谈一般情况。看看这两个游戏:
特别是我认为 2 号视频代表了很好的优化方法(我的 gfx 卡在 192 x 192 x 64 时开始窒息)他们是如何实现这一点的?
我会在引擎中拥有什么:
- 没有纹理但有阴影的彩色体素
- 很多很多体素,比如至少 512 x 512 x 128 来实现类似视频 #2 的效果
- 阴影(平滑的阴影会很棒,但这不是必需的)
- 可选:动态照明(例如来自飞行的火球,在体素结构附近点亮)
- 帧率最低 40 FPS
- 相机有 3 种自由方式(x 轴移动、y 轴移动、z 轴移动),无需旋转相机
- 最后可选功能可能是景深(它会很甜^^)
我已经知道什么优化:
- 删除位于体素结构内的看不见的体素(其他体素从六个方向覆盖)
- 删除看不见的体素面 - 因为相机没有旋转并且总是像 TPP 游戏一样向前倾斜,所以如果我们通过垂直切割划分屏幕,左体素和右体素将只显示 3 个面
- 将体素保留在字典中而不是 3 维数组中 - 跳过大小为 512 x 512 x 128 的数组需要几毫秒,这是不可接受的 - 但字典 int:color 其中 int 描述打包的 3D 位置要快得多
- 在适用的情况下使用实例化
- 遮挡?(这个怎么做?)
- 空间划分/八叉树(这是个好主意吗?)
如果有人给我提示如何改进上面列出的现有优化或者可以分享新改进的想法,我将非常感激。谢谢