Редактор нормалей¶
Редактирование нормалей — достаточно простой и эффективный способ изменить собственное затенение трехмерной модели, не усложняя ее геометрию.
С помощью редактора нормалей, в некоторых случаях, можно достичь результатов, аналогичных применению карт нормалей . При этом метод редактирования нормалей является более предпочтительным с точки зрения потребления вычислительных ресурсов и видео-памяти.
Пример работы редактора нормалей:
Слева — обычное затенение геометрии, справа — дерево с редактированными нормалями.
Слева — ворота с обычным затенением, в центре — ворота с редактированными нормалями, справа — геометрия модели ворот с сеткой.
Слева — обычное затенение геометрии травы, справа — трава с редактированными нормалями.
Слева — очки с обычным затенением, справа — затенение геометрии с редактированными нормалями.
Основные особенности редактора нормалей:¶
для хранилища массива данных с направлениями вертексных нормалей используется “родной” блок данных Blender (появился в версии 2.74);
редактирование нормалей и отображение затенения теперь происходит в режиме редактирования ( Edit Mode );
все изменения записываются сразу же автоматически;
вращение нормали выделенного вертекса можно производить непосредственно в окне Viewport’a по горячим клавишам Shift+Ctrl+R , подобно остальным операциям вращения в Blender;
редактированные нормали экспортируются автоматически.
Интерфейс¶
Интерфейс редактора нормалей располагается на панели инструментов Blend4Web > Normal Editor . Перед началом работы редактора для объекта необходимо включить режим затенения Shading: Smooth и нажать кнопку Activate на панели редактора нормалей или выставить галочку Auto Smooth в настройках меша.
Activate¶
Кнопка Activate включает режим редактирования вертекных нормалей.
Достаточно в режиме Edit Mode нажать кнопу Activate , и можно приступать к редактированию вертексных нормалей. Пока она остаётся в активном режиме, затенение объекта и его экспорт будут осуществляться с учетом редактированных вертексных нормалей. Другими словами, после внесения изменений, для их отображения во Viewport’е Blender и в движке Blend4Web кнопка должна быть оставлена активной.
Show Normals¶
Для удобства в панель продублирована оригинальная кнопка Blender, включающая отображение маркеров вертексных нормалей во Viewport’е, а так же настройка их длины.
Достаточно просто включить кнопку Show Normals прямо на панели редактора вертексных нормалей Blend4Web или в правой панели Blender в разделе Mesh Display и настроить комфортную длину маркера в поле Size .
Rotate¶
При помощи этого инструментария можно вращать нормаль каждого вертекса индивидуально. Функция Rotate также доступна по горячим клавишам Shift+Ctrl+R и позволяет вращать вертексные нормали в привычном для пользователя Blender режиме.
Выделив один или несколько вертексов, которые хотите изменить, вращайте их, используя визуальную сферу на панели редактора вертексных нормалей Blend4Web, или задайте направление каждой координате в цифровом значении.
Более удобный вариант манипуляции с вертексными нормалями предоставляет кнопка Rotate . Вращение происходит по координатам в пространстве экрана, но, как и при обычном вращении объектов в Blender, можно изолировать нужную ось координат и вращать только по ней (нажав X , Y или Z ) и вводить угол поворота при помощи цифровых клавиш.
Scale¶
Эта функция используется для масштабирования нормалей и доступна как из панели Tool, так и при помощи клавиш Shift + Ctrl + S . Масштаб нормали задаётся при помощи цифровых клавиш; клавиши X , Y и Z задают ось координат, вдоль которой осуществляется масштабирование.
Обратите внимание, что видимая длинна нормали определяется параметром Size и не меняется при масштабировании.
Режимы Absolute и Offset¶
Редактор нормалей может функционировать в двух режимах: режиме Absolute и режиме Offset. Режим может быть выбран с помощью двух кнопок, расположенных прямо под вышеописанной кнопкой Rotate . По умолчанию используется режим Absolute .
Режим Absolute¶
В этом режиме редактор нормалей работает по умолчанию. В нём координаты нормального вектора абсолютны и могут быть заданы с помощью полей X , Y и Z либо с помощью сферического контроллера, расположенного рядом с ними.
Режим Offset¶
В этом режиме к нормальному вектору прибавляется вектор, заданный пользователем.
Поля X , Y и Z используются для задания соответствующих компонент вектора, а кнопки Sub и Add определяют, вычитается ли пользовательский вектор из нормального или складывается с ним.
Split Normals¶
Режим Split Normals позволяет редактировать вертексные нормали индивидуально для каждой грани ( Face в Blender), образующей редактируемую вершину ( Vertex в Blender). Переключатель вертексных индексов позволяет перемещаться между нормалями разделенного вертекса.
Перейдя в режим Split Normals , выберите нужный вертекc и измените направление его нормали. Прежде всего подвергнется модификации та нормаль, которая имеет наименьший индекс в очереди (то есть 0) редактируемого вертекса. Далее, перемещаясь по индексам, перейдите на следующую нормаль этого вертекса и редактируйте ее.
Average¶
Average усредняет направление вертексной нормали, исходя из направлений нормалей, разделенных функцией Split Normals .
Для того, чтобы объединить несколько разделенных вертексных нормалей в одну так, чтобы она имела их среднее направление, достаточно выделить нужный вертекс и нажать Average Split .
Restore¶
Кнопка Restore восстанавливает исходное направление нормалей выделенных вертексов.
Для того, чтобы восстановить нормали к исходному направлению (которое раcсчитывается на основе нормалей полигонов), нужно выделить нужные вертексы и нажать кнопку Restore .
3D Cursor, Axis и Face¶
Кнопка 3D Cursor ориентирует нормали выбранных вершин по направлению к 3D-курсору (если активирован параметр Towards на панели Vertex Normal Cursor ) или в противоположную сторону. Кнопка Axis направляет нормали вдоль одной из осей координат (ось задаётся на той же панели Vertex Normal Cursor ). Кнопка Face ориентирует нормали всех вершин выбранной грани параллельно нормали этой грани.
Чтобы воспользоваться функцией 3D Cursor , выделите нужные вертексы и расположите курсор в нужном вам месте. После нажатия кнопки 3D Cursor все выделенные вертексы будут направлены в сторону от курсора, как будто бы они выстреливают из одной точки. После этого можно также включить опцию Towards на панели Vertex Normal Cursor ; эта опция разворачивает нормали по направлению к курсору.
Использовать функцию Axis очень просто: достаточно выбрать вершины и нажать кнопку, после чего функция направит нормали этих вершин вдоль оси координат, выбранной на панели Vertex Normal Cursor (по умолчанию выбрана ось Z) или в противоположном направлении (если отключить опцию Towards на той же панели).
Чтобы направить нормали вертексов параллельно нормали грани, выделите нужную грань (или несколько граней) и нажмите Face . Все нормали вертексов, образующих эту грань, будут направлены параллельно нормали самого полигона.
Функции 3D Cursor , Axis и Face также обладают параметром Factor , который используется для смешивания начальной позиции нормалей с окончательной. По умолчанию значение этого параметра равно 1.0 (используется окончательная позиция).
Copy/Paste¶
Копирует направление нормали с одного вертекса на другой.
Выделите вертекс для копирования и нажмите Copy . Затем выделите вертекс, на который хотите копировать результат, и нажмите Paste . Вставлять скопированную информацию можно на множество разных вертексов. Кнопки не активны в режиме Split Mode и не переносят данные уже “разделенных” нормалей на другие вертексы.
Copy From Mesh¶
Эта функция позволяет копировать направление вертексных нормалей с одной геометрии на другую. Существует два режима копирования, Matched Vertices и Nearest Vertices .
В режиме Matched Vertices копируются направления нормалей с вертекса одной модели на вертекс другой, если у них одинаковые координаты; прочие вертексы игнорируются. В режиме Nearest Vertices копируются нормали с ближайших вертексов другой модели.
Работа с этой функцией производится в объектном режиме. Первым нужно выделить объект, с которого будет происходить копирование, далее объект, на который будет происходить копирование. Необходимо также выделить вертексы целевого объекта, на которые необходимо произвести перенос направления нормалей.
© Copyright 2014-2017, Триумф. Обновлено: 2019-04-16.
Источник
Normal’ное волшебство
Вообще-то правильный ответ первый, но вот крайние примитивы имеют одинаковое количество вершин, хотя и выглядят по-разному.
Как вы уже поняли, секрет «высокополигональности» третьего объекта в правильно повернутых нормалях вершин, за счет чего скосы на ребрах выглядят более пологими. А вот для среднего объекта я уже добавил дополнительные ребра «жесткости». Чтобы было понятно, о чем идет речь, посмотрите на рисунок ниже.
рис. 2 Структура примитивов
Редактирование нормалей — это сложный и кропотливый процесс, который необходим только в двух случаях: добавление реалистичности и уменьшение количество вершин. В последнем очень даже нуждаются художники, создающие модели для игр (особенно мобильных) и браузерных приложений. В одном случае всё упирается в производительность слабых мобильных чипов, в другом — требовании экономии сетевого трафика.
К примеру, мой скриншот с тремя кубами. Поставленная простая задача — создать фаски на гранях объекта, что я и сделал. Вот только при включении сглаживания всё расплывалось. Для получения более четких переходов пришлось добавить дополнительные элементы. В итоге начальные 24 вершины превратились в 96. Вроде пустяк, но это лишь примитивный куб.
Ручное редактирование нормалей позволило не увеличивать количество элементов и в тоже самое время получить весьма достойный результат. Причем его можно было бы значительно улучшить. Об этом и сказ далее.
рис. 3 Просто нормали
Одна вершина — одна нормаль. Вопрос только в одном, как их редактировать? Стандартные способы Blender здесь не работают. Хотя есть, к примеру, специальный модификатор Normal Edit. Но он хорош только для массового редактирования и не предоставляет доступа к отдельным элементам (это можно сделать, но уж больно извращенным способом).
В последнее время я сконцентрировался на браузерных проектах и, соответственно, на Blend4Web. В его состав входит уникальный редактор нормалей с очень роскошным функционалом. Разумеется, им можно пользоваться не только для подготовки моделей для WebGL. Обработанные с его помощью объекты прекрасно рендерятся или экспортируются в FBX для последующего использования в игровых движках. Так что, это достойный экземпляр для изучения и использования в работе.
рис. 4 Редактор нормалей от Blend4Web
Вся магия заключена в панели с названием Blend4Web. Она хранит дополнительный инструментарий, поставляемый вместе с движком, но кое-что можно использовать и не для реал-тайм. Разумеется, перед этим нужно установить бесплатный SDKBlend4Web. Как это сделать — читайте на сайте разработчика.
Редактор нормалей позволяет кое-какие действия выполнять в автоматическом режиме с массивом вершин. В тоже время нет никаких проблем с редактированием одной конкретной. Чтобы не усложнять материал, я буду демонстрировать все это на примере того же куба со скошенными гранями.
Работа с редактором начинается с его активации (кнопка Activate). Основное действие происходит в режиме редактирования структуры объекта. На рисунке 4 как раз показан куб и его нормали, распространяющихся в стандартных направлениях, т.е. так, как расположил их сам Blender. В принципе, показ нормалей можно включить стандартным для Blenderспособом (панель Mesh Display). Но удобнее воспользоваться специальными опциями в панели Normal Editor. Кнопка Show Normals включает показ, а Size отвечает за длину отображения. Собственно, эти опции дублируют стандартные.
Итак, при включении функции Smooth скосы на ребрах куба становятся незаметными (см. рис. 1, левый крайний куб). Чтобы светотени создали нужный нам эффект, необходимо развернуть нормали вершин плоскостей куба строго перпендикулярно их основе, т.е. они должны «смотреть» параллельно нормали самой плоскости.
Это лучше всего сделать в автоматическом режиме. Выделяете каждую плоскость, нажимаете кнопку Face и вуаля!
рис. 5 а) оригинальный куб, б) куб с измененными нормалями, в) рендер варианта Б
Normal Editor позволяет сделать больше. Например, мне нужны четкие выпуклости скосов. Стандартно это делается добавлением новых ребер «жесткости». Ведь все вершины куба уже смотрят в нужных направлениях. Банально не хватает вершин. Можно сделать «финт ушами» — каждую нормаль подразделить ещё на несколько. Я не особо понимаю, как это происходит технически, но важно другое — буквально каждая вершина объекта может «смотреть» сразу в нескольких направлениях.
Впанели Normal Editor естькнопка Split Mode . После её включения становится доступной опция Index. Именно в ней выбирается конкретная нормаль вершины. Такая работа требует усидчивости и очень кропотливая. Здесь нет каких-либо автоматических средств типа Face. Всё только ручками, но поверьте, оно того стоит!
Ручное редактирование нормалей осуществляется несколькими способами:
- Непосредственное вращение в окне 3DView после нажатия кнопки Rotate.
- Вращение путем изменения координат XYZ.
- Можно вращать, если перемещать источник света в окне-образце рядом с координатами.
Есть еще две полезные функции для редактирования: кнопка Restore (восстанавливает всё по умолчанию) и Copy/Paste для быстрого копирования координат с одной нормали на другую (увы, в режиме Split копирование не работает).
Вот и результат. Смотрите, что у меня вышло с такими «размноженными» нормалями. Напоминаю, что количество вершин не изменилось, всё те же 24 вертекса, всё тот же стандартный куб. А выглядит, как будто я минимум утроил количество ребер.
Конечно, работать с каждой нормалью — это ещё то удовольствие, несмотря на мощные инструменты редактирования в Normal Editor. Впрочем, для ленивых есть несколько автоматических решений. С одним из них (Face) я уже вас познакомил, но на панели редактора можно найти ещё две кнопки Tree и Foliage.
Названия очень многообещающие, но не думайте, что при нажатии на них вы получите идеальные деревья (tree) и листву (foliage)! Все, проще, они позволяют массово распространять нормали в определенных направлениях:
- Face. Нормали вершин располагаются параллельно нормали полигона.
- Foliage. Нормали смотрят вверх по координате Z.
- Tree. Взрывообразный разброс нормалей, где в качестве эпицентра выступает 3DCursor Blender.
Вот как-то так. Спасибо разрабам Blend4Web за столь интересный инструмент!
Источник