Making of a alien base with L-System | 使用L-system建模外星基地
更多美术向的图片请戳这里,本文主要是相关的技术分享
Procedural建模中有一套比较特殊的基于规则的方法,一般都是衍生自L-system。最早是匈牙利植物学家lindenmayer提出的,L-system也就是Lindenmayer-System的简称。自然界的植被(Speedtree),建成环境(CityEngine)基本都是基于L-Systemd的。Houdini里直接有现成的节点提供。

1. L-system, Extended L-system

不过问题是这种L-System不支持与环境交互或者与自己的交互,对local constraint和global goal没有知识。
Měch在论文Visual models of plants interacting with their environment提出了Open L-System[1],用于建模与环境交互的植被。
Parish使用L-System建模街道时提出了Extended L-system[2],有判断local constraint和global goal的条件
我们也需要一个extended l-system类似物。幸运的是Houdini VEX就是SIMD多线程并行,天生支持重写L-system。只需要让一个点代表一个L-system的字母,记录参数;之后每次都可以对所有点做遍历,满足条件的做替换。
比如规则A:FA
就可以直接写成一个solver加一个point wrangler,snippet是

每个点记录一个值,保存当前是否是需要增长的点;还存一个方向,用于L-System的F操作

2. Modelling

在笔者的项目中,尝试用了L-system
原始的建模规则是下面九条,其中A是走廊,B是十字交叉点,C是房间;
前三条替换走廊,中间三条在交叉点处按概率分叉
后三条生成房间或者继续生成走廊
不过问题就是没有考虑碰撞,会重叠起来。但是很容易就可以翻译成VEX的形式生成点,并加入限制条件。
下面就是一个生成的结果。

3. 导入引擎

Houdini生成后的模型如何导入UE4也是个问题,如果模型合并在一起导入,模型太复杂,引擎里Lightmap UV基本就展不开了,而且做不了LOD。还是得点云导入,引擎内重建
引擎内可以重写一个DataTable用于存数据,Houdini写出的数据直接拖进引擎就好了。

UE里支持导入CSV或者JSON成为datatable,Houdini这边导出还是选择的JSON

之后用一个BP重建就好了

最终效果就是最上面那样。

参考资料

[1]Měch, Radomír, and Przemyslaw Prusinkiewicz. “Visual models of plants interacting with their environment.” Proceedings of the 23rd annual conference on Computer graphics and interactive techniques. ACM, 1996.
[2]Parish, Yoav IH, and Pascal Müller. “Procedural modeling of cities.” Proceedings of the 28th annual conference on Computer graphics and interactive techniques. ACM, 2001.
有关L-system的参考
Houdini帮助里就用L-system生成房间平面的案例
下面还有一个例子

发表评论

电子邮件地址不会被公开。 必填项已用*标注