» Морфинг объектов CPU
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

Морфинг объектов CPU

English | French | Japanese | Italian

Cпособ, основанный на расчете процессором

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

Создание одинаково индексированных 3d моделей в вашей любимой программе, это отдельная тема. Для этого упражнения мы сделаем морфинг двух конусов, одного из примитивных объектов встроенных в vvvv. и сделаем следующий патч:

подготовка объектов

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

Ноды Camera (Transform Softimage) и AspectRatio (Transform) не обязательны для упражнения, но их полезно использовать в любых случаях рендеринга 3d пространств.

При соединении выходного пина цилиндра с GouraudDirectional (EX9.Effect) вы видите, что это пины категории Mesh. Мэш (объект) состоит из буфера вертексов и их индексов (vertex- and index buffer).
В то время как IndexBuffer в vvvv представлен в виде обычного спреда, VertexBuffer - это своего рода контейнер для нескольких компонентов, состовляющих 3d модель.
Подключите нод VertexDeclaration (EX9.Geometry Mesh) к выходному пину цилинра и наведите курсор на выходной пин VertexDeclaration. Здесь вы увидите вертексные компоненты из которых состоит цилиндр: положение в пространстве (Position), сглаживание (Normal) и координаты текстур (TextureCoordinate) - все значения модели цилиндра. Другие модели могут так же содержать другие компоненты.

Сейчас в vvvv нет нода, который взял бы 2 модели, настройки морфинга и сделал бы всю работу за нас. И поскольку такого нода похоже никогда не будет (потому что это скучная задача для реализации), мы сейчас делаем патч решающий эту задачи.

Доступ к буферу VertexBuffer

Однако нам нужен нод, дающий доступ ко всем компонентам модели, чтобы мы могли сделать морфинг в ручную. Обратите внимание на нод Mesh (EX9.Geometry Split) на следующем скриншоте, и нод VertexBuffer (EX9.Geometry Split) считавающий данные о всех вертексах в модели.
Патч так же показывает, что процесс может быть обратным: ноды Mesh (EX9.Geometry Join) и VertexBuffer (EX9.Geometry Join) собирают цилиндр из соответствующих данных о вертексах и отправляют модель на рендер через шейдер GouraudDirectional (EX9.Effect).

Обратите внимание, что IndexBuffer выходящий из нода Mesh (EX9.Geometry Split) напрямую подключен к ноду Mesh (EX9.Geometry Join), а компоненты VertexBuffer (Position и Normals) разделяются и совединяются отдельно, нодами VertexBuffer.

Делаем морфинг

Видя это вы уже можете догадаться, что мы добавим сейчас. Не хватает только параметров деформации между двумя нодами VertexBuffer. Повторите действия для зеленого цилиндра, так же как вы сделали для красного и добавьте простой нод InputMorph (Value) для морфинга.

Поскольку цвет не компонент VertexBuffer, а параметр шейдера, вы должны сделать морфинг цвета независимо, используя нод InputMorph (Color).
Плавное изменение значения InputMorph между 0 и 1 дает плавный блендинг от красного к зеленому и морфинг цилиндра от обычного к перевернутому.
Вопросы?

В этом примере все расчеты морфинга позиции и сглаживания выполняются процессором CPU. Так же новые VertexBuffer и/или модели создаются в каждый момент времени, поскольку пин "Apply" = 1 на этих нодах съедает определенное время.

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

Бонус

Посмотрите, что произойдет, если использовать модели с разным количеством вертексов и разной индексацией. Двойным кликом щелкните на нод первого цилиндра и замените его на чайник Teapot (EX9.Geometry).
Подлинное медиа искусство!

anonymous user login

Shoutbox

~15h ago

joreg: Workshop on 09 05: Deepdive into the Stride 3D Engine. Signup here: https://thenodeinstitute.org/courses/ss24-vvvv-advanced-3d-rendering-in-vvvv-with-stride/

~17h ago

tekcor: Dear vvvv community, I am leaving my personal fundraiser here because I know many of you personally, sending love https://t.ly/iV9l_

~2d ago

joreg: Rewatch the 24th vvvvorldwide meetup here: https://www.youtube.com/live/gNszIiRAjDo?si=0RXF0pW73EUaRqGk

~2d ago

joreg: LINK - the vvvv summer camp 2024 is announced: https://visualprogramming.net/blog/2024/link-the-vvvv-summer-camp-24/

~4d ago

joreg: Tonight, May 3, vvvv meetup in Berlin or via stream: https://visualprogramming.net/blog/2024/24.-vvvv-worldwide-meetup/

~7d ago

joreg: Workshop on 02 05: Intro to the Stride 3D Engine. Signup here: https://thenodeinstitute.org/courses/ss24-vvvv-intro-to-the-stride-3d-engine-in-vvvv/

~8d ago

joreg: The new vvvv Show-Off-Reel is out: https://vimeo.com/930568091

~14d ago

joreg: The summer season of vvvv workshops at The NODE Institute is out: https://thenodeinstitute.org/ss24-vvvv-intermediates/