Procedural开源库合辑

Procedural开源库合辑

博物纳新合辑推荐第二期来啦!这一期给大家带来的主题是“Procedural程序化的生成方法”,程序化的生成方法常用于Rougelike、沙盒游戏以及大型MMO的随机关卡地图的生成。希望以下分享可以帮助到有需求的开发者。

Procedural开源库推荐合辑

  • LevelGenerator
  • UnityCodingExamples
    - Procedural Water Surface
    - Procedural Landscape
    - Procedural Audio
  • ProceduralLandmassGeneration
  • ProceduralCity
  • RoadGeneratorUnity3d
  • ProceduralCaveGenerator
  • WaveFunctionCollapse

1. Level Generator

开源库链接:https://lab.uwa4d.com/lab/5b562335d7f10a201fd851e6

请输入图片描述
Level Generator是我很喜欢的一个地牢关卡生成工具。借助LevelGenerator关卡生成器,你可以一键生成具有随机属性和内容的房间模版以及一些连通的通道,进而创建完整的室内关卡。

请输入图片描述

请输入图片描述

该插件提供了一些便于关卡编辑的工具:

请输入图片描述

Chunk and Hallway editor:房间和走廊编辑器;
Level Generator window:关卡生成器,这里的Save&Load功能是针对配置而非关卡场景;
Component window:组件生成器,用于给房间附加一些属性,如size,door,procedural mesh等,详细的插件使用说明请从开源库原文中获取。


2. Unity Coding Examples

开源库链接:https://lab.uwa4d.com/lab/5b458449d7f10a201fb3159c
该项目由三个小示例组成,分别是水、地形和音频的程序化生成,下面就由小编我来为大家逐一介绍这三个demo:

a.Procedural Water Surface

请输入图片描述

该项目展示了在Unity3D中,如何仅使用C#代码制作动画水面效果。
其中的核心WaterController的大致运作原理如下:
1)当程序开始运行时,WaterController会构造一个沿X轴和Z轴延伸的Mesh网格;
2)该网格的顶点会被固定在沿X和Z轴的位置,但可以沿Y轴平移(水面垂直方向);
3)图中我们可以看到有五个红点,被Tag为wavesoures,作为水波的中心,即波源;
4)WaterController会收集wavesoures的位置,并将其储存在List中;
5)对于每一个波源的位置,WaterController将一个正弦函数应用于每个网格的顶点;
6)应用于每个顶点的正弦函数在每个帧中相加并更新,从而产生类似于流体表面的水面动画效果。

b.Procedural Landscape

请输入图片描述

该项目展示了在Unity3D中,如何使用C#代码在U3D中创建程序化地形,并允许该地形可以进行实时的更改。
ProceduralLandscapeController:

  • Animate:动画模式,可以在运行时播放不同参数下的场景预览,具有一定得参数参考价值;
  • Layer(n)Scale:沿X和Z轴缩放;
  • Layer(n)Height:沿Y轴缩放;
  • Layer(n)X-offset:沿X轴移动;
  • Layer(n)Z-offset:沿Z轴移动;
  • Peak Color:峰值颜色;
  • Bottom Color : 峰谷颜色;
  • Material Smoothness:设置材质的光滑度;
  • Material Metallicness:设置材质的金属度

c. Procedural Audio

请输入图片描述

该组件功能可以概述为:音调生成 (主音量和频率),音调选择/混音(窦波,方波,锯波),调幅,调频。
该组件使用了Unity的API:OnAudioFilterRead,它可将音频数据转换成浮点数组。通过在这种低水平的数据流中应用一些非常简单的数学,您可以(理论上)产生任何声音或制作您喜欢的任何音频滤波器。

请输入图片描述ProceduralAudioController组件参数说明


3. Procedural Landmass Generation

开源库链接:https://lab.uwa4d.com/lab/5b5cd12cd7f10a201fe9680d

请输入图片描述

请输入图片描述

请输入图片描述

Procedural Landmass Generation是一个程序化生成地形的开源项目。
作者Sebastian Lague将项目以教程的形式,根据技术核心细分成了21个视频发布在Youtube上,一步步展现了程序化地形的生成步骤,内容非常细致,即使对于刚入门的小白,也一定能从中收获很多。

教程主要包含了以下内容的展示:

  • 噪点图的处理;
  • 采用不同的着色器颜色表示不同高度的海拔;
  • 无尽地形的实现;
  • 地图块之间的接缝;
  • 地形的高度衰减;
  • 法线计算;
  • 平面着色、彩色和纹理着色器;
  • 修复差距(解决在低细节层级的地图块之间会出现一些很明显的接缝的问题)
    ......

4. Procedural City

开源库链接:https://lab.uwa4d.com/lab/5b5643b6d7f10a201fd8e2b8

请输入图片描述

Procedural City是一个示例项目,它使用一些技巧来构建随机漂亮的3D城市,实现过程如下:

1.(打地基)将领域块随机分配在不规则的矩形网格中,以下称该矩形网格为“块”;

请输入图片描述

2.(修正房型)使用Bin打包算法把构建分配打包在“块”内(Bin打包使用的是尝试最大化“Bin”边缘接触的启发式算法),这样可以使边缘的单位更好地拟合分配。填充“块”之后,如下图所示,会将中心非边缘的黄色分配区丢弃,就形成了如同中的包围型建筑的样子。如此,矩形建筑群便不会显得很规则,更有随机性。

请输入图片描述

3.(外部装修)首先,在每个分配区生成建筑物。然后,在建筑的外立面装饰两个图案矩阵,一个实现一些简单块的挤出,另一个确定应将哪个元素(例如栏杆、窗口、门)附加到外立面中的哪个位置。最后,在屋顶上放置一些预制体,下图的GIF依次展现了以上四个步骤的过程态。

请输入图片描述

该项目的构建技巧可以作为很好的参考,但是考虑到建筑的每个Mesh都是独立加载的,导致DC数较高,实际运行的开销较大,开发者可以考虑使用ProceduralMesh的方式去修改建筑本体,而非一层一层地嵌套建筑外设。也可以使用其他的办法在场景加载前合并网格,以达到更优的性能。


5. Road Generator Unity3d

开源库链接:https://lab.uwa4d.com/lab/5b560aefd7f10a201fd7e293

请输入图片描述

请输入图片描述

Road Generator是一个可以为跑步或赛车类游戏生成无尽赛道的工具脚本。
只需在一个空的GameObject上挂载Road Generator脚本,并设置所需的参数即可运行,主要参数如下:
ChunkLength:跑道块的长度;
DrawingAmount:同一时间内激活的块数;
Number of Chunks:场景中实际存在的块数

建议:通过该脚本生成的跑道较为基础,开发者可以为单位跑道块设置一些随机元素,使跑道具有一定的随机性。此外在测试中,小编发现该赛道的动态生成是单向不可逆的,这意味着角色没有“回头路”可走。这个问题可以参考上周的【博物纳新】《Unity海洋场景构建》中的解决方案,将Mesh的加载改为跟随角色而非单向。


6. Procedural Cave Generator

开源库链接:https://lab.uwa4d.com/lab/5b5a51e6d7f10a201fe4b11b

请输入图片描述

请输入图片描述

Procedural Cave Generator是一个高度可定制的系统,你可以利用这个系统在Unity中去生成类似图示中的几种随机洞穴效果,当然材质是需要自己提供的。

请输入图片描述

如上图所展示,这个项目令人惊喜的是,你可以在任何绘图程序中绘制地图并将其作为纹理导入此项目,然后点击菜单上的Assets/Create,再将导入的纹理放入地图持有者的插槽中,就可以在生成器中使用该模块将绘制的地图渲染为3D洞穴。


7. Wave Function Collapse

开源库链接:https://lab.uwa4d.com/lab/5bf080be72745c25a8e1689b

请输入图片描述

请输入图片描述

Wave Function Collapse是一个使用WFC(Wave Function Collapse)算法制作的3D城市漫游场景,当然作者还提供了类似跳跃、飞行等简单等操作功能。

在测试中,小编发现,随着游览的路径增加,虽然场景有在动态地加载和销毁,但是当你走回销毁的场景,那个场景还是原来的场景,程序需要记住所有加载过得场景,因此随着加载过的场景越来越多,RAM的使用量在不断地增加,销毁操作实际上是一种伪销毁,可以说是美中不足吧。而且在这个场景中走多了真的很自闭,缺乏开阔式的随机场景也是一种遗憾,当然这都不是该项目所展示的核心内容,WFC的3D变体才是该项目所想展示给我们的。

请输入图片描述

如上图所示,WFC算法是一个利用了波函数坍塌,实现高随机性的算法,可用于制作非常多有意思的效果。

WFC算法开源库链接:https://lab.uwa4d.com/lab/5c1254f872745c25a8bc7c27

快用UWA Lab合辑Mark好项目!

请输入图片描述

今天的推荐就到这儿啦,或者它可直接使用,或者它需要您的润色,或者它启发了您的思路~
请不要吝啬您的点赞和转发,让我们知道我们在做对的事。当然如果您可以留言给出宝贵的意见,我们会越做越好。