Duplicate3 D
Duplicate3D создаёт последовательность копий classic Fusion 3D scene/object, применяя к каждой копии transform, time offset, probability и jitter. Обязательный SceneInput остаётся scene3d, а optional MeshInput появляется только для Region = Mesh.
Classic Fusion scene3d/object: Shape3D, Text3D, ImagePlane3D, Transform3D или merged 3D branch.
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.
Duplicate3D в контексте
Скриншоты из статьи. Откройте изображение, чтобы рассмотреть его крупнее.
Пример для Duplicate3D.
Оригинальное изображениеПример для Duplicate3D.
Оригинальное изображениеПример для Duplicate3D.
Оригинальное изображениеПример для Duplicate3D.
Оригинальное изображениеПример для Duplicate3D.
Оригинальное изображение