Деревья — различия между версиями

Материал из xrWiki
Перейти к: навигация, поиск
(Новая страница: «__NOTOC__ == Геометрия == Файл:xray-tree-geometry-01.PNG|thumb|320px|frame|Слева направо: видимая крона, видимый с…»)
 
Строка 11: Строка 11:
  
 
Ствол дерева в 3д-редакторе [https://xray-engine.org/index.php?title=File:xray-tree-geometry-02.PNG утапливается ниже мирового центра], чтобы с запасом перекрывать все неровности ландшафта и наклоны объекта в редакторе уровней.
 
Ствол дерева в 3д-редакторе [https://xray-engine.org/index.php?title=File:xray-tree-geometry-02.PNG утапливается ниже мирового центра], чтобы с запасом перекрывать все неровности ландшафта и наклоны объекта в редакторе уровней.
 +
 +
Кустарник и камыш отличаются от дерева только отсутствием объекта ствола, в остальном всё то же самое.
  
 
== Настройки материалов ==
 
== Настройки материалов ==
Для каждой части дерева - ствола, листьев, и невидимых частей - существуют особые настройки [[Материал|материалов]].
+
Для каждой части дерева - ствола, листьев, и невидимых частей - существуют особые настройки [[Материал|материалов]] со специальными шейдерами, которые реализуют реалистичное покачивание деревьев от несуществующего ветра.
 
{| class="wikitable" style="color: black; background-color: white; width: 60%;"
 
{| class="wikitable" style="color: black; background-color: white; width: 60%;"
 
|-
 
|-
Строка 61: Строка 63:
  
 
== Настройки объекта ==
 
== Настройки объекта ==
Объекту дерева нужно задать специальный [[Типы геометрии в X-Ray| тип геометрии]] для инстансирования, так называемый '''Multiple Usage'''. Он не указывается при экспорте геометрии из 3д-редактора, его нужно задать вручную в библиотеке объектов [[Level Editor | редактора уровней]]. Для этого в меню '''Objects -> Object Library''' выбрать нужный объект, нажать кнопочку '''Properties''' и на вкладочке '''Main Options''' задать '''Object Type''' как '''Multiple Usage'''.
+
Объекту дерева нужно задать специальный [[Типы геометрии в X-Ray| тип геометрии]] для инстансирования, так называемый '''Multiple Usage'''. Он не указывается при экспорте геометрии из 3д-редактора, его нужно задать вручную в библиотеке объектов [[Level Editor | редактора уровней]]. Для этого в меню '''Objects -> Object Library''' выбрать нужный объект, нажать кнопочку '''Properties''' и на вкладочке '''Main Options''' задать '''Object Type''' как '''Multiple Usage'''.<br />
 
+
Если забыть это сделать, то при сборке уровня LE выдаст ошибку о невозможности применять шейдеры флоры на обычном статичном объекте.
 +
<syntaxhighlight lang="text">Object 'mu\flora\trees\tree_sosna_1_01': engine shader 'flora\trunk_wave' not compatible with static objects
 +
        surface: 'trees_bark_sosna_01_SG'</syntaxhighlight>
 +
Обязательно нужно создать специальную текстуру-билборд в том же окне библиотеки объектов. Для этого следует включить галку '''Preview Object''' и нажать кнопку '''Make LOD'''. Создастся текстура '''''gamedata\textures\lod\texture_name.dds'''''. Подобные текстуры при сборке уровня в LE склеиваются в один большой атлас, который сохраняется в файл ''''''X:\gamedata\levels\darkvalley
 +
''
 
== Расстановка деревьев ==
 
== Расстановка деревьев ==
 
Как и любой иной статичный объект, деревья можно расставлять вручную поодиночке, вручную случайной выборкой из списка, и даже массово полуавтоматически засаживать пространства (подробнее см. [[Статичные объекты (Objects)]]).
 
Как и любой иной статичный объект, деревья можно расставлять вручную поодиночке, вручную случайной выборкой из списка, и даже массово полуавтоматически засаживать пространства (подробнее см. [[Статичные объекты (Objects)]]).
  
 
[[Категория:X-Ray SDK]]
 
[[Категория:X-Ray SDK]]

Версия 23:06, 10 февраля 2024

Геометрия

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

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

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

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

Ствол дерева в 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\texture_name.dds. Подобные текстуры при сборке уровня в LE склеиваются в один большой атлас, который сохраняется в файл 'X:\gamedata\levels\darkvalley

Расстановка деревьев

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