Создание 3д-графики в рамках геймджема Ludum Dare 39
Геймджем - это событие, на котором собираются команды, интересующиеся разработкой игр, и делают игру на заданную тему за 2-3 дня. Ludum Dare один из самых крупнейших и старейших глобальных геймджемов.
Вот и мы тоже решили поучаствовать.
Нас было 3 человека: 3д-художник, программист и “3д-разработчик”(всего понемножку). Надо сказать, что никто из нас не практически не имел опыта работы в сфере разработки игр. Программиста мы нашли через интернет за пару недель до начала джема, и надо сказать он себя отлично проявил!
Мы же вдвоём участвовали в местном геймджеме этой весной, и это был нереально крутой опыт: условия в которых нужно показать цельный продукт за 2 дня требуют здравой оценки своих сил, слаженной командной работы и нещадного обрубания всего, чему не суждено успеться. Вдобавок такой формат позволяет теснее сотрудничать со специалистами из смежных дисциплин и понять, что им требуется от вашей работы.
В общем очень интересный опыт, всем советую.
В этот же раз мы работали удалённо и на разработку игры было дано 3 дня. Темой Ludum Dare 39 оказалась “Running out of power”, т.е. что-то типа “иссякает энергия/силы/власть”. Тема нас особо не зацепила, так что мы решили воспринять её дословно: “у тебя кончается энергия, действуй или проиграл”.
Учитывая состав нашей команды, нам надо было сделать игру в 3д и на движке Unity. Потому что ничего другого мы не умели :)
Что получилось, можете посмотреть и пощупать тут:
https://ldjam.com/events/ludum-dare/39/energy-scraps
В результате получилась обычная поделка с большим количеством недочётов, но для трёхдневной разработки я считаю результат нормальным. Судя по комментам, народ особо остался доволен графикой, так что я и расскажу о том, как её можно сделать быстро и удобно.
У нас в планах было сделать сравнительно большую локацию для исследования, включающую как наружную часть, так и интерьер.
В первый же день у нашего основного 3д-художника начались непредвиденные проблемы и он оказался не в состоянии уделить проекту полные 3 дня. Но он всё равно нам хорошо помог. В этот момент наверное стоило сократить планы на игру, но мы этого не сделали…
Учитывая большой объем работ и программиста, уже желающего что-то тестить, надо было выбрать план действий и выдать минимум графики под тесты сразу.
Выглядело это так:
Модульные блоки вгрузили в движок, создали на их основе префабы и собрали из них простенькую сцену.
Тестовая сцена состояла из коридора и пары комнат с дверьми. На двери была сразу прикручена простенькая анимация. Коллайдеры были сгенерированы прям из мешей и программист смог работать с такой сценой весь первый день.
А я тем временем посочинял и смоделил эти блоки до состояния, которое мы посчитали финальным. Модульные блоки уже на этапе простых боксов были подогнаны по сетке. И всё, что мне оставалось в движке, так это заменить в префабе меш и указать новый коллайдер. Анимация двери тоже легко подтянулась из нового файла. Сцена обновилась автоматически и осталось играбельной.
Такой подход сберёг время на расстановку объектов заново.
Тестовая сцена после подгрузки “финальных” мешей интерьера:
В окончательном варианте интерьер эволюционировал. Модульность блоков очень помогла нам сократить время создания локации. И всё создание сводилось к копи-пастам и привязке к сетке уже в движке:
Текстура для интерьера была одна для всего, так же это была и текстура всех врагов и для большей части пропсов.
Выгядела она вот так (Albedo+Emissive):
Можно было бы использовать Vertex Color для раскраски, но текстура помогла нам быстро подкручивать цвет во всей сцене, просто изменяя цвет кубика в фотошопе. Иметь один материал на всех объектах также позволил на полную использовать оптимизацию батчингом.
С наружкой ситуация была другая: выравнивать по сетке было не обязательно, но надо было обойтись как можно меньшим количеством уникальных моделей, чтоб показать и хоть как-то наполнить каньон. Так же мы хотели, чтоб игрок хоть немножко попрыгал по уступам каньона, так что нам нужны были платформы.
Мы отделались самым минимальным набором:
Всего 2 куска стены: платформа и колонна. Чтоб сделать из них весь массив, их надо было сильно масштабировать, в том числе и непропорционально. Внешний вид меша был допустим. Но загвоздка заключалась в текстуре, которая была разного масштаба на каждом объекте, и вдобавок смещена. В итоге вид у такого каньона был сплошным месивом.
Мы решили эту проблему шейдером, на основе мировых координат. Таким образом у всех кусков есть одиаковый градиент по вертикали, и они выглядят более целостно. Дополнительным плюсом стала возможность не заморачиваться с текстурными развертками при моделировании.
Все остальные материалы наружней зоны пошли без текстур.
Осталось сделать пропсы и врагов:
Они пошли по той же схеме, что и интерьер. Большинство из них использует ту же самую текстуру.
Чтобы не делать взрывы или как-то еще заниматься анимацией смерти врагов, я быстренько сделал такой шейдер, который мы анимируем через скрипт. Он тоже использует только мировые координаты, так что не требует разверток и подходит для всех врагов сразу:
В итоге мы умудрились создать локацию вот таких объемов:
Готовность моделей под батчинг и запечённый оклюжн куллиг помогли нам не заморачиваться на производительности игры.
На моделирование и развертки у нас ушло примерно 10-15 часов работы. Надо заметить, что даже в таком простеньком проекте примерно половина моделей переделывалась, некоторые - полностью.
Остальное время геймджема у меня ушло на создание шейдеров, улучшение визуального вида, создание локаций(тут мы работали все вместе) и отладку всего, что успели. Паблишинг тоже съел довольно большой кусок последнего дня.
В целом мы хорошо сработались командой, приобрели новый интересный опыт и вышли с приемлемым результатом.
Всем, кому интересен и кто хочет в геймдев, но он не хочет быть там штатным исполнителем, я очень советую регулярно участвовать в таких геймджемах. Мы будем делать это на постоянной основе! :)