-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathController.py
More file actions
235 lines (181 loc) · 13.3 KB
/
Controller.py
File metadata and controls
235 lines (181 loc) · 13.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
import maya.cmds as base
import maya.OpenMaya as om
def CreateController(spineCount, fingerCount):
#arrow = base.curve(p = [(1,0,0),(1,0,2), (2,0,2),(0,0,6), (-2,0,2), (-1,0,2), (-1,0,0), (1,0,0)], degree = 1)
CreateMaster()
CreatePelvis()
CreateWrists()
CreateFeet()
CreateSpines(spineCount)
CreateClavicles(spineCount)
CreateNeck(spineCount)
CreateHead()
if (base.objExists("RIG_BREATHING_START")):
CreateBreathing(spineCount)
CreateFingers(fingerCount)
setColors()
def CreateMaster():
## master
master_ctrl = base.circle(nr = (0,1,0), c = (0,0,0), radius = 1, degree = 1, s = 16, name = "MASTER_CONTROLLER")
selection = base.select("MASTER_CONTROLLER.cv[1]","MASTER_CONTROLLER.cv[3]","MASTER_CONTROLLER.cv[5]","MASTER_CONTROLLER.cv[7]","MASTER_CONTROLLER.cv[9]","MASTER_CONTROLLER.cv[11]","MASTER_CONTROLLER.cv[13]","MASTER_CONTROLLER.cv[15]")
base.scale(0.7, 0.7, 0.7, selection)
base.scale(1, 1, 1, master_ctrl)
base.makeIdentity(master_ctrl, apply = True, t = 1, r = 1, s = 1)
def CreatePelvis():
## pelvis
pelvis_ctrl = base.circle(nr = (0,1,0), c = (0,0,0), radius = 1, degree = 1, s = 8, name = "CTRL_PELVIS")
rootPos = base.xform(base.ls("RIG_ROOT", type = 'joint'), q = True, t = True, ws = True)
base.move(rootPos[0],rootPos[1],rootPos[2], pelvis_ctrl)
base.scale(0.3, 0.3, 0.3, pelvis_ctrl)
base.makeIdentity(pelvis_ctrl, apply = True, t = 1, r = 1, s = 1)
base.parent(pelvis_ctrl, "MASTER_CONTROLLER")
def CreateWrists():
sides = ['L', 'R']
for side in sides:
ctrl1 = base.circle(nr = (0,1,0), c = (0,0,0), radius = 1, degree = 1, s = 16, name = "CTRL_"+side+ "_Wrist0")
ctrl2 = base.circle(nr = (0,1,0), c = (0,0,0), radius = 1, degree = 1, s = 16, name = "CTRL_"+side+ "_Wrist1")
ctrl3 = base.circle(nr = (0,1,0), c = (0,0,0), radius = 1, degree = 1, s = 16, name = "CTRL_"+side+ "_Wrist2")
wrist_ctrl = base.group(em = True, name ="CTRL_"+side+"_Wrist")
curves = [ctrl1, ctrl2, ctrl3]
for cv in curves:
crvShape = base.listRelatives(cv, shapes = True)
base.parent(crvShape, wrist_ctrl, s = True, r = True)
base.delete(cv)
base.select("CTRL_"+side+"_Wrist")
base.addAttr(shortName = "PV", longName = "Elbow_PV", attributeType = 'double', defaultValue = 0, minValue = -100, maxValue = 100, keyable = True)
base.scale(0.07, 0.07, 0.07, wrist_ctrl)
wristPos = base.xform(base.ls("RIG_"+side+"_Wrist"), q = True, t = True, ws = True)
wristRot = base.joint(base.ls("RIG_"+side+"_Wrist"), q = True, o = True)
if base.objExists("RIG_L_ArmTwist_*"):
armTwists = base.ls("RIG_L_ArmTwist_*")
print base.xform(base.ls("RIG_"+side+"_ArmTwist_"+str(len(armTwists) - 1)), q = True, ws = True, ro = True)
wristRotation = base.xform(base.ls("RIG_"+side+"_ArmTwist_"+str(len(armTwists) - 1)), q = True, ws = True, ro = True)
else:
wristRotation = base.xform(base.ls("RIG_"+side+"_Elbow"), q = True, ws = True, ro = True)
base.move(wristPos[0], wristPos[1], wristPos[2], wrist_ctrl)
wristGrp = base.group(em = True, name = 'CTRL_GRP_'+side+'_Wrist')
base.move(wristPos[0],wristPos[1],wristPos[2], wristGrp)
base.parent(wrist_ctrl, wristGrp)
# base.parent(wrist_ctrl, world = True)
base.rotate(0,0, -wristRotation[2], wristGrp)
base.parent(wristGrp, "MASTER_CONTROLLER")
def CreateClavicles(spineCount):
l_clavicle = base.curve(p = [(1,0,0),(1,1,1), (1,1.5,2), (1,1.7,3), (1,1.5,4), (1,1,5), (1,0,6), (-1, 0,6), (-1,1,5), (-1,1.5,4), (-1,1.7,3), (-1,1.5,2), (-1,1,1), (-1,0,0) ], degree = 1, name = "CTRL_L_Clavicle")
r_clavicle = base.curve(p = [(1,0,0),(1,1,1), (1,1.5,2), (1,1.7,3), (1,1.5,4), (1,1,5), (1,0,6), (-1, 0,6), (-1,1,5), (-1,1.5,4), (-1,1.7,3), (-1,1.5,2), (-1,1,1), (-1,0,0) ], degree = 1, name = "CTRL_R_Clavicle")
base.scale(0.02, 0.02, 0.02, l_clavicle)
base.scale(0.02, 0.02, 0.02, r_clavicle)
l_ArmPos = base.xform(base.ls("RIG_L_UpperArm"), q = True, t = True, ws = True)
r_ArmPos = base.xform(base.ls("RIG_R_UpperArm"), q = True, t = True, ws = True)
l_claviclePos = base.xform(base.ls("RIG_L_Clavicle"), q = True, t = True, ws = True)
r_claviclePos = base.xform(base.ls("RIG_R_Clavicle"), q = True, t = True, ws = True)
base.move(l_ArmPos[0], l_ArmPos[1] + 0.125, l_ArmPos[2] - 0.1, l_clavicle)
base.move(r_ArmPos[0], r_ArmPos[1] + 0.125, r_ArmPos[2] - 0.1, r_clavicle)
base.move(l_claviclePos[0],l_claviclePos[1],l_claviclePos[2], l_clavicle+".scalePivot", l_clavicle+".rotatePivot")
base.move(r_claviclePos[0],r_claviclePos[1],r_claviclePos[2], r_clavicle+".scalePivot", r_clavicle+".rotatePivot")
base.makeIdentity(l_clavicle, apply = True, t = 1, r = 1, s = 1)
base.makeIdentity(r_clavicle, apply = True, t = 1, r = 1, s = 1)
base.parent(l_clavicle, "CTRL_SPINE_"+str(spineCount - 1))
base.parent(r_clavicle, "CTRL_SPINE_"+str(spineCount - 1))
def CreateSpines(spineCount):
for i in range(0, spineCount):
spinePos = base.xform(base.ls("RIG_SPINE_"+str(i)), q = True, t = True, ws = True)
spine = base.curve(p =[(0, spinePos[1], spinePos[2]), (0, spinePos[1], spinePos[2] - 1), (0, spinePos[1] + 0.1, spinePos[2] - 1.1), (0, spinePos[1] + 0.1, spinePos[2] - 1.4), (0, spinePos[1] - 0.1, spinePos[2] - 1.4), (0, spinePos[1] - 0.1, spinePos[2] - 1.1), (0, spinePos[1], spinePos[2] - 1)], degree = 1, name = "CTRL_SPINE_"+str(i))
base.move(spinePos[0], spinePos[1], spinePos[2], spine+".scalePivot", spine+".rotatePivot")
base.scale(0.5, 0.5, 0.5, spine)
if (i == 0):
base.parent(spine, "CTRL_PELVIS")
else:
base.parent(spine, "CTRL_SPINE_"+str(i-1))
def CreateNeck(spineCount):
neck = base.curve(p = [(0.5,0,0), (0.25, -0.25, -0.5), (-0.25, -0.25, -0.5), (-0.5,0,0), (-0.25, -0.25, 0.5), (0.25, -0.25, 0.5), (0.5, 0,0)], degree = 1, name = "CTRL_NECK")
neckPos = base.xform(base.ls("RIG_Neck_Start"), q = True, t = True, ws = True)
base.scale(0.3, 0.3, 0.3, neck)
base.move(neckPos[0], neckPos[1]+0.1, neckPos[2], neck)
base.move(neckPos[0], neckPos[1], neckPos[2], neck+".scalePivot", neck+".rotatePivot")
base.parent(neck, "CTRL_SPINE_"+str(spineCount-1))
base.makeIdentity(neck, apply = True, t = 1, r = 1, s = 1)
def CreateBreathing(spineCount):
breathing = base.curve(p = [(0,0,0),(0.1, 0.1, 0), (0, 0.2,0), (-0.1, 0.1,0), (0,0,0)], degree = 1, name = "CTRL_BREATHING")
base.move(0, 0.1, 0, breathing+".scalePivot", breathing+".rotatePivot")
base.scale(0.3, 0.3, 0.3, breathing)
breathingPos = base.xform(base.ls("RIG_BREATHING_END"), q = True, t = True, ws = True)
breathingStart = base.xform(base.ls("RIG_BREATHING_START"), q = True, t = True, ws = True)
base.move(breathingPos[0], breathingPos[1] - 0.1, breathingPos[2] + 0.1, breathing)
base.move(breathingStart[0], breathingStart[1], breathingStart[2], breathing+".scalePivot", breathing+".rotatePivot")
base.parent(breathing, "CTRL_SPINE_"+str(spineCount - 1))
base.makeIdentity(breathing, apply = True, t = 1, r = 1, s = 1)
def CreateHead():
head = base.curve(p = [(0.5,0,0), (0.25,-0.25,-0.5), (0.25,-0.5, -0.5), (0,-0.6,-0.5),(-0.25,-0.5,-0.5), (-0.25, -0.25, -0.5), (-0.5,0,0), (-0.25, -0.25, 0.5), (-0.25, -0.5, 0.5), (0,-0.6, 0.5) ,(0.25, -0.5, 0.5),(0.25, -0.25, 0.5), (0.5,0,0)], degree = 1, name = "CTRL_HEAD")
base.scale(0.3, 0.3, 0.3, head)
headPos = base.xform(base.ls("RIG_Head"), q= True, t = True, ws = True)
neckPos = base.xform(base.ls("RIG_Neck_End"), q = True, t = True, ws = True)
base.move(headPos[0], headPos[1], headPos[2], head)
base.move(neckPos[0], neckPos[1], neckPos[2], head+".scalePivot", head+".rotatePivot")
base.parent(head, "CTRL_NECK")
base.makeIdentity(head, apply = True, t = 1, r = 1, s = 1)
#jaw
jaw = base.curve(p = [(0,0,0),(0.1, 0.1, 0), (0, 0.2,0), (-0.1, 0.1,0), (0,0,0)], degree = 1, name = "CTRL_JAW")
base.move(0, 0.1, 0, jaw+".scalePivot", jaw+".rotatePivot")
base.scale(0.3, 0.3, 0.3, jaw)
jawPos = base.xform(base.ls("RIG_Jaw_End"), q = True, t = True, ws = True)
jawStart = base.xform(base.ls("RIG_Jaw_Start"), q = True, t = True, ws = True)
base.move(jawPos[0], jawPos[1] - 0.1, jawPos[2] + 0.1, jaw)
base.move(jawStart[0], jawStart[1], jawStart[2], jaw+".scalePivot", jaw+".rotatePivot")
base.parent(jaw, "CTRL_HEAD")
base.makeIdentity(jaw, apply = True, t = 1, r = 1, s = 1)
def CreateFeet():
l_arrow = base.curve(p = [(1,0,0),(1,0,2), (2,0,2),(0,0,6), (-2,0,2), (-1,0,2), (-1,0,0), (1,0,0)], degree = 1, name = "CTRL_L_Foot")
base.addAttr(shortName = "KF", longName = "Knee_Twist", attributeType = 'double', defaultValue = 0, minValue = -100, maxValue = 100, keyable = True)
base.addAttr(shortName = "KR", longName = "Knee_Fix", attributeType = 'double', defaultValue = 0, minValue = 0, maxValue = 100, keyable = True)
base.addAttr(shortName = "FR", longName = "Foot_Roll", attributeType = 'double', defaultValue = 0, minValue = 0, maxValue = 100, keyable = True)
base.addAttr(shortName = "BR", longName = "Ball_Roll", attributeType = 'double', defaultValue = 0, minValue = 0, maxValue = 100, keyable = True)
r_arrow = base.curve(p = [(1,0,0),(1,0,2), (2,0,2),(0,0,6), (-2,0,2), (-1,0,2), (-1,0,0), (1,0,0)], degree = 1, name = "CTRL_R_Foot")
base.addAttr(shortName = "KF", longName = "Knee_Twist", attributeType = 'double', defaultValue = 0, minValue = -100, maxValue = 100, keyable = True)
base.addAttr(shortName = "KR", longName = "Knee_Fix", attributeType = 'double', defaultValue = 0, minValue = 0, maxValue = 100, keyable = True)
base.addAttr(shortName = "FR", longName = "Foot_Roll", attributeType = 'double', defaultValue = 0, minValue = 0, maxValue = 100, keyable = True)
base.addAttr(shortName = "BR", longName = "Ball_Roll", attributeType = 'double', defaultValue = 0, minValue = 0, maxValue = 100, keyable = True)
base.scale(0.08, 0.08, 0.08, l_arrow)
base.scale(0.08, 0.08, 0.08, r_arrow)
l_footPos = base.xform(base.ls("RIG_L_Foot"), q = True, t = True, ws = True)
r_footPos = base.xform(base.ls("RIG_R_Foot"), q = True, t = True, ws = True)
base.move(l_footPos[0], 0, l_footPos[2], l_arrow)
base.move(r_footPos[0], 0, r_footPos[2], r_arrow)
base.makeIdentity(l_arrow, apply = True, t = 1, r = 1, s = 1)
base.makeIdentity(r_arrow, apply = True, t = 1, r = 1, s = 1)
base.parent(l_arrow, "MASTER_CONTROLLER")
base.parent(r_arrow, "MASTER_CONTROLLER")
def CreateFingers(fingerCount):
sides = ['L', 'R']
for side in sides:
for i in range(0, fingerCount):
#base.move(fingerPosition[0], fingerPosition[1], fingerPosition[2], fingerGrp)
#base.makeIdentity(fingerGrp, apply = True, t = 1, r = 1, s = 1)
#print fingerRotation
for j in range(0,3):
#fingerRotation = base.xform(base.ls("RIG_"+side+"_Finger_"+str(i)+"_"+str(j)), q = True, ws = True, ro = True)
fingerRotation = base.xform(base.ls("Loc_"+side+"_Finger_"+str(i)+"_"+str(j)), q = True, ws = True, ro = True)
fingerPosition = base.xform(base.ls("Loc_"+side+"_Finger_"+str(i)+"_"+str(j)), q = True, ws = True, t = True)
allFingers = base.ls("RIG_"+side+"_Finger_"+str(i)+"_"+str(j))
finger = base.curve(p =[(0,0,0), (0,0,0.5), (0.2, 0, 0.7),(0,0,0.9), (-0.2, 0, 0.7), (0,0,0.5)], degree = 1, name = "CTRL_"+side+"_Finger_"+str(i)+"_"+str(j))
base.rotate(-90,0,0, finger)
#base.parent(finger, fingerGrp)
for k, fi in enumerate(allFingers):
fingerPos = base.xform(fi, q = True, t = True, ws = True)
fingerRot = base.joint(fi, q = True, o = True)
base.scale(0.1, 0.1, 0.1, finger)
base.move(fingerPos[0], fingerPos[1], fingerPos[2], finger)
fingerGrp = base.group(em = True, n = "CTRL_GRP_"+side+"_Finger_"+str(i)+"_"+str(j))
base.move(fingerPosition[0], fingerPosition[1], fingerPosition[2], fingerGrp)
base.rotate(0, fingerRotation[1], 0, fingerGrp)
base.makeIdentity(finger, apply = True, t = 1, r = 1, s = 1)
base.makeIdentity(fingerGrp, apply = True, t = 1, r = 1, s = 1)
base.parent(finger, fingerGrp)
base.rotate(0, fingerRotation[1], 0, fingerGrp, r = True)
if j > 0:
base.parent(fingerGrp, "CTRL_"+side+"_Finger_"+str(i)+"_"+str(j-1))
else:
base.parent(fingerGrp, "CTRL_"+side+"_Wrist")
def setColors():
base.setAttr('MASTER_CONTROLLER.overrideEnabled', 1)
base.setAttr('MASTER_CONTROLLER.overrideRGBColors', 1)
base.setAttr('MASTER_CONTROLLER.overrideColorRGB', 1,1,1)