نمادهای پارامتر (Parameter Symbols)
هر نماد میتواند حداکثر پنج متغیر تعریفشده توسط کاربر داشته باشد که میتوان آنها را در عبارات ارجاع داد یا مقداردهی کرد. متغیرها در پیشین (predecessor) نمونهبرداری میشوند، در حالی که متغیرها در جانشین (successor) مقداردهی میشوند.
مثال:
قاعده A(i, j) = A(i+1, j-1)، هر A را با یک A جدید جایگزین میکند که پارامتر اول افزایش و پارامتر دوم کاهش یافته است.
توجه کنید که متغیرهای پیشین میتوانند در بخش شرط یا احتمال قانون نیز ارجاع داده شوند.
مثال:
قاعده A(i):i<5 = A(i+1) A(i+1) هر A را حداکثر پنج بار دو برابر میکند (فرض یک Premise برابر A(0)).
پارامترهای اختصاص داده شده به نمادهای هندسی (مثل F، +، یا !) به صورت هندسی تفسیر میشوند.
مثال:
قاعده F(i, j) = F(0.5*i, 2*j) هر F را با یک F جدید جایگزین میکند که طول آن نصف و عرض آن دو برابر شده است.
بازنویسی اپراتور (Operator Override)
بهطور معمول، نمادهای لاکپشت از طول/زاویه/ضخامت فعلی برای اثر خود استفاده میکنند. با ارائه یک پارامتر صریح، اپراتور لاکپشت مقدار پیشفرض را نادیده میگیرد.
پارامترهای Override برای F، f، G، h، H به شکل زیر است:
F(i,j,k,l,m)
i – بازنویسی طول
j – بازنویسی ضخامت
k – بازنویسی تعداد Segment لوله
l – بازنویسی تعداد Rows لوله
m – پارامتر کاربر
پارامترهای k و l امکان تعیین پویا رزولوشن لولهها را فراهم میکنند.
مثالها:
F– جلو رفتن با طول فعلی و ایجاد هندسهH– جلو رفتن نصف طول فعلی و ایجاد هندسهF(i,j)– جلو رفتن به طول i و ایجاد هندسه با ضخامت jH(i,j)– جلو رفتن نصف طول i و ایجاد هندسه با ضخامت نصف j+(i)– چرخش i درجه~(i)– زاویه تصادفی با مقدار i جایگزین شود$(x0,y0,z0)– لاکپشت به مختصات (x0, y0, z0) اشاره میکند
مثال Premise:
یک مکعب واحد تولید میکند، بدون توجه به Step Size یا Angle پیشفرض.
فهرست Override اپراتورها
لیستی از تفسیر هندسی پارامترها برای برخی نمادهای لاکپشت موجود است که شکلهای هندسی تولید شده را مشخص میکند.
بازنویسی لبه (Edge Rewriting)
در کتاب The Algorithmic Beauty of Plants، مثالهای زیادی از Edge Rewriting استفاده میکنند که شامل زیرنویسهای چپ و راست است.
مثال:
TouchDesigner مستقیماً F(l) و F(r) را نمیشناسد. باید از پارامترگذاری استفاده کنیم.
پارامترهای اول چهارگانه برای نماد F: طول، عرض، تعداد sides لوله، تعداد segments لوله، و آخرین پارامتر قابل تعریف توسط کاربر است.
تعریف پارامتر آخر:
0 = چپ
1 = راست
پس از دو نسل: Fl+Fr+-Fl-Fr تولید میشود که تفاوتی با F+F+-F-F ندارد.
راه دیگر: استفاده از دو متغیر جدید و شرط برای تبدیل به F در مرحله آخر.
عبارات (Expressions)
عبارات مانند 0.5*i و 2*j میتوانند در هر فیلد عددی استفاده شوند.
نمادهای قابل استفاده در عبارات:
()– پرانتز برای تعیین اولویت^ + - * / %– عملگرهای ریاضیmin(), max(), sin(), cos(), asin(), acos(), pic(), in()– توابع پشتیبانیشده== != = < <= > >=– عملگرهای منطقی& | !– عملگرهای منطقی AND, OR, NOTb c d– پارامترهای SOP b,c,d پس از توسعهx y z– موقعیت فعلی لاکپشتg– سن نمادt– زمان (نسلهای L-system)a– پارامتر زاویه SOPT– پارامتر تروپیسیم (گرانش) SOP
توجه: متغیرهای پیشفرض نباید در پیشین استفاده شوند.
توابع مخصوص L-System
pic(u, v, c)– مقدار نرمالشده پیکسل (0 تا 1) در مختصات نرمالشده (u,v) با کانال cin(q, r, s)– بررسی اینکه نقطه (q,r,s) در داخل متابال است یا نه
شرایط (Conditions)
هر قانون میتواند شرط اختیاری داشته باشد:
مثال:
همه Aهای بالای ارتفاع 2 شامل J میشوند.
احتمال (Probability)
هر قانون میتواند احتمال استفاده شدن داشته باشد:
مثال:
A با احتمال برابر به B یا C جایگزین میشود.
ایجاد گروهها با L-Systems
اپراتور
gتمام هندسه ساخته شده را در گروهی جمع میکند.پارامتر اختیاری:
تمام هندسه F را در گروه lsys1 قرار میدهد.
وضعیت گروه با وضعیت لاکپشت Push/Pop میشود.
مثال:
F اول و آخر در گروه 0
FF میانی در گروه 1
کنترل طول در طول زمان
برای کاهش X درصد طول در هر تکرار، باید Premise را با مقدار شروع کنید و در قانون آن مقدار را در درصد دلخواه ضرب کنید:
مثال عملی
SOP دایره قرار دهید و Divisions =
param("lsys",3)
→ مثلث نمایش داده میشودآن را به ورودی J یک L-System SOP متصل کنید
Premise و Rule را تغییر دهید:
→ خطی از چندضلعیها با ترتیب افزایشی ایجاد میشود
4. 20 برگ تولید کنید و همه را در Switch SOP قرار دهید:
استفاده از J(,,0), J(,,1) … برای تخصیص SOPها
توجه: میتوان تا سه پارامتر Stamp استفاده کرد:J(,,1,2,3)
ورودیهای اپراتور (Operator Inputs)
Input 0: –
Input 1: –
Input 2: –
Input 3: –
کانالهای Info CHOP
اطلاعات اضافی LSystem SOP از طریق Info CHOP قابل دسترسی است.
کانالهای مشترک SOP Info:
num_points – تعداد نقاط
num_prims – تعداد پرمیتیوها
num_particles – تعداد ذرات
last_vbo_update_time – زمان صرف شده در Thread دیگر برای بروزرسانی GPU
last_meta_vbo_update_time – زمان صرف شده برای دادههای سطح متا
کانالهای مشترک Operator Info:
total_cooks – تعداد Cookهای انجام شده
cook_time – زمان Cook آخر (ms)
cook_frame – شماره فریم Cook شده نسبت به timeline کامپوننت
cook_abs_frame – شماره فریم Cook شده نسبت به زمان مطلق
cook_start_time – زمان شروع Cook در ms
cook_end_time – زمان پایان Cook در ms
cooked_this_frame – 1 اگر این فریم Cook شده باشد
warnings – تعداد هشدارها
errors – تعداد خطاها
Turtle Operators
F Move forward (creating geometry)
G Move forward half the length (creating geometry)
f Move forward but don’t record a vertex
g Move forward (no geometry created)
h Move forward a half length (no geometry created)
J K M Copy geometry source J, K or M at the turtle’s position
after rescaling and reorienting the geometry.
^ Apply tropism vector
+ Turn right
– Turn left (minus sign)
& Pitch up
~ Pitch down
\ Roll clockwise
/ Roll counter-clockwise
| Turn 180 degrees
! Roll 180 degrees
@ Pitch / Roll / Turn random amount
* Multiply current length
” Multiply current thickness
% Multiply current angle
_ Divide current length (underscore)
= Divides current width
( Divide current angle
‘ Increment color index U (single quote)
” Increment color index V
\ Cut off remainder of branch
$ Rotate ‘up’ towards the sun about heading
[ Push turtle state (start a branch)
] Pop turtle state (end a branch)
{ Start a polygon
. Make a polygon vertex
} End a polygon
! Create a new primitive group to which subsequent geometry is added
