Молдаване из весьма серьезной студии Simpals решили – доколе!
Доколе можно создавать вал отличной рекламной продукции в области моушн-дизайна и анимационной рекламы.
Доколе можно бесконечно зарабатывать деньги на богатых клиентах интересной работой.
Пора пришла подумать и о душе – и они решили сделать первый молдавский анимационный фильм в 3D.
И не просто сделать – а красиво. При этом они решили вести блог о том, как все это происходит.
Блог интересен. И обещает быть еще интереснее.
Всей душой желаю ребятам создать шедевр. Да и как иначе, если получено благословение Цыганского Барона!
(на всякий случай решил обойтись без картинок – сами все увидите)
Старый, но приятный трюк: анимация изометрического изображения.
Такая штуковина очень проста в изготовлении.
Надо только сообразить, что мувиклипы с двойным дном таят в себе скрытые возможности ))
Если к примеру клип, который вращается вокруг своей оси, поместить в клип, который сжат по вертикали (_yscale = 75) то мы получим имитацию вращения изометрического изображения.
А если несколько изображений положить друг на другом как блины – получится объемное изометрическое изображение которое можно крутить, как душе угодно )
Самое забавное в этом методе – это моделирование модели.
Делается это на таймлайне. 1 кадр – это дно, последний кадр – вершина нашей блинной скульптуры.
Вот, к примеру – как выглядит клип из которого нарезается приведенная выше анимация:
Алгоритм построения прост:
Создать общий контейнер для всей фигуры;
Создать в нем N пустых контейнеров(N=_totalframes клипа, составляющего фигуру) с _yscale = 75 (варируется) ;
В пустой контейнер N аттачится клип-фигура и останавливается на кадре N+1;
А вот собственно совершенно простой код:
// на сцену нужно в нужном месте положить клип под именем holdervar distance:Number = 1; // дистанция между "кусками"var speed:Number = 5; // скорость вращенияvar scaleFactor:Number = 75; // масштабирование по Yvar slices:Number; // количество кусков (определим позже)// функция, создает контейнер для куска, и вставляет в него// клип-фигуру с установкой нужного кадра.// n = порядковый номер кускаfunction attachSlice(n:Number):Void{varslice:MovieClip = holder.createEmptyMovieClip("slice"+n,n);
// в библиотеке символ, из которого делим фигуру снабдить linkage=sculptureslice.attachMovie("sculpture","gfx",0);
slice.gfx.gotoAndStop(n+1);
slice._yscale = scaleFactor;
slice._y = -n*distance;
}// В начале, создадим первый кусок (дно) и заодно узнаем,// сколько в нем кадров, чтобы установить значение slices
attachSlice(0);
slices = holder.slice0.gfx._totalframes;
// выкладываем все остальные кускиfor(var i=1; i < slices; i++){
attachSlice(i);
}// вращение фигуры// (тут можно определить и другое поведение - вращение от клавиатуры, мыши и т.д.)
holder.onEnterFrame = function():Void{for(var i=0; i < slices; i++){this["slice"+i].gfx._rotation += speed;
}}
Итак, оффициально заявлено (360Flex in Atlanta) , что следующая версия флеш-плеера ASTRO будет поддерживать 3d трансформации.
На текущий момент фреймворки вроде papervision3d или Sandy «имитируют» перспективные искажения с помощью скрипта. Поддержка 3d трансформации в ASTRO будет решена на уровне плеера, что конечно скажется на производительности.
Если у нас есть кусок растра, который во чтобы то ни стало надо как то анимировать – можно воспользоваться увлекательной нарезкой персонажа на куски )
Принцип метода достаточно прост.
Имея представление о рельефе анимируемой фигуры, разбиваем растр на несколько клипов, фигурно отсекая лишние части на каждом уровне. Очень неплохо таким способом можно анимировать лица, морды, руки и т.д.
Первый пример наглядно иллюстрирует суть метода.
Главное – не перестараться со смещением верхних слоев – иначе станут видны нежелательные части тела на нижних слоях. Иногда, по необходимости, можно конечно и подкрасить пару тройку пикселей, чтобы заретушировать нежелательные детали на нижних слоях.