Ноя 082013
 

Опишу метод вкратце. Импортируем нашу карту в Блендер, с помощью физического движка Bullet генерируем анимацию, компилируем модель и добавляем ее обратно на карту в виде энтити. Мы не будем использовать BMOD, да и весь AMXX вообще. Конечно, можно было воспользоваться 3D Max, но Блендер бесплатен и выгоден в коммерческом плане.

Пара примеров с этим методом:




Что нам понадобится?

Valve Hammer Editor – редактор карт очевидно;
BSP Viewer – понадобится для экспорта карты в 3ds;
Blender – прекрасный 3Д редактор со встроенным Bullet’ом;
rba2ba – скрипт на питоне, написанный чехом Jonatan Matejka. Потребуется для генерации скелета будущей модели (Зеркало, версия для Blender 3D 2.8x);
Blender SMD Tools – для экспорта нашей работы в привычный SMD;
smdfix – исправляет названия текстур и UV карту в SMD.

Настройка нашей сцены в VHE

Открываем карту в Хамере. Предположим, нам нужно добавить красивый эффект падения ящиков из-за сломанной опоры. Для этого рисуем башню из трех брашей с текстурами деревянных ящиков и пару дощечек под ней. Одна из опор лопается. У автора оригинальной статьи получилось вот так:

башня из ящиков

Компилируем нашу карту в bsp (советую установить параметр -subdivide 512) и открываем ее в BSP Viewer’е.

башня из ящиков

Жмем File -> Export -> 3DS File. Оставляем галку на Export Materials. Сохраняем 3ds файл. Если вы собрали карту вместе с текстурами (исключили wad файл), то жмем File -> Export -> Bitmaps. Параметры в опциях можно оставить без изменений. Если карта все же берет материалы из wad’а, то вам придется распаковать содержимое архива при помощи специальной для этого программой (подойдет Wally или GCFScape). Теперь, когда у вас 3ds со всеми bmp-текстурами, можно переходить к следующему шагу.

Моделирование в Blender

Перед тем как приступить к самому сочному, советую изучить интерфейс и управление в этой среде. Пользователям с базовыми знаниями будет намного легче чем новичку, открывшему впервые Блендер.

Установите и запустите редактор. Подключите плагины rba2ba и Blender SMD Tools (File -> User Preferences -> Addons и жмем на Install from File). Теперь импортируем наши ящики в Блендер. Жмем Fule -> Import -> 3D Studio (.3ds). Переходим в Bledner Game.

 

Выделяем любой ящик. Переходим к Physics в свойствах объекта (в правом меню последняя иконка).

 

Устанавливаем Physics Type: на Rigid Body, и Collision Bounds на Box (или Convex Hull если меш не имеет примитивной формы). Дополнительно можно установить массу (Mass) объекту. Тоже самое делаем и с другими ящиками.

Выделяем все ящики и вводим комбинацию клавиш Shift+Ctrl+Alt+C, выбираем Origin to Geometry.

Переходим снова в правое меню и на этот раз щелкаем по иконке World

 

Здесь мы можем изменить гравитацию (Gravity), FPS и физические шаги (Physics Steps). Удаляем дощечку под ящиками. Теперь нажимаем на P. Башня рассыпалась? Замечательно. Esc вернет вас обратно в режим редактирования. Если ящики будут проваливаться под землю, измените параметр Substeps или выделите поверхность на которую падают ящики и задайте соответствующий Collision Bounds.

башня из ящиков

Когда анимация физики будет вас устраивать, установим галку на Game -> Record Animation. Снова запускаем анимацию. Далее удаляем все объекты кроме ящиков. Выделяем оставшиеся коробки и жмем на пробел. В поле ввода набираем Rigid body anim to bone anim (это установленный скрипт нашего чешского друга и автора оригинала этой статьи).

башня из ящиков

После группируем меши комбинацией Сtrl+G. Теперь File -> Export -> Source Engine, Scene as configured. Ошибку пишет? Проверьте в свойствах сцены (правое меню, иконка с шаром и цилиндром) указан ли путь к директории для экспорта (Export Path). Не забудьте установить формат SMD. Ух…

Запускаем smdfix через батник или командную строку. Можете импортировать полученные смд (в привычном 3д редакторе) и проверить анимацию. Если вас все устраивает, то переходим к заключающим шагам.

Компиляция MDL

Создаем текстовый документ расширения .qc и записываем туда следующий код:

$cd "." // относительный Путь к ресурсам
$body "body" "out" // body - название меши в mdl, out - путь к smd меши
$sequence "idle" "anims/ArmatureAction" fps 50 // idle - название анимации в mdl, anims/ArmatureAction - путь к smd анимации, fps - частота кадров в анимации

Подробнее о qc скриптинге можно почитать вот тут

Компилируем наш qc код. Компилятор в mdl для HL (через studiomdl.exe). Возможно, может появиться ошибка при компиляции из-за ограничений в кол-ве кадров в анимации. В таком случае придется вернуться к Блендеру и понизить значение FPS в параметрах сцены.

Импорт анимации в VHE

Теперь мы можем вернуться к VHE. Открываем нашу карту и заменяем старые статические браши ящиков на новую энтити класса “cycler_sprite” . Устанавливаем параметры sequence 1, framerate 1. Далее я не буду расписывать как добавлять триггеры и указывать их на энтити. Все это можно найти в многочисленных мануалах по VHE или в самом первоисточнике. Единственное могу добавить, что для расчета времени продолжительности анимации можно воспользоваться незамысловатой и очевидной, на мой взгляд, формулой: время = кол-во кадров/fps, где кол-во кадров можно посмотреть в mdl-вьювере или открыв текстовым редактором smd анимации.

башня из ящиков

Источник: http://tvorbamap.cz/articles.php?article_id=117

Извините, форма комментирования закрыта в данный момент.