Деревья

Материал из xrWiki
Версия от 23:22, 10 февраля 2024; RedPython (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Геометрия[править]

Слева направо: видимая крона, видимый ствол, невидимый ствол, невидимая крона

Любое дерево состоит из:

  • видимой геометрии
  • невидимой геометрии для просчёта коллизии

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

Ствол дерева в 3д-редакторе утапливается ниже мирового центра, чтобы с запасом перекрывать все неровности ландшафта и наклоны объекта в редакторе уровней.

Кустарник и камыш отличаются от дерева только отсутствием объекта ствола, в остальном всё то же самое.

Настройки материалов[править]

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

Engine Shader Compiler Shader Game Material Описание
flora/trunk_wave flora/trunk_wave materials/tree_trunk Ствол (кора)
flora/leaf_wave flora/leaf materials/bush Крона (ветки с листьями)
def_shaders/def_trans flora/flora_collision materials/tree_trunk Невидимый дубликат ствола
def_shaders/def_trans flora/flora_collision materials/bush Упрощённый меш кроны

Видимая крона должна иметь флаг двусторонней поверхности (2-sided). Невидимой кроне тоже можно добавить такой флаг, но это, как правило, излишне.

Улучшенные возможности[править]

Для ускорения создания и чистки ИИ-сетки в проекте Б.О.Р.Ж.Ч. была реализована гениальная идея: создавать вокруг ствола дерева обечайку, в которую бы утыкались ноды в процессе генерации. Это нужно для того, чтобы вокруг ствола сохранялась буферная зона без ИИ-нод. Обечайка обладает специальным шейдером, который указывает компилятору игнорировать данную поверхность. В результате такая геометрия работает в редакторе уровней, но не попадает в игру.

Engine Shader Compiler Shader Game Material Описание
def_shaders/def_trans special/ai_obstacle default Обечайка вокруг ствола

Размер обечайки выбирается таким, чтобы она перекрывала диаметр ствола плюс по одной ноде с каждой стороны, а по высоте была больше параметра Can Up в настройках кисти генератора ИИ-сетки. Для работы опции требуется борщовский СДК и компиляторы.

Настройки объекта[править]

Объекту дерева нужно задать специальный тип геометрии для инстансирования, так называемый Multiple Usage. Он не указывается при экспорте геометрии из 3д-редактора, его нужно задать вручную в библиотеке объектов редактора уровней. Для этого в меню Objects -> Object Library выбрать нужный объект, нажать кнопочку Properties и на вкладочке Main Options задать Object Type как Multiple Usage.
Если забыть это сделать, то при сборке уровня LE выдаст ошибку о невозможности применять шейдеры флоры на обычном статичном объекте.

Object 'mu\flora\trees\tree_sosna_1_01': engine shader 'flora\trunk_wave' not compatible with static objects
        surface: 'trees_bark_sosna_01_SG'

Обязательно нужно создать специальную текстуру-билборд в том же окне библиотеки объектов. Для этого следует включить галку Preview Object и нажать кнопку Make LOD. Создастся текстура gamedata\textures\lod\имя_текстуры_объекта.dds. Подобные текстуры при сборке уровня в LE склеиваются в один большой атлас, который сохраняется в файл X:\gamedata\levels\имя_уровня\level_lods.dds

Расстановка деревьев[править]

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