Сега след като вече знаете как се създават анимирани 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 сцени, колкото по-сложни са те
толкова повече време ще отнемат за рендване и вашето ограничение ще бъде процесорното време.
Предишната част
Следва...
Превод и адаптация на текста: Йовко Ламбрев