Террейн и сплэты: земля, которая не выглядит землёй

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

Большая открытая земля — самый неблагодарный объект. Её видно целиком, по ней бегают игроки, и любые грехи текстуринга читаются на расстоянии. Разберём, из чего делать геометрию и чем её красить, чтобы не было стыдно.

Heightfield против mesh

Heightfield — сетка «гребёнка»: ровная решётка квадов, каждая вершина поднята по карте высот. Быстро, предсказуемо, идеально для процедур, удобно рисовать кистями. Минусы: отвесные скалы невозможны в принципе (один X,Y = одна высота), а равномерная решётка тратит полигоны на плоские пустыни так же щедро, как на утёсы.

Mesh-террейн — обычная сеть, нарисованная вручную или из sculpt. Умеет нависающие камни, пещеры, арки. Дороже в изготовлении, капризнее в процедурных операциях.

Рабочая схема для большинства проектов: heightfield как основа + mesh-вставки (скалы, валуны, обрывы) там, где нужен вертикальный рельеф. Никто не запрещает жениться на обоих.

Splat-map: четыре материала на квадратный метр

Классика игрового террейн-текстуринга — splat map: RGBA-текстура, где каждый канал — маска одного материала. Красный — трава, зелёный — земля, синий — камень, альфа — песок. Шейдер смешивает четыре набора текстур по весам из каналов. Один квадратный метр земли, четыре материала, ноль лишних draw call.

Blender умеет это нативно: в скульпте террейна кистью рисуете маски слоёв, экспортируете как color attribute или отдельные текстуры. В Unreal — Landscape со слоями, в Unity — Terrains с layer map; принцип везде один.

Главное правило сплэтов: маски должны перекрываться. Трава переходит в камень не стеной, а рваной зоной на 20–40 см, где видны обе текстуры. Резкая граница = «наклейка», глаз считывает обман мгновенно.

Трипланар: спасение для скал

Проблема любого террейна — UV. Развёртка километра земли — это боль, вечные растяжки и повторюющийся паттерн, который видно с воздуха. Решение для вертикалей — трипланарное проецирование: шейдер проецирует текстуру одновременно с XY, XZ и YZ и смешивает по нормали. Никакой развёртки — камень на скале выглядит камнем, повёрнутым как угодно.

Цена: трипланар не любит динамическое освещение без хитростей, стоит дороже обычного sampling, и на пологих поверхностях его видно — поэтому рабочая связка:

  • горизонтали — сплэт-мапа по UV или world mapping;
  • вертикали — трипланар, включаемый маской по углу нормали (dot(normal, up) < 0.5 → камень).

Шейдер переключает режимы плавно, и игрок не видит ни стыка, ни UV-сетки.

Шов на границе биомов

Самая честная проблема открытых миров: лес заканчивается, начинается степь. Если биомы — разные чанки с разными материалами, на стыке будет видимый шов: текстура обрывается, цвет скачет, трава не переходит в ковыль.

Причины и лекарства:

  1. Разные источники весов. Левый чанк красили рукой, правый — процедурно по климату. Шов — разница стилей. Лекарство: единый splat-конвейер на весь мир, тогда стык — место, где маски плавно перетекают.
  2. Нет зоны смешивания. В природе граница размыта на десятки метров: кусты редеют, деревья появляются. Делайте буферную полосу 10–50 м, где маски обоих биомов перемножены.
  3. Граница чанков по сетке мира. Если данные биома хранятся по чанкам, сосед не знает, что было у соседа. Лекарство: маски биома — отдельный слой данных, растянутый сквозь границы чанков, а не «вшиванный» в каждый чанк.

Порядок действий

Геометрия → крупные формы рельефа. Splat-маски → биомы и переходы. Детализация → камни, кусты, трава-геометрия. Свет и туман → скрывают остатки правды.

Земля, которая не выглядит землёй, обычно не жертва плохих текстур. Это жертва резких границ: и в масках, и в биомах, и в вашей смелости смешивать.

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

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