Деревья

· 647 words · 4 minute read

В современной Assetto Corsa есть 3 типа деревьев:

  1. 3D деревья через CSP TreeFX
  2. 2D деревья через ksTree
  3. 2D фоновая линия деревьев через ksPerPixelAt

2D Деревья через ksTree 🔗

Правильно настроить деревья потребует некоторое количество усилий от автора.

Для лучшего эффекта, используй Y-деревья, и поворачивай их гранью перпендикулярно дороге.

Вот 4 типа деревьев в Blender. Два варианта используют группировку, два - нет. Первое дерево слева использует вертикальные нормали. У остальных нормали не менялись. Обрати внимание на сабдив по вертикали.

Типы деревьев в Blender

Вот превью с солнцем над головой. Очень разные результаты освещения.

Дерево 1 с вертикальными нормалями вообще не получило освещения.

Дерево 2 уже лучше, но тёмная область доходит до самой верхушки, что неверно.

Дерево 3 - то, что нам нужно. Единственное отличие от дерева 2 - сабдив по вертикали.

Дерево 4 - дефолтное дерево, если ты забьёшь на этот гайд.

Типы деревьев в KSEditor

Чтобы получить дерево 3, у каждого дерева должен быть ориджин внизу и в середине дерева. Вертикальные грани должны быть разрезаны, чтобы тень не шла до верхушки.

Как расставить ориджин деревьер в Блендере

Чтобы получить группировку и автоматическую запечку нормалей в KSEditor, в Blender деревья должны оставаться отдельными объектами.

Склейка произойдёт в KSEditor, если мы правильно назовём объекты. Пример группировки GROUP_A в Блендере:

Группировка деревьев в Блендере

Вот группировка GROUP_B. Это повторяется для всех групп.

Группировка деревьев в Blender

Можно использовать более длинные названия: KSTREE_GROUP_PINE_, KSTREE_GROUP_MAPLE и т.д.

В KSEditor это превратится в ноду BLOCKTRANSFORM, и префикс KSTREE_GROUP_ будет обрезан. Отдельные деревья будут склеены в один объект и нормали для освещения будут запечены автоматически.

BLOCKTRANSFORM в KSEditor

Это работает только с префиксом KSTREE_GROUP_. Шейдер ksTree использовать не обязательно.

Финальный продукт:

Пример 1 правильно освещённых деревьев в Assetto Corsa

Пример 2 правильно освещённых деревьев в Assetto Corsa

Горизонтальные тени в полдень 🔗

Так выглядит тень 2D дерева в полдень:

А вот так можно сделать с дополнительной плоскостью:

Сначала нужно сделать текстуру с 1% альфы, которая будет кастовать тень:

Теперь плоскость с этой текстурой нужно приделать к копии дерева, фейсом вниз:

Вклеить её в объект дерева:

И удалить остатки дерева:

Теперь у нас остаётся только плоскость с ориджином дерева:

Теперь расставляем это ко всем деревьям через Link Object Data:

В KSEditor ставим такие настройки этому материалу:

С treeline’ами тоже можно это провернуть:

Текстуры и метод предоставил LilSki

Подсветка деревьев на склонах 🔗

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

Этот конфиг свяжет освещение растительности с освещением поверхности под ними:

[ALIGN_TREES_...]
SURFACE_MATERIALS = terrain_01
TREE_MATERIALS = shader:ksTree

Скорость загрузки трассы станет немного медленнее, но расчёты кэшируются и не влияют на фпс в игре.

Перпендикулярная плоскость 🔗

Этот конфиг будет прятать плоскость дерева, стоящую перпендикулярно камере:

[SHADER_REPLACEMENT_...]
MATERIALS = shader:ksTree?
MATERIAL_FLAG_0 = 1

2D фоновая линия деревьев 🔗

Тут всё просто. Чтобы не грузить рендеринг тысячами деревьев на дальних склонах, туда просто навешивается “лентой” плоскость с текстурой лесопосадки:

3D деревья через TreeFX 🔗

Крайне нерекомендую использовать 3D деревья по следующим причинам:

  1. CSP производит очень много “угадываний” где у дерева листья, где ветки и где ствол
  2. Угадывания работают через жопу, половина деревьев становятся невидимыми в одном, нескольких или всех LODах
  3. Если у дерева есть элементы помимо этого, например, цветы - скорее всего они отлетят
  4. Без LODов, 3D деревья будут жрать очень много фпс, даже с учётом инстансинга
  5. Желаю удачи в поиске деревьев с адекватными LODами
  6. Шейдинг 3D деревьев сильно выбивается из общего шейдинга игры, особенно со сменой освещения, и выглядит отвратительно
  7. Желаю удачи в геморрое с подкруткой параметров шейдинга, если CSP’шные угаданные сделают дерево слишком ярким. В своих опытах я закодил для этого целый инструмент, и всё равно пришёл к выводу, что овчинка не стоит выделки
  8. Документация - паршивая, инструментов для работы с этим в Блендере, а не в игре - нету

Если всё это тебя не отпугнуло, добро пожаловать в “документацию”:

См https://github.com/ac-custom-shaders-patch/acc-extension-config/wiki/Tracks-%E2%80%93-Trees

И поскольку Илюша пидорас задокументировал лишь каплю в море (что, впрочем, больше, чем он задокументировал по рефраку), то остатки документации собираем по крупицам в этом треде: https://discord.com/channels/453595061788344330/1032818772723105792/1032818777039061003

И в этой вики: https://github.com/John5i4/Shutoko-Revival-Project/wiki/CSP-3D-Trees