Deep Cold Grave
Wake up and welcome to your life!
:: Мастерская :: Воксельные модели в BLOOD

ВОКСЕЛЬНЫЕ МОДЕЛИ

ВВЕДЕНИЕ

Воксел (в разговорной речи воксель, англ. Voxel — образовано из слов: объёмный (англ. volumetric) и пиксел (англ. pixel) — элемент объёмного изображения, содержащий значение элемента растра в трёхмерном пространстве. Вокселы являются аналогами пикселов для трехмёрного пространства.

Вокселы давно используются в компьютерных играх, однако их использование ограниченно из-за серьёзных требований к аппаратной части. Чаще всего в играх вокселы используются для отрисовки моделей. Иногда используются воксельные ландшафты вместо обычного поля высот — это позволяет создавать более сложные пространства с пещерами и мостами. Одной из самых важных возможностей воксельных ландшафтов, интерьеров и объектов является возможность их динамического изменения, и разрушения в реальном времени. В движке Build Engine есть возможность использования воксельных объектов.

http://ru.wikipedia.org/wiki/Воксел

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Для того чтобы создать и добавить воксельную модель, нам потребуется следующий набор программ:

  • POLY2VOX – Конвертер полигональных моделей в воксельные, написан самим Кеном. Поддерживаемые форматы трехмерных моделей: *.ASC, *.3DS, *.MD3, *.MD2. Имеется исходный код.
  • SLAB6 –Редактор от Кена Сильвермана. Позволяет создавать, редактировать и сохранять воксельные модели в несколько форматов. Лучше скачать самую последнюю версию, поскольку в ней была добавлена важная для нас функция изменения размера моделей. В этой статье не будет рассмотрено рисование в данном редакторе– это очень долго, неудобно, а в итоге получается не реалистично. Гораздо лучше использовать полноценные трехмерные редакторы (3d Studio Max, Blender и т.д.), однако SLAB6 необходим для сохранения в правильный формат и назначения нужной палитры для вокселя.
  • EDITART – Всем известная программа для добавления новых спрайтов в *.ART файлы.
  • ARTEDIT – Понадобится нам, чтобы назначить воксельный идентификатор добавленному спрайту.
  • BARF – Необходим для добавления модели в ресурсный архив игры.

СОЗДАНИЕ ВОКСЕЛЬНОЙ МОДЕЛИ

Этап 1. Конвертирование

Для примера я буду использовать заранее заготовленную простую полигональную модель ящика, которую можно скачать в главе «Дополнительно». Если же вы хотите использовать другую, но никогда не работали в трехмерных редакторах, могу посоветовать ресурсы проекта «Transfusion». Файлы *.PK3 можно открыть с помощью архиватора WinRar.

  • Переместите модель и скин в одну папку с конвертером. Важно, чтобы скин был в одной папке с моделью, в противном случае вы получите белый куб.
  • Откройте файл *.3DS с помощью POLY2VOX и дождитесь конца операции.

Если вы все сделали правильно, после окончания в этой же папке появится файл с расширением *.KVX – это и есть воксельная модель, но прежде чем добавить в игру, нам необходимо ее отредактировать.

Этап 2. Редактирование

Запустите SLAB6, выберите меню «File», щелкните пункт «Open» и выберите вашу *.KVX модель. Скорее всего, вы увидите огромный ящик, который закрывает весь вид.

Дело в том, что все полигональные модели по умолчанию конвертируются с максимальной сеткой, поэтому ширина, высота и объем их всегда будет 128x128x256 (макс. размер модели в Build Engine), что нежелательно, если мы рисуем мелкие объекты.

Если уменьшать ее в редакторе карт – неизбежны подвисания игры и исчезновение моделей прямо перед носом у игрока. Еще хуже, когда Blood начнет вылетать с сообщением о нехватке памяти.

Здесь лучше использовать функцию «HalveDimensions» (вкладка Tools), что позволяет уменьшать ее в 2 раза.

При слишком сильном уменьшении у сложных моделей может пострадать качество, поэтому оптимальной шириной\высотой модели я считаю – 64x64 и 32x32, а затем, если модель кажется вам большой, ее можно уменьшить вручную в редакторе карт – это гарантировано позволит сэкономить память игры и не слишком ухудшит качество.


До уменьшения

После уменьшения

Огромные полигональные модели, например, машины при конвертировании также будут уменьшены до 128x128x256, что приведет к большой потере качества. Фактически вместо сглаженной машины, вы будете видеть пикселы и кубы, поскольку воксельная модель не использует текстурирование, а красит каждый пиксел в свой цвет. Поэтому не стоит использовать слишком большие объекты, либо заранее разделить конвертируемую модель на несколько частей в 3D редакторе.

Следующим шагом на данном этапе будет изменение цветов палитры. Об этой функции лучше не забывать, иначе вы будете видеть «серо-буро-малиново-красный» куб в игре без всякого узора, или того хуже – Blood вообще откажется запускаться.

Щелкните вкладку «Tools» и выберите пункт «Replace palette and convert colors». Перед вами появится диалоговое окно, в котором вам будет предложено выбрать палитру. Палитрой может служить скриншот или модель, взятая из Blood. Так же ею может быть файл PALETTE.DAT, который все равно понадобится вам, чтобы работать в EDITART – его-то я и предлагаю использовать в качестве палитры для нашего ящика. После того, как вы изменили палитру, фон станет серым – это значит, что палитра была успешно заменена на выбранную вами. Теперь, для того, чтобы увидеть, как модель будет отображаться в игре, нужно щелкнуть вкладку «View» и убрать галку с пункта «NormalShading». К сожалению, SLAB6 не сохраняет настройки, поэтому убирать галку придется каждый раз заново, как только вы перезапустите программу.

Мы подходим к заключительному шагу редактирования – создание спрайта для игры. Для любой модели необходима картинка, которая будет отображаться в редакторе карт, или в игре, если уменьшить уровень детализации. Спрайт желательно сделать того же размера, что и сама модель, чтобы в игре ваши объекты не висели в воздухе, или же наоборот были вмяты в землю. Снова щелкните вкладку «Tools» и нажмите пункт «AdjustPivots». В левом нижнем углу появятся три окна «Z:?:\??», «Y:?\??» и «X:?\??», где «?» означает точный размер модели в игре. Нас интересуют последние два значения – именно они определяют ширину и высоту нашего спрайта. Для ящика я использовал значения 64, но вы ограничены только вашей фантазией и возможностями редактора. Создайте спрайт такого же размера (можно сделать скриншот прямо в редакторе) и сохраните его в формате *.GIF. Совсем необязательно обрабатывать его в фотошопе, ведь вместо спрайта в игре будет отображаться модель, но если не хотите чтобы игроки ужаснулись, когда уменьшат детализацию или будут играть с 3DFX патчем, который не поддерживает воксели – рекомендую прочесть эту статью по добавлению спрайтов в игру.

Этап 3. Сохранение

Щелкните меню «File» и выберите «SaveAs», выберите формат *.KVX и введите имя, например «box01.kvx». Появится следующее окно, в котором необходимо выбрать «5 mips» - это увеличит размер файла, но сделает модель пригодной для использования в Blood.
На этом создание модели завершено, самое сложное позади и можно откинуться на спинку сидения, а лучше переместить модель и спрайт в папку с Blood.

ДОБАВЛЕНИЕ МОДЕЛИ В ИГРУ

Этап 1. Добавление спрайта

Запустите EDITART, передвиньтесь в любую свободную плитку и нажмите «Enter». Теперь нажмите «U» и передвиньте указатель к  вашему *.GIF файлу, после чего нажмите клавишу «O». Спрайт должен добавиться и быть размером 64x64, если же нет – вы легко можете изменить его размер, нажав клавишу «S» и введя значения. Как я уже сказал – совсем необязательно, чтобы спрайт выглядел идеально, но лучше, чтобы он соответствовал размеру модели (так легче будет ориентироваться в редакторе карт). Сохраните изменения и выходите.

Этап 2. Определение типа и присвоение идентификатора спрайту

Запустите ARTEDIT, передвиньтесь к добавленному спрайту и нажмите «Enter». Чтобы выбрать тип спрайта, жмите клавишу «W». Кстати, есть два типа вокселей: VOXEL – статичная модель, которая используется для объектов и SPINVOXEL - вращающаяся модель, используемая для оружия и броней. Выберите тип VOXEL, а затем присвойте идентификатор с помощью клавиши «V». Если хотите добавить новую модель в игру, используйте значения с 65, если же желаете заменить стандартную модель – нужно знать ее номер. Полную таблицу идентификаторов можно найти в главе «Дополнительно», а пока присвойте значение 65. Сохраните изменения и выходите.

!ВАЖНО: Все  присвоенные номера моделей хранятся в файле VOXEL.DAT. Не забывайте поставлять его вместе с вашим дополнением!

Этап 3. Добавление *.KVX файла в ресурсный архив

Для добавления *.KVX файлов нам понадобится программа BARF, которую можно найти на диске с игрой, либо в разделе "Файлы" на сайте Российского Кровавого Сообщества. Если просто так добавить файл в архив – в игре ничего не изменится, поэтому нам нужно написать специальный скрипт.

  • Создайте текстовый файл в папке с Blood и назовите его «VOX.RFS». Откройте его блокнотом и впишите следующие строчки, не забывая о кавычках и точке с запятой:
     resource "box01.kvx" as 65;
     ;
    Ключевую роль здесь играют ID «as номер» и расширение файла «*.KVX» . Благодаря первому мы можем зарегистрировать в игре один файл по нескольким ID, даже если не знаем имя оригинального файла (полезно, если нужно заменить стандартные модели). Однако если расширение заменяющего файла окажется другим, он зарегистрируется в другом типе файлов и в игре никаких изменений не произойдет (если это будет неизвестный тип).
  • Создайте текстовый файл и назовите его «BOX.BAT». Откройте его блокнотом и впишите следующие строчки:
    barf blood.rff @vox.rfs
  • Запустите BOX.BAT и дождитесь окончания процесса добавления файлов. Окно закроется автоматически.

На этом процесс добавления модели в игру завершен, вам осталось только зайти в редактор, создать карту и вставить в нее заветный спрайт, который в игре превратится в красивый ящик, нисколько не отличающийся от того как, если бы его рисовали сектором. В итоге мы получили возможность изменять его размеры или сделать его разрушаемым с выбросом полезных предметов для игрока. К тому же это хорошая экономия секторов.
Иногда, если модель слишком объемная, игрок может проскакивать сквозь нее, пока его не заблокирует спрайт, принадлежащий ей. Здесь можно посоветовать только одно – обложить невидимыми блокирующими спрайтами модель и сделать их Gib-объектами.

Как видите, все оказалось гораздо проще, чем казалось на первый взгляд. POLY2VOX качественно конвертирует модели и делает их внутренности пустыми, за счет чего экономит ресурсы игры. Можно использовать 3D-рипперы, позволяющие выдернуть модель из любой трехмерной игры, например, 3DRIpperDx и таким образом обеспечить себе безбедное существование. В SLAB6 есть набор других средств, которыми вы можете отредактировать вашу модель: удалить ненужные пикселы, осветлить\затемнить, увеличить\уменьшить размеры или копировать ее части. Все вопросы и пожелания пишем здесь и не забываем сказать спасибо Nil’у за его статью о моделях.

PS: Кен Сильверман заинтересован в пополнении своей коллекции воксельных моделей…

ДОПОЛНИТЕЛЬНО

Полная таблица ID для *.KVX файлов
Артефакты (не добавленные файлы в игру)
Полигональная модель ящика
Статья о вокселях от Nil’a
POLY2VOX (копия)
SLAB6 (копия)

Обсудить на форуме



:: Copyright © 2006 Russian Blood Community

Все права защищены. Копирование и публикация информации с сайта без разрешения администрации ЗАПРЕЩЕНЫ. За несоблюдение данных правил гарантировано привлечение к кровавому процессу суда Избранных. Будьте бдительны, ведь это – реальность!

Дизайн: Black Gryphon® & Nirvana® Studios © 2005