{ "author_name": "Anton Riot", "author_type": "self", "tags": [], "comments": 2, "likes": 6, "favorites": 2, "is_advertisement": false, "section_name": "default", "id": "2496", "is_wide": "" }
Anton Riot
74

Фотостудия для съёмок пластилиновой игры "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. Детали. Вместо тысячи слов:

Результат

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

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

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

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

Популярные материалы
Показать еще
{ "is_needs_advanced_access": false }

Комментарии Комм.

Популярные

По порядку

0

Прямой эфир

Узнавайте первым важные новости

Подписаться
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "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", "tablet" ], "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": "create", "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-549065259", "adfox_url": "//ads.adfox.ru/228129/getCode?p1=bxeub&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid21=&puid22=&puid31=&puid32=&fmt=1&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } } ]