Пост о том, как я игрушку делал
Внимание! Очень длиннопост!
Давно уже в голове витала влажная мечта сделать небольшую PC игрушку. Требования были не жёсткие. Хотелось сделать аркадную гонялку в духе Playstation One. Жми газ, подруливай и просто наблюдай за тем, как оно ездит. Без сложностей вроде регулировок ходовой перед стартом, без сложной физики авто, которая бы заставляла постоянно думать. Ну, как - то так в общем.
Начал я с самого начала - обратился к своему воображению. Нужно было составить небольшой список того, что я хотел получить от игры.
1. Приятный геймплей. Без сложного управления.
2. Плавная и мягкая физика с максимальной предсказуемостью того, как машина поведёт себя.
3. Графон, который бы работал на моём компьютере без лагов и не резал глаза. Сложность была в том, что выбранный мной движок был весьма голодным на ресурсы, но об этом позже.
4. Максимальное количество своего контента. Все домашние игроделы грешат тем, что тянут текстурки, модели и звуки с открытых источников. Я же находил романтику в том, что мог собрать всё то, что умею в один проект.
С чего начинать?.
Этот вопрос меня очень долго мучал потому, что я толком не знал о своей игре ничего.
Начать с локации? Я не знаю, какая будет физика. Как будет вести себя машина при прохождении поворотов, как её будет кидать на неровностях?
Взяться за код? Ещё не выбран движок, да и знания у меня только одной книги по C# и gml, который не может нормально в 3D.
Выбор движка.
Игровой движок - база. Основание, на котором делается игра. Он объединяет в себе физический, графический и звуковой движки, предоставляя удобный и быстрый доступ к оным.
Но их как грязи. Один может 3D и 2D, Другой имеет базу первоклассных шейдеров, третий имеет кучу справок и примеров, который бы помогли начать.
Спасение я нашёл там, где не сильно и ожидал - BGE. Я работал в 3D редакторе Blender уже давно и его интерфейс был мне привычен. Игровой движок в нём ещё трогать не приходилось.
Я решил обосновать как - то свой выбор.
1. bge имеет малую популярность. Сделать на нём игру - благое дело. глядишь, разработчики Blender решат его допилить и, в целом, поднимут известность этого 3D редактора, который был моим единственным выбором. 3G свисток не позволял скачать жирный 3D макс, а блендер при схожих возможностях весил всего 100мб.
2. Blender был моим основным инструментом, которым я вытягивал свою фантазию и успокаивал свою душу. Всё - таки нет ничего более важного для творческой личности, чем возможность как - то передать свои мысли.
3. Я не хотел разбираться в новом. Мне было проще костылить на старом.
Начал я с того, что стал проверять разными способами возможности bge:
Сложные материалы для BGE. Сложные они условно. На деле это текстура с Normal Map и небольшая система нодов для красивого отблеска, но до этого я работал исключительно с Cycles рендером и не сильно интересовался возможностями реалтайма.
Мрачная ночь мне не сильно понравилась, а потому я немного доработал сцену и переделал освещение:
Ответ навязывался сам собой - шейдеры.
Увы, но с написанием шейдеров я ещё не сталкивался, а любые попытки разобраться в Open GL заканчивались сожжённым стулом потому, что я банально не понимал, как с помощью указанных функций мне сделать то, что я хочу.
вот и первый чужой контент - набор шейдеров. Я успокаивал себя тем, что мне придётся их знатно настроить под свою игру прежде, чем использовать, но в душе понимал, что это отклонение от ожидаемого - очень плохое начало.
Первый тест новых шейдеров. Объёмный свет, SSAO (сложное глобальное затенение), DoF (фокусировка) и немного цветкора:
Зато теперь я могу прикинуть нагрузку шейдеров, геометрии и текстур. Взяв запас можно начинать делать машинку и локацию.
За основу я взял субарку и накидал такую вот модельку:
Далее на удачу мне в вк группе по блендеру появился пост, где парень спрашивал, как добавить колёс к машинке, написание физики которой демонстрировалось в видео - уроке.
Пришлось покопаться, но я таки нашёл этот файлик и записал видео:
http://vk.com/video112793174_171450885
И начал разбираться в коде:
http://vk.com/video112793174_170948539
Я немного допилил код и прикрутил его к машинке. Всё работало хорошо, но ещё были некоторые проблемы с поведением авто. Оно ехало не сильно красиво, а без трассы было сложно определить, чего ей не хватает:
http://vk.com/video112793174_170967407
А потому начал заниматься локацией.
В процессе создания локации мне пришлось достаточно фигово. Обычно я делаю модели на один ракурс, а создание развёртки для меня вообще темнота. Многому пришлось научиться. Сам маршрут трассы я предоставил рандому - бросил велосипедную цепь на пол. Да, вот так вот просто. Пришлось немного попотеть продумывая окруженние потому, что иметь одну только дорогу - мало.
После двух дней свет увидела локация для игрушки:
Внезапно подкралось первое апреля и те, кто следил в группе за развитием игры и активно помогали мне сделать игру лучше - заслуживали от меня добрый жест, выражающий мою внимательность к ним. Я отложил работу над игрой и занялся другим проектом.
В назначенную дату в группе появился пост с совершенно новым проектом - RallyCross a1p.
"Управление улучшено, графика доработана, добавлена система повреждений!"
Всё это оказалось чистой ложью и пользователи вместо этого...
Увидели это:
В левом нижнем углу карты красовался портрет одного известного человека:
Пока в комментариях шли активные обсуждения первоапрельской версии - у меня было время для допилки системы повреждений.
Машина действительно уже могла помяться, игра прекращалась при перевороте на крышу:
Но работало это не очень хорошо. Нужно было сделать зависимость повреждений от силы удара.
В конце концов я всё-таки закончил систему повреждений и эффект контраста от первого апреля дал свои плоды. Мало кто ожидал после шутливой версии увидеть на стене то, что на самом - то деле работы велись и игра стала на шаг ближе к завершению. Тёплые комментарии и пожелания удачи поддерживали меня и давали новых сил, которые оказалось очень кстати. Старый полигонаж карты был откровенно слабый и кроме плохой графики создавал проблемы с физикой машинки. Машинка очень плохо управлялась на такой резкой поверхности и нужно было что - то делать с этим.
Последний рывок - допилка машинки, правка мелких ошибок у локации и ооочень долгая подстройка физики машинки.
То, как это выглядит в действии - можно посмотреть тут. Есть некоторые недопилки, но, главное, я достиг своей цели - сделал аркадную гонялку. Да, я немного отклонился от начального плана. Особенно в плане чужого контента. Если быть совсем честным - очень много чужого контента, а именно:
Начальная физика машинки.
Набор шейдеров (DoF, SSAO, ColorCorrection, Bloom, Water Shader)
Текстуры гравия, бетона и деревьев, карта окружения.
Модель вышки.
В целом - я рад проделанной работе. Я узнал много нового и интересного о играх и их составляющих. Я немного выучил Python и впервые реализовал до условного конца задуманное.
Посмотреть в динамике можно тут:
http://vk.com/video112793174_171451014
Увы, но скинуть саму игрушку я не смогу. Blender Game Engine, как оказалось, имеет один очень важный изъян - он компилирует игрушку только под ту систему, под которую скомпилирован. Тоесть игра на Windows 7 на 8 \ 8.1 \ 10 не идёт :с
Единственным выходом остаётся скидывание исходника и запуск оного в Blender 3D, но, думаю, мало кому захочется пройти такой длинный путь ради того, что бы погонять очередной доморощенный проект коих тысячи. Думаю, видео и картиночек хватит =)
Что будет дальше?
Честно - не знаю. В потоке этой темы я было начал перепиливать игру с самого начала. Доводить абсолютно всё то идеала. Все кнопки в чистый код, все модели с хорошим полигонажем (благо теперь я имею более мощный компьютер) и лучшую физику, но, думаю, пока ещё рано. Я пока не готов сделать что - то достойное ни по знаниям, ни по времени.
Зато наработки уже есть и в случае чего я всегда смогу вернуться к проекту зная, что в запасе у меня есть ещё варианты =)
Спасибо за внимание, ваш drdotmom.
Прикольно, мне понравилось. Чем-то какой-то нфс (или не нфс) напомнило. Когда запилишь готовую игру, мне одну копию пожалуйста.