【博物纳新】Procedural开源库合辑

栏目: 后端 · 发布时间: 5年前

内容简介:开源库链接:

博物纳新 合辑推荐第二期来啦!这一期给大家带来的主题是“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

【博物纳新】Procedural开源库合辑
Level Generator是我很喜欢的一个地牢关卡生成工具。借助LevelGenerator关卡生成器,你可以一键生成具有随机属性和内容的房间模版以及一些连通的通道,进而创建完整的室内关卡。

【博物纳新】Procedural开源库合辑
【博物纳新】Procedural开源库合辑

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

【博物纳新】Procedural开源库合辑

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

【博物纳新】Procedural开源库合辑

该项目展示了在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

【博物纳新】Procedural开源库合辑

该项目展示了在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

【博物纳新】Procedural开源库合辑

该组件功能可以概述为:音调生成 (主音量和频率),音调选择/混音(窦波,方波,锯波),调幅,调频。

该组件使用了Unity的API:OnAudioFilterRead,它可将音频数据转换成浮点数组。通过在这种低水平的数据流中应用一些非常简单的数学,您可以(理论上)产生任何声音或制作您喜欢的任何音频滤波器。

【博物纳新】Procedural开源库合辑
ProceduralAudioController组件参数说明

3. Procedural Landmass Generation

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

【博物纳新】Procedural开源库合辑
【博物纳新】Procedural开源库合辑
【博物纳新】Procedural开源库合辑

Procedural Landmass Generation是一个程序化生成地形的开源项目。

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

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

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

4. Procedural City

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

【博物纳新】Procedural开源库合辑

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

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

【博物纳新】Procedural开源库合辑

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

【博物纳新】Procedural开源库合辑

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

【博物纳新】Procedural开源库合辑

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

5. Road Generator Unity3d

Road Generator是一个可以为跑步或赛车类游戏生成无尽赛道的 工具 脚本。

只需在一个空的GameObject上挂载Road Generator脚本,并设置所需的参数即可运行,主要参数如下:

ChunkLength:跑道块的长度;

DrawingAmount:同一时间内激活的块数;

Number of Chunks:场景中实际存在的块数

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

6. Procedural Cave Generator

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

【博物纳新】Procedural开源库合辑
【博物纳新】Procedural开源库合辑

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

【博物纳新】Procedural开源库合辑

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

7. Wave Function Collapse

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

【博物纳新】Procedural开源库合辑
【博物纳新】Procedural开源库合辑

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

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

【博物纳新】Procedural开源库合辑

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

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

快用 UWA Lab合辑 Mark好项目!

【博物纳新】Procedural开源库合辑

今天的推荐就到这儿啦,或者它可直接使用,或者它需要您的润色,或者它启发了您的思路~

请不要吝啬您的点赞和转发,让我们知道我们在做对的事。当然如果您可以留言给出宝贵的意见,我们会越做越好。


以上所述就是小编给大家介绍的《【博物纳新】Procedural开源库合辑》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

React Native:用JavaScript开发移动应用

React Native:用JavaScript开发移动应用

【美】Truong Hoang Dung(张皇容) / 奇舞团 / 电子工业出版社 / 2015-9 / 65.00

React Native是当前移动端开发中的优秀解决方案。《React Native:用JavaScript开发移动应用》围绕着如何将一个完整App提交到App Store,讲解了使用React Native开发iOS应用所涉及的方方面面。首先介绍了Flexbox布局,教大家从零开始搭建一个初始应用,以此阐明React Native的基础运行机理;然后介绍了Flux的设计思想,怎么理解和使用Pro......一起来看看 《React Native:用JavaScript开发移动应用》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具