Подготовка и экспорт 3D сцены из 3dsMax для All¹Mix

Материал из dgraphic
Перейти к навигации Перейти к поиску

All¹Mix является достаточно мощным инструментом для создания, записи и трансляции мультимедийного контента в области телевещания и образования. Вместе с тем этот программный продукт ориентирован, прежде всего, на средние и малые компании, и даже на индивидуальных пользователей. Т.е. от пользователя программы All¹Mix не должно требоваться глубоких специальных знаний выходящих за рамки его профессиональной деятельности. Это означает, что 3D сцены должны быть подготовлены специальным образом, позволяющим обычному пользователю All¹Mix (не имеющему представления о KeyFrame-анимации, материалах, текстурных координатах и т.п.) управлять анимацией, назначать медиа-источники на элементы сцены и т.п. All¹Mix тратит значительные ресурсы компьютера на обработку входящих и исходящих видеопотоков, медиафайлов, титровальных элементов и т.п. Это означает, что 3D сцены (а их может быть одновременно использовано несколько в одном проекте All¹Mix) должны быть оптимизированы так, чтобы экономно расходовать ресурсы компьютера, обеспечивать быструю загрузку 3D сцен. Особенностям подготовки 3D сцен для использования в All¹Mix и посвящена эта статья.


Общие сведения

Виртуальная студия, встроенная в All¹Mix не использует дорогостоящих и сложных в эксплуатации трекинговых систем. Однако во многих случаях позволяет добиваться тех же результатов. Как это достигается? В All¹Mix диффузная текстура материала специального объекта 3D сцены (плоского прямоугольника) заменяется на "живое" изображение актера (с альфа-каналом) с неподвижной реальной камеры. При перемещении виртуальной камеры зритель видит картинку аналогичную тому, как если бы реальная камера не стояла на месте, а двигалась согласованно с движением виртуальной камеры. Такая технология имеет и плюсы и минусы:

  • К минусам относятся ограничения по углу зрения виртуальной камеры относительно плоскости "Актера".
  • К плюсам - возможность анимировать виртуальную камеру способами, трудно осуществимыми (или вообще невозможными) для реальной камеры.

В принципе Render Engine All¹Mix позволяет использовать, например, технологию PBR (physically-based rendering) реального времени. Однако в 3D сцене, предназначенной для использования в All¹Mix допускаются только стандартные материалы и стандартные источники света. Причем, с ограничениями.

Это обусловлено следующими причинами:

  • во-первых, стремлением максимально сэкономить ресурсы компьютера, ускорить загрузку 3d сцен.
  • во-вторых, качество картинки PBR реального времени существенно хуже качества рендеринга в нереальном времени ("Vray", "Corona", "Arnold" и т.п.).

Поэтому создание сцены в 3ds Max для плагинов для render engine "Vray", "Corona", "Arnold" и т.п., с последующей конвертацией через запекание текстур в стандартную 3ds Max сцену позволит сделать сцену "легкой", а картинку при рендеринге реального времени в All¹Mix - высокого качества.

Таким образом, в результате желательно иметь две 3D сцены:

  • Исходную (для render engine "Vray", "Corona", "Arnold" и т.п.), в которой можно использовать любые материалы и любое количество любых источников света.
  • Результирующую, которая получается из исходной путем конвертации в "стандартную" 3ds max сцену. Именно из этой сцены производится экспорт в .fbx файл для использования в All¹Mix. Для этой сцены использовать стандартный "Skyline Render".

! При запекании используйте Map Channel 3

! Все версии старше 3ds max 2020 при импорте fbx - файлов конвертируют все материалы в "физические". Чтобы этого избежать, нужно в файле C:\Users\ "YourUserName" \AppData\Local\Autodesk\3dsMax\ 202# — 64bit \ENU\3dsMax.ini найти строку StandardMtlFBXImport и заменить значение на StandardMtlFBXImport=1. После этого можно импортировать fbx-файл, не боясь потери стандартных материалов.

! Для совместимости с системой единиц AllMix, настройте систему единиц 3ds Max следующим образом:

Units.jpg

Оптимизация сцены

Материалы, источники света, камера

После запекания текстур все материалы, источники света, камеры и т.п. должны быть конвертированы в стандартныедля 3dsMax типы:

  • камера - "FreeCamera"
  • источники света - "Omni", "Spot","Direct"
  • материал - "Standard (Blinn)"

В настоящий момент в All¹Mix используются только три типа текстур - "Diffuse", "Opacity" и "Reflection". Запеченные материалы лучше сделать самосветящимися. Это позволит удалить "лишние" источники света, доведя их количество до минимума. Или вообще обойтись без них.

1 AllMix 3d.jpg

Камера должна быть одна. Различные положения камеры задаются анимационным треком. Значения для клипирующих плоскостей камеры в свойствах камеры должны быть заданы вручную (Clipping Planes/Clip Manually) в соответствии с параметрами данной 3d-сцены. Общее правило: установить "Far" порядка габаритов сцены, а "Near" подбирать до исчезновения "мерцания" близко расположенных граней.

Тени

Как уже рекомендовалось выше, освещенность объектов сцены лучше запекать в текстуры. Однако эти советы не годятся для динамических теней (тени от подвижных объектов и актера). В этом случае рекомендуется комбинировать запекание освещенности сцены в текстуры и использование источника света "Spot".

Объекты

Нежелательно использовать группы (command Group). Особенно для анимированных объектов.

Напротив, объединять объекты (command Attach) - всегда хорошо и для экономии ресурсов и для быстроты загрузки. Разумеется, это необходимо делать перед запеканием текстур.

Перед экспортом ко всем объектам сцены рекомендуется применить процедуры "Convert to Editable Mesh"и (затем) "ResetX-Form". Это так же значительно ускорит загрузку сцены в All¹Mix и обеспечит ее корректность.

Специальные имена и свойства объектов и материалов 3d сцены

Объекты 3d сцены, доступные для редактирования в All¹Mix

  • В список объектов 3d сцены, доступных для редактирования, добавляются объекты с именем, начинающимся с символа @. Например: @Table (а также с именем содержащим слова "monitor", "video" или "actor" - для совместимости с прежними версиями).
  • В список добавляются объекты с именем материала, начинающимся с символа @. Например: @screen_material
  • В 3D редакторе All¹Mix возможен выбор показа только одного объекта из нескольких. Для этого в их именах должна быть общая часть левее символа @. Например: Table@wooden, Table@glass, : Table@metal и т.п.

All¹Mix позволяет пользователю изменять положение, ориентацию и масштаб таких объектов, а так же заменять диффузные карты их материалов на другие источники изображения (картинки, фидеофайлы, потоковое видео и т.п. ). В этом случае объект должен содержать только один материал.

  • Если материал объекта содержит карту прозрачности, то на этот объект можно будет назначить медиа с alpha-каналом (в частности может быть применена техника"ChromaKey").
  • Если первым символом в имени материала является восклицательный знак (например "!MaterialName" "!@MaterialName " ), то текстурные координаты объекта в AllMix будут назначаться в каждом кадре в режиме "overlay" (аналогично модификатору "Camera Map" в 3ds Max).

Объект "Actor"

"Actor" должен быть планарным объектом (прямоугольником) с пропорциями 16:9 (HD) или 4:3 (SD), в зависимости от типа камеры, снимающей реального актера.

Если первым символом в имени этого объекта является восклицательный знак ( например "!MyActor" ), то объект будет всегда "смотреть" на виртуальную камеру. Начиная с версии 2.0.076 ось вращения определяется программой All¹Mix по ориентации Gizmo планарных текстурных координат ("верх" Gizmo должен совпадать по ориентации с "верхом" сцены).

Восклицательный знак будет работать и в более ранних версиях All¹Mix, если "Actor" будет создан следующим способом:

  • Cоздаем объект Plane в окне Front.
  • Применяем к нему процедуру "Reset XForm"
  • Применяем к нему процедуру "Convert To Editabel Mesh"

Сам объект, после этого, можно будет перемещать, масштабировать и т.п.

Существует прием, позволяющий осуществлять "наезд" виртуальной камеры на поясной план полно-ростовой фигуры без потери качества изображения "Актера". Для этого реальная видеокамера, снимающая актера, поворачивается на 90 градусов. В результате изображение с камеры будет так же повернутым, и мы должны в 3d сцене компенсировать этот поворот.

AllMix v6 1.jpg

Если в имени объекта "Actor" нет восклицательного знака, то достаточно просто развернуть прямоугольник на 90 градусов. Если же "!" присутствует, то мы должны еще назначить текстурные координаты так, чтобы "верх" Gizmo совпадал по ориентации с "верхом" сцены. После чего исправить картинку, повернув в редакторе материалов.

AllMix v6 2.jpg

Отражения

Отражения в реальном времени

В All¹Mix реализована возможность рендеринга отражения в реальном времени для планарных объектов. Такие объекты не должны содержать более одного уникального материала.

Планарный объект может иметь любую форму, и даже состоять из отдельных разнесенных фрагментов. Главное чтобы все элементы объекта лежали в одной плоскости. "Pivot" объекта также должен находиться в этой плоскости.

Для того чтобы All¹Mix воспринял объект как отражающий, необходимо в назначенном на него материале поставить "галку" для опции"Reflection" и установить "вес" отражения.

Поле "map" должно содержать процедурную карту "FlatMirror". Степень размытия отражения задается параметром "Bloor" в свойствах карты "FlatMirror".


2 AllMix 3d.jpg

Построение нединамических отражений

Для объектов сцены возможно задание статических отражений при помощи текстурных карт типа Reflect/Refract в редакторе материалов.

AllMix v6 3.jpg

Имитационные отражения

Имитационные отражения задаются обычным способом - через единственную текстурную карту:

AllMix v6 4.jpg

Анимация

Принцип построения анимации в All¹Mix

В All¹Mix проигрывание анимационных треков (созданных в 3ds Max) производится между некоторыми именованными состояниями объекта, с уникальными наборами параметров: "position", "rotate", "scale", "continuty" и т.п. В дальнейшем будем называть эти состояния стейтами (от "State").

Принцип стейт-анимации заключается в том, что при работе в All¹Mix пользователь выбирает не конкретный отрезок анимационного трека для проигрывания, а "пункт назначения" - состояние, к которому должен "прийти" объект. При этом программа All¹Mix автоматически выбирает тот отрезок трека, начало которого соответствует текущему состоянию, а конец - целевому состоянию. Если такого отрезка трека не имеется, то переход из текущего состояния в конечное осуществляется мгновенно.

Почему в All¹Mix для управления анимацией используется технология "State Animation" вместо вроде бы более понятной технологии "Action Animation"? ("Action Animation" - это такой способ управления, когда каждому отрезку анимации объекта соответствует своя кнопка, отвечающая за запуск анимации по данному отрезку трека).

Для примера рассмотрим 3D сцену, в которой существует N базовых положений виртуальной камеры (и/или других объектов 3d сцены), а в 3ds Max созданы отрезки анимационных треков, соответствующие всем возможным переходам между этими базовыми положениями. Согласно формуле комбинаторики количество таких отрезков (а, следовательно, и количество соответствующих кнопок для "Action Animation" технологии) должно быть N!/(N-2)!

То есть для сцены с тремя, шестью или десятью базовыми положениями виртуальной камеры нам понадобятся соответственно 6, 30 или 90 кнопок для "Action Animation" технологии. А вот для управления анимацией по "State Animation" технологии нам понадобится соответственно всего 3, 6 или 10 кнопок. Разница существенная.

Кроме того, "State Animation" технология существенно упрощает работу оператора. Ему не нужно соображать в каком базовом положении находится виртуальная камера в настоящий момент. Достаточно просто выбрать кнопку соответствующую желаемому следующему положению/состоянию объекта сцены.

Задание "State" - анимации в 3DS Max

Для избегания ошибок и путаницы, рекомендуем начать со следующего:

  • Прежде всего, временную конфигурацию анимации следует привести к формату "Frames" (Time Configuration/Time Display/Frames), поскольку для All¹Mix описание отрезков треков анимации задается именно в этом формате.
  • Затем, в моде "Auto Key", через некоторые (небольшие) промежутки на кадровом треке создаем базовые позиции виртуальной камеры. Ключи, соответствующие этим позициям, должны содержать значения для "position", "rotate", "scale". (Для камеры - только "position" и "rotate"). Если объект имеет "детей", анимация которых должна проигрываться синхронно с "родителем", то копировать следует и их ключи.
  • Каждому базовому положению/состоянию объекта 3d сцены (т.е. "стейту" с уникальным набором параметров "position" и "rotate") придумаем уникальные и "говорящие" названия (например, у нас четыре "стейта" положения виртуальной камеры - мы назовем их "Near", "Center", "Left", "Right") и пока держим их в уме. Они пригодятся позже.

Создание анимационных переходов и их описание

Созданные ключи нам понадобятся как образцы при создании отрезков анимированных переходов между базовыми положениями нашей виртуальной камеры и (или) других объектов. Мы их будем копировать в начало и конец отрезков трека, задающих анимацию переходов между парой "стейтов". Это даст гарантию, что значения ключей будут одинаковыми для одного и того же "стейта", на каких бы позициях трека он не находился.

Кстати, полезно для наших "образцовых" ключей задать сразу и свойства (например: Easy From = 25, Easy To = 25, Continuty = 0).

Следующий шаг - создание отрезков анимации объекта. Сами отрезки могут быть любой длины и содержать любые внутренние ключи. Однако, как мы уже указывали, начинаться и заканчиваться они должны ключами скопированными из образцов - стейтов.

Но на этом на этом подготовка анимации объекта не закончилась. Мы должны каким-то образом передать программе All¹Mix какие отрезки анимации использовать для переходов между стейтами.

Описание используемых отрезков анимированных треков, соответствующих преходам между стейтами каждого анимированного объекта задается в пользовательских свойствах этого же объекта в следующем формате:

<animation name="<StateName>_to_<StateName>" from="<number>" to="<number>" />

Пробелы внутри кавычек ("") не допускаются.

В качестве пары <StateName> мы используем придуманные выше названия для стейтов, а в качестве <number> - номера первого и последнего кадра отрезка анимации, отвечающего за анимацию перхода между этой парой стейтов. В результате мы получим следующее:

AllMix v6 6.jpg

В данном примере длины отрезков анимации одинаковые и имеют общие края, но это совершенно не обязательно. Переходы могут быть любой длины. Если удобней создавать отрезки анимации переходов на некотором расстоянии друг от друга - делайте как удобней. Не описанные в пользовательских свойствах объекта участки трека будут просто проигнорированы.

Если имеется несколько анимированных объектов, то описанные выше процедуры, нужно проделать для каждого объекта. И для каждого объекта создать описание в пользовательских свойствах этого объекта.

Из примера так же видно, что создавать и описывать отрезки анимации, соответствующие обратным переходам, необязательно. Поскольку All¹Mix умеет проигрывать треки как в прямом, так и в обратном направлении.

Если после импорта сцены в All¹Mix "что-то пошло не так", то в первую очередь нужно поискать ошибку именно в описании переходов между стейтами в "Object Proporties/User Defined".

Параметр "loop"

Если значение параметра loop="true", то описываемый отрезок анимации объекта будет воспроизводиться зацикленно и постоянно. При этом данная анимация стартует автоматически после загрузки сцены в All¹Mix. По умолчанию (при отсутствии параметра loop) его значение устанавливается как "false". Поэтому для не зацикленных отрезков анимации, этот параметр можно не указывать. Напротив, для зацикленных отрезков, можно не указывать имена стейтов. Поскольку для зацикленной анимации управляющие кнопки-иконки в All¹Mix не создаются.

Например, если в сцене присутствует вращающийся глобус земли, который совершает полный оборот за 1000 кадров, то для того чтобы создать его зацикленную анимацию мы должны в пользовательских свойствах объекта глобус сделать следующую запись:

AllMix v6 7.jpg

Параметр "parent"

Параметр parent задаёт имя узла, от которого наследуется анимация.

<animation parent="NodeName">

- если заданы параметры from/to, то проигрываются указанный диапазон кадров

- если не заданы параметры from/to, то проигрывается диапазон, указанный в узле parent

Параметр "children"

Параметр "children" используется при описании анимации родительских объектов иерархического дерева объектов 3d сцены. Если значение параметра children ="true", то будет проигрываться как анимация самого родительского объекта, так и анимация его "детей. В этом случае описывать анимацию "детей" в их пользовательских свойствах не нужно. По умолчанию (при отсутствии параметра children) его значение устанавливается как "true".

Если значение параметра children ="false", то проигрываться анимация только самого родительского объекта. В этом случае запись в свойствах родительского объекта будет выглядеть, например, так:

AllMix v6 8.jpg

Анимация с гистерезисом

Иногда требуется чтобы перход из состояния "A" в состояние "B" и обратно осуществлялось по различным анимационным трекам или (и) за разное число кадров. В этом случае следует создать для такого объекта в 3DS Max два соответствующих отрезка анимации переходов между состояниями "A" и "B". А в пользовательских в свойствах этого объекта необходимо описать оба эти перехода.

Например:

<animation name="A_to_B" from="0" to="50" />

<animation name="B_to_A" from="60" to="75" />

Создание одиночного стейта

Для создания одиночного стейта (для которого не существует анимированных треков перехода к другим стейтам) следует использовать следующие свойства тэга "animation":

  • если параметр "from" не задан, то берётся равным "to"
  • если параметр "to" не задан. то берётся равным "from"
  • если параметры "from" и "to" равны, то формируется один State, а не два

То есть следующие записи эквивалентны:

<animation name="State Name" to="100" />

<animation name="State Name" from="100" />

<animation name="State Name" from="100" to="100" />

Авто-стейт

Что будет, если анимация объекта создана по вышеописанным правилам, но в "Object Proporties/User Defined" камеры описание переходов отсутствует. В этом случае после загрузки сцены программа All¹Mix попытается самостоятельно определить "стейты", создать описание переходов и соответствующие управляющие кнопки-иконки. Для простой анимации довольно часто автомат угадывает "что имел в виду автор". Особенно если отрезки треков, ответственные за переходы между "стейтами" имеют общие края. В противном случае возможно автоматическое создание лишних переходов, а в отдельных случаях и потеря каких-то "стейтов".

Что-то можно будет исправить во встроенном редакторе All¹Mix, а что-то нет. Поэтому лучше не лениться и описывать переходы между "стейтами" объекта в "Object Proporties/User Defined".

Некоторые полезные дополнительные сведения

Для создателя 3D сцены полезно знать, как программа All¹Mix использует содержимое пользовательских свойств объекта:

После загрузки сцены программа автоматически создает в интерфейсе кнопки-иконки, соответствующие стейтам объектов, имеющих пользовательские свойства, оформленные по приведенным выше правилам.

При нажатии на кнопку-иконку какого-либо стейта объекта, программа находит строку из списка в пользовательских свойствах этого объекта, которая содержит пару стейтов (текущий стейт и стейт назначения) и проигрывает участок трека который задан в данной строке в том или ином направлении (в зависимости от того в каком состоянии объект находится).

Изображения на иконке генерируются как "снимок" из виртуальной камеры соответствующий результату выполнения действия по нажатию на эту кнопку-иконку.

Кроме того на иконке отображается имя стейта, которому эта иконка соответствует. Именно поэтому желательно чтобы имя стейта соответствовало назначению кнопки.

Если в свойствах некоторого объекта "Object Proporties/User Defined" описан только один переход, то при импорте в All¹Mix FBX файла (содержащего это описание) будет сгенерирована только одна управляющая кнопка-иконка. При клике на эту кнопку проиграется анимационный отрезок в заданном направлении, а при повторном клике - в обратном.

Экспорт из 3dsmax

Для использования 3D сцены в All¹Mix, необходимо экспортировать сцену в формат FBX (с опцией "Embed Media")

Export.jpg