Лазерное сканирование в Blender Geometry Nodes

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

Для примера возьмем Сюзанну и добавим ее в сцену (shift + a – Mesh – Monkey), назначим ей модификатор Geometry Nodes и создадим начальное дерево нод, нажатием на кнопку “New”.

Для того чтобы преобразовать меш в сетку, при помощи которой мы будем имитировать лазерное сканирование, добавим в главную ветку нодового дерева нод Mesh to Curve (shift + a – Mesh – Operators – Mesh to Curve).

Чтобы придать получившейся сетке толщину, воспользуемся обратным преобразованием в меш при помощи нода Curve to Mesh (shift + a – Curve – Operators – Curve to Mesh), поставив его следом за нодом Mesh to Curve.

Также добавим нод Curve Circle (shift + a – Curve – Primitives – Curve Circle) и соединим его выход Curve со входом Profile Curve нода Curve to Mesh. Установим значения Resolution = 16 и Curve Radius = 0.002.

Пока у нас вся Сюзанна преобразована в сетку. Сделаем ограничение по высоте, имитируя рамку сканирования.

Отталкиваться мы будем от вертикального положения точек меша.

Добавим нод Position (shift + a – Geometry – Read – Position). С него мы будем брать положение точек меша. Добавим нод Separate XYZ (shift + a – Utilities – Vector – Separate XYZ) и соединим его вход Vector с выходом Position нода Position. Таким образом мы выделим Z-координату для каждой точки меша.

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

Добавим два нода Value для входных значений (shift + a – Input – Constant – Value). Первый будет отвечать за положение рамки сканирования, а второй – за ее размеры. У второго нода поставим значение Value = 0.5.

Чтобы из двух значений создать диапазон, добавим два нода Math (shift + a – Utilities – Math – Math). Один оставим в режиме сложения Add, а второй переключим в режим вычитания Subtract. Соединим выход первого нода Value с верхними входами нодов Math, а выход второго – с нижними.

Для сравнения Z-координаты точек с полученным диапазоном, добавим еще два нода Math (shift + a – Utilities – Math – Math) и переключим их в режим сравнения Less Than и Grater Than. Соединим выход Z нода Separate XYZ с верхними входами этих нодов. Нижние входы соединим с выходами нодов Add и Subtract соответственно.

Добавим еще одни нод Math (shift + a – Utilities – Math – Math) и переключим его в режим Multiply. Выходы нодов Less Than и Grater Than соединим с его входами.

И последний шаг – полученный на выходе результат мы подадим на вход Selection нода Mesh to Curve.

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

Для того чтобы остальная часть меша не исчезала, добавим в конец нодового дерева нод Join Geometry (shift + a – Geometry – Join Geometry) и проведем к нему дополнительный линк от стартового нода Group Input.

Однако изначальная геометрия в области сканирования тоже восстановилась. Удалим ее при помощи нода Delete Geometry (shift + a – Geometry – Operators – Delete Geometry). На вход Selection нода Delete Geometry подадим результат уже просчитанного нами диапазона для рамки сканирования с выхода нода Multiply.

Теперь все выглядит так как нужно.

Добавим в самое начало нодового дерева нод Subdivision Surface (shift + a – Mesh – Operators – Subdivision Surface), для того чтобы увеличить количество линий, а границу рамки сделать более выраженной. Установим значение Level  = 2.

Назначим на цельную часть меша и на область сканирования разные материалы. Для этого добавим перед нодом Join Geometrh в обе ветки нодового дерева ноды Set Material (shift + a – Material – Set Material). В редакторе шейдеров Shader Editor создадим два разных материала, для целой части меша и для области сканирования и укажем эти материалы в нодах Set Material.

Для материала области сканирования можно взять шейдер Emission, который будет подсвечивать линии сетки меша. Также, если используется рендер-движок EEVEE, можно включить Bloom для создания ауры свечения.

Проанимировав значения в нодах Value можно получить анимацию сканирования.

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

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