Optimization 体素引擎及其优化

Optimization 体素引擎及其优化,optimization,3d,voxel,voxels,Optimization,3d,Voxel,Voxels,最近我开始开发体素引擎。我需要的只是没有纹理的彩色体素,但数量非常大(比minecraft小得多)——问题是如何快速绘制场景?我使用的是c#/xna,但我认为在这种情况下这并不重要,让我们来讨论一般情况。看看这两个游戏: 特别是我认为视频2代表了伟大的优化方法(我的gfx卡在192 x 192 x 64时开始阻塞),它们是如何实现的 我希望发动机中有什么: 没有纹理但着色的彩色体素 很多很多体素,比如说最小512 x 512 x 128来实现像视频#2这样的效果 阴影(平滑阴影会很好,但

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

  • 特别是我认为视频2代表了伟大的优化方法(我的gfx卡在192 x 192 x 64时开始阻塞),它们是如何实现的

    我希望发动机中有什么:

    • 没有纹理但着色的彩色体素
      • 很多很多体素,比如说最小512 x 512 x 128来实现像视频#2这样的效果
      • 阴影(平滑阴影会很好,但这不是必需的)
      • 可选:动态照明(例如,从火球飞行中,在体素结构附近发光)
      • 帧速率最低40帧/秒
      • 相机有3种自由方式(x轴移动、y轴移动、z轴移动),无需相机旋转
      • 最后,可选功能可能是景深(它将是甜的^^)
    我已经知道的是:

    • 删除驻留在体素结构(已覆盖)内部的不可见体素 从其他体素的六个方向)
      • 移除看不见的体素面——因为相机并没有旋转,总是像TPP游戏中那个样斜向前看,所以若我们划分屏幕 通过垂直切割,左体素和右体素将仅显示3个面
      • 将体素保留在字典中而不是三维数组中-在大小为512 x 512 x 128的数组中跳跃需要毫秒,这是 不可接受-但字典int:int描述的颜色 3D定位要快得多
      • 在可应用的地方使用实例
      • 闭塞?(怎么做?)
      • 空间分割/八叉树(好主意吗?)
    如果有人告诉我如何改进上面列出的现有优化,或者可以分享新改进的想法,我将非常感激。谢谢,Voxatron使用软件渲染器而不是GPU。如果您阅读了此博客帖子中的评论,您可以阅读一些关于它的详细信息:

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

    2) 我从未玩过3D网络游戏英雄,但我没有任何理由相信它使用体素。我的意思是,我没有看到任何立方体被添加或删除。很可能它只是一个应用了漂亮纹理的静态多边形网格

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

    我写了一篇关于这方面的文章,你可能会觉得有用。它实际上是关于平滑体素的,但stll应用了很多原则

    您可以在以下谷歌图书上阅读:


    您可以在这里找到相关的源代码:

    因为您使用的是XNA,所以只需使用实例化即可获得所需的效果: http://roecode.wordpress.com/2008/03/17/xna-framework-gameengine-development-part-19-hardware-instancing-pc-only/


    基本概念是实例化:此功能允许您在单个
    DrawIndexedPrimitive
    调用中指定一定数量的重复数据和一定数量的变化数据。在您的例子中,实例流将是一个单独的实体框,另一个流将是变换和颜色信息。

    请注意,两个视频都显示了似乎不支持旋转的引擎。另外,第二个视频可能使用广告牌来显示失焦对象,而不是体素对象。