Растительность: билборды, импостеры и скоростные деревья

29 авг 2026 · 6 мин · 💬 1

Лес в игре — это не сотни деревьев, это десятки тысяч объектов, и каждый кадр движок должен решить, что из них рисовать. Деревья — самый массовый объект в окружении, и именно они чаще всего кладут FPS. Хорошая новость: дерево — идеальная жертва для обмана, потому что игрок никогда не рассматривает крону с ближней дистанции дольше секунды.

Tree cards: крона из картонок

Настоящая крона из веток и отдельных листьев — расточительство. Рабочий стандарт: tree cards — плоские квады с текстурой ветвей, скрещённые пучком вокруг ствола. Классическая схема: 4–6 карт в кроне, пересечённые под углами, плюс 2–3 горизонтальные карты снизу и сверху. С любого ракурса игрок видит «объём», хотя внутри — только картон.

Проблема карт — силуэт: под некоторыми углами видна пустота между картами. Лечится плотным пересечением и альфа-текстурами, где ветви занимают большую часть кадра. Второе табу — освещённость: картонная крона на прямом солнце светится как абажур, если не запечь в текстуру нормальное затенение.

Impostor: дерево, которое притворяется картинкой

Для дальней дистанции карты уже дороги — тысячи деревьев дают десятки тысяч draw call. Решение — импостор: дерево рендерится один раз с 8–16 фиксированных ракурсов, кадры склеиваются в атлас. Вдали движок берёт нужный кадр из атласа и рисует один квад на дерево. Десять тысяч деревьев — десять тысяч квадов, а то и один instanced-батч.

Недавно эта техника живёт в Nanite Virtual Geometry и в Houdini-пайплайнах, но суть не изменилась с Far Cry 2: ближняя дистанция — геометрия, дальняя — фотоснимок геометрии. Порог переключения ставят так, чтобы pop-in был незаметен: обычно 30–60 метров для дерева.

Главный риск импостора — свет. Картинка запечена с одним освещением, а в сцене солнце ходит. Практический выход: импосторы только для дальнего плана, где разница углов не читается, плюс динамическая модуляция цвета под туман и время суток.

Скоростные деревья: ветер важнее полигонов

Дерево, которое не шевелится, выглядит мёртвым — и это выдаёт обман быстрее, чем низкое разрешение. Поэтому последний слой обмана — wind-шейдер: вершинный шейдер, гнущий ствол и листву по синусу с шумом. Правила простые:

  • Амплитуда растёт от корня к веткам: ствол почти стоит, кончики ветвей гуляют на 10–20 см.
  • Каждая карта кроны получает свою фазу по позиции — иначе лес качается как один флажок.
  • Сила ветра — глобальный параметр: порывы двигают весь лес синхронно, и это лучшая инвестиция в «живость» сцены на свете.

Стоимость — ноль полигонов, чистая математика в вершинном шейдере. Деревья-карты с ветром выглядят живее, чем статичная высокая геометрия: движение продаёт объём лучше объёма.

Итоговая схема

Типовой LOD-путь дерева в моём пайплайне: LOD0 — ствол с нормал-картой + 6 карт кроны; LOD1 — 3 карты; LOD2 — импостор-квад; дальше — туман и здравый смысл. Плюс wind-шейдер на всех уровнях, кроме импостора (там «ветер» уже в запеченных кадрах).

Ботаники плачут, лес стоит, FPS ровный. В игре про лесоруба растительность — единственный противник, которого нельзя срубить: его можно только правильно нарисовать.

Комментарии (1)

Форма для гостей комментариев пока не принимается — писать можно автору (expeot@outlook.com) или через владельца блога. Все записи выше настоящие, никто их не модерирует молча.