d7f6d50c
gtaaas
versao atual
|
1
|
# -*- coding: UTF-8 -*-
|
4973c0eb
André Araújo
Renomeia arquivo ...
|
2
|
|
1880bcdf
Adabriand Furtado
Adicionado o movi...
|
3
|
import bpy
|
7357e74e
gtaaas
Corrige função do...
|
4
|
import math
|
1880bcdf
Adabriand Furtado
Adicionado o movi...
|
5
|
import util
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
6
|
import pyutil
|
d7f6d50c
gtaaas
versao atual
|
7
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
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
|
def read_hand_param(mov_param):
conf_param = mov_param['configuracao'] if 'configuracao' in mov_param else 0
artic_param = mov_param['articulacao'] if 'articulacao' in mov_param else 0
orient_param = mov_param['orientacao'] if 'orientacao' in mov_param else 0
return [conf_param, artic_param, orient_param]
def contato(action, contact_type, mov_param, bones, is_right_hand, initialFrame = 18, frameJump = 10):
if (contact_type == "alisar"):
currentFrame = alisar(action, mov_param, bones, is_right_hand, initialFrame, frameJump)
elif (contact_type == "cocar"):
currentFrame = cocar(action, mov_param, bones, initialFrame, frameJump)
elif (contact_type == "tocar"):
currentFrame = tocar(action, mov_param, bones, is_right_hand, initialFrame, frameJump)
elif (contact_type == "riscar"):
currentFrame = riscar(action, mov_param, bones, is_right_hand, initialFrame, frameJump)
return currentFrame
def riscar(action, mov_param, bones, is_right_hand, initialFrame = 25, frameJump = 10, bnAntBracoDegree = 2, bnMaoDegree = 45):
currentFrame = initialFrame
handParam = read_hand_param(mov_param)
lado = "R" if is_right_hand else "L"
bnAntBraco = bpy.context.object.pose.bones["BnAntBraco." + lado]
currentFrame += frameJump
util.apply_rotation(bnAntBraco, "Z", currentFrame, bnAntBracoDegree)
currentFrame += frameJump
util.apply_rotation(bnAntBraco, "Z", currentFrame, (-1)*(bnAntBracoDegree+1))
currentFrame = initialFrame
util.setPose(action, handParam, [currentFrame], bones)
bnMao = bpy.context.object.pose.bones["BnMao." + lado]
currentFrame += frameJump
util.apply_rotation(bnMao, "Y", currentFrame, bnMaoDegree)
currentFrame += int(frameJump/2)
util.apply_rotation(bnMao, "Y", currentFrame, (-1)*bnMaoDegree)
currentFrame += int(frameJump/2)
util.apply_rotation(bnMao, "Y", currentFrame, (-2)*bnMaoDegree)
currentFrame += frameJump
util.setPose(action, handParam, [currentFrame], bones)
return currentFrame
def tocar(action, mov_param, bones, is_right_hand, initialFrame = 25, degree = 30, frameJump = 10):
currentFrame = initialFrame
handParam = read_hand_param(mov_param)
util.setPose(action, handParam, [initialFrame], bones)
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
53
54
55
56
57
|
pose = util.armature.pose.bones["ik_FK.R" if is_right_hand else "ik_FK.L"]
lado = "BnMao.R" if is_right_hand else "BnMao.L"
bnMao = bpy.context.object.pose.bones[lado]
currentFrame += frameJump
|
e48ef0c6
André Araújo
Adiciona moviment...
|
58
|
util.apply_rotation(bnMao, "X", currentFrame, -degree)
|
2b000538
Adabriand Furtado
Correção do movim...
|
59
|
pose = util.armature.pose.bones["ik_FK.R" if is_right_hand else "ik_FK.L"]
|
80c3096e
André Araújo
Remove parâmetros...
|
60
|
currentFrame += frameJump
|
b698cccd
Adabriand Furtado
Adiciona moviment...
|
61
|
util.apply_rotation(bnMao, "X", currentFrame, degree)
|
2b000538
Adabriand Furtado
Correção do movim...
|
62
|
util.setPose(action[0:2], handParam[0:2], [currentFrame], bones)
|
1880bcdf
Adabriand Furtado
Adicionado o movi...
|
63
|
return currentFrame
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
64
|
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
65
|
def cocar(action, mov_param, bones, initialFrame = 18, frameJump = 10):
|
2b000538
Adabriand Furtado
Correção do movim...
|
66
|
currentFrame = initialFrame
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
67
|
pa_index = mov_param['articulacao'] if 'articulacao' in mov_param else 0
|
2b000538
Adabriand Furtado
Correção do movim...
|
68
|
repetition = mov_param['repeticoes'] if 'repeticoes' in mov_param else 2
|
b698cccd
Adabriand Furtado
Adiciona moviment...
|
69
70
|
for i in range(0, repetition):
|
2b000538
Adabriand Furtado
Correção do movim...
|
71
|
util.setPose(action, [util.cocar_mao_aberta_index, pa_index, util.cocar_orientation_index], [currentFrame], bones, False)
|
b698cccd
Adabriand Furtado
Adiciona moviment...
|
72
|
currentFrame += frameJump
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
73
|
util.setPose(action, [util.cocar_mao_fechada_index, pa_index, util.cocar_orientation_index], [currentFrame], bones, False)
|
2b000538
Adabriand Furtado
Correção do movim...
|
74
|
currentFrame += frameJump
|
2b000538
Adabriand Furtado
Correção do movim...
|
75
76
77
78
79
|
return currentFrame
def alisar(action, mov_param, bones, is_right_hand, initialFrame = 18, frameJump = 10, width = 0.25):
currentFrame = initialFrame
plane = mov_param['plano'] if 'plano' in mov_param else "perpendicular"
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
80
81
|
repetition = mov_param['repeticoes'] if 'repeticoes' in mov_param else 2
handParam = read_hand_param(mov_param)
|
a0026fb0
Adabriand Furtado
Refactoring para ...
|
82
|
util.setPose(action, handParam, [currentFrame], bones)
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
83
|
boneIK = util.armature.pose.bones["ik_FK.R" if is_right_hand else "ik_FK.L"]
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
84
|
|
6bf2e3c2
André Araújo
Adiciona moviment...
|
85
|
if (plane == "perpendicular"):
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
86
|
currentFrame = alisar_xy(boneIK, 1, repetition, currentFrame, frameJump, width)
|
6bf2e3c2
André Araújo
Adiciona moviment...
|
87
|
elif (plane == "paralelo"):
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
88
|
currentFrame = alisar_xy(boneIK, 0, repetition, currentFrame, frameJump, width)
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
89
|
elif (plane == "diagonal-direita"):
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
90
|
currentFrame = alisar_diagonal(boneIK, True, repetition, currentFrame, frameJump, width)
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
91
92
|
elif (plane == "diagonal-esquerda"):
currentFrame = alisar_diagonal(boneIK, False, repetition, currentFrame, frameJump, width)
|
2b000538
Adabriand Furtado
Correção do movim...
|
93
|
util.setPose(action, handParam, [currentFrame], bones)
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
94
|
return currentFrame
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
95
|
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
96
|
def alisar_xy(boneIK, orientation_index, repetition, initialFrame = 18, frameJump = 10, width = 0.25):
|
2b000538
Adabriand Furtado
Correção do movim...
|
97
|
currentFrame = initialFrame
|
2b000538
Adabriand Furtado
Correção do movim...
|
98
|
location = util.get_bone_data_from_frame(boneIK, currentFrame, 'location')
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
99
|
center = location.x, location.y, location.z
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
100
|
for i in range(0, repetition):
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
101
|
boneIK.location = center
|
2b000538
Adabriand Furtado
Correção do movim...
|
102
|
boneIK.location[orientation_index] = center[orientation_index] - width
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
103
|
util.keyframe_insert(boneIK, 'location', currentFrame)
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
104
105
|
currentFrame += frameJump
boneIK.location = center
|
91c658b7
Adabriand Furtado
Adicionado o movi...
|
106
|
boneIK.location[orientation_index] = center[orientation_index] + width
|
e48ef0c6
André Araújo
Adiciona moviment...
|
107
|
util.keyframe_insert(boneIK, 'location', currentFrame)
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
108
|
currentFrame += frameJump
|
e48ef0c6
André Araújo
Adiciona moviment...
|
109
|
return currentFrame
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
110
111
|
def alisar_diagonal(boneIK, to_right, repetition, initialFrame = 18, frameJump = 10, width = 0.25):
|
1880bcdf
Adabriand Furtado
Adicionado o movi...
|
112
|
currentFrame = initialFrame
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
113
|
location = util.get_bone_data_from_frame(boneIK, currentFrame, 'location')
|
1880bcdf
Adabriand Furtado
Adicionado o movi...
|
114
|
center = location.x, location.y, location.z
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
115
|
for i in range(0, repetition):
|
1880bcdf
Adabriand Furtado
Adicionado o movi...
|
116
117
118
|
boneIK.location = center
boneIK.location[0] = center[0] - width if to_right else center[0] - width
boneIK.location[1] = center[1] - width if to_right else center[1] + width
|
2b000538
Adabriand Furtado
Correção do movim...
|
119
|
util.keyframe_insert(boneIK, 'location', currentFrame)
|
1880bcdf
Adabriand Furtado
Adicionado o movi...
|
120
|
currentFrame += frameJump
|
47ea08f7
Adabriand Furtado
Adicionado limite...
|
121
|
boneIK.location = center
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
122
123
124
|
boneIK.location[0] = center[0] + width if to_right else center[0] + width
boneIK.location[1] = center[1] + width if to_right else center[1] - width
util.keyframe_insert(boneIK, 'location', currentFrame)
|
2b000538
Adabriand Furtado
Correção do movim...
|
125
|
currentFrame += frameJump
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
126
127
128
129
130
131
132
133
|
return currentFrame
# Obs.: A velocidade do movimento vai ser a relacao entre tamanho do raio e o periodo
# quanto maior o periodo mais keyframes
# quanto menor o raio mais rapido
# exemplos:
# raio: "pequeno" raio = 0.5, velocidade: "rapido" periodo = 25
# raio: "pequeno" raio = 0.5, velocidade: "normal" periodo = 35
|
1880bcdf
Adabriand Furtado
Adicionado o movi...
|
134
|
# raio: "pequeno" raio = 0.5, velocidade: "lento" periodo = 45
|
eaa49245
Adabriand Furtado
Adicionada a orie...
|
135
136
|
# raio: "normal" raio = 1.0, velocidade: "rapido" periodo = 35
# raio: "normal" raio = 1.0, velocidade: "normal" periodo = 45
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
137
|
# raio: "normal" raio = 1.0, velocidade: "lento" periodo = 55
|
eaa49245
Adabriand Furtado
Adicionada a orie...
|
138
|
# raio: "grande" raio = 1.5, velocidade: "rapido" periodo = 45
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
139
140
|
# raio: "grande" raio = 1.5, velocidade: "normal" periodo = 55
# raio: "grande" raio = 1.5, velocidade: "lento" periodo = 65
|
b698cccd
Adabriand Furtado
Adiciona moviment...
|
141
|
# @param obj: (objeto) bone, mesh, e.g.
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
142
143
144
|
# @param current_frame: (int) posicao onde o primeiro keyframe vai ser inserido
# @param raio: (int) raio da circunferencia
# @param periodo: (int) quantidade de keyframes necessarios para completar uma volta completa
|
b698cccd
Adabriand Furtado
Adiciona moviment...
|
145
|
# @param x: (int) in [0,1,2] define qual eixo vai variar no seno (0 = eixo X, 1 = eixo Y, 2 = eixo Z)
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
146
147
148
|
# @param y: (int) in [0,1,2] define qual eixo vai variar no cosseno (0 = eixo X, 1 = eixo Y, 2 = eixo Z)
# @param usar_lado_oposto: (bool) inverte o lado da primeira posicao (pode ser util em alguns casos para espelhar)
# @param usar_sentido_oposto (bool) inverte o sentido do movimento (horario para anti-horario)
|
b698cccd
Adabriand Furtado
Adiciona moviment...
|
149
|
def circular(obj, current_frame, raio, periodo, x = 0, y = 1, usar_lado_oposto = False, usar_sentido_oposto = False, meia_volta = False):
|
b698cccd
Adabriand Furtado
Adiciona moviment...
|
150
|
# limita inferiormente
|
eaa49245
Adabriand Furtado
Adicionada a orie...
|
151
|
if (periodo < 16):
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
152
|
periodo = 16
|
eaa49245
Adabriand Furtado
Adicionada a orie...
|
153
|
# limita superiormente
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
154
155
|
elif (periodo > 360):
periodo = 360
|
eaa49245
Adabriand Furtado
Adicionada a orie...
|
156
|
# muda lado inicial
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
157
158
159
160
|
if (usar_lado_oposto):
k = round(periodo / 2)
else:
k = 0
|
eaa49245
Adabriand Furtado
Adicionada a orie...
|
161
|
# evita estouro dos indices
|
7736a4b1
Adabriand Furtado
Integração do mov...
|
162
163
164
165
|
x %= 3
y %= 3
# inverte direcao do movimento
if (usar_sentido_oposto):
|
eaa49245
Adabriand Furtado
Adicionada a orie...
|
166
|
tmp = x
|
eaa49245
Adabriand Furtado
Adicionada a orie...
|
167
168
|
x = y
y = tmp
|
e48ef0c6
André Araújo
Adiciona moviment...
|
169
170
171
|
# copia posicao inicial para transladar
loc = [obj.location[0], obj.location[1], obj.location[2]]
# semi-circular
|
df32bc03
André Araújo
Adiciona parâmetr...
|
172
173
|
limite = periodo + k
if (meia_volta):
|
e48ef0c6
André Araújo
Adiciona moviment...
|
174
175
176
177
178
179
180
181
182
|
limite = round(limite / 2)
for i in range(k, limite + 1):
# reduz a quantidade de keyframes
if (current_frame % 2 == 0):
obj.location[x] = loc[x] + (raio * math.cos(i / periodo * (2 * math.pi)))
obj.location[y] = loc[y] + (raio * math.sin(i / periodo * (2 * math.pi)))
util.keyframe_insert(obj, 'location', current_frame)
current_frame += 1
util.keyframe_insert(obj, 'location', current_frame)
|
a576064f
André Araújo
Adiciona flag sen...
|
183
|
return periodo - 1
|
e313bcb0
André Araújo
Atualiza moviment...
|
184
185
186
187
188
189
190
191
192
193
|
def pontual(js_movement, current_frame, frame_jump, is_right_hand):
hand_param = read_hand_param(js_movement)
bones = util.right_bones_conf if is_right_hand else util.left_bones_conf
hand_actions = util.right_hand_actions if is_right_hand else util.left_hand_actions
util.keyframe_insert(bones, 'location', current_frame)
current_frame += frame_jump
util.setPose(hand_actions, hand_param, [current_frame], bones)
current_frame += frame_jump
util.keyframe_insert(bones, 'location', current_frame)
|
df32bc03
André Araújo
Adiciona parâmetr...
|
194
195
196
197
198
|
return current_frame
def retilineo(js_movement, current_frame, frame_jump, is_right_hand):
hand_param = [js_movement['configuracao'], js_movement['articulacao_inicial'], js_movement['orientacao']]
bones = util.right_bones_conf if is_right_hand else util.left_bones_conf
|
a576064f
André Araújo
Adiciona flag sen...
|
199
|
hand_actions = util.right_hand_actions if is_right_hand else util.left_hand_actions
|
df32bc03
André Araújo
Adiciona parâmetr...
|
200
|
util.keyframe_insert(bones, 'location', current_frame)
|
a576064f
André Araújo
Adiciona flag sen...
|
201
202
203
204
205
206
207
|
current_frame += frame_jump
util.setPose(hand_actions, hand_param, [current_frame], bones)
current_frame += 2* frame_jump
hand_param = [js_movement['configuracao'], js_movement['articulacao_final'], js_movement['orientacao']]
util.setPose(hand_actions, hand_param, [current_frame], bones)
util.keyframe_insert(bones, 'location', current_frame)
return current_frame
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
a576064f
André Araújo
Adiciona flag sen...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
a576064f
André Araújo
Adiciona flag sen...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
80c3096e
André Araújo
Remove parâmetros...
|
|
|
a576064f
André Araújo
Adiciona flag sen...
|
|
|
80c3096e
André Araújo
Remove parâmetros...
|
|
|
a576064f
André Araújo
Adiciona flag sen...
|
|
|
80c3096e
André Araújo
Remove parâmetros...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
e48ef0c6
André Araújo
Adiciona moviment...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
6bf2e3c2
André Araújo
Adiciona moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
6bf2e3c2
André Araújo
Adiciona moviment...
|
|
|
6bf2e3c2
André Araújo
Adiciona moviment...
|
|
|
2b000538
Adabriand Furtado
Correção do movim...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
6bf2e3c2
André Araújo
Adiciona moviment...
|
|
|
2b000538
Adabriand Furtado
Correção do movim...
|
|
|
6bf2e3c2
André Araújo
Adiciona moviment...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
6bf2e3c2
André Araújo
Adiciona moviment...
|
|
|
42f9b71d
André Araújo
Adiciona moviment...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
42f9b71d
André Araújo
Adiciona moviment...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
42f9b71d
André Araújo
Adiciona moviment...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
42f9b71d
André Araújo
Adiciona moviment...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
a576064f
André Araújo
Adiciona flag sen...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|
e313bcb0
André Araújo
Atualiza moviment...
|
|
|
df32bc03
André Araújo
Adiciona parâmetr...
|
|
|