Change Language:
Экспорт камеры из Houdini в Nuke при помощи EXR - Datsyk Mykhailo
View Sidebar
Экспорт камеры из Houdini в Nuke при помощи EXR

Экспорт камеры из Houdini в Nuke при помощи EXR

Январь 29, 2014 12:13 дп0 comments

Для меня всегда было большой проблемой перенести камеру из Houdini в Nuke. Все попытки использовать fbx, по каким-то причинам, постоянно приводили к сбоям, переворачиванию направлений осей координат и неправильной анимации.

Я видел достаточно много скриптов переносящих камеру из Maya, Blender и т.д., но так как я работаю в Houdini я решил сделать себе удобный инструмент для этого.

Основным толчком для меня стало открытие широких возможностей по хранению данных в exr файлах. Exr являтся основным форматом изображений в котором работаю я и мои колеги. Я подумал, если рендерить картинку для композа сразу с информацией о камере, которую в свою очередь всегда можно прочитать а Nuke. При этом отпадают проблемы с несовпадением версий камеры и рендера, т.к. каждый готовый кадр будет нести актуальную информацию о том, с какой камеры от был посчитан.

Почитав немного о наследовании трансформации в Houdini, а зачастую мы анимируем камеру всеми доступными способами, с помощью Aim или используем дополнительные паренты и нули, я понял что для решения задачи переноса камеры нужно использовать матрицы трансформации. В любом пакете, который имеет отношение к 3D вычисление положения и поворота в пространстве описывается в виде матрицы трансформации(они бывают мировыми(worldMatrix) и локальными). Система координат Эйлера дает нам более понятное понимание визуального процесса работы с 3Д объектом, но при экспорте данных с одного пакета в другой, намного проще воспользоваться матрицами, которые дают нам возможность получить позицию объекта и его поворот(а еще сжатие и размер(для твердотельных объектов важные данные но не для камеры)) не зависимо от того, каким образом мы воздействовали на него для получения движения или позиции. Мы всегда можем преобразовать матрице и получить любую компоненту трансформации(transform, rotate, scale…)

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

Процесс

Houdini:

Для того, чтобы записать камеру в exr нужно создать expression в Mantra Node, который в поле «exr/comments» вписывает значения матрицы положения в мировых координатах, а также Focal Length и Aperture выбранной в данной mantra node камеры. Выглядит это так:

cam_exp_mantra

`pythonexprs("hou.node(hou.parm('camera').eval()).worldTransform().asTuple()")``pythonexprs("hou.parm(hou.parm('camera').eval()+'/focal').eval()")``")"``pythonexprs("hou.parm(hou.parm('camera').eval()+'/aperture').eval()")`

Для удобства я сделал shelf, который при необходимости заполняет это поле для меня:

cam_exp_mantra_shell1 cam_exp_mantra_shell2

Nuke:

Чтобы создать камеру в Nuke на основе записанных нами данных, выполняем скрипт, который считывает в каждом кадре, на протяжении всесго отрезка существования сиквенции, анимацию и ставит ключи на камеру.

На практике это выглядит так:

1. Выполняем скрипт:

nuke_res

2. Получаем камеру с анимацией:

nuke_res2nuke_res3

Ссылка на Github:

Leave a reply


Trackbacks