[Unity] 运行时程序化生成 技术概览及学习资料

| 引言
前几天投稿的一份技术玩具分享视频收到了很多朋友的鼓励,也一并收到了很多想对此进行学习的私信/留言,所以将自己

| 开源工程?
https://github.com/striter/Unity3D-ToolChain_StriteR
此工程为作者学习积累Unity制作游戏相关知识的积累库,保持技术迭代,开源,并作为技术需求的前置实验场所,大多数该工程用到的技术及细节都有可以运行的[前置场景/脚本],可作为学习工程使用,即.scene结尾的标题都可以在工程内找到对应文件.
于视频展示的场景是ThePlanet.scene

| 前置
此项为Oskar


以及一个中文版的Townscaper技术全面概览
https://zhuanlan.zhihu.com/p/280013345

| 核心算法 - MarchingCube

以下两个场景都可于开源工程 使用关键词搜索检索到对应的场景代码.
推荐先学习2D版本.
MarchingSquare.scene

MarchingCube.scene

推荐视频:
https://www.youtube.com/watch?v=M3iI2l0ltbE (一个使用MarchingCube生成地形的案例)

| 网格 显示几何
几何网格(球形):

https://catlikecoding.com/unity/tutorials/procedural-meshes/

| 波函数坍塌 WaveFunctionCollapse

2D版本的波函数坍塌 WaveFunctionCollapse.scene

推荐视频(以及熟肉版本): https://www.youtube.com/watch?v=2SuvO4Gi7uY

推荐文章:
https://cowlevel.net/article/1964746
https://www.gameres.com/835537.html
关于WFC算法在该工程的结合比较复杂,后续具体单独开篇细讲.
| 生物集群 BOIDS

通过[聚集,分离,同向]三个属性影响[速度]以模拟集群生物的行为,需要进行状态混搭进行更多的行为控制.

https://zhuanlan.zhihu.com/p/376047988

| 渲染

水体渲染:
各种文章效果拼凑而来.
基础颜色及透明度由深度决定.
高光是由法线流动叠加出的效果
Grestner wave用于水波效果.
反射用的是屏幕空间平面反射的改版(将平面改成了圆)
再加一点深度插值决定的浮沫(Foam)
大气渲染:
https://www.youtube.com/watch?v=DxfEbulyFcY&list=PLFt_AvWsXl0ehjAfLFsp1PGaatzAwo0uK&index=4

| 拓展阅读
类Townscaper的不规则平面网格构建:
六边形网格前置学习
https://www.redblobgames.com/grids/hexagons/
https://observablehq.com/@sanderevers/hexmod-representation

通过对生成的六边形网格进行 切分/合并/细分/平滑等操作形成最终的平面网格
https://andersource.dev/2020/11/06/organic-grid.html
https://www.kchapelier.com/hexagrid-relaxing/

一些推荐的技术博客:
https://www.redblobgames.com/ (数学,算法基础作者)
https://iquilezles.org/articles/ (渲染,算法,ShaderToy 大佬)
https://catlikecoding.com/unity/tutorials/ (教程,算法,渲染,以及一些很新的东西)