1. Настройка геометрии: сглаживание и карты нормалей
Настройка геометрии: сглаживание и карты нормалей
Добро пожаловать на курс «Объем и глубина». Вы наверняка сталкивались с ситуацией: модель готова, текстуры наложены, свет выставлен, но объект выглядит как игрушечный или сделанный из картона. Ему не хватает веса, реалистичных бликов и микрорельефа. Проблема часто кроется не в материалах, а в том, как движок рендера считывает вашу геометрию.
В этой первой статье мы разберем фундамент объемного изображения: работу с нормалями и создание иллюзии детализации.
Почему рендер выглядит плоским?
В основе любой 3D-модели лежат полигоны. По умолчанию компьютер воспринимает каждый полигон как плоскую грань. Если вы создадите сферу из 100 полигонов, она будет выглядеть как граненый кристалл, а не как идеальный шар. Свет отражается от каждой грани в одном направлении, создавая жесткие переходы.
Чтобы избавиться от этого эффекта, нам нужно манипулировать тем, как свет взаимодействует с поверхностью. Здесь в игру вступают нормали.
Что такое нормаль?
Нормаль — это вектор (воображаемая стрелка), который перпендикулярен поверхности полигона или вершины. Именно эта стрелка указывает движку рендера, куда «смотрит» поверхность и как от неё должен отскочить луч света.
> Нормаль определяет, как свет будет отражаться от поверхности, а освещение определяет интенсивность этого отражения. > > restcompany.ru
Сглаживание (Smoothing): Ломаем грани
Самый первый шаг к объему — это правильная настройка затенения (Shading). Существует два основных режима:
Как работает усреднение (Числовой пример)
Представьте угол стола. У нас есть две грани: * Грань А (верхняя крышка) смотрит строго вверх (угол 90°). * Грань Б (боковая стенка) смотрит строго вбок (угол 0°).
В режиме Flat: Движок видит резкий переход. Свет падает на Грань А под одним углом, а на Грань Б — под другим. Между ними — жесткое ребро.
В режиме Smooth: Движок берет вершину на стыке этих граней и вычисляет среднее значение. Если одна грань смотрит на 90°, а другая на 0°, то усредненная нормаль в углу будет направлена под углом 45°.
Результат: свет «думает», что поверхность не ломается под прямым углом, а плавно изгибается. Блик растягивается, и объект кажется гладким.
> При использовании этого инструмента объект или его часть не становятся сглаженными, но вершины и грани изменяются так, чтобы переход между ними был более покатым. > > younglinux.info
Жесткие и мягкие ребра (Hard & Soft Edges)
Однако, если сгладить всё подряд, ваш куб превратится в странный «надутый» шар с артефактами затенения. Чтобы сохранить форму, нужно указывать программе, где сглаживать, а где оставлять острый угол.
* Soft Edge (Мягкое ребро): Нормали усредняются. Используется для органики, цилиндрических поверхностей, тканей. * Hard Edge (Жесткое ребро): Нормали разрываются (split). Используется для технических деталей, углов зданий, лезвий мечей.
Обычно используется параметр «Auto Smooth» (автосглаживание) с порогом угла. Стандартное значение — 30° или 60°. Если угол между полигонами меньше этого числа — они сглаживаются. Если больше — остаются острыми.
Карты нормалей (Normal Maps): Детализация без геометрии
Сглаживание решает проблему общей формы, но как быть с мелкими деталями: царапинами, болтами, порами кожи или кирпичной кладкой? Моделировать каждый кирпич геометрией — это миллионы полигонов, которые «убьют» любой рендер.
Решение — Normal Map (Карта нормалей).
Принцип работы
Карта нормалей — это текстура, которая меняет направление отражения света для каждого пикселя поверхности, не меняя реальную форму объекта. Это оптическая иллюзия.
Представьте, что у вас есть плоская стена. Вы накладываете на неё карту нормалей с рисунком кирпича. Когда луч света падает на «шов» между кирпичами, карта нормалей говорит движку: «Здесь поверхность наклонена влево». Движок рисует тень. На самом «кирпиче» карта говорит: «Здесь поверхность смотрит прямо». Движок рисует свет.
> С ее помощью можно добить различные детали, которые нельзя передать через геометрию из-за ограничений полигонажа на вашем проекте, и заставить вашу модель выглядеть более скругленной. > > school-xyz.com
Цветовая кодировка (RGB)
Вы наверняка видели эти фиолетово-синие текстуры. Цвета в них выбраны не случайно. Каждый цветовой канал отвечает за отклонение нормали по одной из осей координат:
* R (Red): Отклонение по оси X (влево/вправо). * G (Green): Отклонение по оси Y (вверх/вниз). * B (Blue): Отклонение по оси Z (направление от поверхности).
Именно поэтому карты нормалей преимущественно синие — большая часть поверхности «смотрит» прямо на нас (по оси Z), а детали лишь немного отклоняются в стороны.
High Poly to Low Poly (Запекание)
Самый мощный метод получения объема — это запекание (Baking). Процесс выглядит так:
В итоге вы получаете легкую модель, которая на рендере выглядит как тяжелая и детализированная.
> Lowpoly-модель обычно сильно отличается от highpoly-модели, пока не будут наложены карты нормалей. > > habr.com
Практические советы для улучшения рендера
Чтобы ваша работа перестала быть плоской, следуйте этому алгоритму:
Итоги
Чтобы избавиться от плоского рендера с помощью геометрии:
* Свет — это математика углов. Плоский вид возникает из-за того, что свет одинаково отражается от всего полигона. Наша задача — изменить углы отражения. * Сглаживание (Smoothing) обязательно. Используйте Smooth Shading с правильной расстановкой жестких ребер (Hard Edges) или автосглаживанием, чтобы модель не выглядела как граненый стакан. * Карты нормалей создают фейковый объем. Они позволяют перенести детализацию с высокополигональной модели на простую, имитируя рельеф за счет игры света и тени. * Фаски ловят блики. Острые углы убивают реализм. Скругленные края (геометрией или картой нормалей) создают блики, которые подчеркивают объем.