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

~8d ago

joreg: Postponed: Next vvvv beginner course starting April 29: https://thenodeinstitute.org/courses/vvvv-beginner-class-summer-2024/

~1mth ago

~1mth ago

joreg: The Winter Season of vvvv workshops is now over but all recordings are still available for purchase: https://thenodeinstitute.org/ws23-vvvv-intermediates/

~1mth ago

schlonzo: Love the new drag and drop functionality for links in latest previews!

~2mth ago

joreg: Workshop on 29 02: Create Sequencers and Precise Clock Based Tools. Signup here: https://thenodeinstitute.org/courses/ws23-vvvv-08-create-sequencers-and-precise-clock-based-tools-in-vvvv-gamma/

~2mth ago

joreg: Workshop on 22 02: Unlocking Shader Artistry: A Journey through ‘The Book of Shaders’ with FUSE. Signup here: https://thenodeinstitute.org/courses/ws23-vvvv-12-book-of-shaders/