Террейн и сплэты: земля, которая не выглядит землёй
Большая открытая земля — самый неблагодарный объект. Её видно целиком, по ней бегают игроки, и любые грехи текстуринга читаются на расстоянии. Разберём, из чего делать геометрию и чем её красить, чтобы не было стыдно.
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-сетки.
Шов на границе биомов
Самая честная проблема открытых миров: лес заканчивается, начинается степь. Если биомы — разные чанки с разными материалами, на стыке будет видимый шов: текстура обрывается, цвет скачет, трава не переходит в ковыль.
Причины и лекарства:
- Разные источники весов. Левый чанк красили рукой, правый — процедурно по климату. Шов — разница стилей. Лекарство: единый splat-конвейер на весь мир, тогда стык — место, где маски плавно перетекают.
- Нет зоны смешивания. В природе граница размыта на десятки метров: кусты редеют, деревья появляются. Делайте буферную полосу 10–50 м, где маски обоих биомов перемножены.
- Граница чанков по сетке мира. Если данные биома хранятся по чанкам, сосед не знает, что было у соседа. Лекарство: маски биома — отдельный слой данных, растянутый сквозь границы чанков, а не «вшиванный» в каждый чанк.
Порядок действий
Геометрия → крупные формы рельефа. Splat-маски → биомы и переходы. Детализация → камни, кусты, трава-геометрия. Свет и туман → скрывают остатки правды.
Земля, которая не выглядит землёй, обычно не жертва плохих текстур. Это жертва резких границ: и в масках, и в биомах, и в вашей смелости смешивать.
Комментарии (1)
Трипланар на стыке биомов мылил, пока не прочитал про вес-маски. Теперь рисую швы руками, как вы советуете.
Форма для гостей комментариев пока не принимается — писать можно автору (expeot@outlook.com) или через владельца блога. Все записи выше настоящие, никто их не модерирует молча.