SlideShare a Scribd company logo
1 of 28
Граматики за
                 генеративно изкуство
●   Триизмерни обекти с Context Free

●   Псевдо 3D с Context Free

●   Enter : Structure Synth & EisenScript
    ● Примитиви

    ● Ротация и скалиране

    ● Гранични условия

    ● Цикли

    ● Препроцесор

    ● Позиция на камерата



●   Изход към Meshlab

● Използване на външна система за
render


Подготвени от Г.Пенков като част от курса на ФМИ за зимен семестър 2010/2011. Заглавното
изображение адаптирано от оригиналната граматика от http://contextfree.lazymoon.org.
Триизмерни обекти в Context Free
●   В Context Free няма механизъм за използване на
    трето измерение или перспектива
●   Може да се симулира с помоща на skew
●   Въможно е да бъдат описани псевдо 3D обекти с
    пътища...
●   ...или с помоща на външна програма, която
    генерира проектираните в равнината координати
●   Може да бъде симулирано “избледняване в
    дълбочина” с помоща на скалиране и промяна на
    прозрачността.
Псевдо 3D в Context Free
      http://www.contextfreeart.org/gallery/view.php?id=2482




                                                               Kryptonite

                                                               by pakin
Enter: Structure Synth
●   Създаден рез 2007 следвайки идеята на Context Free, имплементиран от
    Mikael Christensen
●   Понастоящем е с актуална стабилната версия 1.0
●   Напълно безплатен софтуер с отворен код.
●   Резултатът от изпълнението е изцяло триизмерни структури - мешове.
●   Позволява изход към други програми за изграждане на рендърната
    графика.
●   Езикът за програмиране тук се нарича Eisen Script и прилича на CFDG, но
    е с допълнена функционалност, в това число :
    ●   Гранични условия по брой итерации
    ●   Допълнителни примитиви
    ●   Променливи и константи
●   Налага някои ограничения :
    ●   Няма възможност за дефиниране на собтвени примитиви по аналогия с пътищата
        в CFDG.
    ●   Няма примитиви, които да са аналог на кривите в CFDG
Enter : EisenScript
●   Макар да прилича на CFDG, EisenScript реално не се придържа
    напълно към идеята за контекстно-свободността на граматиките
●   Няколко съществени разлики преди да се започне с първото
    EisenScript описание:
    ●   Няма startshape директива – диркетно се изписват правилата за извод.
        Може да са повече от едно
    ●   Всички параметри се разписват във фигурни скоби преди, а не след
        името на правилата / примитивите.
    ●   Не може да се описват правила с имена, които съвпадат, с която и да
        било ключова дума (например : A, a, S, R и т.н.)
●   В EisenScript има реално измерение Z – трета ортонормирана
    координатна ос.
●   Няма позиционирани параметри (в [ ] скоби)
●   Изцяло UNICODE – т.е. Може да има правила, които са на
    кирилица, японски или всеки друг език.
Примитиви в Structure Synth

●   Разписват се по подразбиране в
    трансформационно
    пространство с размерност 1
●   Тук примитивите са:
    ●   Mesh
    ●   Grid
    ●   Line
    ●   Dot
    ●   Box
    ●   Sphere
●   Няма значение дали са с малки
    или големи букви.
●   В следващата версия се
    очакват още – цилиндър и тор
Гранични условия
●   set maxdepth [integer] > [rule]
    ●   Спира изпълнението след целочислен брой итерации (генерации).
    ●   Горна граница на рекурсията за всички правила, когато е зададено
        глобално.
    ●   Може да се зададе и след името на дадено правило, но без
        ключовата дума set
    ●   Може да се укаже кое правило да бъде изпълнено след даден брой
        итерации

●   set maxobjects [integer]
    ●   След като са били създадени [integer] брой обекти генерирането
        завършва.
    ●   Съществен параметър при генериране на по-сложни структури, при
        които има експоненциално нарастване на броя форми
Гранични условия
●   set minsize [float]
    set maxsize [float]
    ●   Позволява задаване на параметър за това колко
        голям или малък може да бъде даден обект.
    ●   Големината на стандартната “кутия”, в която
        съществуват формите е с размерност (0,0,0) до
        (1,1,1) и съответно има диагонал с размер sqrt(3),
        което е около 1.7.
    ●   Ще прекрати само генерирането на форми, които
        не отговарят на условието, но другите които
        отговарят ще продължат да се генерират.
Ротация и скалиране

●       Може да става по всяка една от осите
●       Ротация с помоща на парметри 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

    }                                 }
Грид обект с ротация по осите
set maxdepth 50
R1
rule R1 {
    { z 0.8 rz 15 s 0.99 h 10 } R1
    { s 0.7 } grid
}
Правило с maxdepth
maxdepth с терминално правило


                0     1      2      3 ...




                    Menger Sponge
Цикли в Structure Synth
●   Могат да се описват подобни на циклите в CFDG
    последователности от повтарящи се правила.

●   При последователно прилагане на верига от цикли
    (може и само с едно повтаряне) може да се постигне
    смисъла на позиционираните параметри в CFDG

●   Алтернативен метод е прилагане на правило, което се
    разписва в себе си, но е ограничено с maxdepth

●   За разлика от CFDG не може в тялото на цикъла да
    има повече от едно правило или примитива. Т.е.
    Циклите не определят нови блокове от правила (код)
Цикли
// с 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
}
Задаване позиция на камерата
●   set translation – задаване на транслация на
    координатната система

●   set rotation – положение на завъртане на камерата

●   set pivot – разположение на камерата

●   set scale - промяна размера на всички примитиви

●   Може да се полиучи и автоматично от самия Structure
    Synth
Пространство на цветовете
●   По подразбиране се позиционира в (H,S,V) в:


                         hue 0 / sat 1 / brightness 1

●   Стойностите на alpha канала са винаги коефициент спрямо
    текущата прозрачност
    ●   За разлика от CFDG, където може да се извади от стойността на
●   Може да се зададе директна стойност за цвят в hex
    (#FFFFFF) описание с помоща на параметър color
●   Може да се укаже “смесване” на текущия цвят с dаден цвят с
    помоща на параметър blend [color] [strength] където
    вторият параметър е между 0 и 1
Примерна граматика
Препроцесор на Structure Synth
●   SS има вграден препроцесор за константи. Към момента
    той може да се използва по два начина :


            #define constant value

●   Замества всяко срещане на varname със стойността value


            #define varname value (float:0-40)

●   Създава допълнителен панел със слайдери, от които омже
    да се контролира стойността тази константа
Meshlab 1.3+
          помощно средство за работа със Eisen Script


●   Безплатен софтуер с отв.рен код –
    базиран на QT4, компилира се на
    всякакви платформи.


●   Използва се за прости операции в 3D
    сцени (мешове).


●   Може да конвертира между много от
    популярните формати.


●   И най-важното – след версия 1.3 има
    напълно работещ плъгин за работа с
    EisenScript и манипулация на
    получените мешове.


●   За сега все още само Windows бетата
    поддържа четене на EisenScript, но се
    справя безпроблемно и с по-сложни
    мешове.
Изход към външен renderer
●   С помоща на вградени в Structure Synth шаблони
●   Изход към
    ●   renderman
    ●   povray
    ●   sunflow
    ●   Blender
        (с експорт скрипт или през meshlab)

●   През MeshLAB към:
    ●   3DS Max
    ●   Alias Wavefront
    ●   Autocad
    ●   Стандартен OBJ и STL
        файл
    ●   3D принтер
    ●   мн. други
Експорт и рендър със Sunflow

1                                                     2
                                                          Подаване към Sunflow през командния ред




    Извикване на Export Template от Structure Synth




                                                      3
                                                          Резултатно изображение след raytrace
Генерирано със Structure Synth
Обработено и текстурирано в Blender




                              G.Penkov
                              K.Meratchev
3D дърво на питагор
 Structure Synth / Sunflow




                                                   Matt Cavanagh

 http://www.flickr.com/photos/cav666/4564863224/
Библиография

●   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. Безплатно
    сваляне на софтуера
За Домашно
●   Да се реализира 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/
За домашно...

More Related Content

Similar to Grammars for Generative Art - Lectures @ Sofia University #5

Да заложим на Go
Да заложим на GoДа заложим на Go
Да заложим на GoZhivko Angelov
 
Grammars for Generative Art - Lectures @ Sofia University #1
Grammars for Generative Art - Lectures @ Sofia University #1Grammars for Generative Art - Lectures @ Sofia University #1
Grammars for Generative Art - Lectures @ Sofia University #1stelf
 
Memory problems in .NET apps
Memory problems in .NET appsMemory problems in .NET apps
Memory problems in .NET appsBorislav Ivanov
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2DAVID Academy
 
3ds Max за начинаещи 3D дизайнери #1
3ds Max за начинаещи 3D дизайнери #13ds Max за начинаещи 3D дизайнери #1
3ds Max за начинаещи 3D дизайнери #1svetla popova
 
Конкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриКонкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриbraintechd
 
Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++Georgi Mirchev
 
Въведение в Микроконтролерите Пловдив/2015-02-21
Въведение в Микроконтролерите Пловдив/2015-02-21Въведение в Микроконтролерите Пловдив/2015-02-21
Въведение в Микроконтролерите Пловдив/2015-02-21Neven Boyanov
 
[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with JenkinsBorislav Traykov
 
Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8DAVID Academy
 
Grammars for Generative Art - Lectures @ Sofia University #6
Grammars for Generative Art - Lectures @ Sofia University #6Grammars for Generative Art - Lectures @ Sofia University #6
Grammars for Generative Art - Lectures @ Sofia University #6stelf
 
3D4AUTO_R4_Virtual Seminars- BULGARIAN
3D4AUTO_R4_Virtual Seminars- BULGARIAN3D4AUTO_R4_Virtual Seminars- BULGARIAN
3D4AUTO_R4_Virtual Seminars- BULGARIAN3d4auto
 
Виртуализирано видеонаблюдение под FreeBSD
Виртуализирано видеонаблюдение под FreeBSDВиртуализирано видеонаблюдение под FreeBSD
Виртуализирано видеонаблюдение под FreeBSDOpenFest team
 

Similar to Grammars for Generative Art - Lectures @ Sofia University #5 (18)

Да заложим на Go
Да заложим на GoДа заложим на Go
Да заложим на Go
 
Grammars for Generative Art - Lectures @ Sofia University #1
Grammars for Generative Art - Lectures @ Sofia University #1Grammars for Generative Art - Lectures @ Sofia University #1
Grammars for Generative Art - Lectures @ Sofia University #1
 
C++ OpenFest 2015
C++ OpenFest 2015C++ OpenFest 2015
C++ OpenFest 2015
 
Memory problems in .NET apps
Memory problems in .NET appsMemory problems in .NET apps
Memory problems in .NET apps
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2
 
Стар проект на Благо?!
Стар проект на Благо?!Стар проект на Благо?!
Стар проект на Благо?!
 
3ds Max за начинаещи 3D дизайнери #1
3ds Max за начинаещи 3D дизайнери #13ds Max за начинаещи 3D дизайнери #1
3ds Max за начинаещи 3D дизайнери #1
 
Конкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриКонкурентни софтуерни архитектури
Конкурентни софтуерни архитектури
 
Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++
 
Въведение в Микроконтролерите Пловдив/2015-02-21
Въведение в Микроконтролерите Пловдив/2015-02-21Въведение в Микроконтролерите Пловдив/2015-02-21
Въведение в Микроконтролерите Пловдив/2015-02-21
 
[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins
 
Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8Училищен курс по програмиране на C# (2013/2014), занятие №8
Училищен курс по програмиране на C# (2013/2014), занятие №8
 
стоманени мостове-Sap2000 v1.0
стоманени мостове-Sap2000 v1.0стоманени мостове-Sap2000 v1.0
стоманени мостове-Sap2000 v1.0
 
Grammars for Generative Art - Lectures @ Sofia University #6
Grammars for Generative Art - Lectures @ Sofia University #6Grammars for Generative Art - Lectures @ Sofia University #6
Grammars for Generative Art - Lectures @ Sofia University #6
 
Writing tests in Go
Writing tests in GoWriting tests in Go
Writing tests in Go
 
3D4AUTO_R4_Virtual Seminars- BULGARIAN
3D4AUTO_R4_Virtual Seminars- BULGARIAN3D4AUTO_R4_Virtual Seminars- BULGARIAN
3D4AUTO_R4_Virtual Seminars- BULGARIAN
 
Виртуализирано видеонаблюдение под FreeBSD
Виртуализирано видеонаблюдение под FreeBSDВиртуализирано видеонаблюдение под FreeBSD
Виртуализирано видеонаблюдение под FreeBSD
 
Why do we need a language like go?
Why do we need a language like go?Why do we need a language like go?
Why do we need a language like go?
 

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 }
  • 12. maxdepth с терминално правило 0 1 2 3 ... Menger Sponge
  • 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
  • 24. Генерирано със Structure Synth Обработено и текстурирано в Blender G.Penkov K.Meratchev
  • 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/