Questions tagged «voxels»

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

5
使用大量的多维数据集。改善效能?
编辑:总而言之,我有一个基于体素的世界(《我的世界》风格(感谢共产主义鸭子)),其性能不佳。我对消息来源并不满意,但希望获得关于如何摆脱它的任何建议。 我正在一个项目中,世界由大量的多维数据集组成(我会给你一个数字,但这是用户定义的世界)。我的测试之一是(48 x 32 x 48)块。 基本上,这些块本身不会做任何事情。他们只是坐在那里。 当涉及到玩家互动时,便开始使用它们。 我需要检查用户鼠标与哪些多维数据集交互(鼠标悬停,单击等),以及在玩家移动时进行碰撞检测。 现在我一开始有大量的滞后,遍历每个块。 我设法通过遍历所有块并找到哪些块在字符的特定范围内,然后仅遍历那些块以进行碰撞检测,来减少这种滞后。 但是,我仍然要压低2fps。 有人对我如何减少这种滞后有其他想法吗? 顺便说一句,我正在使用XNA(C#),是的,它是3d。
12 xna  3d  frame-rate  voxels 

3
为体素立方体景观优化网格
尝试在Unity 3D中创建我的世界/乐高世界风景(通过立方体程序生成的体素风景),我发现为这些风景创建的网格占用了大量内存。网格当前仅由多维数据集可见侧的顶点组成。复杂地形的内存使用可能需要6或700兆。 这些网格可以优化,但是我正在努力寻找一个合适的算法来做到这一点。 该算法必须考虑到您不希望“合并”具有不同地形类型的块。我想一个真正简单的开始可能是只处理一个轴上的所有块,并对其他两个轴进行额外的扫描。 我需要保持网格形状,即不要将顶点合并到更改空白或实体空间的位置。原因是,可能仍需要在网格周围导航的生物/等。因此,我不能只创建一个非常低的细节,扭曲的网格。 有任何想法/建议/提示吗?

2
用Perlin蠕虫产生洞穴
我目前正在尝试使用3D Simplex Noise生成类似于Minecraft的体素地形,并且还希望实现洞穴。 我在此线程中找到了Perlin Worms的方法,该方法产生了非常好的结果。但是,我不知道如何逐块生成它。这是否可能,或者有其他替代方法可以逐块地产生类似洞穴的蠕虫吗? 编辑:这是我不知道如何解决的问题。 编辑2:这是将2D脊状多重分形噪声与“单纯形噪声”高度图组合而成的结果。仍然需要一些调整,但这几乎是我想要的结果。感谢Byte56。

2
在游戏中如何进行结构分析(例如:桥梁建筑,挖掘或死亡以及3D)?
据我了解,典型的交互式桁架系统将需要进行大量计算,因为每个组件都会影响整个系统。我认为您可以在仿真中以准确性为代价随意停止给定的迭代次数,但是我不知道这些游戏是否使用了这种方法(桥梁游戏是桁架系统的一个示例)。另一方面,像Dig或Die这样的游戏具有非常复杂的结构系统,该系统还考虑了扭矩(我认为)和压缩,并且运行速度非常快,并且可以在非常广泛的系统上运行。我猜基本计算可能是相似的,但是如果没有,我对两种方法都感兴趣。 你们知道这些是怎么制成的吗?它们有任意限制吗?还是完全使用了不同的算法?另外,我想你们想出的任何方法都可以应用于3D系统,但如果不是,或者如果不明显,请至少提供一个有关如何将其用于3D的线索,因为我对2D和3D都感兴趣游戏。 我知道我不应该在这里感谢,但是我发现不至少要感谢您的时间是不公平的,我希望不要删除此段。 编辑:如果我要猜测,我会说Dig或Die为每个块存储矢量,然后运行一个迭代算法,直到模拟的额外精度对于系统的限制毫无意义(例如,系统太大而无法崩溃),因此受到半任意(因为它基于应用程序)迭代次数的限制。但是我可能是错的。

2
如何制作自然的体素
我正在开发体素游戏,但我认为我使用了错误的技术。我目前使用扁平砖砌块,并且我认为有一种更好,更有效的方法。 我看过一个自然看似地形的体素游戏。我的意思是非阻塞。该游戏每立方米有4 * 4 * 4个块,并且块如泥土,沙子和石头,具有圆形边缘以及融化在一起(类似于普通游戏)。继承人截图 如何实现的?

3
查看两个体素是否互连的算法
我正在寻找以下问题的良好算法:给定3D体素网格(可能为空或填充),如果我选择两个不相邻的体素,我想知道它们是否通过以下方式相互连接其他体素。 例如(为了说明2D的情况),其中#是实心正方形: 1 2 3 a # # # b # # c # # # 如果我选择a3和c3,我想尽快确定它们是否已连接;如果在a3和c3之间存在通过填充像素的路径。(当然,实际情况是在3D体素网格中。) 我已经研究了泛洪算法和路径查找算法,但不确定如何选择。两者都执行不必要的工作:洪水填充会尝试填充所有体素,但这不是必需的。寻路算法通常与寻找最短路径有关,这也是不必要的。我只需要知道,如果有是一个路径。 我应该使用什么算法? 编辑:根据评论,我认为应该添加以下内容:体素的内容事先未知,并且还需要算法来检测是否删除(清空)体素是否会导致该组体素破裂分成两个或更多个较小的组。

2
如何为动态世界实现符号距离场射线行进?
我想我了解“签名距离场射线行进”的基本知识。您使用一堆距离场(例如:http : //iquilezles.org/www/articles/distfunctions/distfunctions.htm)为场景建模,然后对于投射射线的每个像素,从射线的起点开始,找到到该点最近的物体的距离,然后将该点增加最近的距离,直到您碰到东西。我设法制作了一个简单的渲染器,这是该技术的大多数描述都停止的地方。 这使我对如何在实际场景中使用SDF Ray Marching提出了一些疑问: 问题1:在真实游戏中,场景通常很复杂,并加载到CPU上,并带有许多动态对象。我了解基本的遮挡剔除(例如八叉树),并且通过多边形渲染,可以在视锥中创建要渲染的项目列表(在CPU上)。 因此,想象一下我有一个非常复杂的场景,其中许多字符和动态对象在屏幕上移动,并由CPU控制。如何将每帧要渲染的对象流式传输到GPU?每个示例都将场景硬编码为GLSL。有人可以分享动态传输到着色器的级别的示例吗? 问题2:物体如何具有多种颜色?distance函数仅返回一个距离,但是实现通常如何将颜色传回?(例如,您击中了一个红色的球体,而不是一个蓝色的立方体。)如果这是一个CPU实现,那么在终止光线行进器时,我可以在distance函数内部调用一个global函数,这也可以传递被击中对象的纹理/颜色。但是,如何在GLSL中返回商品的颜色或纹理? 谢谢。

2
如何有效地确定基于3D体素的房间是否密封
我一直无法有效地确定大型房间是否封闭在基于体素的3D房间中,因此遇到了一些问题。我正在尽最大努力在不寻求帮助的情况下解决问题,但还没有尽力放弃,所以我在寻求帮助。 为了澄清起见,密封是房间内没有孔。有氧气密封器,用于检查房间是否密封,并根据氧气输入水平进行密封。 现在,这就是我的操作方式: 从封口砖上方的块开始(通风口在封口的顶面上),递归遍历所有6个相邻方向 如果相邻的图块是完整的非真空图块,请继续执行循环 如果相邻的块未满,或者是真空块,则递归检查其相邻块是否存在。 每次检查图块时,递减计数器 如果计数为零,则最后一个块与真空砖相邻,则返回该区域未密封 如果计数为零,并且最后一个块不是真空块,或者递归循环在计数器为零之前结束(没有真空块),则该区域将被密封 如果该区域未被密封,请进行一些更改以再次运行循环: 检查相邻块中的“透气”砖块而不是真空砖块 代替使用减量计数器,直到发现没有相邻的“透气空气”砖块为止。 循环完成后,将每个选中的块设置为真空砖。 这是我正在使用的代码:http : //pastebin.com/NimyKncC 问题: 我每3秒运行一次此检查,有时一个封闭程序必须循环遍历数百个块,并且在一个拥有很多氧气封闭程序的广阔世界中,每隔几秒钟的这些多个递归循环在CPU上可能很难。 我想知道是否有人在优化方面有更多经验可以帮助我,或者至少可以指出正确的方向。谢谢你
10 java  voxels  recursion 

4
渲染地图上地球大小的Minecraft需要什么样的硬件?
我一直在思考这个问题。使用当前技术是否可以在基于体素的游戏中创建地球的1:1复制?存储这张巨大地图的最佳数据结构是什么?应该使用哪种算法实时呈现此数据结构? 这些问题做出以下假设: 每个体素的分辨率为1立方米。 为了简单起见,每个体素仅需要1个字节的元数据信息。该信息将用于存储识别体素的“类型”(地球,水,岩石等)。 土方体积为1 * 10ˆ21立方米。 在“当前技术”中,我包括市售的任何东西,但不包括超级计算机。 仅将地球地形和测深法用于生成地图。排除人类建筑,植物或洞穴。地下街区将根据地质研究进行选择,例如:如果深度大于3000 km,则渲染“岩浆”体素。 就像在《我的世界》中一样,地图不是静态的,可以在游戏中进行修改。 “无限”的绘制距离是一个很大的优势,如果您不能飞起来观察整个星球,那么将整个地球放在地图上有什么意义呢? 当我想到这个问题时,我得出的第一个结论是,以线性方式存储地球数据是不可行的,假设每个体素仅占用1个字节的内存,那么仍然需要1个零字节来存储地图。因此,需要某种压缩方式。 我认为体素八叉树可以压缩地图,但是我不确定多少。该体素贴图的熵可能很低,因此我猜想可以实现很高的压缩水平。 免责声明 这是一个理论问题,我无意编写体素地球 编辑 ESA GOCE已经以1cm-2cm的精度绘制了大地水准面。我相信这些信息可用于生成非常精确的地球高度图。这样就无需使用算法来填补地球地形中的空白。

2
在C ++中为体素引擎存储体素
我正在尝试编写一个小的体素引擎,因为它很有趣,但是却很难找到存储实际体素的最佳方法。我知道我将需要某种类型的块,因此我不需要在内存中拥有整个世界,而且我知道我需要以合理的性能渲染它们。 我了解了八叉树,据我所知,它以1个多维数据集开头,在那个多维数据集中可以再有8个多维数据集,在所有这8个多维数据集中可以是另外8个多维数据集,等等。但是我认为这不适合我的体素引擎,因为我的体素多维数据集/项目都将完全相同。 因此,另一种选择是只创建一个大小为16 * 16 * 16的数组,并将其作为一个大块,然后用项目填充它。没有零件的零件的值将为0(0 =空)。但是,这恐怕会浪费大量内存,而且速度不会很快。 然后另一个选择是每个块的向量,并用多维数据集填充它。多维数据集在块中保持其位置。这样可以节省内存(没有空气障碍),但是在特定位置查找多维数据集要慢得多。 所以我真的找不到一个好的解决方案,我希望有人可以帮助我。那么,您将使用什么?为什么? 但是另一个问题是渲染。使用OpenGL读取每个块并将其发送到GPU很容易,但是非常慢。每块生成一个网格会更好,但是这意味着每次我打破一个块时,我都必须重建整个块,这可能会花费一些时间,导致轻微但明显的打ic,我显然也不想这样做。因此,这将更加困难。那么我该如何渲染立方体呢?只需在每个块的一个顶点缓冲区中创建所有多维数据集,然后渲染该多维数据集,然后尝试将其放入另一个线程中,或者有其他方法吗? 谢谢!
9 c++  voxels 

5
为什么在Vector3s中不能使用运算符'> ='?
我正在尝试获得一个矩形,以便在我称为_positionA和的两个位置之间移动_positionB。两者都是类型Vector3。矩形移动得很好。但是,到达时_positionB它不会像应该的那样朝相反的方向移动。 我回到代码中看一看。我得出的结论是,随着对象的移动,if代码中的语句错过了rects位置等于的框架_positionB。如果rects的位置大于或等于, 我决定将代码修改为反向_positionB。我的代码不太长,因此我将在下面显示它: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

1
生成用于地形生成的Octree
我以前已经实现了行进立方体/四面体以渲染IsoSurface。它可以正常工作(YouTube),但是性能却很糟糕,因为我从来没有绕过根据视距实现可变的“细节级别”(甚至删除了旧的,遥远的块)。 我决定再次尝试一下,这次要正确地做。我首先创建了一个OctreeNode,它在Build()被调用时的工作方式如下。 如果块太小而无法构建,请立即返回。 算出表面是否穿过该块的体积。 如果是这样,则决定我们是否要提高LOD(因为相机已关闭) 如果是这样,则生成8个子代并对其调用相同的过程 如果没有,请使用当前节点的尺寸构建网格 一些伪代码: OctNode Build() { if(this.ChunkSize < minChunkSize) { return null; } densityRange = densitySource¹.GetDensityRange(this.bounds); if(densityRange.min < surface < densityRange.max) { if(loDProvider.DesiredLod(bounds)² > currentLoD) { for(i 1 to 8) { if(children[i] == null) { children[i] = new OctNode(...) } children[i] = children[i].Build(); } } …
9 unity  c#  voxels  octree 

2
有人可以解释双重轮廓吗?
我一直在尝试了解体素渲染,并一直在研究双重轮廓(DC)。 到目前为止,我对此非常了解: 对一组网格点运行密度函数(即噪声函数) 查找网格中哪些边缘包含端点之间的变化 从这些边缘创建交点(即矢量) 现在这是我遇到的问题,接下来是生成法线,但是如何?在查看此主题时,此图像通常会出现。 研究表明,法线将从等值面生成。认为我从噪声到等值面再到法线是否正确?如果是这样,我将如何完成每个步骤? 据我了解,下一步将是DC论文中的以下内容; 对于每个显示符号变化的边,生成一个四边形,连接包含该边的四个立方体的最小顶点。 上面的图片代表这个报价吗? 最后,下一步是使用相交点和法线运行QEF,这将生成我的顶点数据。它是否正确?

3
如何像Minecraft一样处理Block World
我想写一个像《我的世界》这样的带有方块世界的简单游戏。我的理论问题是在播放期间处理此块信息的最佳方法是什么。我的第一个想法是一个庞大的数组,但是我认为这将导致内存不足。也许我只需要在播放器附近加载块。 如何处理从文件中加载所需的块信息并仅将所需的信息保留在内存中?
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.