Articles of 形体

如何创建一个基于高度图的Minecraft风格的世界

对于我的游戏,我正尝试创建一个基于我在Photoshop中创建的高度图的Minecraft风格的世界。 我试图制作7平方的地图,每个立方体都是1立方,但是我还没有find办法。 高度图转换成一个地形文件(统一),但我的问题是,我不能创建我的世界的外观。 到目前为止,我所做的是这样的 我想要的是这样的

体素地形引擎

是否有像Unity一样的游戏引擎的体素框架或扩展? 我真的需要一个系统dynamic生成体素可破坏的地形。

如何有效地批量块和减less类似体素的游戏中的drawcalls

为了在类似体素的游戏中充分利用Unity中的GPU实例,我尝试尽可能多的静态块(地形不会被破坏,我不能将这些块设置为“静态”稍后我需要为每个实例分配不同的属性) 我看到了两种可能的解决scheme: •为我的游戏中的每个可能的区块创建一个预制,并使用相同的材​​质/网格/ uvs 优点:不需要巨大的textureAtlas来存储反照率纹理 缺点:某些具有许多不同地形块的场景可能难以高效分批处理,并且为每种types的块添加属性将意味着每个块预制都会发生变化(如果我拥有不止一个生物群落,则是一场噩梦) •直接在片段着色器中创建一个单独的块预制,并用MaterialBlocks抵消它的UV 优点:涉及地形块的每个场景至less在理论上应该是有效的批处理,单一的预制来描述每种types的地形块 缺点:需要一个巨大的纹理地图集,如果它不符合游戏中的所有块纹理,将需要更多的纹理,我将在未来限制我的游戏块(除非我创建具有不同纹理绑定的不同材质,击败了这个解决scheme的目的),场景中的每种块的+片段着色器开销 我在这里错过了什么? 有不同的方法吗? 如果不是,在这种情况下,您认为哪一个最合适?

行进立方体地形

在过去一周里,我一直在研究Marching Cubesalgorithm。 我希望将它用于地形,因为它可以造成地形的破坏。 在查看源代码并阅读了许多文章之后,我决定尝试自己编译一些代码,并尝试制作地形。 但是,这让我很头疼,似乎也找不到有关如何做的好资源。 http://img.ufgame.com/c%2B%2B/BbvJR.png 这是从这里find的例子 – http://www.angelfire.com/linux/myp/MC/ 相关的源代码可以在网站上find。 我将源代码添加到我的项目中,并将所有代码转换为与OpenGL 3.2一起使用。 但是,我不想在我的最终项目中使用这个代码。 (这只是我能理解的)。 我无法理解代码。 我觉得我现在理解这个algorithm,但是我似乎无法理解这个对象是如何形成的。 我怎样才能改变这个对象来创建地形? 互联网上有更好的资源吗? 提前致谢。

如何平滑体素地形的低分辨率噪声采样

我试图创建一个新的地形发生器作为一个我的世界MOD的一部分,如果它在全地形分辨率(每个地形块16x256x16体素)采样时效果很好。 这是非常滞后的,所以我试图使用一个更低分辨率的样本,x4x64x4,在每个正轴上插入一个额外的样本(5x65x5,代表20x260x20空间)。 这一切工作正常,直到我试图平滑4x4x4的地形多维数据集。 我已经尝试每个块的噪声值(0.0到2.0),沿着每个正轴插入其旁边的值,每个值通过块与块的接近程度来加权。 结果有一些平滑,但有些似乎旋转了90度,有些地方没有平滑。 我知道这是可能的,我的世界在内部(代码是难以理解的混乱,约半页,20个variables和6个循环)。 有没有人有关于可靠的平滑方法的任何想法,只知道大块的内容和北/东/上的一个样本? 我目前的噪音arrays发生器: protected double[] getNoise(float x, float z) { // get a rough noisemap every 4 blocks, 1 more past the edge to round with double[] n = new double[1625]; // x65x5x5 3D space in order y,x,z represents one chunk at 1/4 precision (1024 blocks plus 601 blocks padding […]

挖掘立方体行进的多维数据集

我最初用完全的我的世界风格的结构构建了我的游戏世界的开始:块,只有可见的面呈现,噪声等。太块了。 我执行行军立方体。 看起来很好,可怕的工作: 问题是,当你尝试添加或删除块的行军立方体……正如他们应该…一切都变得平滑。 对邻居进行光线投射变得困难,如果你把他周围的所有方块都改变了, 明显。 我看到很多正在进行立方体/元球游戏,实现区域有机成型的游戏。 您不要放置“块”来塑造一个区域,或像Landmark采矿等那样去除它。 另一方面,Blockscape和Landmark似乎是两者的混合体? 土地开始行进,但你可以从里面切出方块,把方块放在里面。 你怎么能用立方体做直角? 还是两个完全不同的系统的组合? (更新):可能有不止一个答案,有没有人有任何经验试图做到这一点虽然? 我可以想到几个可能的方法: 单独的播放器将对象构建成单独的网格/对象,每个块将地形保持为地形。 运行平滑(行军立方体或其他)algorithm和正常计算只在地形上。 可能需要某种半透明的立方体荧光笔来显示光标当前select的内容。 我可以看到这个系统有很多好处,虽然觉得好像有一些缺点,我只是没有想到会立即出现,如果我开始编码…? 定义每个立方体的“平滑”布尔值,仅在初始计算任何表面(地板/天花板等)上的网格时分配。 在生成网格时,任何构建的/添加/移除的块都不会重新标记为“平滑”,而是使用不同的math表示平滑立方体而不是块状立方体。 这正是我目前正在使用的方法,它的工作原理还不到三分之一,就像一个完整的行进立方体方法一样。 基本上我是平均每个顶点的y值与周围的四个立方体的高度(噪声)值,而绝不会让它在0或以上1(留在立方体内)。 我还必须重新编写光线点击检测以使用曲面法线。 重新编写进行中的多维数据集algorithm,只在我希望他们/做我想要他们的单元上工作。 这似乎是最困难的,但可能是最有视觉回报的方法。 要么 ??

高效的可视化体积庞大的体积

让我们考虑一个存储在八叉树或任何其他方便的结构体积庞大的体素化卷。 例如,这个卷表示一个风景,其中每个块都是空的(空气),或者它有一个特定的材料,稍后将用于应用纹理。 彼此相邻的体素表示表面的连接部分。 我需要的是一个algorithm来生成一个网格从这个体素代表音量,具有以下特征: 体素化体积中的所有“洞”都是正确的。 所有的连接是正确的,即无缝的。 表面看起来光滑。 从广义上说,我想以某种方式保留表面拓扑结构,这意味着连接的部分保持连接在结果网格中,并且曲面具有响应体素拓扑的曲率。 想象一下,试图渲染“我的世界”的世界,但让山梯平滑而不是块状。

体素(Marching Cubes)地形创作/地形编辑

即时通讯工作在基于体素的游戏统一。 地形(球 – >行星)应该从体素出来,起初我建立了像体素插件一样的Minecraft。 这意味着我有一个立方体的球体,但你可以想象,一个立方体的球体看起来不太好:P(我做了一个水平数组,存储材料在[x,y,z] – >所以当“1”代表石头,意思是等级[x,y,z] = 1;是石头,但是我决定使用行进立方体algorithm来处理我的体素行星,所以我学习了行进立方体algorithm我意识到现在我必须有一个密度函数,而不是一个包含重要信息的水平数组。 我的密度函数如下所示: x * x + y * y + z * z – rad – (noise.FractalNoise3D(x,y,z,oct,frec,amp)* scale) 噪音是由一个单一的噪音发生器脚本。 到现在为止还挺好。 我得到了一个很好的球体呈现一点点的噪音。 但是当我尝试编辑球体(地形编辑)我碰到问题。 我做了一个函数,获取鼠标和球体的碰撞坐标(x,y,z),并在这些坐标上改变水平数组中的密度。 void dig(){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit命中; if (Physics.Raycast (ray, out hit)) { Debug.Log ("Dig…"); Debug.DrawLine(ray.origin,ray.origin+( ray.direction*hit.distance), Color.green,2); editTerrain(hit); } } void editTerrain(RaycastHit hit){ int […]

Unity3D:在无限体素引擎中有效地加载块

我正在开发一个使用Unity的C#中的体素引擎,目前我正在尝试实现无限的地形,所以我看了一下其他的Unity体素引擎,它们具有无限的地形。 我已经看到了三种不同的方式: 使用字典存储块并将块数据存储在另一个字典中 使用字典存储块,并将块数据存储在每个块上 每次玩家移动时使用固定大小的arrays并移动它 使用方法1和2的引擎在块加载时相当缓慢。 使用方法3的引擎速度更快,但是每当玩家进入一个新的区块时产生延迟。 我已经尝试使用方法1来实现它,但是我的块加载速度减慢了大约10倍,所以它实际上是无法玩的。 它是如何在像Minecraft或VoxelFarm这样的高效或stream行的体素引擎中完成的? 你有体素渲染的经验,并知道一个更好的方法? 提前致谢!

在一个体素地形渲染不同的材料

我的地形模型中的每个体素数据点都由两个属性组成:密度和材质types。 每个都被存储为一个无符号的整数值(但密度被解释为介于0和1之间的十进制值)。 密度值用于生成行进立方体algorithm的网格。 我目前在地形网格上渲染这些不同材质的想法是在每个顶点存储十一个额外的属性:六个材质值对应于顶点所在的三维像素的材质,三个十进制值对应于每个顶点之间的插值每个体素和两个十进制值用于确定片段位于三角形上的位置。 材质和插值属性对于三角形中的每个顶点都完全相同。 片段着色器对与每种材质相对应的每个纹理进行采样,然后使用上述几个十进制值在这些采样之间进行插值并获得片段的最终纹理颜色。 它应该很好,但它似乎是一个大记忆猪。 我将无法在索引中重用网格中的顶点,并且每个顶点都会有大量与之关联的数据。 它也似乎很慢。 有什么方法可以改进或替代这种在三维像素地形网格上绘制材质的技巧?