体素引擎和优化

kom*_*rra 6 3d optimization voxel voxels

最近我开始开发体素引擎.我需要的只是没有纹理的彩色体素,但是数量非常大(比我的小得多) - 问题是如何快速绘制场景?我正在使用c#/ xna,但在这种情况下,我认为这不是很重要,让我们来谈谈一般情况.看看这两款游戏:

  1. http://www.youtube.com/watch?v=EKdRri5jSMs
  2. http://www.youtube.com/watch?v=in0bavLJ8KQ

特别是我认为2号视频代表了很棒的优化方法(我的gfx卡只能在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:颜色其中int描述打包3D位置要快得多
    • 在适用的地方使用实例化
    • 封闭?(这该怎么做?)
    • 空间划分/ octtree(这是个好主意吗?)

如果有人给我一个提示,如何改进上面列出的现有优化或者可以分享新改进的想法,我将非常感激.谢谢

Dav*_*ams 8

1)Voxatron使用软件渲染器而不是GPU.如果您阅读此博客文章中的评论,您可以阅读有关它的一些细节:

http://www.lexaloffle.com/bbs/?tid=201

我自己没有仔细看过,所以不能告诉你更多.

2)我从未玩过3D Dot Game Heroes,但我没有任何理由相信它会使用体素.我的意思是,我没有看到任何添加或删除的多维数据集.很可能它只是一个静态多边形网格,应用了很好的纹理.

至于自己实现它,不要试图通过渲染立方体来绘制世界,因为这非常慢.相反,您应该处理体积并生成位于实体素和空体素交叉点上的网格.将体积分成合适大小的区域(例如32x32x32)并为每个区域生成网格.

我写过一篇关于这篇文章的书,你可能觉得它很有用.它实际上是关于平滑的体素terain,但许多原则stll适用.

您可以在此处阅读Google图书:http://books.google.com/books?id = WnfD2u8nIlIC&lpg = PR1&dq = game%20engine%20gems&pg = PA39#v = onepage&q&f = false

您可以在此处找到相关的源代码:http://www.thermite3d.org