» Морфинг объектов 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

~3mth ago

joreg: END OF SHOUTBOX! As this page has is now legacy, it will no longer feature new content. For latest news, see: http://vvvv.org

~4mth ago

joreg: vvvvTv S0204 is out: Custom Widgets with Dear ImGui: https://youtube.com/live/nrXfpn5V9h0

~4mth ago

joreg: New user registration is currently disabled as we're moving to a new login provider: https://visualprogramming.net/blog/2024/reclaiming-vvvv.org/

~4mth ago

joreg: vvvvTv S02E03 is out: Logging: https://youtube.com/live/OpUrJjTXBxM

~4mth ago

~4mth ago

joreg: Follow TobyK on his Advent of Code: https://www.twitch.tv/tobyklight

~4mth ago

joreg: vvvvTv S02E02 is out: Saving & Loading UI State: https://www.youtube.com/live/GJQGVxA1pIQ

~4mth ago

joreg: We now have a presence on LinkedIn: https://www.linkedin.com/company/vvvv-group

~4mth ago

joreg: vvvvTv S02E01 is out: Buttons & Sliders with Dear ImGui: https://www.youtube.com/live/PuuTilbqd9w

~5mth ago

joreg: vvvvTv S02E00 is out: Sensors & Servos with Arduino: https://visualprogramming.net/blog/2024/vvvvtv-is-back-with-season-2/