ВИДЕОМОНТАЖЁРDAVINCI RESOLVE · ВИДЕО · AI
ОбработкаFUSION

Duplicate3D

Duplicate3D создаёт последовательность копий classic Fusion 3D scene/object, применяя к каждой копии transform, time offset, probability и jitter. Обязательный SceneInput остаётся scene3d, а optional MeshInput появляется только для Region = Mesh.

Нода в работе
Иллюстрация нодыDuplicate3D
РезультатСцена 3D

Duplicate3D

Обзор

Что делает Duplicate3D

Blackmagic описывает Duplicate3D как 3D-аналог Duplicate: нода дублирует geometry внутри scene, применяет successive transformation к копиям и позволяет строить повторяющиеся patterns/arrays. Это не Replicate3D: Duplicate3D сама генерирует последовательность копий, а Replicate3D размещает source geometry по уже существующим destination vertices/particles.

У ноды один постоянный обязательный вход — SceneInput. Он принимает classic Fusion scene3d/object. Если SceneInput пуст, дублировать нечего; 2D MediaIn/Background не являются корректной заменой 3D-сцене.

Зелёный MeshInput — условный. По Resolve 21 reference он появляется только когда Region tab → Region = Mesh. Это отдельная 3D geometry, которая задаёт объём/область отбора копий; она не заменяет SceneInput и не является 2D mask input.

Copies задаётся диапазоном First/Last. Документация подчёркивает: First > 0 исключает исходный объект и начинает вывод с последующих copies. Поэтому First — не просто номер для интерфейса, а часть того, какие элементы реально присутствуют на выходе.

Transform Method принципиально меняет математику. В Linear transform умножается на номер copy и вычисляется относительно исходного состояния независимо от предыдущей копии. В Accumulated каждая новая копия стартует из transform предыдущей и получает следующий transform step. При rotation/scale эти методы могут расходиться очень заметно.

Transform Order задаёт порядок Scale/Rotation/Translation. Одни и те же численные значения при SRT и, например, TRS могут дать разные позиции, потому что operations не коммутируют. Если array начинает 'уезжать', прежде чем править offsets проверьте Transform Method и Transform Order.

Translation X/Y/Z — per-copy offset. В Accumulated режиме он воспринимается как шаг от предыдущей копии. Rotation и Scale аналогично становятся частью повторяющейся transform progression; Pivot меняет центр, вокруг которого работает rotation/scale.

Controls / Time Offset сдвигает animation source на фиксированный интервал для каждой последующей copy. Документированный пример: отрицательное значение заставляет successive copies показывать всё более ранние frames source-animation. Это deterministic cascade, а не random jitter.

На нашем текущем Inspector присутствует Copy Probability, хотя основной текст Resolve 21 reference, который описывает классический Duplicate3D, этот control не раскрывает. Его UI existence подтверждён bundled screenshot; точную random/seed semantics относительно Jitter Random Seed нужно подтвердить live на целевой сборке, поэтому статья не приписывает ему недокументированную реализацию.

Jitter tab добавляет variation поверх базовой deterministic duplication: Random Seed/Reseed, Jitter Probability, Time Offset, Translation, Rotation, Pivot и Scale jitter. Jitter Probability определяет долю copies, к которым применяется jitter; это не то же самое, что Controls / Copy Probability, который относится к существованию/отбору copy на основном Controls tab.

Jitter / Time Offset — random variation временного сдвига, тогда как Controls / Time Offset — последовательный deterministic offset per copy. Эти два параметра следует настраивать раздельно: сначала построить читаемый temporal cascade на Controls, затем при необходимости добавить случайный temporal spread на Jitter.

Region Mode имеет три документированных состояния: Ignore region, When inside region и When not inside region. Region-фильтр проверяет положение copies относительно выбранной области и может быть анимирован, заставляя copies появляться/исчезать при пересечении region boundary.

Region предлагает All, Cube, Mesh, Rectangle и Sphere. В Mesh режиме появляется MeshInput; дополнительно reference описывает Winding Rule, Winding Ray Direction и optional Limit by Object ID/Object ID для случая, когда во входной mesh-scene несколько объектов.

Mesh region требует замкнутой и осмысленной 3D topology. Winding Rule и Ray Direction существуют потому, что Fusion должен интерпретировать polygon mesh как объём. Сложные overlapping/non-manifold meshes могут давать неоднозначный inside/outside; сначала тестируйте region на простом cube/sphere или чистом mesh.

На current Inspector также виден блок Duplicate Path с checkbox Duplicate Along Path. Наличие control подтверждено screenshot, но основной Resolve 21 Duplicate3D reference не раскрывает его детальную path semantics и conditional controls. Поэтому статья фиксирует только подтверждённый UI boundary; exact path workflow оставлен на live verification, а не заполнен догадками.

Output Duplicate3D остаётся classic Fusion scene3d. Он идёт в Merge3D, Renderer3D или другие 3D processors. Нода не rasterize-ит сцену: прямое подключение Output к MediaOut остаётся type mismatch; граница scene3d → image находится в Renderer3D.

Видимое содержимое пяти приложенных снимков нужно отличать от полного набора условных контролов. В Region Mode на снимке активным выглядит Ignore region, а When inside region и When not inside region показаны серыми. В списке Region таким же серым цветом выглядят Cube, Mesh, Rectangle и Sphere. Руководство описывает эти режимы, но данный скриншот не доказывает, что их можно выбрать в установленной версии; поэтому Mesh-урок — условный, а не обещание рабочего переключения.

Вкладка Controls на скриншоте показывает First = 0 и Last = 2, Copy Probability = 1.0, Time Offset = 0.0, Accumulated и порядок SRT. Это исходная иллюстрация интерфейса, а не рекомендация для всякого проекта. Для сравнения First/Last полезно делать тесты 0–2, 1–2 и 0–5 и смотреть, какие геометрические экземпляры остаются.

На Controls есть два разных порядка: Transform Order меняет последовательность Scale/Rotation/Translation, а Rotation Order (XYZ, XZY, YXZ, YZX, ZXY, ZYX) меняет порядок осевых вращений внутри Rotation. Переключайте их независимо и не пытайтесь компенсировать нежелательное вращение произвольными X/Y/Z offsets.

Lock X/Y/Z в Scale объединяет оси в один Scale; при разблокировке возможны отдельные X, Y, Z. Такое же условное раздельное управление предусмотрено для Scale Jitter. Исходные PNG показывают включённую блокировку, а не раскрытый набор отдельных полей: наличие и подписи полей разблокировки нужно дополнительно проверить в программе.

Для документированных примитивных Region (Cube/Rectangle/Sphere) руководство приводит размер и 3D-положение/ориентацию области: Size, Translation, Rotation, Pivot. Эти поля не показаны на текущем PNG, где Region = All; статья описывает их как условные, не выдавая за видимые Controls. Сначала необходима доступность выбора области в целевой сборке.

Copy Probability и Jitter Probability нельзя механически складывать: первое поле видимо на Controls, второе — на Jitter. Понизьте сначала только одно значение при фиксированном Seed и неизменных трансформациях, затем сравните количество видимых экземпляров и изменённых экземпляров. Точный алгоритм Copy Probability в текущей версии не подтверждён одним снимком.

Для реального композита разделите два типа потоков: Shape3D → Duplicate3D → Merge3D(+Camera3D) → Renderer3D остаётся 3D до рендера, после Renderer3D.Image получается обычное RGBA, которое можно объединить с MediaIn как Foreground через 2D Merge. Прямая подача MediaIn в SceneInput и прямая подача Duplicate3D.Output в MediaOut ошибочны по типам.

Увеличение Last и сложность исходной 3D-ветки могут быстро увеличить нагрузку на сцену и рендер. Работайте с несколькими экземплярами, ограничивайте геометрию и проверяйте скорость Renderer3D на целевой машине; статическая схема не является тестом GPU-производительности.

Когда применять

  • Строить линейные ряды, дуги, спирали и повторяющиеся 3D patterns.

  • Размножать Text3D, Shape3D, ImagePlane3D или целую merged 3D branch.

  • Создавать temporal cascades из animated source через Time Offset.

  • Добавлять контролируемую случайность position/rotation/scale после чистого deterministic array.

  • Включать/выключать copies по Cube/Sphere/Rectangle region.

  • Использовать отдельный mesh-volume как spatial filter через conditional MeshInput.

  • Оставлять только внутренние или только внешние copies относительно region.

  • Строить motion-design arrays без десятков ручных Transform3D/Merge3D branches.