Оффтоп Anton Riot
84

Фотостудия для съёмок пластилиновой игры "Don't open the doors!"

Привет!

В жизни почти каждого разработчика игр наступает момент, когда он отбивается от стаи, выкапывает себе нору и начинает в одиночку делать «лучшую в мире игру, не то что эти всякие». 2 года назад это случилось и со мной. Не обладая навыками художника, я решил замахнуться на stop-motion анимацию и делать всю графику из пластилина.

В закладки

Пластилин в играх – идея не новая. После The Neverhood и чуть менее популярной Skull Monkeys, было предпринято множество попыток использовать пластилиновые текстуры. Это были аркады, квесты, логические игры, платформеры и даже стратегии. Хотя по-настоящему популярным ни один из визуальных последователей Неверхуда так и не стал, игровое сообщество всегда тепло принимало игры, сделанные «вручную».

В моей игре используется изометрическая карта и из этого вытекает ряд проблем и ограничений:

1. Все объекты должны быть сфотографированы с одного и того же угла над горизонтом

Для этого (и для выполнения пунктов ниже) у меня была вот такая конструкция:

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

2. Объекты, которые могут перемещаться по карте, нужно снимать хотя бы с 5 разных сторон (3 из них можно зеркально отобразить и в сумме получится 8 направлений движения)

Для этого в конструкции выше (я называю её «фотокуб») предусмотрена вращающаяся платформа с засечками:

3. Свет должен падать одинаково во всех 8 направлениях движения

Это довольно проблематично, учитывая, что 3 проекции получаются зеркальным отображением противоположных – нельзя использовать источник света слева-сверху или справа-сверху. Вариант с источником ровно сверху даёт не очень хороший результат визуально (плохо передаётся рельеф), то же самое с вариантом сверху-спереди. Абсолютно равномерного освещения, во-первых, трудно добиться, а во-вторых, оно тоже визуально довольно скучное.

Странным, но по результату приемлимым решением оказалось освещение двумя симметричными относительно центра источниками (собственно положение ламп видно на фотографии «фотокуба» выше). Хорошо передаётся рельеф и нет проблем с горизонтальным отражением:

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

4. Если объект покадрово анимирован, то, соответственно каждый кадр должен быть снят с тех же 5 сторон.

Здесь опять же помогает вращающаяся платформа – каждое последующее состояние пластилиновой фигурки чётко снимается с 5 фиксированных сторон:

Эти 40 фотографий – всего лишь анимация убирания иголок у ежа:

Весь процесс хотя и выглядит сложным и долгим, на деле оказался не сложнее ручной отрисовки спрайтов. Конечно, затраченное время не сравнится с анимациями 3D моделей (да и по результату, что уж тут говорить, качества и плавности уровня 3D программ не достигнуть), но если говорить о стилизации, то пластилин не подвёл.

Статистика 20 месяцев разработки говорит, что на лепку я потратил примерно 7% времени. Ещё 13% – обработка фотографий и различные манипуляции по внедрению их в игру.

Да, по фотографиям выше видно, что я не использовал хромакей. Многочисленные попытки автоматического выделения объектов из фотографий не устроили меня по качеству результата. Плюс, ручной обработки всё равно было не избежать: на каждом объекте надо выправлять цветность/яркость/и т.п., исправлять огрехи, зарисовывать торчащие из людей палки-чтобы-они-не-падали.

Всего на игру, которая проходится примерно за 10 часов, потребовалось около 8000 фотографий:

И это несмотря на то, что в некоторых ситуациях одну фотографию с помощью сами-знаете-какой программы получалось использовать несколько раз:

Для имитации некоторых материалов фотографии пришлось подвергать серьёзной обработке:

Но, в основном, нужна была только цветокоррекция:

Некоторые факты, осознание которых пришло в процессе работы:

1. Если оставить пластилиновую модель на «досъёмку», на следующий день она будет уже совсем другой. Даже если держать её в холодильнике. Поэтому, снимать надо в один заход.

2. Покадровая съёмка зацикленных действий – адский ад. Привести модель после ряда манипуляций в исходное состояние чрезвычайно трудно. Нужно заранее иметь на бумаге набросок каждого состояния, но и это не гарантирует результата.

3. Добавление двух-трёх оттенков цвета к сплошному делается быстро, но значительно улучшает внешний вид:

4. «Дешёвый» способ разнообразить окружение – фотографировать один и тот же объект с разных сторон:

5. Детали. Вместо тысячи слов:

Результат

Несколько скриншотов получившегося пластилинового мира:

{ "items": [{"title":"","image":{"type":"image","data":{"uuid":"084e41ea-1b7f-4bca-b835-73b707b48ac5","width":1280,"height":720,"size":1341345,"type":"png","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"31318b4e-6d9e-4eaa-9c07-e6d7f779374d","width":1280,"height":720,"size":1458626,"type":"png","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"ca2540b1-8a9a-4212-972e-469583d42b9c","width":1280,"height":720,"size":1603924,"type":"png","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"816a2dbe-6997-486e-a2c0-2371feb98e8a","width":1280,"height":720,"size":1360912,"type":"png","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"fd27dca9-15db-4459-b1f1-458be4eb26c0","width":1280,"height":720,"size":1478742,"type":"png","color":"","external_service":[]}}},{"title":"","image":{"type":"image","data":{"uuid":"6381ff6f-29b9-45f7-8884-fa65d8e463bd","width":1280,"height":720,"size":1156234,"type":"png","color":"","external_service":[]}}}] }

В динамике – минутная пробежка по одной из локаций:

Трейлер и другие материалы можно посмотреть на странице в Steam.

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

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Anton Riot", "author_type": "self", "tags": [], "comments": 2, "likes": 6, "favorites": 3, "is_advertisement": false, "subsite_label": "flood", "id": 2496, "is_wide": false, "is_ugc": true, "date": "Thu, 01 Dec 2016 16:56:38 +0300" }
{ "id": 2496, "author_id": 2768, "diff_limit": 1000, "urls": {"diff":"\/comments\/2496\/get","add":"\/comments\/2496\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/2496"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64955 }

2 комментария 2 комм.

Популярные

По порядку

1

Кропотливая работа я так скажу, в целом игра понравилась.

Ответить
0

Работа, достойная всяческих похвал и уважения!

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
В лутбоксы начали включать багфиксы
Подписаться на push-уведомления