Участник:Аджил/Блог/3D-модели в игровом движке
Я как, наверное, многие из вас, в какой-то мере являюсь любителем так называемых трёхмерных видеоигр. Конечно, существует великое множество готовых игрушек, среди них встречаются и про покемонов. Из официальной серии можно отметить Pokémon Stadium 1/2, Snap, Colosseum, XD, PBR, PokéPark Wii: Pikachu’s Adventure. Эти игры выпущены исключительно под игровые консоли фирмы Nintendo (хотя при наличии ПК достаточной мощности некоторые успешно запускаются на эмуляторах). Данная статья содержит сведения о примере использования 3D-моделей в собственных игровых модах или проектах. Итак, начнём.
Содержание
Получение моделей
Чтобы иметь в конечном счёте рабочие трёхмерные модели покемонов, очевидно, можно пойти двумя путями — создать с нуля, либо взять с готового источника и адаптировать под выбранный игровой движок. Первый вариант, естественно требует куда больших затрат, и затрагивать его здесь мы не будем.
Выбор источника
Прежде всего нужно выбрать подходящий источник. Последними выпущенными играми (к моменту поиска таковых автором) были PBR и PokéPark. В пиринговых сетях присутствуют образы носителей для целевой платформы (Nintendo Wii). Производитель не документировал структуру их содержимого, поскольку это не предусматривается эксплуатацией, однако сообщества успешно прочитали файловую систему с помощью техники, именуемой «reverse engineering». Как выяснилось, в Pokémon Battle Revolution модели покемонов (и прочие ресурсы) присутствуют в виде файлов .FSYS, о формате которых в то время было практически ничего не известно (кроме того что это данные, сжатые алгоритмом LZSS). В PokéPark же формат файлов иной — .BRRES, который используется в прочих видеоиграх для Wii, начиная с Super Smash Bros. Brawl (отсюда и название — BRawl RESource), и его структура сообществу была уже известна. Некто Kentilan выпустил(а) программу-просмотрщик файлов .BRRES, содержащих модели с текстурами и анимациями, для платформы Microsoft Windows на x86 (между прочим, у меня она запускалась и работала из-под Wine 1.1 в Linux). Эта программа также позволяет экспортировать текстуры в файлы формата Targa (.TGA) или PNG, модели и анимации же — формата DooM 3 MD5 (.md5mesh/.md5anim) или Unreal (.PSK/.PSA).
Исходные файлы моделей ивилюций вместе со смотрелкой я загрузил на сервис файлового хостинга, вот ссылка. Модели прочих покемонов, которые есть в PokéPark, могу выслать желающим отдельно по требованию.
Выбор движка и адаптация моделей
Автор выбрал проект Platinum Arts Sandbox на движке Cube 2 из следующих соображений: бесплатность, кроссплатформенность, открытость исходных кодов, свободность лицензии (zlib), расширяемость, приемлемое качество графики, сравнительно невысокая требовательность к ресурсам (запускаю его прямо в ноутбуке Asus X50M; на средних настройках с не очень большим уровнем летает практически без тормозов). Также стоит отметить удобную возможность редактирования мира на лету (в том числе даже сообща по мультиплееру).
Cube 2 умеет читать несколько форматов моделей, включая MD5. Посему я сделал экспорт в этот формат, правда, не обошлось и без нюансов. Например, эта версия программы некорректно записывает количество вершин и треугольников в меше, что влечёт за собой падение движка с ошибкой Segmentation Fault, если это не исправить вручную. Файлы .md5mesh — это обычные текстовые файлы, и исправить значения numverts и numtris для каждого участка с подсчётом особого труда не составит. Необходимо обратить внимание и на то, что сгенерированные файлы ссылаются на текстуры (значения shader) с расширением .tga, а для Cube 2 нужны .jpeg или .png, поэтому текстуры следует проэкспортировать отдельно в PNG и соответственно исправить. Ещё настоятельно рекомендуется проименовать каждый меш, вписав перед строкой shader строку вида:
// meshes: body
Соответственно, этот меш будет иметь логическое название «body». Имена мешей в одной модели не должны повторяться! Следует учесть, что данный метод именования мешей применим специфически к Cube 2, и в других движках может проводиться по-другому либо не проводиться вообще. Что касается анимаций, некоторые из них (а конкретно Walk и Run) также требуют хирургического вмешательства. Дело в том, что они содержат данные по смещению модели в процессе движения, и для нашего движка их нужно устранить (иначе модель будет дёргаться вперёд-назад). Делается это просто — в (таком же текстовом) файле .md5anim находятся блоки, соответствующие кадрам. Вторая строка внутри каждого блока показывает смещение модели относительно логического положения в координатах и имеет вид:
0.200000 0.000000 0.000000 0.000000 0.000000 0.000000
Первое значение и есть сдвиг модели по оси X в данном кадре. Итак, для каждого кадра нужно поменять его на значение, которое записано в базовом кадре (см. baseframe; как правило, оно равно 0.000000, но может варьироваться).
Далее движку необходимы параметры модели (такие как масштаб, соответствие и скорость анимаций, блики/свечение и прочее). Подробно они описаны здесь на английском языке. Я подготовил рабочий пакет моделей ивилюций и выложил сюда (также сделаны некоторые дополнительные, более сложные вещи, такие как ручную подгонку bounding box, разбивку текстур глаза и рта по эмоциям и т. п.). По просьбе желающих могу собрать и отправить рабочие модели других покемонов в формате MD5, готовые для использования в движке.
Загрузка моделей в игру
(будет дописано позже)