Зеркалим (miror) объект с сохранением кастомных нормалей

Для того чтобы отразить объект относительно какой-либо оси (X, Y или Z) в Blender обычно применяется оператор miror. Например, чтобы отзеркалить объект по глобальной оси X, в меню окна 3D вьюпорта нужно выбрать: Object – Miror – X Global. Или можно поступить проще и просто применить к объекту масштаб -1 по нужной оси: s – x – -1. Однако, если на объекте присутствуют кастомные нормали, они не пересчитываются, что в дальнейшем вызывает появление различных артефактов.

Возьмем для примера объект “Сюзанну” и добавим на него кастомные нормали. В рабочей области Properties откроем вкладку Object Data и в разделе Geometry Data нажмем кнопку Add Custom Split Normals Data. Во вкладке Modifiers добавим объекту модификатор NormalEdit и установим произвольные значения. Теперь, если отзеркалить объект стандартным образом (s – x – -1) и применить к нему масштаб (ctrl + a – Scale) визуально станет видно, что нормали “поехали”. Обратите внимание, что в то же время модификатор Mirror зеркалит объект правильно, учитывая кастомные нормали.

Отзеркалить объект относительно оси X с правильной конвертацией кастомных нормалей без использования модификатора Mirror можно при помощи следующего скрипта:

Автор изначального кода Joey (blender.stackexchange).

В этом скрипте

мы сначала пересчитываем кастомные нормали и включаем режим автосглаживания, который необходим для работы с ними.

Далее для каждого полигона меша мы разворачиваем все лупы в противоположную сторону, оставляя начальную точку неизменной.

После чего нормаль на каждом лупе отражаем относительно оси X и сохраняем в отдельный список.

Выполняем собственно отзеркаливание меша относительно оси X:

Разворачиваем нормали

И добавляем пересчитанные кастомные нормали, отраженные относительно оси X.

Если теперь мы к отзеркаленному мешу для проверки кастомных нормалей применим, например, масштаб, мы увидим что они обрабатываются корректно.

Для такого же отзеркаливания относительно остальных осей, в скрипт нужно внести минимальные изменения, чтобы пересчитывать нужную (Y или Z) составляющую нормалей.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии