一:简介
Lindenmayer-systems是由荷兰乌特勒支大学的生物学和植物学家aristid Lindenmayert在1968提出的属性模型。此人在1996年还有一本书籍《THE ALGORITHMIC BEAUTY OF PLANTS》出版,内容挺不错的。l-system效果就是能用几条简单的指令画出复杂的形状。比如树木啦
建筑啦
各种各样的图案啦
算法看起来不错,但要实现它,如果用python,java还要自己去找能画线,能解析l-system语句的函数,有些麻烦。而在houdini中,早已准备好了一个节点。
二:前提
在houdini中新建一个l-system节点,Values值改成如下
然后进入rules选项卡,把rules1和rules2的勾勾掉,暂时用不上。然后再来看看premise,也就是前提,输入
FfFHhF
效果如上,F代表往上一格并画线,f代表往上一格不画线,H代表往上半格并画线,h代表往上半格不画线。
然后是旋转
先弄清概念。在houdini,
Pitch是围绕X轴旋转,也叫俯仰角,houdini里的符号是"&","^"
Yaw是围绕Z轴旋转,也叫偏航角。这里的符号是"+","-"
Roll是围绕Y轴旋转,也叫翻滚角,houdini里的符号是"","/"
比如,第二条线绕Z轴旋转,与Y轴和X轴夹角都为45度。
F+F
分支表达如下
三:迭代
houdini中,l-system的规则是这样的,把迭代叫做generation,第0个generation执行promise,假如有两个rule,那么第一个generation执行rule1,第二个generation执行rule2,第三个generation又执行rule1,第四个generation执行rule2如此往复。
那我们勾上rule1和rule2,premise填上
FFFA
那么会首先生成一个高度为3的线段,这里的A和B只是没有任何意义的占位符,相当于一个点
rule1填上
A=[B][B][B]
这里就会把A替换成三个分支B
rule2填上
B=&FFFA
这里把B替换成旋转一定角度的线。然后到value里把angle改成28,再到gemotry里调整迭代次数即可看到树状线生成了。这也就是默认的I-system节点。
四:更多
好了,非常好玩吧?houdini的帮助文档非常详细。你也可以去找找《THE ALGORITHMIC BEAUTY OF PLANTS》也就是开头提到的那本,上面有更多的l-system示例。