Новый редактор нормалей
2015-06-23
Введение
Редактирование нормалей - достаточно простой и эффективный способ изменить собственное затенение трехмерной модели, не усложняя ее геометрию.
Самое известное применение редактирования нормалей - создание эффекта сферического затенения на листве растений. Как видно на картинке, дерево с редактированными нормалями затеняется более мягко, слева же освещение выдает низкополигональную природу геометрии.

Слева - обычное затенение геометрии, справа - дерево с редактированными нормалями.
Сюда же относится редактирование прямоугольников с текстурой травы. При взгляде на траву против направления света можно видеть, что трава становится неестественно темной. Если же направить все нормали вверх, то затенение будет создавать ощущение равномерного освещения.

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

Слева - ворота с обычным затенением, в центре - ворота с редактированными нормалями, справа - геометрия модели ворот с сеткой.
Более сложный пример редактирования нормалей - фотореалистичная модель очков. Правильное затенение было достигнуто тщательным и кропотливым редактированием каждой вертексной нормали на модели.

Слева - очки с обычным затенением, справа - затенение геометрии с редактированными нормалями.
Новые возможности редактора нормалей
Для тех, кто уже знаком с возможностями редактора нормалей Blend4Web, будет интересно услышать прежде всего об изменениях, которые произойдут в следующей версии движка:
- теперь в качестве хранилища массива данных с направлениями вертексных нормалей используется "родной" блок данных Blender (появился в версии 2.74);
- редактирование нормалей и отображение затенения теперь происходит в режиме редактирования (Edit Mode);
- кнопки Save и Auto Save убраны, все изменения записываются сразу же автоматически;
- вращение нормали выделенного вертекса можно производить непосредственно в окне Viewport'a по горячим клавишам Shift+Ctrl+R, подобно остальным операциям вращения в Blender;
- добавлен режим Split Mode, который позволяет редактировать вертексную нормаль независимо для каждой грани геометрии;
- убрана опция Export Vertex Normals, теперь редактированные нормали экспортируются автоматически.
Обзор нового интерфейса и функционала
Интерфейс редактора претерпел существенные изменения. Были убраны и добавлены некоторые кнопки, также для удобства было немного изменено их положение на панели.

Новый интерфейс редактора вертексных нормалей.
Activate
Описание
Новая кнопка Activate включает режим редактирования вертекных нормалей, и одновременно заменяет собой старый параметр Export Vertex Normals, который теперь убран из настроек объекта.
Использование
Достаточно в режиме Edit Mode нажать кнопу Activate, и можно приступать к редактированию вертексных нормалей. Пока она остаётся в активном режиме, затенение объекта и его экспорт будут осуществляться с учетом редактированных вертексных нормалей. Другими словами, после внесения изменений, для их отображения во Viewport'е Blender и в движке Blend4Web кнопка должна быть оставлена активной.
Show Normals
Описание
Для удобства в панель продублирована оригинальная кнопка Blender, включающая отображение маркеров вертексных нормалей во Viewport'е, а так же настройка их длины.
Использование
Достаточно просто включить кнопку Show Normals прямо на панели редактора вертексных нормалей Blend4Web или в правой панели Blender в разделе Mesh Display и настроить комфортную длину маркера в поле Size.

Включение показа вертесных нормалей и настройка длины маркера.
Вращение
Описание
При помощи этого инструментария можно вращать нормаль каждого вертекса индивидуально.
В редактор нормалей была также добавлена кнопка Rotate (горячие клавиши Shift+Ctrl+R), позволяющая вращать вертексные нормали в привычном для пользователя Blender режиме.
Использование
Выделив один или несколько вертексов, которые хотите изменить, вращайте их, используя визуальную сферу на панели редактора вертексных нормалей Blend4Web, или задайте направление каждой координате в цифровом значении.
Более удобный вариант манипуляции с вертексными нормалями предоставляет кнопка Rotate. Вращение происходит по координатам в пространстве экрана, но, как и при обычном вращении объектов в Blender, можно изолировать нужную ось координат и вращать только по ней (нажав X, Y или Z).

Демонстрация возможностей вращения вертексных нормалей.
Split Normals
Описание
Режим Split Normals позволяет редактировать вертексные нормали индивидуально для каждой грани (face в Blender), образующей редактируемую вершину (vertex в Blender). Переключатель вертексных индексов позволяет перемещаться между нормалями разделенного вертекса.
Использование
Перейдя в режим Split Normals, выберите нужный вертекc и измените направление его нормали. Прежде всего подвергнется модификации та нормаль, которая имеет наименьший индекс в очереди (то есть 0) редактируемого вертекса. Далее, перемещаясь по индексам, перейдите на следующую нормаль этого вертекса и редактируйте ее.

Редактирование вертексных нормалей в режиме Split Normals.
Average Split
Описание
Average Split усредняет направление вертексной нормали, исходя из направлений нормалей, разделенных функцией Split Normals.
Использование
Для того, чтобы объединить несколько разделенных вертексных нормалей в одну так, чтобы она имела их среднее направление, достаточно выделить нужный вертекс и нажать Average Split.

Получение усреднённого направления вертексных нормалей с помощью Average Split.
Restore
Описание
Кнопка Restore восстанавливает исходное направление нормалей выделенных вертексов.
Использование
Для того, чтобы восстановить нормали к исходному направлению (которое раcсчитывается на основе нормалей полигонов), нужно выделить нужные вертексы и нажать кнопку Restore.

Восстановление изначального направления измененных вертексных нормалей.
Tree, Foliage и Face
Описание
Функция Tree направляет нормали выделенных вертексов в сторону от 3D-курсора. Foliage направляет нормали вертекcов строго вверх по глобальной оси Z. Face направляет нормали вертексов выделенного полигона параллельно нормали этого полигона.
Использование
Чтобы воспользоваться функцией Tree, выделите нужные вертексы и расположите курсор в нужном вам месте. После нажатия кнопки Tree все выделенные вертексы будут направлены в сторону от курсора, как будто бы они выстреливают из одной точки.
Функция Foliage очень проста в использовании: выделите нужные вертексы и нажмите кнопку, и функция направит их строго вверх.
Чтобы направить нормали вертексов параллельно нормали полигона, выделите нужный полигон и нажмите Face. Все нормали вертексов, образующих этот полигон, будут направлены параллельно нормали самого полигона. Эта функция работает только с одним выделенным полигоном одновременно.

Пример использования функций Tree, Foliage и Face.
Copy/Paste
Описание
Копирует направление нормали с одного вертекса на другой.
Использование
Выделите вертекс для копирования и нажмите Copy. Затем выделите вертекс, на который хотите копировать результат, и нажмите Paste. Вставлять скопированную информацию можно на множество разных вертексов. Кнопки не активны в режиме Split Mode и не переносят данные уже "разделенных" нормалей на другие вертексы.

Пример копирования направления вертексной нормали с одного вертекса на другие.
Copy From Mesh
Описание
Эта функция позволяет копировать направление вертексных нормалей с одной геометрии на другую. Существует два режима копирования, Matched Vertices и Nearest Vertices.
В режиме Matched Vertices копируются направления нормалей с вертекса одной модели на вертекс другой, если у них одинаковые координаты; прочие вертексы игнорируются. В режиме Nearest Vertices копируются нормали с ближайших вертексов другой модели.
Использование
Работа с этой функцией производится в объектном режиме. Первым нужно выделить объект, с которого будет происходить копирование, далее объект, на который будет происходить копирование. Необходимо также выделить вертексы целевого объекта, на которые необходимо произвести перенос направления нормалей.

Копирование направления вертексных нормалей с одного объекта на другой.
Заключение
Новый редактор нормалей будет включен в предстоящий релиз Blend4Web 15.06, который ожидается в конце этого месяца. Тем не менее, попробовать его в действии можно уже сейчас - для этого войдите на сайт под своим логином и загрузите предварительную сборку дистрибутива со страницы загрузок.
Все комментарии, пожелания по улучшению и просто впечатления от использования можете оставить на нашем форуме в специальной теме.