Page Menu
Home
Search
Configure Global Search
Log In
Files
F7946
Camera_Tracking_(.ma)_248.py
Public
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Authored By
Brendon Murphy (meta-androcto)
Nov 13 2013, 1:50 PM
Size
6 KB
Subscribers
None
Camera_Tracking_(.ma)_248.py
View Options
#!BPY
# """
# Name: '_Camera Tracking (.ma)_248'
# Blender: 240
# Group: 'Animation'
# Tip: 'Export camera tracking to Maya Ascii (for Shake, After Effects etc)'
# """
__author__
=
"videocopiolot "
__url__
=
"http://wiki.blender.org/index.php/Scripts/Manual/Animation/Camera_Tracking"
__version__
=
"0.1"
__bpydoc__
=
""" Camera Tracking (.ma)
This script will export Blender's camera to After Effects or Maya.
"""
# --------------------------------------------------------------------------
# Camera Tracking (.ma) by videocopiolot
# --------------------------------------------------------------------------
# ***** BEGIN GPL LICENSE BLOCK *****
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------
import
Blender
from
Tkinter
import
*
import
tkFileDialog
import
time
from
Blender.Window
import
DrawProgressBar
def
saveDialog
():
root
=
Tk
()
root
.
withdraw
()
try
:
root
.
tk
.
call
(
'console'
,
'hide'
)
except
:
pass
fname
=
tkFileDialog
.
asksaveasfilename
()
root
.
destroy
()
return
fname
def
exportTracking
(
mafilename
):
t
=
{}
t
[
'header'
]
=
[]
t
[
'header'
]
.
append
(
'//Maya ASCII scene
\n
//Name: camera.ma
\n
//Last modified:
%s
\n
'
%
time
.
strftime
(
'
%X
%d
/%m/%y'
))
t
[
'header'
]
.
append
(
'currentUnit -l centimeter -a degree -t film;
\n
'
)
oframe
=
Blender
.
Get
(
'curframe'
)
scene
=
Blender
.
Scene
.
GetCurrent
()
obj
=
scene
.
getCurrentCamera
()
camera
=
Blender
.
Camera
.
Get
()[
0
]
matrix
=
obj
.
matrix
t
[
'header'
]
.
append
(
'createNode transform -n "
%s
";
\n
'
%
obj
.
name
)
t
[
'header'
]
.
append
(
'
\t
setAttr ".t" -type "double3" 0 0 0 ;
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr -av ".tx";
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr -av ".ty";
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr -av ".tz";
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr ".r" -type "double3" 0 0 0 ;
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr -av ".rx";
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr -av ".ry";
\n
'
)
t
[
'header'
]
.
append
(
'createNode camera -n "camera" -p "
%s
";
\n
'
%
obj
.
name
)
t
[
'header'
]
.
append
(
'
\t
setAttr -k off ".v";
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr ".rnd" no;
\n
'
)
scene
=
Blender
.
Scene
.
GetCurrent
()
context
=
scene
.
getRenderingContext
()
yRes
=
context
.
imageSizeY
()
xRes
=
context
.
imageSizeX
()
aspX
=
context
.
aspectX
aspY
=
context
.
aspectY
aspect
=
xRes
*
aspX
/
float
(
yRes
*
aspY
)
# if aspect > 1: x is constant, otherwise y constant
# constant comes from fov equations: fov = 2 * atan(aspect * 16.0 / camera.lens), aperturey = tan(fov/2)*camera.lens*2/25.4
# tracking seems to work better using 1.25, change as needed
#c = 16.0*2/25.4
c
=
1.25
aperturex
=
min
(
c
,
c
*
aspect
)
aperturey
=
min
(
c
,
c
/
aspect
)
t
[
'header'
]
.
append
(
'
\t
setAttr ".cap" -type "double2"
%s
%s
;
\n
'
%
(
aperturex
,
aperturey
))
t
[
'header'
]
.
append
(
'
\t
setAttr ".dar"
%s
;
\n
'
%
aspect
)
t
[
'header'
]
.
append
(
'
\t
setAttr ".lsr" 1;
\n
'
)
# lens squeeze ratio
t
[
'header'
]
.
append
(
'
\t
setAttr ".ff" 0;
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr ".fl"
%s
;
\n
'
%
camera
.
lens
)
# focal length
t
[
'header'
]
.
append
(
'
\t
setAttr ".ncp" 0.01;
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr ".ow" 30;
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr ".imn" -type "string" "camera1";
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr ".den" -type "string" "camera1_depth";
\n
'
)
t
[
'header'
]
.
append
(
'
\t
setAttr ".man" -type "string" "camera1_mask";
\n
'
)
for
p
in
[
'translateX'
,
'translateY'
,
'translateZ'
,
'rotateX'
,
'rotateY'
,
'rotateZ'
]:
t
[
p
]
=
[]
t
[
p
]
.
append
(
'createNode animCurveTL -n "
%s
_
%s
";
\n
'
%
(
obj
.
name
,
p
))
t
[
p
]
.
append
(
'
\t
setAttr ".tan" 10;
\n
'
)
t
[
p
]
.
append
(
'
\t
setAttr ".wgt" no;
\n
'
)
t
[
p
]
.
append
(
'
\t
setAttr -s 4 ".ktv[0:3]" '
)
DrawProgressBar
(
0
,
"starting..."
)
for
frame
in
xrange
(
Blender
.
Get
(
'staframe'
),
Blender
.
Get
(
'endframe'
)
+
1
):
Blender
.
Set
(
'curframe'
,
frame
)
frames
=
Blender
.
Get
(
'endframe'
)
+
1
-
Blender
.
Get
(
'staframe'
)
pc
=
(
frame
+
Blender
.
Get
(
'staframe'
)
-
1
)
/
float
(
frames
)
DrawProgressBar
(
pc
,
"frame
%s
"
%
str
(
frame
))
x
=
matrix
.
translationPart
()
.
x
t
[
'translateX'
]
.
append
(
'
%s
%s
'
%
(
frame
,
x
))
y
=
matrix
.
translationPart
()
.
y
t
[
'translateY'
]
.
append
(
'
%s
%s
'
%
(
frame
,
y
))
z
=
matrix
.
translationPart
()
.
z
t
[
'translateZ'
]
.
append
(
'
%s
%s
'
%
(
frame
,
z
))
rx
=
matrix
.
toEuler
()
.
x
t
[
'rotateX'
]
.
append
(
'
%s
%s
'
%
(
frame
,
rx
))
ry
=
matrix
.
toEuler
()
.
y
t
[
'rotateY'
]
.
append
(
'
%s
%s
'
%
(
frame
,
ry
))
rz
=
matrix
.
toEuler
()
.
z
t
[
'rotateZ'
]
.
append
(
'
%s
%s
'
%
(
frame
,
rz
))
t
[
'footer'
]
=
[]
t
[
'footer'
]
.
append
(
'connectAttr "
%s
_translateX.o" "
%s
.tx";
\n
'
%
(
obj
.
name
,
obj
.
name
))
t
[
'footer'
]
.
append
(
'connectAttr "
%s
_translateY.o" "
%s
.ty";
\n
'
%
(
obj
.
name
,
obj
.
name
))
t
[
'footer'
]
.
append
(
'connectAttr "
%s
_translateZ.o" "
%s
.tz";
\n
'
%
(
obj
.
name
,
obj
.
name
))
t
[
'footer'
]
.
append
(
'connectAttr "
%s
_rotateX.o" "
%s
.rx";
\n
'
%
(
obj
.
name
,
obj
.
name
))
t
[
'footer'
]
.
append
(
'connectAttr "
%s
_rotateY.o" "
%s
.ry";
\n
'
%
(
obj
.
name
,
obj
.
name
))
t
[
'footer'
]
.
append
(
'connectAttr "
%s
_rotateZ.o" "
%s
.rz";
\n
'
%
(
obj
.
name
,
obj
.
name
))
t
[
'footer'
]
.
append
(
'connectAttr "
%s
_scaleX.o" "
%s
.sx";
\n
'
%
(
obj
.
name
,
obj
.
name
))
t
[
'footer'
]
.
append
(
'connectAttr "
%s
_scaleY.o" "
%s
.sy";
\n
'
%
(
obj
.
name
,
obj
.
name
))
t
[
'footer'
]
.
append
(
'connectAttr "
%s
_scaleZ.o" "
%s
.sz";
\n
'
%
(
obj
.
name
,
obj
.
name
))
t
[
'footer'
]
.
append
(
'
\n
// End of camera.ma
\n
'
)
if
not
mafilename
.
endswith
(
'.ma'
):
mafilename
+=
'.ma'
mafile
=
open
(
mafilename
,
'w'
)
for
line
in
t
[
'header'
]:
mafile
.
write
(
line
)
for
p
in
[
'translateX'
,
'translateY'
,
'translateZ'
,
'rotateX'
,
'rotateY'
,
'rotateZ'
]:
for
line
in
t
[
p
]:
mafile
.
write
(
line
)
mafile
.
write
(
';
\n
'
)
for
line
in
t
[
'footer'
]:
mafile
.
write
(
line
)
Blender
.
Set
(
'curframe'
,
oframe
)
# reset frame back to where it was
mafilename
=
saveDialog
()
if
(
mafilename
!=
''
):
exportTracking
(
mafilename
)
File Metadata
Details
Mime Type
text/x-python
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
1f/05/3346ca2063833278a664723230da
Event Timeline
Log In to Comment