Деревья — различия между версиями
RedPython (обсуждение | вклад) |
RedPython (обсуждение | вклад) м |
||
Строка 67: | Строка 67: | ||
<syntaxhighlight lang="text">Object 'mu\flora\trees\tree_sosna_1_01': engine shader 'flora\trunk_wave' not compatible with static objects | <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> | surface: 'trees_bark_sosna_01_SG'</syntaxhighlight> | ||
− | Обязательно нужно создать специальную текстуру-билборд в том же окне библиотеки объектов. Для этого следует включить галку '''Preview Object''' и нажать кнопку '''Make LOD'''. Создастся текстура '''''gamedata\textures\lod\ | + | Обязательно нужно создать специальную текстуру-билборд в том же окне библиотеки объектов. Для этого следует включить галку '''Preview Object''' и нажать кнопку '''Make LOD'''. Создастся текстура '''''gamedata\textures\lod\имя_текстуры_объекта.dds'''''. Подобные текстуры при сборке уровня в LE склеиваются в один большой атлас, который сохраняется в файл '''''X:\gamedata\levels\имя_уровня\level_lods.dds''''' |
− | '' | + | |
== Расстановка деревьев == | == Расстановка деревьев == | ||
Как и любой иной статичный объект, деревья можно расставлять вручную поодиночке, вручную случайной выборкой из списка, и даже массово полуавтоматически засаживать пространства (подробнее см. [[Статичные объекты (Objects)]]). | Как и любой иной статичный объект, деревья можно расставлять вручную поодиночке, вручную случайной выборкой из списка, и даже массово полуавтоматически засаживать пространства (подробнее см. [[Статичные объекты (Objects)]]). | ||
[[Категория:X-Ray SDK]] | [[Категория:X-Ray SDK]] |
Текущая версия на 23:22, 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\имя_текстуры_объекта.dds. Подобные текстуры при сборке уровня в LE склеиваются в один большой атлас, который сохраняется в файл X:\gamedata\levels\имя_уровня\level_lods.dds
Расстановка деревьев[править]
Как и любой иной статичный объект, деревья можно расставлять вручную поодиночке, вручную случайной выборкой из списка, и даже массово полуавтоматически засаживать пространства (подробнее см. Статичные объекты (Objects)).