Как создать разрушаемые объекты в Sonic Generations
Версия от 07:23, 5 мая 2014; Unknown for ME (обсуждение | вклад) (Замена текста — «хоминг» на «Хоуминг»)
(Оригинальное руководство написано Paraxade)
Это руководство расскажет о том, как добавить свои разрушаемые объекты в Sonic Generations.
Содержание
Необходимые инструменты
- SonicGLvl (Обрати внимание, что текущая версия SonicGLvl не добавит кости к файлам .model. Эта функция появится в v0.5.8, но пока необходимо использовать SVN версию.)
- Generations Archive Editor
- Autodesk 3DS Max (можно воспользоваться лицензией для студентов или поискать на торрент-трекерах; для экспорта коллизий потребуется 2011 или более ранняя версия)
- Экспортер OgreMax для 3DS Max
- Havok Content Tools для PC (Havok 2010 2.0)
Шаг 1: моделирование
- В первую очередь тебе нужно создать модель для твоего разрушаемого объекта. Потребуется две: оригинальная цельная версия, и разрушенная, состоящая из маленьких кусочков.
- Убедись в правильности размеров! Это лучше сделать до того, как приступишь к чему-либо ещё, чтобы не пришлось начинать всё сначала. Для сравнения можно создать коробку c размерами Соника (0,5м x 0,5м x 1,0м) или импортировать модель в сцену уровня.
Шаг 2: экспорт модели и коллизии
- Перед экспортированием необходимо сбросить XForm на объектах. Выбери объект(ы), затем перейди во вкладку Tools на правой панели. Кликни по "Reset XForm", после чего нажми "Reset Selected".
- Тебе также нужно убедиться, что координаты объекта равны 0,0,0. Выбери все свои объекты, после чего используй Transform Tool и введи эти значения внизу.
- Помни, что не нельзя экспортировать обе версии объекта одновременно. Перед экспортом убедись, что в сцене присутствует лишь одна.
- Теперь можно экспортировать сцену через OgreMax. Используй настройки по-умолчанию. В папке с оригинальным файлом .scene появятся .mesh файлы для каждого объекта сцены, а также материалы и текстуры. Если текстур там нет, просто скопируй их для удобства. Повтори это для разрушенной версии.
- Чтобы создать коллизию, выбери все свои объекты. Добавь Havok Shape modifier, и выстави тип формы (shape type) в Convex Hull (не точная коллизия), или можно поставить Mesh, чтобы коллизия была точно по форме объекта. Затем добавь Havok Rigid Body modifier и задай массу (mass) числом. Обычно хорошо работает 3-5 кг.
- Затем экспортируй всё через опцию на панели Havok Content Tools. Создай новую конфигурацию для разрушаемых объектов. На скриншотах показаны необходимые фильтры и настройки (именно в таком порядке): Transform Scene Create Rigid Bodies Write to Platform
Примечание: если у тебя уже есть конфигурация для экспорта уровней, то конфигурация для разрушаемых объектов практически такая же, кроме фильтра Create World. Рекомендую также изменить путь для сохранения, чтобы случайно не перезаписать коллизии уровней.
- Повтори это для разрушенной версии, после чего назови файлы в формате имяобъекта.phy.hkx и имяобъекта_brk.phy.hkx.
Шаг 3: конвертация .mesh в .model
- К каждой модели должна быть прикреплена кость. Вручную делать это довольно муторно, но, к счастью SVN версия SonicGLvl сделает это автоматически при конвертации в .model.
- Открой SonicGLvl. Выбери "Models --> Convert Ogre .mesh to .model".
- Затем выбери один .mesh файл и сохрани его в другой папке в формате .model. Так нужно сделать для каждого полученного файла. SonicGLvl не изменяет автоматически расширение, поэтому это придётся сделать вручную по ходу работы. Или, как вариант, можно оставить всё с расширением и затем сделать массовое переименование.
- Когда ты закончишь, у тебя должна быть папка с файлами .model, текстурами и некоторыми новыми материалами. Эти файлы материалов отличаются от экспортированных Ogre, и именно их нужно будет импортировать в игру.
Шаг 4: импортирование объекта в игру
- Если ты всё сделал правильно, то у тебя будет папка, описанная в конце предыдущего шага. Также должно быть два .hkx файла: один для целой модели и другой для разломанной. Теперь нужно добавить эти файлы в игру через Generations Archive Editor. В качестве примера мы используем Green Hill; если ты импортируешь в другой уровень, то просто замени "ghz" на нужную аббревиатуру.
- Открой #ghz_cmn.ar.00. Добавь туда два своих .hkx файла, а затем открой в редакторе StageObject.sto.xml. Впиши в список в этом файле имя своего объекта, как целую, так и разрушенную версию. Запомни введённые имена, они понадобятся тебе позже.
- Открой ghz_cmn.ar.00. Сюда добавь все файлы .model, .material, и .dds.
Шаг 5: добавление записи ObjectProduction
- Теперь нам нужно добавить две записи для объекта в ObjectProduction. Если говорить точнее, редактировать придётся ObjectProduction.phy.xml в bb/#SystemCommon.ar.00. Так как целая и разрушенная версии объекта на самом деле являются разными объектами, записи требуется две.
- Скопируй одну из других записей, которую будешь использовать за основу. Вот что нужно изменить:
- Имя объекта: имя записи. Его нужно указать, чтобы добавить объект в сам уровень. Помни, что оно должно быть таким же, как и то, что ты указал в StageObject.sto.xml.
- <Model>: Файлы .model, используемые объектом. У разрушенной версии их будет несколько — просто добавь столь тегов <Model>, сколько нужно, чтобы указать их всех.
- <RigidBodyContainer>: Имя .hkx файла.
- <RigidBody>: Имена нод (nodes) в 3DS Max, которые были при экспорте коллизии. Как и с <Model>, используй тег для каждого из них.
- <NextObjName>: В записи целого объекта здесь нужно указать имя разрушенного. В записи разрушенного же это останется пустым.
- <IsHoming>: При необходимости поставь здесь "true", чтобы в объект можно было попасть Хоуминг-атакой.
- <SoundID>: Звук, играющий при разрушении объекта. Просмотри другие записи, чтобы узнать список доступных звуковых эффектов.
- Когда всё это сделано, сохрани файл.
- Осталось лишь вставить объект в уровень. Перейди в SonicGLvl и создай там ObjectPhysics. Измени параметр "Type" на имя своего объекта (оно же в ObjectProduction). Если установить IsDynamic в true, то объект можно будет перемещать, и на него будет действовать гравитация; части разрушенного объекта в любом случае будут динамическими. Затем сохрани файл и запусти уровень. Если ты нигде не ошибся, то всё должно заработать.
Дополнительно: создание шаблона SonicGLvl
- Этот шаг не является обязательным, но крайне рекомендуется. Если ты создашь шаблон, то сможешь увидеть сам объект в SonicGLvl вместо небольшой серой коробки. Это заметно облегчает точное расположение объектов.
- Найди свои файлы .mesh и .material (экспортированные через OgreMax, а не полученные после конвертации в .model). Добавь их в папку media SonicGLvl. Материалы нужно положить в /materials/scripts, текстуры — /materials/textures, модели — в /models/common.
- Твой файл .material должен называться так же, как и файл .mesh. Имя текстуры оставь таким, каким оно было после экспорта.
- После этого объект нужно добавить в качестве AltMesh. Иди в templates/common и открой ObjectPhysics.xml. Прокрути содержимое вниз и добавь элемент AltMesh.
- Установи <Condition> в "Type==[имя твоего объекта]".
- В <Mesh> укажи имя своего .mesh файла.
- Сохрани файл, и на этом всё. При следующем запуске SonicGLvl вместо серой коробки в ObjectPhysics должен появиться твой объект.