Home    Решения    Услуги    Download    Публикации    Работа    Продукти    Документи
 

 

 
Print this page/Отпечатай тази страница  

 

Нови измерения

по материали от Интернет и невероятните есета на Scott Manley




  Сега след като вече знаете как се създават анимирани GIF изображения и както сте много горди от това трябва да ви кажа, че това е само началото и пред вас има все още един цял нов свят, който трябва да пребродите... или по-скоро едно ново измерение.
  Традиционната анимация се базира на способностите на художниците да изрисуват един и същи герой хиляди пъти под много различни гледни точки и да го направят така, че той да прилича на себе се през цялото време. Това е забележителен талант и е нещо, което бил искал да умея, вместо това обаче, аз ползвам съвременни технологии, които ми помагат моите светове да изглеждат реалистични. В повечето съвременни анимации героите и сцените се моделират в три измерения чрез компютър и накрая се преглеждат през виртуална камера преди финалния продукт.
  Това отнема много повече време докато се започне процеса, всичко трябва да се дефинира в трите измерения от всички ъгли, работата много се доближава до тази с използването на миниатюрни модели за ефекти в телевизията и киното. Но веднъж изграден цялостно и с дефинирани движения, които да може да изпълнява раздвижването (оживяването) на този модел е просто работа на компютъра, който върши цялата черна работа по рисуването на хилядите кадри. Като всеки кадър ще е перфектно отражение на точно този виртуален свят, който сте описали математически в машината. Всички ъгли, сенки и осветености ще са перфектни и всичко ще изглежда точно както трябва, просто всичко ще е базирано на законите на геометрията, които човешката природа и зрение по навик безпогрешно анализира непрекъснато.
  Хайде да сътворим нещо най-накрая. Да направим анимиран GIF, който да представлява стъклено кубче въртящо се на единия си ъгъл върху осветен от слънце под. Ще използваме POVRay като рендер като ще дефинираме сцената с описания и без средства за моделиране, а само с прости примитиви... и мъничко математика, разбира се. Така, че отваряйте любимия си текстов редактор и създайте файл наречен spin_cube.pov, който дефинира следната сцена:

    Първо дефинираме основния куб с ъгли в <-1,-1,-1> и <1,1,1>

box {
 <-1,-1,-1>, <1,1,1>
Прилагаме текстура върху обекта, правейки го синьо-зелен на цвят и 50% прозрачен, като определяме и повърхността да е частично отразяваща светлина.
 texture {
  pigment { rgbf <0,0.5,1,0.5> }
  finish { reflection 0.3 specular 0.2 }
  }
Сега се нуждаем от математиката - искаме да го въртим около единия ръб - в повечето POVRay сцени y-вектора е вертикален, следователно за до го въртим около ъгъл, трябва да въртим 45 градуса по x-оста и 35.3 градуса по z-оста.

Искаме и това въртене да става съобразно времето следователно установяваме ротация по оста y като функция на времето.

 rotate <45,0,0>
 rotate <0,0,35.3>
 rotate <0,clock,0>
 }
 Трябва ни и източник на светлина за да можем да виждаме нещата от нашия виртуален свят и нека в този случай дефинираме насочена прожекторна светлина осветяваща нашето кубче точно отгоре, карайки го да илюминира.
light_source {
        <0,20,0>
        rgb <1,1,1>
 spotlight
 point_at <0,0,0>
 radius 5
 falloff 10
        }
Кубът ще стои върху бялa повърхност, която незначително отразява светлина.
plane {
 <0,1,0> , -1.732
 texture { pigment { rgb <1,1,1> }
  finish { reflection 0.3 ambient 0}
  }
 }
 
Накрая да опишем как камерата вижда кубчето:
camera {
 location <14,2,0>
 direction <0,0,2>
 look_at <0,-0.5,0>
 }
Това е всичко, запишете файла и рендвайте изображнието си от него. Ако допуснем, че нямате някаква странна конфигурация за povray - всичко, което трябва да направите е да подадете командата:

$ povray +Ispin_cube.pov +W320 +H240 +D

+W и +H определят ширината и височината, а опцията +D кара POVRay да се опита да дисплейва изображението в процеса на рендването му, когато приключи работа ще получите резултата във файл, наречен spin_cube.tga, който можете да видите с почти всеки image viewer. Всичко изглежда добре, но всъщност не се движи. Това е, защото трябва да зададем параметъра clock, който ползвахме малко по-горе дефинирайки въртенето по оста y. Опцията +K в командата на POVRay ще ни помогне да го направим - просто задаваме +K 30 за да установим clock да е равно на 30, тъй като въртенето на куба измерваме в градуси стойността на clock е този случай е равен на броя градуси, с които искаме нашият куб да се извърти. Просто за тест нека да опитаме...

$ povray +Ispin_cube.pov +W320 +H240 +D +K30

И виждаме кубът, завъртян на 30 градуса...


Сега искаме да получим малък анимиран GIF, на който нашият куб се върти непрекъснато. Едно пълно завъртане е 360 градуса, но човешкото зрение всъщност можем да заблудим прекрасно заради симетрията на нашето кубче, което означава, че въртенето на 120 градуса около оста y ще върне изображението в началното му положение, т.е. нашите кадри е достатъчно да покрият само една трета от ротацията. За проста 6 кадрова анимация това означава стъпка от по 20 градуса и ако имате povray 3.0 или по-нов можете да направите всичко с една единствена команда:

$ povray +Ispin_cube.pov +W80 +H60 +D -J +A0.1 +KFI1 +KFF6 +KI0 +KF120 +KC

Леле, колко опции, но напишете ги всичките и обекта ще започне да се рендва докато вие си проверите в документацията какво значи всяка от тях.

И в зависимост от скоростта на машината ви скоро ще имате 6 готови кадъра

$ ls -l spin_cube?.tga
-rw-rw-r--  1 spm  spm   14418 Apr 11 14:46 spin_cube1.tga
-rw-rw-r--  1 spm  spm   14418 Apr 11 14:46 spin_cube2.tga
-rw-rw-r--  1 spm  spm   14418 Apr 11 14:46 spin_cube3.tga
-rw-rw-r--  1 spm  spm   14418 Apr 11 14:46 spin_cube4.tga
-rw-rw-r--  1 spm  spm   14418 Apr 11 14:46 spin_cube5.tga
-rw-rw-r--  1 spm  spm   14418 Apr 11 14:46 spin_cube6.tga

Комбинирайте ги в анимация по същия начин както направихме за бутончето в предната част:

$ convert -delay 10 -loop 0 spin_cube?.tga spin_cube.gif

$ ls -l spin_cube.gif
-rw-rw-r--  1 spm  spm   12315 Apr 11 14:57 spin_cube.gif

И готовият резултат можете с гордост да сложите в web-страницата си

Това е малко изображение, само 12 килобайта, но можем още да го намалим ако намалим и броя цветове, които ползваме в него.

$ convert -delay 10 -loop 0 -colors 128 spin_cube?.tga spin_cube.gif

$ ls -l spin_cube.gif
-rw-rw-r--  1 spm  spm   6157 Apr 11 15:01 spin_cube.gif

Наполовина по-малко, а без чувствителна разлика. Хайде да опитаме само с няколко цвята.

$ convert -delay 10 -loop 0 -colors 32 spin_cube?.tga spin_cube.gif

$ ls -l spin_cube.gif
-rw-rw-r--  1 spm  spm   4084 Apr 11 15:06 spin_cube.gif

Възможно е вече да се намерят разлики, но на web страници където дилемата е винаги между качеството и времето за зареждане е хубаво да имате това наум. Ограничения има навсякъде, но добрия дизайнер знае как да работи с ограниченията и пак работата му да е перфектна. Това има още по-голямо значение, когато изграждаме сложни 3D сцени, колкото по-сложни са те толкова повече време ще отнемат за рендване и вашето ограничение ще бъде процесорното време.
 
 

Предишната част

Следва...

Превод и адаптация на текста: Йовко Ламбрев