metaball公式_基于Metaball及LSystem的3D洞穴生成

a0178ee2ba9ce77633b5d2d5174a6be9.png

洞穴结构生成

天然的洞穴形态有如下形式

2e37b797ee41b52966d336910c46b564.png

通道切面有如下形式

13fc7f6123928646f6fe61576aabddf9.png

首先使用LSystem进行结构生成

由于LSystem是一个树状结构,会产生很多死路,所以这里最后会把一定比例的死路互相连通

d2d2a195c01b6a96e826c70d9390a76f.png

符号

F前进

R顺时针偏航

L逆时针偏航

U向上倾斜

D向下倾斜

O增大角度

A减小角度

B增加每步的前进距离

S减少每步的前进距离

Z分支的尽头

0停止连接其他分支

[]起始/结束分支

使用的宏:

C 曲线路径

H 上坡结构

Q 产生一个房间

T 类似于H符号,但分成两条分支

I 直线路径

由以下公式进行生成:

fa33e150337d433c4a92600b1d01ecd7.png

c492f19633a857b5505c1ddd1eb739d6.png

这里生成的其实可以看作一堆管道

MetaBall

考虑最简单的场函数D(r)=1/R^2,假设有两个这样的场互相影响,我们画出其中的等势面,会出现两个球交融的效果,每个球都是一个metaBall

c980f7b11f7eec9f450f786ec9a736b4.png

一般会限制场的影响范围,将其写为

2c947b7c9c3753c0baa9d5b62e5da0e9.png

a为缩放比例,b为控制点生效的最大距离。

可以进一步简化为

adf19f6becead6aaf27fc096c4d5d01b.png

当ab都为1时,即为

4caf96c940d749aab178e5ecfe44b2d4.png

此外,有一种更平滑的计算方式

bc05273c9cd091088246922bbe0b3c41.png

产生一系列metaball去影响顶点

a65b99056fe37e4d934c75f8bad9dc6e.png

5902df6cc67ec92b9feaa49eb86dd1a4.png

ref:https://blog.csdn.net/noahzuo/article/details/78596407

http://julian.togelius.com/Mark2015Procedural.pdf


版权声明:本文为weixin_39659748原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。