[Houdini]L-System 初步了解
L-System語法
緣由
經過朋友分享Houdini的學習過程時,了解到裡面可以使用Lindenmayer個系統,也就是L-System,他是由荷蘭生物學和植物學家Aristid Lindenmayer所提出的數學模型,可以廣泛應用於植物生長過程的研究,而在3D軟體,則可以依照這些規則來產生需要的植物。
符號
F 往前一步,並畫一條線
f 往前一步,不畫線
+ 左轉δ度
- 右轉δ度
[ 開始一個分支
] 完成一個分支
X,Y 為變數,變數不畫線,但是要記得他們的存在
有其他語法不過目前我們先用這些就好
依 維基百科 所寫L-System應該會像:
變數:AB
常量:
公理(Axiom):A
規則:(A->AB),(B->A)
所謂的公理,就是系統的初始點,像是這裡的公理為A,所以我們由A開始走
然後再依規則進行疊代。
示範
矩形路徑
下面來簡單的示範
我們的δ在此設為90度,也就是我們目前的轉彎都是單純的正左轉正右轉。
n = 3
F
F->F[-XF]F
X->F[x]
開始畫吧:
n = 0
因為我們的公理定為 F,所以一開始為向前走一步並且有畫線。
我們以紅色為起點向前走一步吧!
n = 1
進行第一次疊代,這時我們要依照給的兩條規則來執行。
由於沒有X在場上,所以我們這次只跟隨規則 F->F[-XF]F
注意一點是,我們有箭頭符號對吧。
你可以把他想成變身,我們的F變身成F[-XF]F了,所以會直接取代原本的F,
而不是繼續畫上去。
在這張圖我用了3步驟來解釋是怎麼變成最右邊那張圖的,便更好的解釋規則語法。
F[-XF]Fa. F : 我們裡所當然的畫一條線F1
b. [-XF] : 中括號的意思就是分支,也就是新的樹枝,我們想像在目前位置跟目前的方向,開啟一個獨立的工作站,且不會影響到本體。
我們再來看他的要求是什麼:
指令是 -XF,所以我們先向右轉,並且在地上丟下一個標記變數X1,然後依照指令 F 再向前走一步F2。
c.由於分支完成符號(]),所以我們回到原本的世界,以原本的位置,原本的方向,依照指令 F 再畫了一條線F3
n = 2
進行第二次疊代,這時我們除了有F1、F2、F3還有上一次增加的變數標記X,所以這時我們要遵守的規則多了一條
F->F[-XF]F
X->F[X]
a.首先我們先看到F1的線段,他的拓展方法如同我們第一次疊代一樣。
b.同理我們的F3也是一樣為其展開線段與加上標記。
c.再來是我們的重頭戲F2 :
我們會看到第一次疊代時加上的位置標記X,我們依照規則:
I.先以同方向畫上一條F,再來開啟一個分支並給予X標記。
II.而原本F2有畫上的F則如同F1F3一樣拓展開來。
完成後的圖如下
n = 3
好了我就畫到第三次疊代,會越畫越多的,一樣把規則補上這樣就不用往上滑了
F->F[-XF]F
X->F[X]
將各自的部分依照規則來展開,由於篇幅的問題,在這裡不逐一展開了,建議可以拿紙筆自己畫一次,蠻好玩的。
你自己展開後可能會發現FbFc之間是不是少了一段 F ? 也就是從X2展開的那個。
對,我們細看會發現,X2本身是一段新的分支,但他又跟本體重疊,所以他既不會影響到本體,又會被本體蓋住,所以我們得出來的圖才會長這樣。
接下來我們試著展開樹型的看看吧
L-System
n=7,δ=20°
X
X->F[+X]F[-X]+X
F->FF
這是由<The Algorithmic Beauty of Plants>一書中,圖1.24第d項所提供的算式
一樣是一變數,只是這次我們每次轉彎所轉的角度為20度,理解這個前提後就好畫了
n=0
由於他的Axiom是變數X,所以我們放了一個X在場上結束這一回合。
X->F[+X]F[-X]+X
F->FF
n=3
還有一件事,我們這裡為了繪圖方便所以只使用了+和-這個左右轉的運算子,這樣的話我們只是在2D進行樹的成長。
如果是在胡迪尼或是其他3D軟體內,由於建模的東西是立體的,所以我們的樹枝規則就會要使用到以下這種其他方向的運算符號:
\:左傾
/:右傾
^:上仰
&:下俯
角度可以在規則中進行設定。
留言
張貼留言