Questions tagged «voxels»

体积像素(体积像素)。一种将体积数据存储为常规值网格的方法。此标签应用于有关体素的问题。

6
如何优化Minecraft风格的体素世界?
我发现即使使用四核和多肉的显卡,《我的世界》奇妙的大世界也极难导航。 我认为Minecraft的运行缓慢来自: Java,因为空间分区和内存管理在本机C ++中更快。 弱世界分区。 两种假设我都可能错了。但是,这让我开始思考管理大型体素世界的最佳方法。由于这是一个真实的3D世界,其中块可以在世界的任何部分存在,它基本上是一个大的3D阵列[x][y][z],其中在世界的每个块具有类型(即BlockType.Empty = 0,BlockType.Dirt = 1等) 我认为要使这种世界表现良好,您需要: 使用某种树(oct / kd / bsp)将所有多维数据集拆分出来;似乎oct / kd会是更好的选择,因为您可以仅在每个多维数据集级别而不是每个三角形级别进行分区。 使用某种算法来确定当前可以看到哪些块,因为距离用户最近的块可能会混淆后面的块,从而使其变得毫无意义。 保持块对象本身轻巧,因此可以快速将其从树中添加和删除。 我想对此没有正确的答案,但是我很想看到人们对此问题的看法。 在大型体素世界中,您将如何提高性能?

3
体素地形引擎如何制造?
几天前,我发现了一种称为体素地形的东西,我认为它们非常酷。但是我什么都不知道。您是在建模软件中对其建模还是使用高度图之类的东西?我在维基百科上读到,体素就像3d像素或体积像素。 制作体素地形后,如何获取这些体素并使它们可 破坏/可挖掘? 我将基于以下因素选择最佳答案: 代码和算法。最好基于C# 解释。我是算法的初学者,但是我对面向对象的编程非常熟悉 逐步演示。不仅是概念,而且是方向。 图表/插图。不,不是其他引擎的屏幕截图。 我知道这是一个复杂的话题。但是,谢谢您的帮助! 不,我不是要克隆我的世界。 编辑 感谢大家的大力帮助(尤其是Nick Wiggill)!这就是我设法做到的(正在进行中)。


7
如何提高Voxel / Minecraft类型游戏的渲染速度?
我正在编写自己的Minecraft副本(也用Java编写)。现在效果很好。在40米的可视距离下,我可以轻松地在MacBook Pro 8,1上达到60 FPS。(英特尔i5 +英特尔高清显卡3000)。但是,如果将可视距离设为70米,则只能达到15-25 FPS。在真实的《我的世界》中,我可以毫无问题地将视距扩大到256m。所以我的问题是我应该怎么做才能使我的游戏变得更好? 我实现的优化: 仅将本地块保留在内存中(取决于玩家的观看距离) 视锥剔除(首先在块上,然后在块上) 只画出真正可见的方块面 对包含可见块的每个块使用列表。可见的块将自己添加到此列表中。如果它们不可见,则会自动从此列表中删除。通过构建或销毁相邻的块,块变得(不可见)。 每个包含更新块的块使用列表。与可见阻止列表相同的机制。 new在游戏循环内几乎不使用任何语句。(我的游戏运行大约20秒钟,直到调用了垃圾回收器) 我目前正在使用OpenGL呼叫列表。(glNewList(),glEndList(),glCallList())一类块的每个侧面。 目前,我什至没有使用任何照明系统。我已经听说过VBO。但是我不知道到底是什么。但是,我将对其进行一些研究。他们会提高性能吗?在实施VBO之前,我想尝试使用glCallLists()并传递呼叫清单列表。而是使用了千次glCallList()。(我想尝试一下,因为我认为真正的MineCraft不使用VBO。对吗?) 还有其他提高性能的技巧吗? VisualVM配置文件向我展示了这一点(仅33帧配置文件,可视距离为70米): 用40米(246帧)进行分析: 注意:我正在同步许多方法和代码块,因为我正在另一个线程中生成块。我认为在游戏循环中进行大量操作时,获取对象的锁是性能问题(当然,我所说的是只有游戏循环而没有新块生成的时间)。这是正确的吗? 编辑:删除一些synchronised块和其他一些小的改进之后。性能已经好得多了。这是我对70米的新分析结果: 我认为这很明显selectVisibleBlocks是这里的问题。 提前致谢! 马丁 更新资料:经过一些额外的改进(例如,使用for循环代替每个循环,在循环外缓冲变量,等等...),我现在可以很好地查看距离60。 我想我将尽快实施VBO。 PS:所有源代码都可以在GitHub上找到:https: //github.com/mcourteaux/CraftMania


3
对于体素渲染,更有效的方法是:预制的VBO或几何着色器?
给定一个相当静态的体素数组,效率更高:使用CPU预先生成VBO来渲染体素面(暂时忽略更高级的渲染形式,如行进立方体),或在GPU上使用几何体着色器生成脸上苍蝇? 我不是担心更新变化的体素,但是这当然是GPU版本的好处,因为您不必重建VBO。另外,GS方法感觉更现代了:) 另一方面,我还没有研究过GS如何真正与现代GPU中的栅格化管道一起工作的细节。它是将顶点输出到某种流缓存中,还是将顶点写入两者之间的普通GPU内存中?如果是后者,那么即时生成可能会减少我猜想的其余GPU任务的可用带宽和处理能力,然后在CPU上进行将更为有益。

6
免费体素编辑器?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 6年前关闭。 有谁知道一个好的免费体素编辑器和/或体素到网格转换器?
25 tools  models  editors  voxels 

4
投射射线以选择体素游戏中的方块
我正在开发一款具有类似于Minecraft的地形且由块组成的游戏。由于基本渲染和块加载现已完成,因此我想实现块选择。 因此,我需要找出第一人称相机所面对的障碍。我已经听说过要取消整个场景的投影,但是我决定反对,因为它听起来很hacky,而且不准确。也许我可以以某种方式向视图方向投射射线,但是我不知道如何用体素数据中的块检查碰撞。当然,此计算必须在CPU上完成,因为我需要结果才能执行游戏逻辑运算。 那么,如何找出相机前面的哪个块呢?如果可以的话,我该如何投射光线并检查碰撞?

3
如何为类似Minecraft的引擎生成漂浮的陆地块?
我正在XNA中创建类似于Minecraft的引擎。我想要做的是创建类似于此视频中所示的浮岛: http://www.youtube.com/watch?v=gqHVOEPQK5g&feature=related 我将如何使用世界生成器复制它?我必须使用一些Perlin噪声算法吗?我不知道这将如何帮助我取得这样的土地质量。 这是我正在使用的perlin噪声发生器的代码: private double[,] noiseValues; private float amplitude = 1; // Max amplitude of the function private int frequency = 1; // Frequency of the function /// <summary> /// Constructor /// </summary> /// public PerlinNoise(int freq, float _amp) { Random rand = new Random(System.Environment.TickCount); noiseValues = new double[freq, …

2
这些体素数据文件格式的优缺点是什么?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 7个月前关闭。 .VXL .VOX .KVX .KV6 .V3A .V3B 我试图决定是否值得采用以上任何一种方法或其他方法,或者是否应该自己动手做。重要性顺序的决定因素是: 使用体素增量或数值变换描述来支持动画(我知道这在体素方面是一个困难的方面)。 简单(或至少简洁格式) 压缩 据我所知,Tiberian Sun VXL格式是唯一一种用于动画的格式,但是Voxelstein3D的成名人物Ken Kenman声称VXL不支持动画(用他的话说是一个文件)。因此,我想知道是否可能没有两种不同的.VXL格式,因为体素数据的文件扩展名似乎是显而易见的选择……可能来自医学成像环境。 我确实需要一个具有体素格式丰富经验的人来评论他们的经验中的实际利弊。以与将JPG到PNG到GIF的方式相同的方式考虑这个问题。

4
应该使用哪种数据结构来表示体素地形?
根据维基百科有关体素的页面,“根据体素相对于其他体素的位置(即,其在构成单个体积图像的数据结构中的位置)来推断体素的位置。” 一个人应该如何实现这样的数据结构?我当时正在考虑使用八叉树,但我想知道是否还有其他我从未听说过的东西。

6
无限细节是真实的吗?
无限细节的许多方面对我来说都是令人怀疑的,甚至是介绍性段落(由于使用了无限这个词): 无限细节是一种用于制作实时3D图形的新技术。“无限细节”与现有3D图形系统不同,因为它可以实时处理无限点云数据,从而提供了有史以来最高水平的几何图形。 上面的引用来自不再存在的Unlimited Detail Technology网站(2011年的archive.org快照) 我的问题是:这种无限的细节技术真的存在吗?如果可以的话,为什么它目前不在游戏中使用? 有关无限细节技术的其他参考: Rock石Rock弹枪文章 Game Trailers.com上的视频演示 创作者访谈(布鲁斯·戴尔) 关于下载小队的文章 更新资料 Unlimited Detail最近发布了新的YouTube视频。我不再相信了。我和Notch都写了一篇关于它的博客文章(他认为这是一个骗局)。
17 3d  voxels  point-cloud 

1
如何在体素地形中实现应力/应变力学?
我正在开发一个类似于Minecraft的世界,该世界将地形划分为体素。但是,我也希望景观的不稳定配置可以预期地崩溃。例如,悬垂太重的物体会在“高应力”体素处断裂并折断,而具有不对称腐蚀基础的柱体也会破裂。我正在考虑向地形中的每个体素添加一个“应力矢量”字段,并执行以下操作(伪代码): foreach voxel in terrain foreach neighbor in voxel.neighbor_voxels() if magnitude(voxel.stress - neighbor.stress) > stressThreshold detach_voxels(voxel, neighbor) 但是问题是我不知道如何计算这些单独的压力。是否存在某种专门用于体素离散化的基于FEA的算法,可以用来计算每个体素的压力?还是我将这一切都弄错了,还有其他方法可以做到这一点?

1
平滑体素地形
作为个人项目,我正在尝试制作一个地形生成器,以创建看起来像《城堡物语》平滑地形的地形。 如果您以前没有看过,请在这里: 如您所见,它是块和“平滑”块的组合。 我试图模仿这种外观的方法是为每个表面块提供一个迷你高度图。通常这是可行的,但存在一些问题,产生如下所示的地形: 问题是每个块都是1x1x1,但是有时特定位置的高度为负或>1。在这种情况下,我将其裁剪并将高度设置为0或1。 为了更好地说明我的意思,下面是一个图: 为了生成高度,我基本上做了: genColumn(int x, int z) { int highestBlockY = (int)noise2d(x, z); bool is_surface = true; for(int y = max_height - 1; y >= 0; y--) { Block b; if(is_surface) { b = Block.Grass; b.HasHeightMap = true; // generate heightmap for(int ix = 0; ix …

4
如何在Minecraft风格的游戏中实现具有遮挡的基于体素的照明?
我正在使用C#和XNA。我当前的照明算法是一种递归方法。但是,这样做很昂贵,以至于每5秒计算一个8x128x8块。 还有其他照明方法会产生可变暗度阴影吗? 还是递归方法好,也许我只是做错了? 似乎递归的东西从根本上来说是昂贵的(每个块被迫遍历约25k块)。我当时正在考虑使用一种类似于光线跟踪的方法,但是我不知道这将如何工作。我尝试的另一件事是将光源存储在一个列表中,并为每个块获取到每个光源的距离,并使用该光源将其照亮到正确的水平,但随后照明将穿过墙壁。 我当前的递归代码如下。在清除并重新添加阳光和手电筒之后,从不具有零光照水平的块中的任何位置调用此方法。 world.get___at是一个可以在该块之外获取块的函数(该块位于块类内部)。Location是我自己的结构,类似于Vector3,但是使用整数而不是浮点值。light[,,]是该块的光照图。 private void recursiveLight(int x, int y, int z, byte lightLevel) { Location loc = new Location(x + chunkx * 8, y, z + chunky * 8); if (world.getBlockAt(loc).BlockData.isSolid) return; lightLevel--; if (world.getLightAt(loc) >= lightLevel || lightLevel <= 0) return; if (y < 0 || …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.