Optimization 体素引擎及其优化
最近我开始开发体素引擎。我需要的只是没有纹理的彩色体素,但数量非常大(比minecraft小得多)——问题是如何快速绘制场景?我使用的是c#/xna,但我认为在这种情况下这并不重要,让我们来讨论一般情况。看看这两个游戏: 特别是我认为视频2代表了伟大的优化方法(我的gfx卡在192 x 192 x 64时开始阻塞),它们是如何实现的 我希望发动机中有什么: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这样的效果 阴影(平滑阴影会很好,但
- 没有纹理但着色的彩色体素
- 很多很多体素,比如说最小512 x 512 x 128来实现像视频#2这样的效果
- 阴影(平滑阴影会很好,但这不是必需的)
- 可选:动态照明(例如,从火球飞行中,在体素结构附近发光)
- 帧速率最低40帧/秒
- 相机有3种自由方式(x轴移动、y轴移动、z轴移动),无需相机旋转
- 最后,可选功能可能是景深(它将是甜的^^)
- 删除驻留在体素结构(已覆盖)内部的不可见体素
从其他体素的六个方向)
- 移除看不见的体素面——因为相机并没有旋转,总是像TPP游戏中那个样斜向前看,所以若我们划分屏幕 通过垂直切割,左体素和右体素将仅显示3个面
- 将体素保留在字典中而不是三维数组中-在大小为512 x 512 x 128的数组中跳跃需要毫秒,这是 不可接受-但字典int:int描述的颜色 3D定位要快得多
- 在可应用的地方使用实例
- 闭塞?(怎么做?)
- 空间分割/八叉树(好主意吗?)
您可以在这里找到相关的源代码:因为您使用的是XNA,所以只需使用实例化即可获得所需的效果: http://roecode.wordpress.com/2008/03/17/xna-framework-gameengine-development-part-19-hardware-instancing-pc-only/
基本概念是实例化:此功能允许您在单个
DrawIndexedPrimitive
调用中指定一定数量的重复数据和一定数量的变化数据。在您的例子中,实例流将是一个单独的实体框,另一个流将是变换和颜色信息。请注意,两个视频都显示了似乎不支持旋转的引擎。另外,第二个视频可能使用广告牌来显示失焦对象,而不是体素对象。