目标
L-System(L系统) 是什么?
——它是植物学家 Aristid Lindenmayer 提出的一个数学模型,命名为 Lindenmayer系统,简称为L系统。
它的基本特点是:使用迭代来定义复杂的几何体。
它常用于模拟植物生长的状态,很擅长生成类似下面的图案:
Houdini中的 L-System节点 基于此原理工作
本篇的目标是:
- 从对L-System完全未知的状态开始,一步步了解其核心概念,以及在Houdini中怎样使用它。
1. 基本原理——使用“字符串”来表示行为(海龟运动)
使用L-System,首先要明白的是:
- 你将使用 “字符串” 来表示行为
例如:
规定F
表示“Forward”,向前走一步。
那么FF
就表示向前走两步;FFF
就表示向前走三步,以此类推。
在Houdini中,你可以想象是:
- 你有一个初始在原点的海龟。它头顶是z轴,面向y轴。
- 你将使用“字符串”来控制其运动。
- 其移动轨迹将是生成的图案。
下面做测试:
首先,为了便于观察,将 Step Size(步长) 设为 1。
然后,清除掉Rules下默认的参数:
随后,在 Premise(初始状态的字符串)中不断增加F
,可以看到随着F
数量的增加,“海龟”逐渐朝它的前方移动:
2. 核心概念——替换与迭代
关于L-System,随后要明白的便是其核心概念:
- 字符会以特定的规则发生替换行为。
- 而这样的替换行为将会迭代多次。
例如:
假设初始字符串为A
,以A=FFA
作为替换规则。
那么第一次替换后为FFA
,第二次替换后为FFFFA
,以此类推
下面在Houdini中做测试:
接上例。
在 Premise(初始字符串) 中填A
,在 Rule1(规则1) 中填A=FFA
:
然后,在 Generations(迭代次数) 中逐渐增大数字,能明白字符串逐渐被迭代替换:
3. 常用符号——右转‘+’ 左转‘-’
+
代表控制海龟右转,-
代表控制海龟左转。
默认的转向度数在Angle参数中指定。
下面做测试:
在 Premise(初始字符串) 中填FA
,在 Rule1(规则1) 中填A=+FA
:
可以尝试改变Angle观察其变化:
4. 关键符号——分支“[]”
[]
表示从当前状态开始分裂出一个新的海龟前进。
下面做测试:
设初始为FA
,替换规则A=[-FA][+FA]FA
。这表示:
A
行为代表“分离出一个海龟左转前进,再分裂出一个海龟右转前进,最后本体也前进。同时,三只海龟之后的行为还将重复A
行为”
提升Generations(迭代次数) 可以观察到这样的行为不断地迭代:
还可以玩一下Angle:
5. 常用符号——俯转‘&’ 仰转‘^’
&
代表控制海龟俯视转向,^
代表控制海龟仰头转向。
默认的转向度数在Angle参数中指定。
它和+
、-
类似,只不过是延另一个轴:
6. 常用符号——顺时针翻滚‘/’逆时针翻滚‘\’
/
代表控制海龟顺时针翻滚,\
代表控制海龟逆时针翻滚。
默认的转向度数在Angle参数中指定。
下面做测试:
将Angle设为90°
然后设初始为FA
,替换规则A=[^F]F/A
。这表示:
A
代表分裂出一个海龟朝着仰视转动90°,随后本体超前进并顺时针翻滚90°,最后重复A
:
总结
“L-System”节点使用字符串来定义形状,可以想象是在用字符串给一个海龟发号命令,其运动的轨迹即为最后的结果形状。
字符串中的字符可以被替换,而这样的替换行为将会迭代多次。
一个比较关键的符号是[]
,它将创建出一个分支。
所有的符号,可以在L-System节点文档 中找到: