Модульные наборы: строим уровень как из конструктора
Модульный набор — это LEGO для 3D: несколько десятков деталей, из которых собирается целый город. Я потратил два проекта, прежде чем понял, что модульность — это не про полигоны, а про договорённости: сетка, пивоты, швы. Рассказываю, как собрать набор, который не разваливается на стыках.
Шаг нулевой: сетка
Всё начинается с размеров. Выбираем базовую единицу — обычно 1 метр (Blender: 1 юнит = 1 м) — и кратные ей размеры: стены 1×1, 2×1, 4×1, углы 1×1, колонны 0.5×0.5. Никаких «1.37, потому что красиво». Левел-дизайнер строит уровень блоками серого бокса по этой же сетке, и если ваш модуль не влезает в его метры — модуль умрёт в стол.
Пивот: точка, вокруг которой всё
Пивот каждого модуля — в углу, на пересечении стыковочных плоскостей, на уровне пола. Не в центре объекта. Тогда два блока, поставленные «впритык» через snapping, становятся идеально, без ручного сдвига на 0.0003. В Blender: Object → Set Origin → Origin to 3D Cursor, курсор — в нужный угол.
Форма шва
Стык двух стен — самое слабое место набора. Три приёма:
- Запил (tongue-and-groove). Одна сторона шва с выступом, другая с пазом. Даже при лёгком неточном стыке щели не видно. Для каменных/кирпичных текстур — обязательно.
- Наложка. Стена чуть заходит за соседнюю по оси, которая всё равно закрыта. Проще запила, работает для внутренних швов.
- Отдельный стыковочный модуль. Угол, колонна, карниз — «замазка», которая прячет места встреч. Хорошие наборы живут за счёт таких деталей: 70% — плоские панели, 30% — углы, крышки, обрамления.
UV и атлас
Все модули набора пекутся в один UV-атлас и одну текстуру — иначе draw calls съедят производительность. Правила:
- одинаковый density (пиксели на метр) у всех деталей, иначе кирпич на одной стене крупнее, чем на другой;
- общие швы модулей выравниваются по пиксельной сетке атласа — тогда на стыке нет «мигающих» пикселей;
- изнанки (внутренние грани, то, что закрыто соседом) — удаляем или сдвигаем в тёмный угол атласа.
Что входит в минимальный набор «комната»
Стена прямая 1×1, 2×1; внутренний угол; внешний угол; дверной проём; оконный проём; пол; потолок; карниз; плинтус; колонна. Десять предметов — а вариантов планировок десятки. Дальше — масштабирование: тот же принцип на этаж, квартал, крепость.
Грабли, на которые я наступал
- Разные масштабы модулей. Кто-то экспортировал с масштабом 0.01 — и всё «щелило». Применяйте
Ctrl+A → Scaleдо экспорта, всегда. - Модули-исключения. «Эта стена особенная, 1.2 метра». Одна такая деталь убивает переиспользование и бесит левел-дизайнера больше, чем кривые нормали.
- Забывать про вариации. Три стены из десяти выглядят одинаково — глаз игрока считывает повтор. Лечится не новыми моделями, а вариациями текстур/Material Variation и мелким мусором на стыках.
- Скругления везде. Bevel на всех рёбрах удваивает полигонаж. Скошенные рёбра нужны только там, где свет ловит блик на силуэте.
Модульный набор — это продукт, а не арт. Его красота меряется не красотой отдельной детали, а количеством уровней, которые из него собираются, и скоростью сборки. Хороший набор левел-дизайнер собирает на глаз за вечер — и никто не замечает, что там всего десять деталей.
Комментарии (1)
Сетка 1м и вырезы под стыки — уровень собрался за ночь как лего. Раньше варил каждый угол отдельно.
Форма для гостей комментариев пока не принимается — писать можно автору (expeot@outlook.com) или через владельца блога. Все записи выше настоящие, никто их не модерирует молча.