Документация/Типы объектов/Special/Decal.type

From NeoAxis 3D Engine Wiki

Jump to: navigation, search
Перейти на уровень выше
Пример Decal.type - дырки от пуль

Contents

Описание

Декали (decal с англ.: бирка, ярлык, клеймо) - особый вид геометрии, который позволяет повышать детализированность игровых окружений без надобности запекать мелкие детали в текстуры.

Обычно декали используют для отрисовки дырок от пуль, пятен крови или гари от взрывов.

Декаль в NeoAxis представляет собой геометрию с наложенным на неё материалом. Для примера, декаль рисующая дырку от пути обычно содержит два треугольника. Геометрия декали создается динамически, как бы натягиваясь на статические окружающие физические тела (стены, полы).

Создавать новые типы декалей и настраивать их можно в редакторе ресурсов, также как обычный игровой объект.

Менеджер декалей

Помимо одиночных декалей, в NeoAxis Engine имеется класс, реализующий управление декалями. Этот класс называется DecalCreator. Он позволяет генерировать множество декалей (к примеру, для создания следов от взрыва), а также рассчитывает накладывать декаль или нет на ту или иную поверхность. Объекты типа DecalCreator используются во всем стандартном оружии NeoAxis Engine для генерации следов от выстрелов (см. DefaultBulletDecalCreator.type в директории "Data\Types\Decals\DefaultBulletDecal").

Обычно этот объект прикрепляется к пуле (игровому типу пули). Вы можете найти примеры в SDK. Например, Types\Bullets\ShotgunBullet\ShotgunBullet.type.

Параметры DecalCreator:

Название Описание
DecalCreator
ApplyToMapObjects Будут ли декали прикрепляться к объектам на базе класса MapObject. По умолчанию объекты прикрепляются только к StaticMesh и террейну.
DepthRenderOffset Отступ от поверхности при рендеринге декали. Если возникает z-fighting проблема, то нужно увеличить данный параметр.
FadeTime Время плавного пропадания декали.
LifeTime Время жизни декали. При значении 0, декаль не будет удаляться.
Materials Список материалов декалей.
MaxCount Максимальное количество генерируемых декалей данного типа. При значении 0, лимита на количество декалей не будет.

Используется для оптимизации рендеринга. Например, нет смысла сохранять все дыры от пуль на уровне. Достаточно хранить только последние. Установив значение в 50, вы будете иметь только 50 дыр от пуль на уровне. Старые декали будут автоматически удалены.

OmniMaxDistance Используетя только при SpreadType = Omni. Определяет максимальное расстояние от позиции создателя, на котором может быть создана декаля.
Size Размер генерируемой декали.
SpreadType Способ создания декалей. Принимает два значения:
  • Directional - создается одна декаля, которая создается в зависимости от направления создателя. Пример: след от пули.
  • Omni - создается несколько декалей, вне зависимости от направления создателя. Пример: следы взрыва.
Entity
AllowEmptyName Разрешить или запретить использование пустого имени для объектов данного типа.
ClassInfo Имя класса типа.
CreatebleInMapEditor Разрешить или запретить создание типа в редакторе карт.
Name Имя типа.
NetworkType Тип сетевого взаимодействия. Предлагается выбрать одно их следующих значений: NotSynchronized (не синхронизирован), ClientOnly (синхронизируется только на клиенте), ServerOnly (синхронизируется только на сервере), Synchonized (полностью синхронизирован).
MapObject
AttachedObjects Список присоединенных объектов.
PhysicModel Имя физической модели.

Урок - Создание нового типа декали

В этом уроке мы научимся создавать собственные декали, используемые как следы от пуль.

Создание материала для декалей

Основа любой декали - это материал. А основа материала декали - текстура. Материал задает то, как будет выглядеть декаль.

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

Запустим редактор ресурсов.

Перво-наперво, создадим директорию для нашей новой декали. Зайдем в директорию Types и нажмем правой кнопкой на папку Decals. В появившемся контекстном меню выберем пункт New Directory.

Decal1.jpg

Назовем созданную директорию New Decal. Нажмем на нее правой кнопкой мыши и выберем пункт New Resource.

Decal2.jpg

В появившемся окне выберем тип создаваемого объекта - Material. После этого нажмем кнопку Continue.

Decal3.jpg

В окне создания нового материала введем название нашего материала - NewDecal, тип - ShaderBaseMaterial. Затем нажмем кнопку Next.

Decal4.jpg

Дважды кликнем на появившемся файле материала, чтобы перейти в режим редактирования.

Decal5.jpg

Назначим материалу текстуру декали. Нажмем кнопку "..." параметра Diffuse1Map в свитке Diffuse.

Decal6.jpg

Для примера выберем стандартную текстуру для следов от выстрела - DefaultBulletDecal. Она расположена в директории Types\Decals\DefaultBulletDecal.

Decal7.jpg

У нашей текстуры имеется альфа-канал, но он пока что не используется в материале. Сначала его нужно включить. Для этого в свитке _ShaderBase параметров материала установим параметр Blending в значение AlphaBlend.

Decal8.jpg

Наконец, чтобы наши следы от выстрела святились, как радиоактивная масса, выставим значение параметра EmissionColor (свиток параметров Emission) в зеленый цвет (Green - 255).

Самосвечение материала

Создание материала закончено, осталось лишь его сохранить.

Decal10.jpg

Создание игрового объекта

Сейчас мы создадим игровой объект, но не просто декаль, а менеджер декалей (или создатель декалей). Он позволяет генерировать декали. Сначала он рассчитывает, можно ли создать декали на той или иной поверхности и потом создается.

Создадим новый ресурс, нажав правой кнопкой на нашей папке NewDecal и выбрав пункт New Resource. В появившемся окне выберем тип ресурса - Entity Type. После этого нажмем кнопку Continue.

Decal11.jpg

В окне создания Entity укажем имя игрового объекта - NewDecalCreator, а также тип - DecalCreator. Теперь нажмем кнопку Next.

Decal12.jpg

Дважды кликнув на появившемся файле NewDecalCreator.type, перейдем в режим редактирования игрового объекта.

Decal13.jpg

Как уже говорилось выше, главная составляющая декали - материал. Его то и добавим к нашему менеджеру декалей. Нажмем на кнопку "..." параметра Materials.

Decal14.jpg

В появившемся окне, нажмем кнопку Add.

Decal15.jpg

Теперь нужно указать имя файла материала. Щелкнем по кнопке "..." у параметра MaterialName.

Decal16.jpg

Выберем, созданный нами, материал - NewDecal.highMaterial, и нажмем кнопку Ok.

Decal17.jpg

В окне со списком материалов также нажмем кнопку Ok, чтобы завершить добавление материала к менеджеру декалей.

Decal18.jpg

Теперь настроим некоторые другие параметры менеджера. Установим параметр FadeTime (затухание) в значение 2, MaxCount (максимальное количество декалей) в 10, а Size (размер) в 0.2.

Decal19.jpg

Сохраним созданный нами игровой тип.

Прикрепление декалей к пуле

Это пожалуй самая легкая часть урока. Нам необходимо прикрепить, созданный нами, менеджер декалей к пуле.

В качестве примера, возьмем выстрел от стандартного ружья (shotgun) NeoAxis. Два раза кликнем по файлу ShotgunGravityBullet.type, находящемуся в директории Types\Bullets\ShotgunGravityBullet.

Decal20.jpg

След от выстрела появляется в тот момент, когда пуля прекращает свое существование. Таким образом менеджер декалей присоединяется к списку DieObjects - объектов, создающихся после удаление данного игрового объекта. Нажмем на кнопку "..." параметра DieObjects.

Decal21.jpg

К ShotgunGravityBullet уже прикреплен менеджер декалей. Нам нужно лишь изменить его. Выделим DefaultBulletCreator в списке Members и нажмем на кнопку "..." параметра Type.

Decal22.jpg

В появившемся окне выберем, созданный нами, NewDecalCreator.type и нажмем кнопку Ok.

Decal23.jpg

Изменения внесены и можно нажать кнопку Ok в окне с DieObjects.

Decal24.jpg

Сохраним отредактированный ShotgunGravityBullet.type.

Теперь приступим к тестированию. Запустим Game.exe (из директории Game\Bin). Перейдем на карту PhysicsDemo, чтобы протестировать наши радиоактивные следы от выстрелов. Возьмем ружье и выстрелим дополнительным огнем (правой кнопкой мыши) в стену. Вот такие следы должны остаться на ней:

DecalCreator в действии

Расставление декалей в редакторе карт

На данный момент возможность расставления декалей в редакторе карт не реализована.

Впрочем, это не сложно реализовать самим. Исходный код декалей можно найти в классах Decal и DecalCreator.