构建3D地形编辑器时该从哪里开始?[关闭]


22

我正在寻找构建(作为开始)一个简单的工具,该工具可以升高,降低,平滑和纹理化地形。

那么,要做这样的地形编辑器我需要经历什么?

也许有关于该主题的宝贵资源可用?

是的,忘记了,我对3D地形编辑器感兴趣。

Answers:


24

对于“经典” 3D地形编辑器,步骤可能是:

生成一个网格(例如,正方形的网格,每个正方形由两个三角形组成),所有顶点在三角形之间共享(因此每个相交处只有一个法线)。 在此处输入图片说明

应该将其制成3DMesh并在程序中呈现。

制作一个工具来升高和降低(变大和变大)网格的一部分(您需要计算鼠标光标在网格上的位置并修改网格顶点,但只能向上和向下)。

创建一个大的纹理(例如1024x1024x4或更高),并使用splat-map对其进行纹理处理: 在此处输入图片说明

可以对其进行绘制(例如,使用R,G,B或Alpha,而不是粉红色),并选择替换那些难看的原色(红色,蓝色,绿色,Alpha)的纹理,或者用它们来表示:

着色器(您将需要创建)应将这些漂亮的纹理(例如石头,草等)与splatmap中的强度(丑陋的纹理)相乘,然后将整体混合在一起,使其看起来例如(与只喜欢2种颜色),就像这样: 在此处输入图片说明

很抱歉看到大图,我在工作中把它混在一起。


嗯,这使它更清晰了。从理论上讲,在3D网格之后,只是简单地重新定位顶点(上/下),并且在此示例中进行纹理化,您已经完成了“ splatmap”方式,此后,着色器将其类似于“ 3D”地形吗?
joltmode

1
为3D网格更正。着色器对网格物体(顶点着色器)没有做任何特殊的事情,最重要的工作是在片段着色器(“像素着色器”)中,从splatmap查找的texel提供了多少草,石头等最终像素会得到(您当然也可以有一个“基础”纹理,例如,石头总是100%,其他纹理会溅到上面)。
Valmond

6

首先要弄清楚地形的数据结构以及编辑器的要求。是网眼吗?高度数组?某种Minecraft风格的体素系统?您是否需要能够添加树木和建筑物等网格地形特征?手动,自动还是两者兼而有之?我可以继续,但是你明白了。

基本的地形编辑器并不难编写,但是具体细节会因您所制作的游戏以及要制作的地形类型而有很大不同。


好吧,网格/阵列,高度/体素等只是存储关联数据的一种方式,我更感兴趣的是,如何编写工具来填充此数据。实际上,我完全不知道地形编辑器在“幕后”的外观。我可以指责工程师,但只能以自己的方式,我敢打赌我应该遵循一些指导原则……
joltmode 2011年

2
-1。对我来说,这似乎没有什么答案。您在问一些问题,这些问题更适合作为评论。
bummzack 2011年

5

这主要是对Valmond的回应的后续行动,但似乎还不够简短,不能补充评论。

着手制作基本的编辑器后,您可能想尝试完全在GPU上生成高度图。这是完全可选的,但这是将工作卸载到GPU以便不断变化的地形的好方法。Valmond已经提到在像素着色器上完成纹理喷涂,但是也可以使用顶点着色器,使用纹理查找来升高和降低网格中的顶点。这是有关如何使用顶点着色器完成此操作的教程。非着色器内容是C#和XNA特定的,但重要的内容是在着色器代码中。

在这种情况下,您在CPU端的代码将只处理修改存储在内存中的灰度纹理。您的网格保持平坦,顶点不会被CPU更新。每次更改纹理时,可以将新纹理传递到GPU。

请记住,并非所有的着色器模型都支持顶点着色器上的纹理采样(例如,在HLSL中,您至少需要着色器模型3.0)。


0

您可以看一下Ogre的ETM http://www.ogre3d.org/addonforums/viewforum.php?f=16,它应该给您一些想法。如果您想查看它的运行情况,Artifex Terra将基于它。


2
我建议您合并答案并删除未使用的答案。
joltmode 2012年

对于由GPU创建/操纵的地形,请查看Gilliam de Carpentier的Scape文章,该文章内容非常丰富。decarpentier.nl/scape-render
约翰

正如Tom所建议的那样,有关Scape的文章可能已经作为生成和渲染地形的有趣参考。但是自从提出该建议以来,我已经发布了另一篇与该主题更为相关的Scape文章,完全涵盖了其基于画笔的编辑管道。所以我虽然会让你知道。www.decarpentier.nl/scape-brush-pipeline
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.