最近我开始开发体素引擎。我所需要的只是没有纹理但非常多彩的体素(比Minecraft小得多)- 问题是如何快速绘制场景?我正在使用C#/XNA,但在这种情况下,这不是很重要,让我们谈论一般情况。看看这两个游戏:
特别是我认为视频2代表了很好的优化方法(我的图形卡在192 x 192 x 64时就开始崩溃),他们是如何实现的?我希望引擎中有以下内容:
- 丰富多彩的像素块,没有纹理但有阴影 - 许多许多像素块,至少512 x 512 x 128,以达到类似于视频#2的效果 - 阴影(平滑阴影会很棒,但这不是必要的) - 可选项:动态照明(例如从飞行的火球中照亮靠近像素结构的地方) - 帧速率最低40 FPS - 相机有3种自由度(在x轴上移动,在y轴上移动,在z轴上移动),不需要相机旋转 - 最后一个可选功能可能是景深(这将非常棒^^)
我已经知道的优化方法有哪些:
- 移除位于体素结构内部的不可见体素(被其他六个方向的体素覆盖)
- 移除不可见的体素面 - 因为摄像机没有旋转,总是向前斜视,就像TPP游戏中一样,所以如果我们将屏幕分成垂直切割,左侧体素和右侧体素只会显示3个面
- 将体素保留在字典中而不是三维数组中 - 跳跃到大小为512 x 512 x 128的数组需要毫秒级的时间,这是不可接受的 - 但是使用int:color的字典,其中int描述了打包的3D位置,速度要快得多
- 在适用的情况下使用实例化
- 遮挡?(如何做到这一点?)
- 空间划分/八叉树(这是一个好主意吗?)
如果有人能给我一些改进现有优化措施的提示或分享新的改进想法,我将非常感激。谢谢