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

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


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


Следующий шаг - создание отрезков анимации объекта. Сами отрезки могут быть любой длины и содержать любые внутренние ключи. Однако, как мы уже указывали, начинаться и заканчиваться они должны ключами скопированными из образцов - стейтов.
Следующий шаг - создание отрезков анимации объекта. Сами отрезки могут быть любой длины и содержать любые внутренние ключи. Однако, как мы уже указывали, начинаться и заканчиваться они должны ключами скопированными из образцов - стейтов.
Строка 151: Строка 151:
'''<animation name="<StateName>_to_<StateName>" from="<number>" to="<number>" />'''  
'''<animation name="<StateName>_to_<StateName>" from="<number>" to="<number>" />'''  


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


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

Версия 04:35, 18 февраля 2020

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" и т.п.).

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

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

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

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

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

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

После запекания текстур все материалы, источники света, камеры и т.п. должны быть конвертированы в стандартныедля 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 сцены, доступные для редактирования в All¹Mix

Общие правила

Для того чтобы All¹Mix поместил объект 3dсцены в список объектов 3d сцены, доступных для редактирования, его имя должно содержать слова "monitor", "video" или "actor". Например: "Back_wall_monitor", "monitor1", "Monitor", "Actor", "FullSizeActor" и т.п.

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

Если материал объекта содержит карту прозрачности, то на этот объект можно будет назначить медиа с alpha-каналом (в частности может быть применена техника"ChromaKey").

Объект "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 сцене компенсировать этот поворот.

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

Отражения

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

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

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

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

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

2 AllMix 3d.jpg

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

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

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

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

Анимация

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

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

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

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

Для примера рассмотрим 3D сцену, в которой существует N базовых положений виртуальной камеры и в 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"). Чтобы быть уверенным, что ключи содержат все нужные параметры, можно применить к каждой созданной базовой позиции на кадровом треке опцию "Create Key".
  • Каждому базовому положению камеры (т.е. "стейту" с уникальным набором параметров "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> - номера первого и последнего кадра отрезка анимации, отвечающего за анимацию перхода между этой парой стейтов. В результате мы получим следующее:

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

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

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

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

Параметр "loop"

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

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


Параметр "children"

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

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

Авто-стейт

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

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

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

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

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

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

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

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

Экспорт из 3dsmax

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

Export.jpg