程序制作月亮

图片

不久前,我们建立了一个月球创造系统。 我们的目标是制造与我们的太阳系中存在的卫星相似的大小和组成。 主要的困难是获得此类卫星及其内部的广阔表面,以使它们仍然很有趣。 此外,我们需要以清晰的细节渲染卫星,而不管它们之间的距离如何。

该系统假定卫星具有球形底。 测地线网格的创建应用于基础球体,以确保曲面所有部分的面积相同。 系统仅将此结构作为程序生成的计算网格应用;月球的实际表面将比生成网格更平滑。


测地线

为了获得小的锯齿状卫星,低频3D噪声会扭曲基本的几何形状。


噪声失真的测量范围

从这个基础开始,系统使用了一系列同心壳。 每个单元确定随后的同心壳的体积特征。 最外层的外壳定义了月球的表面特性。


同心壳

每个包层可能会因该包层特有的低频3D噪声而失真。 如果选择此生成选项,则内壳甚至可能大于外壳。


外壳变形

在上面的图中,壳体之间的距离和变形量被放大以更清楚地显示施工过程。 实际上,壳之间的距离会更近,并且它们的变形幅度会成比例地变小。

下面我们将讨论如何创建最外壳。 创建内壳时适用相同的原理,因此我们将不对其进行详细介绍。

程序性月球系统需要实时组件和脱机组件。 实时组件在播放器的计算机上运行。 脱机组件在游戏开发者计算机上运行。 脱机生成组件创建可以快速补充实时组件的信息。

球形壳中的每个顶点都被分类为属于一个单独的生物群落。 生物群系是一组表面属性,包括:高度,材料的分布,标本的放置以及材料的着色。


生物群落的例子

生物群系信息包含丰富的熵属性,例如火山口,干燥的海洋,由引力潮引起的表面裂缝。


生物群落信息中记录的大火山口

生物群落的定义还包含用于放置物体的规则,这些规则决定了小零件(石头,鹅卵石,壁架等)的位置,频率和随机性。


摇滚实例

每个生物群系都是由图块(图块)放置的元素创建的,因此实时组件可以将相同的信息应用于月球的不同部分以及其他卫星。 生物群系信息的生成应使可能的快速变形和重新排列成为可能,从而减少重复和可预测的环境模式的数量。

该系统使用两种类型的生物群落图块:过渡和隔离。

生物群落的过渡信息发生在生物群落进入相邻生物群落的区域。 孤立的生物群落信息发生在系统保证不存在邻近生物群落的区域。

这两个分开的模式是必需的,因为生物群落的某些元素(例如火山口)只能位于生物群落无法转移到另一个生物群落的区域中,因为生物群落之间的过渡会影响浮雕元素的高度轮廓和外观。

以下是月球的简化示例,它使用三种不同的生物群落:极地,热带和赤道,分别以红色,蓝色和绿色着色。


月亮与三个生物群落

具有孤立生物群落的区域具有统一的颜色;在具有过渡生物群落的区域中,颜色混合。

该系统使用一组预先计算的噪声将可变性引入生物群落之间的过渡区域,从而创建从一个生物群落到另一个生物群落的有趣且独特的过渡。


程序噪声应用于生物群落之间的过渡

在上面的图像中,生物群系每个部分的大小相对于月球的大小被放大,以便更清楚地显示创建生物群系的技术。 一个单独的生物群落场所将覆盖大约10 x 10 km。 半径为1,500 km的卫星的表面积将为30,000,000 km 2 。 覆盖该表面将需要近300,000个此类区域。


半径为1,500 km的月球生物群落网格的分辨率

生物群落网格的解析可能导致大量生物群落位点。 系统不会单独跟踪每个站点,因为每个站点的位置都可以通过分析计算得出。 可以从高级生物群系图中分配大多数站点的生物群系。

从远处观看时,高级生物群落图可确定卫星的关键特征。 该系统使用这些地图以更接近的形式生成其他细节,从而在从不同距离查看时,可以保持月球定义的均匀性。

高级生物群落图是2D图像,可以使用2D参数化将其放置在月球表面上。 地图的每个点都包含在表面或内壳的相应位置中普遍存在的生物群落的数字标识符。


2D生物群落图

上图显示了具有四种不同类型的生物群系的地图(蓝色,红色,黄色和白色)。 使用2D参数化将图像叠加到球体上。 一种可能的参数化如下所示:


生物群落ID映射的2D参数化

除了生物群落识别图,该系统还允许使用其他地图,例如包含高度和表面颜色的地图。


长距离月影和渲染

每个图像中的一个像素可以覆盖4 km 2 ,因此其创建具有成本效益。 这样的高度图和颜色图可以由程序生成或由艺术家绘制。 在仅使用十几个卫星的项目中,每个月亮都应具有丰富而独特的自然属性,因此最好在此阶段使用艺术家的作品。

下图显示了生成护套表面高度和其他属性的过程:


用于建造月球的三个秤

月亮将至少由一个球形壳组成。 如果存在多个壳体,则系统会根据它们的最大半径和壳体高度的函数来挤压内壳,这是通过执行上述不同比例的过程获得的。

月球设计师为每个壳体创建一个高级别的生物群系分布图,该图上找到的生物群落的生物群系定义以及该生物群落中发现的材料的标识。

该系统认为空气是可接受的材料,因此可以用于在任何壳体中创建空腔。


月球浮雕的横截面,可见各种贝壳

单独的壳体也可以是体积对象,其深度由一堆材料设置。 堆栈信息存储在生物群系中。


一堆由六种材料组成的材料

由于地下物质很少到达地面,因此可以用比生物群落表面物质低得多的分辨率来描述它们,并且本地程序噪声的使用对于玩家来说仍然是看不见的。

材料堆栈的功能可能足以进行布局,因为堆栈中的某些材料可能很少。 生物群落设计者可以自定义堆栈上任何材料的流行程度和样式。

程序生成由GPU着色器和体素CPU算法执行。

着色器为三个比例尺的每一个计算片段的颜色,并根据相机和片段之间的距离混合这些样本。

所有太小而无法在几何图形中对齐的零件。 但仍会影响表面的感知复杂性,它们会根据对材料,生物群系的程序确定或用于确定月球的高级图而实时记录在实时生成的法线图中。 因此,场景中的多边形数量很少。

只要在相机中可以看到月亮,就必须为此付出代价,生物群系和高级清晰度图必须存储在GPU中。 您可以仅对渲染月球当前比例所必需的那些mip纹理使用选择性加载。 由于在更改观察者位置时从GPU进行流式加载和卸载,因此所需的GPU内存总量降至最低。

当由于靠近相机而使单个元素变得足够大时,它们会使用实时体素生成开始出现在几何图形的输出中。 这同样适用于玩家变形或挖出的月亮的所有部分。 如果变化足够大并且可以从轨道上观察到,则自适应场景管理器Voxel Farm会提高所有区域的细节级别(LOD),应用程序认为此变化很重要。

Source: https://habr.com/ru/post/zh-CN468305/


All Articles