понедельник, 4 августа 2014 г.

Как подружить Blender и 3ds max при помощи Octane Render

Прежде, чем написать «как», я сначала поясню «зачем».
У меня возникла конкретная рабочая ситуация: не все коллеги, которых я привлекаю к работе над проектами, как и я, работают в Blender. Есть потрясающие 3D-шники, которые работают в 3ds max. Как известно, 3ds max очень плохо дружит с Blender и последний отвечает ему взаимностью. Когда происходит такое разделение софта, как правило процесс строится следующим образом: моделируется где придется, а вот анимация каждой сцены делается целиком либо в Blender, либо в 3ds max (других рабочих вариантов на момент написания заметки нет).
Но в данной ситуации есть такая проблема: во-первых, камеру, как правило, делаю я сам вместе с профессиональным оператором, сидящим рядом и довольным тем, что он может получить идеальный для сцены кадр без технических ограничений и практически не напрягаясь. Во-вторых, интеграция Octane Render в Blender позволяет более свободно работать с камерой, чем в 3ds max (по крайней мере до версии 2.0 — как в последних версиях, я не знаю). В третьих, камеру из 3ds max, скажем так, сложно передать в After Effects (а вот Blender это отлично умеет). Ну и в четвертых, иметь независимую от сцены камеру — удобно: можно переиграть движение камеры, настройки (например, фокусное расстояние, точку фокусировки и т. п.) без необходимости дергать людей, которые уже сделали свою работу и заслуженно отдыхают, трудясь над каким-то следующим проектом.
Другими словами, задача заключается в том, чтобы получить какую-то такую корректно работающую систему нодов в Octane:
где верхний огромный узел — это alembic сцены из 3ds max, а нижний маленький содержит анимацию камеры, созданную в Blender.
На самом деле, это несложно, если бы не ряд нюансов, которые должны быть учтены, чтобы все заработало правильно. Итак, порядок работ и, собственно, нюансы:
  1. Черновая анимация камеры делается в той программе, в которой выполняется и анимация сцены (3ds max в данном случае). Для анимации камеры я получаю один или несколько OBJ-файлов сцены (полных или частичных «слепков» по временным промежуткам с маркерами черновой камеры, для каждого из которых я знаю кадр, когда камера оказывается тут). В идеале, конечно, использовать что-то вроде FBX, например, но Blender пока не научили корректно работать с ним.
  2. Самый важный нюанс всего процесса: необходимо привести масштаб сцены в соответствие с масштабом исходного пакета (3ds max, например). То есть, если какое-то расстояние в 3ds max равнялось, например, 81 сантиметру, то и в Blender это расстояние должно быть таким же в тех же единицах измерения (небольшое различие значений в примерах вызвано небольшой неточностью измерений; важно: параметр Scale должен стоять в значении 1). Кстати, если забыть это сделать сразу, то в последствии, когда камера уже анимирована, достаточно привязать ее (и все остальное окружение, чтобы не запутаться) к Empty в точке (0, 0, 0) и пропорционально уменьшить масштаб этого Empty — это работает.
  3. После можно спокойно анимировать камеру, настраивать точку фокусировки, диафрагму и прочее. Blender это отлично экспортирует в alembic. Кстати, вплоть до текущей версии интегрированного плагина (1.55) фокусное расстояние корректно можно задать только через указание объекта-точки фокусировки (числовое значение не экспортируется в alembic корректно).
  4. Затем из 3ds max и из Blender делаются отдельные alembic-файлы и объединяются показанным выше способом. Нормально работает, если из 3ds max экспортируется ORBX-файл. Важно также соблюсти частотность кадров в обеих программах при экспорте.
Это работает. Также есть подозрение, что подобным образом можно «дружить» с помощью Октана и сцены-камеры, созданные в других поддерживаемых 3D-пакетах.
Удачи вам в жизни и работе над проектами!