Skip to content

Instantly share code, notes, and snippets.

@davegreenwood
Created August 4, 2018 08:39
Show Gist options
  • Save davegreenwood/2e51e370ac5620c466b532b763ed68ae to your computer and use it in GitHub Desktop.
Save davegreenwood/2e51e370ac5620c466b532b763ed68ae to your computer and use it in GitHub Desktop.
Create a number of cameras in Maya.
import maya.cmds as cmds
import math
H_ANGLE = 150
V_ANGLE = 60
H_CAMS = 9
V_CAMS = 5
RADIUS = 10
FL = 60.
# Degrees to Radians etc
hs = H_ANGLE / 2.0 * -1 * math.pi / 180
ha = H_ANGLE / float(H_CAMS - 1) * math.pi / 180
vs = V_ANGLE / 2.0 * -1 * math.pi / 180
va = V_ANGLE / float(V_CAMS - 1) * math.pi / 180
def lock_hide(obj):
attrs = ['.tx', '.ty', '.tz', '.rx',
'.ry', '.rz', '.sx', '.sy', '.sz']
for attr in attrs:
cmds.setAttr(obj + attr, lock=True,
keyable=False, channelBox=False)
def unrenderable():
# make all default cameras unrenderable
for cam in cmds.listCameras(p=True):
cmds.setAttr(cam + '.renderable', False)
def camera(grp, ctrl, x, y, z):
cam, shape = cmds.camera(aspectRatio=1.0,
focalLength=FL,
overscan=1.5,
displayFilmGate=True,
displayResolution=True)
cmds.move(x, y, z, cam, absolute=True)
cmds.viewLookAt(cam, pos=(0.0, 0.0, 0.0))
cmds.parent(cam, grp)
lock_hide(cam)
cmds.connectAttr(ctrl + '.cameraScale', shape + '.locatorScale')
cmds.connectAttr(ctrl + '.focalLength', shape + '.focalLength')
cmds.connectAttr(ctrl + '.cameraVisible', cam + '.visibility')
cmds.connectAttr(ctrl + '.cameraDisplayOverride',
cam + '.overrideDisplayType')
cmds.setAttr(cam + '.overrideEnabled', True)
cmds.setAttr(cam + '.renderable', True)
return cam, shape
def ctrl_crv():
obj = cmds.curve(name='cam_ctrl', d=1,
p=[[-1, 1, RADIUS + 2], [1, 1, RADIUS + 2],
[1, -1, RADIUS + 2], [-1, -1, RADIUS + 2],
[-1, 1, RADIUS + 2]])
lock_hide(obj)
cmds.setAttr(obj + '.overrideEnabled', True)
cmds.setAttr(obj + '.overrideColor', 13)
cmds.setAttr(obj + '.v', 1, lock=True, keyable=False, channelBox=False)
cmds.addAttr(obj, shortName='cs', longName='cameraScale',
defaultValue=1.0, minValue=0.001, maxValue=10, keyable=True)
cmds.addAttr(obj, shortName='fl', longName='focalLength',
defaultValue=FL, minValue=10.0, maxValue=100.0, keyable=True)
cmds.addAttr(obj, shortName='cv', longName='cameraVisible',
defaultValue=True, keyable=True)
cmds.addAttr(obj, shortName='cdo', longName='cameraDisplayOverride',
at="enum", en="normal:template:reference:",
defaultValue=0, keyable=True)
return obj
def cam_array():
grp = cmds.group(empty=True, name='cam_grp')
ctrl = ctrl_crv()
unrenderable()
for i in range(H_CAMS):
for j in range(V_CAMS):
theta, phi = i * ha + hs, j * va + vs
x = RADIUS * math.sin(theta) * math.cos(phi)
y = RADIUS * math.sin(phi)
z = RADIUS * math.cos(theta) * math.cos(phi)
camera(grp, ctrl, x, y, z)
cmds.select(ctrl, r=True)
cam_array()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment