Commit 2b00053810cca668f8d700c947f2284cfb6a0251
1 parent
6bf2e3c2
Exists in
master
Correção do movimento pontual
Showing
3 changed files
with
34 additions
and
53 deletions
Show diff stats
decode.py
@@ -35,9 +35,9 @@ def contato(js_movement, current_frame, frame_jump, is_right_hand): | @@ -35,9 +35,9 @@ def contato(js_movement, current_frame, frame_jump, is_right_hand): | ||
35 | sub_type = next(iter(js_movement.keys())) | 35 | sub_type = next(iter(js_movement.keys())) |
36 | mov_param = js_movement[sub_type] | 36 | mov_param = js_movement[sub_type] |
37 | action = util.right_hand_actions if is_right_hand else util.left_hand_actions | 37 | action = util.right_hand_actions if is_right_hand else util.left_hand_actions |
38 | - bones = util.rightBonesConf if is_right_hand else util.leftBonesConf | 38 | + bones = util.right_bones_conf if is_right_hand else util.left_bones_conf |
39 | current_frame = current_frame + 2*frame_jump | 39 | current_frame = current_frame + 2*frame_jump |
40 | - return moves.contato(action, sub_type, mov_param, bones, current_frame, frame_jump) | 40 | + return moves.contato(action, sub_type, mov_param, bones, is_right_hand, current_frame, frame_jump) |
41 | 41 | ||
42 | def espiral(js_movement, current_frame, frame_jump, is_right_hand): | 42 | def espiral(js_movement, current_frame, frame_jump, is_right_hand): |
43 | pass | 43 | pass |
moves.py
@@ -11,26 +11,27 @@ def read_hand_param(mov_param): | @@ -11,26 +11,27 @@ def read_hand_param(mov_param): | ||
11 | orient_param = mov_param['orientacao'] if 'orientacao' in mov_param else 0 | 11 | orient_param = mov_param['orientacao'] if 'orientacao' in mov_param else 0 |
12 | return [conf_param, artic_param, orient_param] | 12 | return [conf_param, artic_param, orient_param] |
13 | 13 | ||
14 | -def contato(action, contact_type, mov_param, bones, initialFrame = 18, frameJump = 10): | 14 | +def contato(action, contact_type, mov_param, bones, is_right_hand, initialFrame = 18, frameJump = 10): |
15 | if (contact_type == "alisar"): | 15 | if (contact_type == "alisar"): |
16 | - currentFrame = alisar(action, mov_param, bones, initialFrame, frameJump) | 16 | + currentFrame = alisar(action, mov_param, bones, is_right_hand, initialFrame, frameJump) |
17 | elif (contact_type == "cocar"): | 17 | elif (contact_type == "cocar"): |
18 | currentFrame = cocar(action, mov_param, bones, initialFrame, frameJump) | 18 | currentFrame = cocar(action, mov_param, bones, initialFrame, frameJump) |
19 | elif (contact_type == "tocar"): | 19 | elif (contact_type == "tocar"): |
20 | - currentFrame = tocar(action, mov_param, bones, initialFrame, frameJump) | 20 | + currentFrame = tocar(action, mov_param, bones, is_right_hand, initialFrame, frameJump) |
21 | elif (contact_type == "riscar"): | 21 | elif (contact_type == "riscar"): |
22 | - currentFrame = riscar(action, mov_param, bones, initialFrame, frameJump) | 22 | + currentFrame = riscar(action, mov_param, bones, is_right_hand, initialFrame, frameJump) |
23 | return currentFrame | 23 | return currentFrame |
24 | 24 | ||
25 | -def riscar(action, mov_param, bones, initialFrame = 25, frameJump = 10, bnAntBracoDegree = 2, bnMaoDegree = 45): | 25 | +def riscar(action, mov_param, bones, is_right_hand, initialFrame = 25, frameJump = 10, bnAntBracoDegree = 2, bnMaoDegree = 45): |
26 | currentFrame = initialFrame | 26 | currentFrame = initialFrame |
27 | handParam = read_hand_param(mov_param) | 27 | handParam = read_hand_param(mov_param) |
28 | - lado = "R" if util.rightBonesConf == bones else "L" | 28 | + lado = "R" if is_right_hand else "L" |
29 | 29 | ||
30 | - #bnAntBraco = bpy.context.object.pose.bones["BnAntBraco." + lado] | ||
31 | - #util.apply_rotation(bnAntBraco, "Z", currentFrame, bnAntBracoDegree) | ||
32 | - #currentFrame += frameJump | ||
33 | - #util.apply_rotation(bnAntBraco, "Z", currentFrame, (-1)*(bnAntBracoDegree+1)) | 30 | + bnAntBraco = bpy.context.object.pose.bones["BnAntBraco." + lado] |
31 | + currentFrame += frameJump | ||
32 | + util.apply_rotation(bnAntBraco, "Z", currentFrame, bnAntBracoDegree) | ||
33 | + currentFrame += frameJump | ||
34 | + util.apply_rotation(bnAntBraco, "Z", currentFrame, (-1)*(bnAntBracoDegree+1)) | ||
34 | 35 | ||
35 | currentFrame = initialFrame | 36 | currentFrame = initialFrame |
36 | util.setPose(action, handParam, [currentFrame], bones) | 37 | util.setPose(action, handParam, [currentFrame], bones) |
@@ -45,17 +46,17 @@ def riscar(action, mov_param, bones, initialFrame = 25, frameJump = 10, bnAntBra | @@ -45,17 +46,17 @@ def riscar(action, mov_param, bones, initialFrame = 25, frameJump = 10, bnAntBra | ||
45 | util.setPose(action, handParam, [currentFrame], bones) | 46 | util.setPose(action, handParam, [currentFrame], bones) |
46 | return currentFrame | 47 | return currentFrame |
47 | 48 | ||
48 | -def tocar(action, mov_param, bones, initialFrame = 25, degree = 30, frameJump = 10): | 49 | +def tocar(action, mov_param, bones, is_right_hand, initialFrame = 25, degree = 30, frameJump = 10): |
49 | currentFrame = initialFrame | 50 | currentFrame = initialFrame |
50 | handParam = read_hand_param(mov_param) | 51 | handParam = read_hand_param(mov_param) |
51 | util.setPose(action, handParam, [initialFrame], bones) | 52 | util.setPose(action, handParam, [initialFrame], bones) |
52 | - pose = util.armature.pose.bones["ik_FK.R" if util.rightBonesConf == bones else "ik_FK.L"] | 53 | + pose = util.armature.pose.bones["ik_FK.R" if is_right_hand else "ik_FK.L"] |
53 | 54 | ||
54 | - lado = "BnMao.R" if util.rightBonesConf == bones else "BnMao.L" | 55 | + lado = "BnMao.R" if is_right_hand else "BnMao.L" |
55 | bnMao = bpy.context.object.pose.bones[lado] | 56 | bnMao = bpy.context.object.pose.bones[lado] |
56 | currentFrame += frameJump | 57 | currentFrame += frameJump |
57 | util.apply_rotation(bnMao, "X", currentFrame, -degree) | 58 | util.apply_rotation(bnMao, "X", currentFrame, -degree) |
58 | - pose = util.armature.pose.bones["ik_FK.R" if util.rightBonesConf == bones else "ik_FK.L"] | 59 | + pose = util.armature.pose.bones["ik_FK.R" if is_right_hand else "ik_FK.L"] |
59 | currentFrame += frameJump | 60 | currentFrame += frameJump |
60 | util.apply_rotation(bnMao, "X", currentFrame, degree) | 61 | util.apply_rotation(bnMao, "X", currentFrame, degree) |
61 | util.setPose(action[0:2], handParam[0:2], [currentFrame], bones) | 62 | util.setPose(action[0:2], handParam[0:2], [currentFrame], bones) |
@@ -73,13 +74,13 @@ def cocar(action, mov_param, bones, initialFrame = 18, frameJump = 10): | @@ -73,13 +74,13 @@ def cocar(action, mov_param, bones, initialFrame = 18, frameJump = 10): | ||
73 | currentFrame += frameJump | 74 | currentFrame += frameJump |
74 | return currentFrame | 75 | return currentFrame |
75 | 76 | ||
76 | -def alisar(action, mov_param, bones, initialFrame = 18, frameJump = 10, width = 0.25): | 77 | +def alisar(action, mov_param, bones, is_right_hand, initialFrame = 18, frameJump = 10, width = 0.25): |
77 | currentFrame = initialFrame | 78 | currentFrame = initialFrame |
78 | plane = mov_param['plano'] if 'plano' in mov_param else "perpendicular" | 79 | plane = mov_param['plano'] if 'plano' in mov_param else "perpendicular" |
79 | repetition = mov_param['repeticoes'] if 'repeticoes' in mov_param else 2 | 80 | repetition = mov_param['repeticoes'] if 'repeticoes' in mov_param else 2 |
80 | handParam = read_hand_param(mov_param) | 81 | handParam = read_hand_param(mov_param) |
81 | util.setPose(action, handParam, [currentFrame], bones) | 82 | util.setPose(action, handParam, [currentFrame], bones) |
82 | - boneIK = util.armature.pose.bones["ik_FK.R" if util.rightBonesConf == bones else "ik_FK.L"] | 83 | + boneIK = util.armature.pose.bones["ik_FK.R" if is_right_hand else "ik_FK.L"] |
83 | 84 | ||
84 | if (plane == "perpendicular"): | 85 | if (plane == "perpendicular"): |
85 | currentFrame = alisar_xy(boneIK, 1, repetition, currentFrame, frameJump, width) | 86 | currentFrame = alisar_xy(boneIK, 1, repetition, currentFrame, frameJump, width) |
@@ -182,29 +183,13 @@ def circular(obj, current_frame, raio, periodo, x = 0, y = 1, usar_lado_oposto = | @@ -182,29 +183,13 @@ def circular(obj, current_frame, raio, periodo, x = 0, y = 1, usar_lado_oposto = | ||
182 | return periodo - 1 | 183 | return periodo - 1 |
183 | 184 | ||
184 | def pontual(js_movement, current_frame, frame_jump, is_right_hand): | 185 | def pontual(js_movement, current_frame, frame_jump, is_right_hand): |
185 | - #import facial | ||
186 | - print(util.right_bones_conf) | ||
187 | hand_param = read_hand_param(js_movement) | 186 | hand_param = read_hand_param(js_movement) |
188 | - bones = util.right_bones_conf if is_right_hand else util.leftBonesConf | ||
189 | - #poselib = None | ||
190 | - if (is_right_hand): | ||
191 | - #poselib = util.pa_direita_id | ||
192 | - hand_actions = util.right_hand_actions | ||
193 | - else: | ||
194 | - #poselib = util.pa_esquerda_id | ||
195 | - hand_actions = util.left_hand_actions | ||
196 | - #ik_bones = util.dict_bones[poselib] | ||
197 | - #util.select_bones(ik_bones) | ||
198 | - util.keyframe_insert(bones, 'location', current_frame, False) | ||
199 | - #facial.keyframe_insert(current_frame, ik_bones, ['location']) | 187 | + bones = util.right_bones_conf if is_right_hand else util.left_bones_conf |
188 | + hand_actions = util.right_hand_actions if is_right_hand else util.left_hand_actions | ||
189 | + | ||
190 | + util.keyframe_insert(bones, 'location', current_frame) | ||
200 | current_frame += frame_jump | 191 | current_frame += frame_jump |
201 | - #facial.apply_pose(js_movement['articulacao'], poselib) | ||
202 | - pyutil.log("XXXXXXXXXXXXXXXX") | ||
203 | - util.setPose(hand_actions, hand_param, [current_frame], bones, False) | ||
204 | - pyutil.log("YYYYYYYYYYYYYYYY") | ||
205 | - #facial.keyframe_insert(current_frame, ik_bones, ['location']) | 192 | + util.setPose(hand_actions, hand_param, [current_frame], bones) |
206 | current_frame += frame_jump | 193 | current_frame += frame_jump |
207 | - #facial.keyframe_insert(current_frame, ik_bones, ['location']) | ||
208 | - util.keyframe_insert(bones, 'location', current_frame, False) | ||
209 | - #util.deselect_bones(ik_bones) | 194 | + util.keyframe_insert(bones, 'location', current_frame) |
210 | return current_frame | 195 | return current_frame |
util.py
@@ -13,8 +13,8 @@ armature = bpy.context.scene.objects.get('Armature.001') | @@ -13,8 +13,8 @@ armature = bpy.context.scene.objects.get('Armature.001') | ||
13 | dict_bones = { | 13 | dict_bones = { |
14 | "01_conf_direita": ['BnDedo.1.R', 'BnDedo.1.R.006', 'BnDedo.1.R.005', 'BnDedo.1.R.001', 'BnDedo.1.R.008', 'BnDedo.1.R.007', 'BnDedo.1.R.002', 'BnDedo.1.R.010', 'BnDedo.1.R.009', 'BnDedo.1.R.003', 'BnDedo.1.R.012', 'BnDedo.1.R.011', 'BnDedo.1.R.004', 'BnDedo.1.R.014', 'BnDedo.1.R.013'], | 14 | "01_conf_direita": ['BnDedo.1.R', 'BnDedo.1.R.006', 'BnDedo.1.R.005', 'BnDedo.1.R.001', 'BnDedo.1.R.008', 'BnDedo.1.R.007', 'BnDedo.1.R.002', 'BnDedo.1.R.010', 'BnDedo.1.R.009', 'BnDedo.1.R.003', 'BnDedo.1.R.012', 'BnDedo.1.R.011', 'BnDedo.1.R.004', 'BnDedo.1.R.014', 'BnDedo.1.R.013'], |
15 | "02_conf_esquerda": ['BnDedo.1.L', 'BnDedo.1.L.006', 'BnDedo.1.L.005', 'BnDedo.1.L.001', 'BnDedo.1.L.008', 'BnDedo.1.L.007', 'BnDedo.1.L.002', 'BnDedo.1.L.010', 'BnDedo.1.L.009', 'BnDedo.1.L.003', 'BnDedo.1.L.012', 'BnDedo.1.L.011', 'BnDedo.1.L.004', 'BnDedo.1.L.014', 'BnDedo.1.L.013'], | 15 | "02_conf_esquerda": ['BnDedo.1.L', 'BnDedo.1.L.006', 'BnDedo.1.L.005', 'BnDedo.1.L.001', 'BnDedo.1.L.008', 'BnDedo.1.L.007', 'BnDedo.1.L.002', 'BnDedo.1.L.010', 'BnDedo.1.L.009', 'BnDedo.1.L.003', 'BnDedo.1.L.012', 'BnDedo.1.L.011', 'BnDedo.1.L.004', 'BnDedo.1.L.014', 'BnDedo.1.L.013'], |
16 | - "03_pa_direita": ['ik_FK.R', 'BnPolyV.R'], | ||
17 | - "04_pa_esquerda": ['ik_FK.L', 'BnPolyV.L'], | 16 | + "03_pa_direita": ['BnPolyV.R', 'ik_FK.R'], |
17 | + "04_pa_esquerda": ['BnPolyV.L', 'ik_FK.L'], | ||
18 | "05_orient_direita": ['BnMao.R'], | 18 | "05_orient_direita": ['BnMao.R'], |
19 | "06_orient_esquerda": ['BnMao.L'], | 19 | "06_orient_esquerda": ['BnMao.L'], |
20 | "07_facial": ['BnPescoco', 'BnCabeca', 'BnSobrancCentro.L', 'BnSobrancCentro.R', 'BnSobrancLateral.L', 'BnSobrancLateral.R', 'BnPalpebSuper.L', 'BnPalpebInfe.L', 'BnSobrancCentro', 'BnLabioCentroSuper', 'BnBochecha.L', 'BnBochecha.R', 'BnLabioCentroInfer', 'BnBocaCanto.L', 'BnBocaCanto.R', 'BnMandibula', 'BnLingua', 'BnLingua.003', 'BnLingua.001', 'BnLingua.002', 'BnPalpebSuper.R', 'BnPalpebInfe.R', 'BnOlhosMira', 'BnOlhoMira.L', 'BnOlhoMira.R', 'BnOlho.L', 'BnOlho.R'] | 20 | "07_facial": ['BnPescoco', 'BnCabeca', 'BnSobrancCentro.L', 'BnSobrancCentro.R', 'BnSobrancLateral.L', 'BnSobrancLateral.R', 'BnPalpebSuper.L', 'BnPalpebInfe.L', 'BnSobrancCentro', 'BnLabioCentroSuper', 'BnBochecha.L', 'BnBochecha.R', 'BnLabioCentroInfer', 'BnBocaCanto.L', 'BnBocaCanto.R', 'BnMandibula', 'BnLingua', 'BnLingua.003', 'BnLingua.001', 'BnLingua.002', 'BnPalpebSuper.R', 'BnPalpebInfe.R', 'BnOlhosMira', 'BnOlhoMira.L', 'BnOlhoMira.R', 'BnOlho.L', 'BnOlho.R'] |
@@ -22,11 +22,13 @@ dict_bones = { | @@ -22,11 +22,13 @@ dict_bones = { | ||
22 | 22 | ||
23 | right_bones_conf = dict_bones["01_conf_direita"] + dict_bones["03_pa_direita"] + dict_bones["05_orient_direita"] | 23 | right_bones_conf = dict_bones["01_conf_direita"] + dict_bones["03_pa_direita"] + dict_bones["05_orient_direita"] |
24 | 24 | ||
25 | +left_bones_conf = dict_bones["02_conf_esquerda"] + dict_bones["04_pa_esquerda"] + dict_bones["06_orient_esquerda"] | ||
26 | + | ||
25 | # Vetor com indices de cada bone do lado direito | 27 | # Vetor com indices de cada bone do lado direito |
26 | -rightBonesConf = [1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66] | 28 | +#rightBonesConf = [1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66] |
27 | 29 | ||
28 | # Vetor com indices de cada bone do lado esquerdo | 30 | # Vetor com indices de cada bone do lado esquerdo |
29 | -leftBonesConf = [0, 43, 44, 45, 46, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82] | 31 | +#leftBonesConf = [0, 43, 44, 45, 46, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82] |
30 | 32 | ||
31 | # Movimento coçar - Índices de poses | 33 | # Movimento coçar - Índices de poses |
32 | cocar_mao_aberta_index = 55 | 34 | cocar_mao_aberta_index = 55 |
@@ -105,8 +107,6 @@ def setPose(actions, parametesConf, positionFrames, bones, collisionFlag = True) | @@ -105,8 +107,6 @@ def setPose(actions, parametesConf, positionFrames, bones, collisionFlag = True) | ||
105 | 107 | ||
106 | def internal_keyframe_insert(bone, path, positionFrame, collisionFlag = True, rotationFlag = False): | 108 | def internal_keyframe_insert(bone, path, positionFrame, collisionFlag = True, rotationFlag = False): |
107 | # Limit hand depth | 109 | # Limit hand depth |
108 | - if ("ik_FK.R" == bone.name): | ||
109 | - print("VERDADE", bone.location, positionFrame) | ||
110 | if ("ik_FK" in bone.name and bone.location.z < 1): | 110 | if ("ik_FK" in bone.name and bone.location.z < 1): |
111 | bone.location.z = 1 | 111 | bone.location.z = 1 |
112 | bone.bone.select = True | 112 | bone.bone.select = True |
@@ -117,7 +117,7 @@ def internal_keyframe_insert(bone, path, positionFrame, collisionFlag = True, ro | @@ -117,7 +117,7 @@ def internal_keyframe_insert(bone, path, positionFrame, collisionFlag = True, ro | ||
117 | last_keyframe_dict[keyframe_id] = positionFrame | 117 | last_keyframe_dict[keyframe_id] = positionFrame |
118 | if (rotationFlag and path == "rotation_quaternion"): | 118 | if (rotationFlag and path == "rotation_quaternion"): |
119 | checkRotation(bone, positionFrame, last_keyframe) | 119 | checkRotation(bone, positionFrame, last_keyframe) |
120 | - if (collisionFlag): | 120 | + if (collisionFlag and "ik_FK" in bone.name): |
121 | checkCollision(bone, path, positionFrame, last_keyframe) | 121 | checkCollision(bone, path, positionFrame, last_keyframe) |
122 | 122 | ||
123 | def keyframe_insert(bones, path, positionFrame, collisionFlag = True, rotationFlag = False): | 123 | def keyframe_insert(bones, path, positionFrame, collisionFlag = True, rotationFlag = False): |
@@ -182,7 +182,6 @@ def check_hand_collision(initFrame, endFrame): | @@ -182,7 +182,6 @@ def check_hand_collision(initFrame, endFrame): | ||
182 | 182 | ||
183 | def check_collision(objName, otherObjName, initFrame, endFrame): | 183 | def check_collision(objName, otherObjName, initFrame, endFrame): |
184 | scene = bpy.context.scene | 184 | scene = bpy.context.scene |
185 | - frame_current = scene.frame_current | ||
186 | startFrame = initFrame + int(math.fabs((endFrame - initFrame)/2)) | 185 | startFrame = initFrame + int(math.fabs((endFrame - initFrame)/2)) |
187 | collisionFrame = -1 | 186 | collisionFrame = -1 |
188 | 187 | ||
@@ -191,11 +190,9 @@ def check_collision(objName, otherObjName, initFrame, endFrame): | @@ -191,11 +190,9 @@ def check_collision(objName, otherObjName, initFrame, endFrame): | ||
191 | obj = scene.objects.get(objName) | 190 | obj = scene.objects.get(objName) |
192 | otherObj = scene.objects.get(otherObjName) | 191 | otherObj = scene.objects.get(otherObjName) |
193 | if (bmesh_check_intersect_objects(obj, otherObj)): | 192 | if (bmesh_check_intersect_objects(obj, otherObj)): |
194 | - pyutil.log("bla") | ||
195 | - pyutil.log(i) | ||
196 | collisionFrame = i | 193 | collisionFrame = i |
197 | break | 194 | break |
198 | - scene.frame_set(frame_current) | 195 | + scene.frame_set(endFrame) |
199 | return collisionFrame | 196 | return collisionFrame |
200 | 197 | ||
201 | def check_body_collision(isRightHand, initFrame, endFrame): | 198 | def check_body_collision(isRightHand, initFrame, endFrame): |
@@ -240,13 +237,12 @@ def validate_rotation(bone, endFrame, startFrame = 0): | @@ -240,13 +237,12 @@ def validate_rotation(bone, endFrame, startFrame = 0): | ||
240 | return True | 237 | return True |
241 | rotFrames = [[]] | 238 | rotFrames = [[]] |
242 | scene = bpy.context.scene | 239 | scene = bpy.context.scene |
243 | - frame_current = scene.frame_current | ||
244 | for i in range(startFrame+1, endFrame+1, 1): | 240 | for i in range(startFrame+1, endFrame+1, 1): |
245 | scene.frame_set(i) | 241 | scene.frame_set(i) |
246 | rotFrames[-1] = bone.rotation_quaternion.to_euler() | 242 | rotFrames[-1] = bone.rotation_quaternion.to_euler() |
247 | rotFrames.append([]) | 243 | rotFrames.append([]) |
248 | rotFrames.remove([]) | 244 | rotFrames.remove([]) |
249 | - scene.frame_set(frame_current) | 245 | + scene.frame_set(endFrame) |
250 | for k in range(1, len(rotFrames), 1): | 246 | for k in range(1, len(rotFrames), 1): |
251 | for i in range(0, 3, 1): | 247 | for i in range(0, 3, 1): |
252 | if (math.fabs(rotFrames[k][i] - rotFrames[k-1][i])) > math.pi/3: | 248 | if (math.fabs(rotFrames[k][i] - rotFrames[k-1][i])) > math.pi/3: |