В современной Assetto Corsa есть 3 типа деревьев:
- 3D деревья через CSP TreeFX
- 2D деревья через
ksTree - 2D фоновая линия деревьев через
ksPerPixelAt
2D Деревья через ksTree 🔗
Правильно настроить деревья потребует некоторое количество усилий от автора.
Для лучшего эффекта, используй Y-деревья, и поворачивай их гранью перпендикулярно дороге.
Вот 4 типа деревьев в Blender. Два варианта используют группировку, два - нет. Первое дерево слева использует вертикальные нормали. У остальных нормали не менялись. Обрати внимание на сабдив по вертикали.
Вот превью с солнцем над головой. Очень разные результаты освещения.
Дерево 1 с вертикальными нормалями вообще не получило освещения.
Дерево 2 уже лучше, но тёмная область доходит до самой верхушки, что неверно.
Дерево 3 - то, что нам нужно. Единственное отличие от дерева 2 - сабдив по вертикали.
Дерево 4 - дефолтное дерево, если ты забьёшь на этот гайд.
Чтобы получить дерево 3, у каждого дерева должен быть ориджин внизу и в середине дерева. Вертикальные грани должны быть разрезаны, чтобы тень не шла до верхушки.
Чтобы получить группировку и автоматическую запечку нормалей в KSEditor, в Blender деревья должны оставаться отдельными объектами.
Склейка произойдёт в KSEditor, если мы правильно назовём объекты. Пример группировки GROUP_A в Блендере:
Вот группировка GROUP_B. Это повторяется для всех групп.
Можно использовать более длинные названия: KSTREE_GROUP_PINE_, KSTREE_GROUP_MAPLE и т.д.
В KSEditor это превратится в ноду BLOCKTRANSFORM, и префикс KSTREE_GROUP_ будет обрезан. Отдельные деревья будут склеены в один объект и нормали для освещения будут запечены автоматически.
Это работает только с префиксом KSTREE_GROUP_. Шейдер ksTree использовать не обязательно.
Финальный продукт:
Горизонтальные тени в полдень 🔗
Так выглядит тень 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 деревья по следующим причинам:
- CSP производит очень много “угадываний” где у дерева листья, где ветки и где ствол
- Угадывания работают через жопу, половина деревьев становятся невидимыми в одном, нескольких или всех LODах
- Если у дерева есть элементы помимо этого, например, цветы - скорее всего они отлетят
- Без LODов, 3D деревья будут жрать очень много фпс, даже с учётом инстансинга
- Желаю удачи в поиске деревьев с адекватными LODами
- Шейдинг 3D деревьев сильно выбивается из общего шейдинга игры, особенно со сменой освещения, и выглядит отвратительно
- Желаю удачи в геморрое с подкруткой параметров шейдинга, если CSP’шные угаданные сделают дерево слишком ярким. В своих опытах я закодил для этого целый инструмент, и всё равно пришёл к выводу, что овчинка не стоит выделки
- Документация - паршивая, инструментов для работы с этим в Блендере, а не в игре - нету
Если всё это тебя не отпугнуло, добро пожаловать в “документацию”:
См 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