Grammars for Generative Art - Lectures @ Sofia University #5
1. Граматики за
генеративно изкуство
● Триизмерни обекти с Context Free
● Псевдо 3D с Context Free
● Enter : Structure Synth & EisenScript
● Примитиви
● Ротация и скалиране
● Гранични условия
● Цикли
● Препроцесор
● Позиция на камерата
● Изход към Meshlab
● Използване на външна система за
render
Подготвени от Г.Пенков като част от курса на ФМИ за зимен семестър 2010/2011. Заглавното
изображение адаптирано от оригиналната граматика от http://contextfree.lazymoon.org.
2. Триизмерни обекти в Context Free
● В Context Free няма механизъм за използване на
трето измерение или перспектива
● Може да се симулира с помоща на skew
● Въможно е да бъдат описани псевдо 3D обекти с
пътища...
● ...или с помоща на външна програма, която
генерира проектираните в равнината координати
● Може да бъде симулирано “избледняване в
дълбочина” с помоща на скалиране и промяна на
прозрачността.
3. Псевдо 3D в Context Free
http://www.contextfreeart.org/gallery/view.php?id=2482
Kryptonite
by pakin
4. Enter: Structure Synth
● Създаден рез 2007 следвайки идеята на Context Free, имплементиран от
Mikael Christensen
● Понастоящем е с актуална стабилната версия 1.0
● Напълно безплатен софтуер с отворен код.
● Резултатът от изпълнението е изцяло триизмерни структури - мешове.
● Позволява изход към други програми за изграждане на рендърната
графика.
● Езикът за програмиране тук се нарича Eisen Script и прилича на CFDG, но
е с допълнена функционалност, в това число :
● Гранични условия по брой итерации
● Допълнителни примитиви
● Променливи и константи
● Налага някои ограничения :
● Няма възможност за дефиниране на собтвени примитиви по аналогия с пътищата
в CFDG.
● Няма примитиви, които да са аналог на кривите в CFDG
5. Enter : EisenScript
● Макар да прилича на CFDG, EisenScript реално не се придържа
напълно към идеята за контекстно-свободността на граматиките
● Няколко съществени разлики преди да се започне с първото
EisenScript описание:
● Няма startshape директива – диркетно се изписват правилата за извод.
Може да са повече от едно
● Всички параметри се разписват във фигурни скоби преди, а не след
името на правилата / примитивите.
● Не може да се описват правила с имена, които съвпадат, с която и да
било ключова дума (например : A, a, S, R и т.н.)
● В EisenScript има реално измерение Z – трета ортонормирана
координатна ос.
● Няма позиционирани параметри (в [ ] скоби)
● Изцяло UNICODE – т.е. Може да има правила, които са на
кирилица, японски или всеки друг език.
6. Примитиви в Structure Synth
● Разписват се по подразбиране в
трансформационно
пространство с размерност 1
● Тук примитивите са:
● Mesh
● Grid
● Line
● Dot
● Box
● Sphere
● Няма значение дали са с малки
или големи букви.
● В следващата версия се
очакват още – цилиндър и тор
7. Гранични условия
● set maxdepth [integer] > [rule]
● Спира изпълнението след целочислен брой итерации (генерации).
● Горна граница на рекурсията за всички правила, когато е зададено
глобално.
● Може да се зададе и след името на дадено правило, но без
ключовата дума set
● Може да се укаже кое правило да бъде изпълнено след даден брой
итерации
● set maxobjects [integer]
● След като са били създадени [integer] брой обекти генерирането
завършва.
● Съществен параметър при генериране на по-сложни структури, при
които има експоненциално нарастване на броя форми
8. Гранични условия
● set minsize [float]
set maxsize [float]
● Позволява задаване на параметър за това колко
голям или малък може да бъде даден обект.
● Големината на стандартната “кутия”, в която
съществуват формите е с размерност (0,0,0) до
(1,1,1) и съответно има диагонал с размер sqrt(3),
което е около 1.7.
● Ще прекрати само генерирането на форми, които
не отговарят на условието, но другите които
отговарят ще продължат да се генерират.
9. Ротация и скалиране
● Може да става по всяка една от осите
● Ротация с помоща на парметри rx, ry, rz
● Скалиране с един или три параметъра
set maxdepth 400
R1
R2
rule R1 { rule R2 {
{ x 1 rz 6 ry 6 s 0.99 } R1 { x -1 rz 6 ry 6 s 0.99 } R2
{ s 2 } sphere { s 2 } sphere
} }
10. Грид обект с ротация по осите
set maxdepth 50
R1
rule R1 {
{ z 0.8 rz 15 s 0.99 h 10 } R1
{ s 0.7 } grid
}
13. Цикли в Structure Synth
● Могат да се описват подобни на циклите в CFDG
последователности от повтарящи се правила.
● При последователно прилагане на верига от цикли
(може и само с едно повтаряне) може да се постигне
смисъла на позиционираните параметри в CFDG
● Алтернативен метод е прилагане на правило, което се
разписва в себе си, но е ограничено с maxdepth
● За разлика от CFDG не може в тялото на цикъла да
има повече от едно правило или примитива. Т.е.
Циклите не определят нови блокове от правила (код)
14. Цикли
// с maxdepth
П1
rule П1 maxdepth 4 {
9 * { ry 15 x 1 } box
{x 11 ry 90 } П1
}
// троен цикъл
П2
rule П2 {
10 * { y -2 s 0.8 a 0.9 }
4 * { x 11 ry 90 }
9 * { ry 15 x 1 } box
}
15. Задаване позиция на камерата
● set translation – задаване на транслация на
координатната система
● set rotation – положение на завъртане на камерата
● set pivot – разположение на камерата
● set scale - промяна размера на всички примитиви
● Може да се полиучи и автоматично от самия Structure
Synth
16.
17. Пространство на цветовете
● По подразбиране се позиционира в (H,S,V) в:
hue 0 / sat 1 / brightness 1
● Стойностите на alpha канала са винаги коефициент спрямо
текущата прозрачност
● За разлика от CFDG, където може да се извади от стойността на
● Може да се зададе директна стойност за цвят в hex
(#FFFFFF) описание с помоща на параметър color
● Може да се укаже “смесване” на текущия цвят с dаден цвят с
помоща на параметър blend [color] [strength] където
вторият параметър е между 0 и 1
19. Препроцесор на Structure Synth
● SS има вграден препроцесор за константи. Към момента
той може да се използва по два начина :
#define constant value
● Замества всяко срещане на varname със стойността value
#define varname value (float:0-40)
● Създава допълнителен панел със слайдери, от които омже
да се контролира стойността тази константа
20.
21. Meshlab 1.3+
помощно средство за работа със Eisen Script
● Безплатен софтуер с отв.рен код –
базиран на QT4, компилира се на
всякакви платформи.
● Използва се за прости операции в 3D
сцени (мешове).
● Може да конвертира между много от
популярните формати.
● И най-важното – след версия 1.3 има
напълно работещ плъгин за работа с
EisenScript и манипулация на
получените мешове.
● За сега все още само Windows бетата
поддържа четене на EisenScript, но се
справя безпроблемно и с по-сложни
мешове.
22. Изход към външен renderer
● С помоща на вградени в Structure Synth шаблони
● Изход към
● renderman
● povray
● sunflow
● Blender
(с експорт скрипт или през meshlab)
● През MeshLAB към:
● 3DS Max
● Alias Wavefront
● Autocad
● Стандартен OBJ и STL
файл
● 3D принтер
● мн. други
23. Експорт и рендър със Sunflow
1 2
Подаване към Sunflow през командния ред
Извикване на Export Template от Structure Synth
3
Резултатно изображение след raytrace
25. 3D дърво на питагор
Structure Synth / Sunflow
Matt Cavanagh
http://www.flickr.com/photos/cav666/4564863224/
26. Библиография
● http://structuresynth.sourceforge.net/ - Сайт на Structure Synth
● http://en.wikipedia.org/wiki/Menger_sponge - Menger Sponge
● http://www.flickr.com/groups/structuresynth/ - галерия със структури
изработени със Structure Synth
● http://meshlab.sourceforge.net - Безплатния софтуер Meshlab
● http://www.blender.org/ - сайт на Blender Community. Безплатно
сваляне на софтуера
27. За Домашно
● Да се реализира ES граматика, която
създава една от структурите на Дейв
Болингер посочени на следните адреси:
● http://www.flickr.com/photos/davebollinger/3255401859/
● http://www.flickr.com/photos/davebollinger/3256231684/
● http://www.flickr.com/photos/davebollinger/3188554712/
● http://www.flickr.com/photos/davebollinger/4463667116/
● http://www.flickr.com/photos/davebollinger/4421407990/