Grammers for Generative Art - Lectures @ Sofia University #4stelf
Presentation slides in Bulgarian for the Grammars for Generative Art lectures series held at the Faculty of Maths and Science at Sofia University
Winter Semester 2010/2011
Originally prepared by G.Penkov
Grammars for Generative Art - Lectures @ Sofia University #3stelf
Presentation slides in Bulgarian for the Grammars for Generative Art lectures series held at the Faculty of Maths and Science at Sofia University
Winter Semester 2010/2011
Originally prepared by G.Penkov
Grammars for Generative Art - Lectures @ Sofia University #0stelf
Presentation slides in Bulgarian for the Grammars for Generative Art lectures series held at the Faculty of Maths and Science at Sofia University
Winter Semester 2010/2011
Originally prepared by G.Penkov
This document contains code examples demonstrating the use of OpenGL functions to draw points and lines. The first example draws two points with different colors. The second draws four points with varying sizes and colors. The third draws two red and green lines. The fourth draws a cross shape using four colored lines. All examples initialize an OpenGL window, clear the buffer, set point/line sizes, draw with GL_POINTS or GL_LINES, and enter the main loop.
Grammers for Generative Art - Lectures @ Sofia University #4stelf
Presentation slides in Bulgarian for the Grammars for Generative Art lectures series held at the Faculty of Maths and Science at Sofia University
Winter Semester 2010/2011
Originally prepared by G.Penkov
Grammars for Generative Art - Lectures @ Sofia University #3stelf
Presentation slides in Bulgarian for the Grammars for Generative Art lectures series held at the Faculty of Maths and Science at Sofia University
Winter Semester 2010/2011
Originally prepared by G.Penkov
Grammars for Generative Art - Lectures @ Sofia University #0stelf
Presentation slides in Bulgarian for the Grammars for Generative Art lectures series held at the Faculty of Maths and Science at Sofia University
Winter Semester 2010/2011
Originally prepared by G.Penkov
This document contains code examples demonstrating the use of OpenGL functions to draw points and lines. The first example draws two points with different colors. The second draws four points with varying sizes and colors. The third draws two red and green lines. The fourth draws a cross shape using four colored lines. All examples initialize an OpenGL window, clear the buffer, set point/line sizes, draw with GL_POINTS or GL_LINES, and enter the main loop.
Grammars for Generative Art - Lectures @ Sofia University #1stelf
Presentation slides in Bulgarian for the Grammars for Generative Art lectures series held at the Faculty of Maths and Science at Sofia University
Winter Semester 2010/2011
Originally prepared by G.Penkov
Архитектурно и Органично Моделиране за начинаещи 3D дизайнери.
Подробно описание на интерфейса на програмата на Български език. Основни техники и методи за моделиране на стереометрия и органични форми.
Рендериране, текстуриране, осветление и базисна анимация.
Нагледни упражнения.
Общо 3 части.
Built-in testing capabilities of Go's standard library. Techniques for measuring test coverage and keeping it satisfactory and go through some mock-up techniques.
Grammars for Generative Art - Lectures @ Sofia University #1stelf
Presentation slides in Bulgarian for the Grammars for Generative Art lectures series held at the Faculty of Maths and Science at Sofia University
Winter Semester 2010/2011
Originally prepared by G.Penkov
Архитектурно и Органично Моделиране за начинаещи 3D дизайнери.
Подробно описание на интерфейса на програмата на Български език. Основни техники и методи за моделиране на стереометрия и органични форми.
Рендериране, текстуриране, осветление и базисна анимация.
Нагледни упражнения.
Общо 3 части.
Built-in testing capabilities of Go's standard library. Techniques for measuring test coverage and keeping it satisfactory and go through some mock-up techniques.
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/