Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Создаём Zoomquilt

Anna | 16.06.2014 | нет комментариев
Захотелось продолжить серию постов о каждых увлекательных автореферентных штуковинах и решил я написать о стиле Zoomquilt. Сделал поиск, увидел, что один пост на Прогре теснее есть. Подумал, подумал и решил, что пост я всё равно напишу, но он будет технический, о спецтехнологии создания Zoomquilt.

Для начала собственно о стиле. Здесь проще показать чем рассказывать.

zoomquilt.org/

zoomquilt2.madmindworx.com/zoomquilt2.swf

www.syfy.com/tinman/oz/

www.deviantart.com/art/kopfsalat-digital-edition-30069104

Приближаемся к картинке и взамен того, Дабы в какой-то момент увидеть пиксели величиной с кулак, видим следующую картинку, повторяем процедуру неоднократно (на самом деле, выглядит это как один абсолютно себе плавный процесс и если художники отлично поработали, то «стыков» мы вообще не увидим) и в результате приходим к изначальной картинке. В всеобщем мультиквайны, только для художников.
А как такая штука делается? Безусловно дозволено нарисовать это всё покадрово, больше того, некоторые гениальные аниматоры абсолютно бы с этим совладали. Но фактически во всех существующих произведениях этого стиля указано, что это плоды коллективного творчества. Обыкновенно есть коллектив художников, координатор плана и программист, тот, что собственно собирает это всё совместно и пишет интерфейс.

Дальше о спецтехнологии создания. Под катом много картинок.

Стал я искать информацию по спецтехнологии создания и мне повезло. Наткнулся на начальные изображения из которых состоял самый 1-й Zoomquilt. Вот одно из них:

Всякий «исходник» представляет собой изображение 1024*768 в середине которого находится чёрный прямоугольник размером 512*384.

Для начала разберёмся со сборкой zoomquilt из этих «исходников». Превратим картинки в полновесные кадры грядущей анимации.
?сно, что чёрный прямоугольник в центре изображения должен быть заменен дальнейшим в списке изображением (для последнего изображения дальнейшим является первое), уменьшенным до соответствующих размеров, причём перед тем, как заменять, необходимо со дальнейшим изображением проделать ту же процедуру и т.д. Пахнет это всё безмерной рекурсией без данные останова, но к счастью, изображения дискретны и нарисовать что-либо размером поменьше пикселя немыслимо. Чёрный прямоугольник в центре картины будет уменьшаться, пока вовсе не исчезнет и в данный момент замены дозволено перестать.

Из полученных кадров безусловно дозволено собрать анимацию

Но она будет прерывистой, т.к. в ней участвуют только ключевые кадры

Для всякого ключевого кадра дозволено сделать при помощи приближения несколько промежуточных.

Окончательный вариант получился слишком тяжёлым для того, Дабы вставить его в статью, однако он немного отличается от подлинного ролика.

Это всё восхитительно, собирать из готового мы теснее умеем, но «исходники» кто-то должен нарисовать, причём так, Дабы все переходы были настоль плавными, Дабы не было ясно, где заканчивается одна картинка и начинается иная.
А происходит всё, насколько я понимаю, так:
Вначале координатор плана даёт одному либо нескольким художникам следующее изображение:

Художники обязаны заполнить всю зелёную зону и не обязаны трогать чёрную (вернее трогать они её могут, но всё, что они там нарисуют не будет учитываться при сборке). После этого, когда художники завершат работу, всякую из картин дозволено передать двум художникам. Один получает картину в таком виде:

Иной, в таком:

Обратите внимание, что размеры зелёных прямоугольников идентичные на обеих картинах, чай именно содержимое этого самого прямоугольника художник сдаёт координатору (ну либо скорее координатор вырезает надобную часть из присланой картины).

Когда наберётся довольное число картин (минимум — 2, максимум не лимитирован), координатор выдаст нескольким (возможно самым мощным в плане) художникам (их число равно числу художников, получивших в начале работы пустые картины) картины типа этой:

На этом круг замыкается, уроборос тихо переваривает хвост, а мы восторженно глядим на очередное произведение.

Вот код, тот, что я написал для этой статьи, писалось всё минут сорок на коленке, так что если кто-нибудь напишет по-человечески, с удовольствием и благодарностью вставлю сюда.

import PIL
from PIL import Image
from images2gif import writeGif

X,Y = 1024,768
IMAGES_NUM = 46

def render_images(raw_images):
    cur_index=0
    count = 0
    while True:
        count =1
        if count == 100: break
        prev_index = cur_index - 1
        if prev_index == -1: prev_index = len(raw_images)-1
        cur_image = raw_images[cur_index]
        prev_image = raw_images[prev_index]        
        prev_image.paste(cur_image.resize((X/2,Y/2)),(X/4,Y/4))
        cur_index = prev_index

def before_image(im):
    im1=Image.new("RGB",(X,Y),(0,255,0))
    im1.paste(im.resize((X/2,Y/2)),(X/4,Y/4))
    return im1

def after_image(im):
    im1 = im.copy()
    im1=im1.resize((X*2,Y*2))
    im1.paste(new_image(),(X/2,Y/2))
    return im1

def between_image(im1,im2):
    im = im1.copy()
    im=im.resize((X*2,Y*2))
    im.paste(before_image(im2),(X/2,Y/2))
    return im

def new_image():
    im1=Image.new("RGB",(X,Y),(0,255,0))
    im1.paste(Image.new("RGB",(X/2,Y/2),(0,0,0)),(X/4,Y/4))
    return im1

def between_frames(key_frame, number_of_frames):
    step_x = X/4/number_of_frames
    step_y = Y/4/number_of_frames
    l=[]
    for i in xrange(1,number_of_frames 1):
        x=step_x*i
        y=step_y*i
        l.append(key_frame.crop((x,y,x (X-2*x),y (Y-2*y))).resize((X,Y)))
    return l

def crop_image(im):
    im1=im.copy()
    x,y=im.size
    black=Image.new("RGB",(X/2,Y/2),(0,0,0)),(X/4,Y/4)
    if x==X:
        im1.paste(black)
    elif x==X*2:
        im1=im1.crop((X/2,Y/2,X/2 X,Y/2 Y))
        im1.paste(black)
    return im1    

Тут есть все нужные функции для создания своего Zoomquilt. Если что-то непостижимо, спрашивайте.
Если есть желающие художники, пишите в личку, могу побыть координатором, сделаем хамбразумквилт :) .

Если кто-нибудь знает ещё произведения в этом стиле, присылайте ссылки.

Спасибо за внимание.

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB