MayaCamXForm2C4D Script

So, FBX in Cinema 4D is screwed – and has been screwed for a long time. It gets in position and rotation data correctly, but it never gets in camera data correctly (nor exports it correctly, either, for that matter).

What I have done in the past to get cameras from maya into cinema has been to link the transforms of the camera to a null and then link the focal length of the camera to the Y position of another null. I bake them both out, transfer to Cinema via FBX and then use Xpresso to link up the correct values to a new cam. All well and good, but I thought since I had a little down time on my current job – and we’ve been dealing with this problem for months now – it might make a nice little script to ease the workflow a bit. So this script does the linking and baking part in Maya. You just select the camera, run the script, and it creates two locators – one with all the camera transform information baked in, and the other with the y position equaling the focal length of the camera.

Keep in mind this is my first mel script – and I only had a few hours to work on it. So, it is not perfect. There’s no error checking, no gui – just a barebones script that assumes the user knows exactly what he is doing and why he needs the script.

//MayaCameraXForm to C4d by Adam Swaab ©2010

//Warning! There's no error detection in this script!  Select one camera (one only!) and run the script.  It works based on the project timeline.

int $i = `playbackOptions -q -animationStartTime`;
int $end = `playbackOptions -q -animationEndTime`;

string $select[] = `ls -sl`;

$ActiveCam = $select[0];

//Create locators for data
spaceLocator -p 0 0 0 -name "CameraTransforms";
spaceLocator -p 0 0 0 -name "YisFocalLength";

while($i <= $end)
{
	currentTime $i;
	
	//Restore selection to camera and get Camera Info
	select -cl;
	select -r $ActiveCam;
	float $position[3] = `xform -worldSpace -query -translation $ActiveCam`;
	float $rotation[3] = `xform -worldSpace -query -rotation $ActiveCam`;
	$xpos = $position[0];
	$ypos = $position[1];
	$zpos = $position[2];
	$xrot = $rotation[0];
	$yrot = $rotation[1];
	$zrot = $rotation[2];
	$camshape = `listRelatives -s $ActiveCam`;
	$flength = `getAttr $camshape.focalLength`;
	
	//Set Data for locators
	setAttr("CameraTransforms.translateX", $xpos);
	setKeyframe("CameraTransforms.translateX");
	setAttr("CameraTransforms.translateY", $ypos);
	setKeyframe("CameraTransforms.translateY");
	setAttr("CameraTransforms.translateZ", $zpos);
	setKeyframe("CameraTransforms.translateZ");
	setAttr("CameraTransforms.rotateX", $xrot);
	setKeyframe("CameraTransforms.rotateX");
	setAttr("CameraTransforms.rotateY", $yrot);
	setKeyframe("CameraTransforms.rotateY");
	setAttr("CameraTransforms.rotateZ", $zrot);
	setKeyframe("CameraTransforms.rotateZ");
	setAttr("YisFocalLength.translateY", $flength);
	setKeyframe("YisFocalLength.translateY");
	
	$i++;
}