-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconstants.py
330 lines (306 loc) · 15.8 KB
/
constants.py
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
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
import os
import re
from collections import OrderedDict
# -------------------------------------------------------------
# 正则校验
# -------------------------------------------------------------
ABC_NAME_PATTERN = re.compile(r'xform_(\d+)_material_(\d+)')
PMX_NAME_PATTERN = re.compile(r'(?P<prefix>[0-9A-Z]{3}_)(?P<name>.*?)(?P<suffix>\.\d{3})?$')
RIGID_BODY_PREFIX_REGEXP = re.compile(r'(?P<prefix>[0-9A-Z]{3}_)(?P<name>.*)')
CONVERT_NAME_TO_L_REGEXP = re.compile('^(.*)左(.*)$')
CONVERT_NAME_TO_R_REGEXP = re.compile('^(.*)右(.*)$')
# 导入pmx生成的txt文件pattern
TXT_INFO_PATTERN = re.compile(r'(.*)(_e(\.\d{3})?)$')
# -------------------------------------------------------------
# 文件导入导出
# -------------------------------------------------------------
# 文件名非法字符
INVALID_CHARS = '<>:"/\\|?*'
# 最大重试次数
MAX_RETRIES = 5
# 临时集合名称
TMP_COLLECTION_NAME = "KAFEI临时集合"
# 默认精度
PRECISION = 0.0001
# 文件类型与扩展名的map,value相同可能会造成一些问题但几率太低这里不考虑
IMG_TYPE_EXT_MAP = {
"BMP": ".bmp",
"IRIS": ".rgb",
"PNG": ".png",
"JPEG": ".jpg",
"JPEG2000": ".jp2",
"TARGA": ".tga",
"TARGA_RAW": ".tga",
"CINEON": ".cin",
"DPX": ".dpx",
"OPEN_EXR_MULTILAYER": ".exr",
"OPEN_EXR": ".exr",
"HDR": ".hdr",
"TIFF": ".tif",
"WEBP": ".webp"
}
# -------------------------------------------------------------
# 追加次标准骨骼 骨骼面板顺序预设
# -------------------------------------------------------------
# 次标准骨骼名称,共41个
SSB_NAMES = [
'右腕捩', '右腕捩1', '右腕捩2', '右腕捩3', '左腕捩', '左腕捩1', '左腕捩2', '左腕捩3',
'右手捩', '右手捩1', '右手捩2', '右手捩3', '左手捩', '左手捩1', '左手捩2', '左手捩3',
'上半身2',
'腰', '腰キャンセル右', '腰キャンセル左',
'右足IK親', '左足IK親',
'右ダミー', '左ダミー',
'右肩P', '右肩C', '左肩P', '左肩C',
'右親指0', '左親指0',
'操作中心', '全ての親', 'グルーブ',
'右足D', '右ひざD', '右足首D', '右足先EX', '左足D', '左ひざD', '左足首D', '左足先EX'
]
# 次标准骨骼名称(不含额外创建内容)
SSB_BASE_NAMES = [
'右腕捩', '左腕捩', '右手捩', '左手捩',
'上半身2', '腰',
'右足IK親', '左足IK親',
'右ダミー', '左ダミー',
'右肩P', '左肩P',
'右親指0', '左親指0',
'操作中心', '全ての親', 'グルーブ',
'右足先EX', '左足先EX'
]
# ssb实际创建顺序(首部)(非用户界面展示顺序)
SSB_ORDER_TOP_LIST = ["操作中心", "全ての親", "センター", "グルーブ", "腰"]
# ssb实际创建顺序(中部)(非用户界面展示顺序)
SSB_ORDER_MAP = OrderedDict({
"右腕": ("右腕", "右腕捩", "右腕捩1", "右腕捩2", "右腕捩3"),
"左腕": ("左腕", "左腕捩", "左腕捩1", "左腕捩2", "左腕捩3"),
"右ひじ": ("右ひじ", "右手捩", "右手捩1", "右手捩2", "右手捩3"),
"左ひじ": ("左ひじ", "左手捩", "左手捩1", "左手捩2", "左手捩3"),
"上半身": ("上半身", "上半身2"),
"右足": ("腰キャンセル右", "右足"),
"左足": ("腰キャンセル左", "左足"),
"右足IK": ("右足IK親", "右足IK"),
"左足IK": ("左足IK親", "左足IK"),
"右手首": ("右手首", "右ダミー"),
"左手首": ("左手首", "左ダミー"),
"右肩": ("右肩P", "右肩", "右肩C"),
"左肩": ("左肩P", "左肩", "左肩C"),
"右親指1": ("右親指0", "右親指1"),
"左親指1": ("左親指0", "左親指1")
})
# ssb实际创建顺序(尾部)(非用户界面展示顺序)
SSB_ORDER_BOTTOM_LIST = ["右足D", "右ひざD", "右足首D", "右足先EX", "左足D", "左ひざD", "左足首D", "左足先EX"]
# 需隐藏的ssb名称
SSB_HIDE_LIST = ["右腕捩1", "右腕捩2", "右腕捩3", "左腕捩1", "左腕捩2", "左腕捩3",
"右手捩1", "右手捩2", "右手捩3", "左手捩1", "左手捩2", "左手捩3",
"腰キャンセル右", "腰キャンセル左",
"右肩C", "左肩C",
"右足D", "右ひざD", "右足首D", "左足D", "左ひざD", "左足首D"]
# 临时骨骼名称
KAFEI_TMP_BONE_NAME = "KAFEI_TMP_BONE"
# -------------------------------------------------------------
# 整理面板
# -------------------------------------------------------------
# 骨骼面板元素顺序
BONE_PANEL_ORDERS = [
'操作中心', '全ての親', 'センター', 'グルーブ',
'腰', '下半身', '左足IK親', '左足IK', '左つま先IK', '右足IK親', '右足IK', '右つま先IK',
'上半身', '上半身2', '首', '頭', '舌1', '舌2', '舌3', '齿上', '齿下',
'両目', '左目', '左目先', '左目戻', '右目', '右目先', '右目戻',
'おっぱい調整', '左胸上', '左胸上2', '左胸先', '左胸下', '左胸下先', '右胸上', '右胸上2', '右胸先', '右胸下',
'右胸下先',
'左肩P', '左肩', '左肩C', '左腕', '左腕捩', '左腕捩1', '左腕捩2', '左腕捩3', '左ひじ',
'左ひじ補助', '+左ひじ補助', '左手捩', '左手捩1', '左手捩2', '左手捩3', '左手首', '左ダミー', '左手先',
'左親指0', '左親指1', '左親指2', '左親指先',
'左人指1', '左人指2', '左人指3', '左人指先',
'左中指1', '左中指2', '左中指3', '左中指先',
'左薬指1', '左薬指2', '左薬指3', '左薬指先',
'左小指1', '左小指2', '左小指3', '左小指先',
'右肩P', '右肩', '右肩C', '右腕', '右腕捩', '右腕捩1', '右腕捩2', '右腕捩3', '右ひじ',
'右ひじ補助', '+右ひじ補助', '右手捩', '右手捩1', '右手捩2', '右手捩3', '右手首', '右ダミー', '右手先',
'右親指0', '右親指1', '右親指2', '右親指先',
'右人指1', '右人指2', '右人指3', '右人指先',
'右中指1', '右中指2', '右中指3', '右中指先',
'右薬指1', '右薬指2', '右薬指3', '右薬指先',
'右小指1', '右小指2', '右小指3', '右小指先',
'腰キャンセル左', '左足', '左ひざ', '左足首', '左つま先',
'腰キャンセル右', '右足', '右ひざ', '右足首', '右つま先',
'左足D', '左ひざD', '左足首D', '左足先EX',
'右足D', '右ひざD', '右足首D', '右足先EX',
'足_親指1.L', '足_親指2.L', '足_人差指1.L', '足_人差指2.L', '足_中指1.L', '足_中指2.L',
'足_薬指1.L', '足_薬指2.L', '足_小指1.L', '足_小指2.L',
'足_親指1.R', '足_親指2.R', '足_人差指1.R', '足_人差指2.R', '足_中指1.R', '足_中指2.R',
'足_薬指1.R', '足_薬指2.R', '足_小指1.R', '足_小指2.R'
]
class Item:
def __init__(self, jp_name, eng_name, display_panel):
self.jp_name = jp_name
self.eng_name = eng_name
self.display_panel = display_panel
def get_common_items():
# 常用的骨骼(不限类型)按照预设分组 参考 https://note.com/mamepika/n/n9b8a6d55f0bb
# 剩余的受物理影响的骨骼自动放到"物理"显示枠中
# 剩余的其它的骨骼自动移动到"その他"中
# 这里的英文名称遵循驼峰式命名规范。为了确保能够在MMD的左侧栏中显示得下,尽量使用简写。
# todo 暂时采用硬编码的方式,之后考虑如何让用户方便的修改预设值
return [
Item("操作中心", "ViewCnt", 'Root'),
Item("全ての親", "Root", 'センター'),
Item("センター", "Center", "センター"),
Item("グルーブ", "Groove", 'センター'),
Item("左足IK親", "LegIKP.L", 'IK'),
Item("左足IK", "LegIK.L", "IK"),
Item("左つま先IK", "ToeIK.L", "IK"),
Item("左足先IK", "Toe2IK.L", "IK"),
Item("右足IK親", "LegIKP.R", 'IK'),
Item("右足IK", "LegIK.R", 'IK'),
Item("右つま先IK", "ToeIK.R", "IK"),
Item("右足先IK", "Toe2IK.R", "IK"),
Item("上半身", "UpperBody", "体(上)"),
Item("上半身3", "UpperBody3", "体(上)"),
Item("上半身2", "UpperBody2", "体(上)"),
Item("首", "Neck", "体(上)"),
Item("頭", "Head", "体(上)"),
Item("左目", "Eye.L", "体(上)"),
Item("右目", "Eye.R", "体(上)"),
Item("両目", "Eyes", "体(上)"),
Item("左肩P", "ShoulderP.L", "腕"),
Item("左肩", "Shoulder.L", "腕"),
Item("左腕", "Arm.L", "腕"),
Item("左腕捩", "ArmTwist.L", "腕"),
Item("左ひじ", "Elbow.L", "腕"),
Item("左手捩", "WristTwist.L", "腕"),
Item("左手首", "Wrist.L", "腕"),
Item("左ダミー", "Dummy.L", "腕"),
Item("右肩P", "ShoulderP.R", "腕"),
Item("右肩", "Shoulder.R", "腕"),
Item("右腕", "Arm.R", "腕"),
Item("右腕捩", "ArmTwist.R", "腕"),
Item("右ひじ", "Elbow.R", "腕"),
Item("右手捩", "WristTwist.R", "腕"),
Item("右手首", "Wrist.R", "腕"),
Item("右ダミー", "Dummy.R", "腕"),
Item("調整ボーン親", "", ".調整ボーン"),
Item("センター調整", "", ".調整ボーン"),
Item("グルーブ調整", "", ".調整ボーン"),
Item("下半身調整", "", ".調整ボーン"),
Item("上半身調整", "", ".調整ボーン"),
Item("上半身2調整", "", ".調整ボーン"),
Item("首調整", "", ".調整ボーン"),
Item("頭調整", "", ".調整ボーン"),
Item("両目調整", "", ".調整ボーン"),
Item("左肩調整", "", ".調整ボーン"),
Item("左腕調整", "", ".調整ボーン"),
Item("左腕捩調整", "", ".調整ボーン"),
Item("左ひじ調整", "", ".調整ボーン"),
Item("左手捩調整", "", ".調整ボーン"),
Item("左手首調整", "", ".調整ボーン"),
Item("右肩調整", "", ".調整ボーン"),
Item("右腕調整", "", ".調整ボーン"),
Item("右腕捩調整", "", ".調整ボーン"),
Item("右ひじ調整", "", ".調整ボーン"),
Item("右手捩調整", "", ".調整ボーン"),
Item("右手首調整", "", ".調整ボーン"),
Item("左足IK調整", "", ".調整ボーン"),
Item("左つま先IK調整", "", ".調整ボーン"),
Item("右足IK調整", "", ".調整ボーン"),
Item("右つま先IK調整", "", ".調整ボーン"),
Item("左親指0", "Thumb0.L", "指"),
Item("左親指1", "Thumb1.L", "指"),
Item("左親指2", "Thumb2.L", "指"),
Item("左人指1", "Index1.L", "指"),
Item("左人指2", "Index2.L", "指"),
Item("左人指3", "Index3.L", "指"),
Item("左中指1", "Middle1.L", "指"),
Item("左中指2", "Middle2.L", "指"),
Item("左中指3", "Middle3.L", "指"),
Item("左薬指1", "Ring1.L", "指"),
Item("左薬指2", "Ring2.L", "指"),
Item("左薬指3", "Ring3.L", "指"),
Item("左小指1", "Little1.L", "指"),
Item("左小指2", "Little2.L", "指"),
Item("左小指3", "Little3.L", "指"),
Item("右親指0", "Thumb0.R", "指"),
Item("右親指1", "Thumb1.R", "指"),
Item("右親指2", "Thumb2.R", "指"),
Item("右人指1", "Index1.R", "指"),
Item("右人指2", "Index2.R", "指"),
Item("右人指3", "Index3.R", "指"),
Item("右中指1", "Middle1.R", "指"),
Item("右中指2", "Middle2.R", "指"),
Item("右中指3", "Middle3.R", "指"),
Item("右薬指1", "Ring1.R", "指"),
Item("右薬指2", "Ring2.R", "指"),
Item("右薬指3", "Ring3.R", "指"),
Item("右小指1", "Little1.R", "指"),
Item("右小指2", "Little2.R", "指"),
Item("右小指3", "Little3.R", "指"),
Item("腰", "Waist", '体(下)'),
Item("下半身", "LowerBody", "体(下)"),
Item("左足", "Leg.L", "足"),
Item("左ひざ", "Knee.L", "足"),
Item("左足首", "Ankle.L", "足"),
Item("左足先", "Toe2.L", "足"),
Item("左つま先", "", "足"),
Item("右足", "Leg.R", "足"),
Item("右ひざ", "Knee.R", "足"),
Item("右足首", "Ankle.R", "足"),
Item("右足先", "Toe2.R", "足"),
Item("右つま先", "", "足"),
Item("左足D", "LegD.L", "足"),
Item("左ひざD", "KneeD.L", "足"),
Item("左足首D", "AnkleD.L", "足"),
Item("左足先EX", "ToeEX.L", "足"),
Item("右足D", "LegD.R", "足"),
Item("右ひざD", "KneeD.R", "足"),
Item("右足首D", "AnkleD.R", "足"),
Item("右足先EX", "ToeEX.R", "足"),
Item("足.親指1.L", "BigToe1.L", "足指"),
Item("足.親指2.L", "BigToe2.L", "足指"),
Item("足.人差指1.L", "SecondToe1.L", "足指"),
Item("足.人差指2.L", "SecondToe2.L", "足指"),
Item("足.中指1.L", "ThirdToe1.L", "足指"),
Item("足.中指2.L", "ThirdToe2.L", "足指"),
Item("足.薬指1.L", "FourthToe1.L", "足指"),
Item("足.薬指2.L", "FourthToe2.L", "足指"),
Item("足.小指1.L", "LittleToe1.L", "足指"),
Item("足.小指2.L", "LittleToe2.L", "足指"),
Item("足.親指1.R", "BigToe1.R", "足指"),
Item("足.親指2.R", "BigToe2.R", "足指"),
Item("足.人差指1.R", "SecondToe1.R", "足指"),
Item("足.人差指2.R", "SecondToe2.R", "足指"),
Item("足.中指1.R", "ThirdToe1.R", "足指"),
Item("足.中指2.R", "ThirdToe2.R", "足指"),
Item("足.薬指1.R", "FourthToe1.R", "足指"),
Item("足.薬指2.R", "FourthToe2.R", "足指"),
Item("足.小指1.R", "LittleToe1.R", "足指"),
Item("足.小指2.R", "LittleToe2.R", "足指"),
]
def get_common_frame_names():
return {
"センター": "Center",
"IK": "IK",
"体(上)": "Upper Body",
"腕": "Arm",
"_調整ボーン": "",
"指": "Finger",
"体(下)": "Lower Body",
"足": "Leg",
"足指": "Toe",
"物理": "Physics",
"その他": "Others",
}
# -------------------------------------------------------------
# 特定用途骨骼
# -------------------------------------------------------------
# 用于烘焙VMD动作的MMD骨骼
# 名称取自MMR preset.json文件(上半身3并非MMD标准骨或次标准骨,但在预设文件中存在)
PMX_BAKE_BONES = ['全ての親', 'センター',
'左足IK', '左つま先IK', '右足IK', '右つま先IK',
'上半身', '上半身3', '上半身2', '首', '頭', '左目', '右目',
'左肩', '左腕', '左腕捩', '左ひじ', '左手捩', '左手首',
'右肩', '右腕', '右腕捩', '右ひじ', '右手捩', '右手首',
'左親指0', '左親指1', '左親指2', '左人指1', '左人指2', '左人指3', '左中指1', '左中指2', '左中指3',
'左薬指1', '左薬指2', '左薬指3', '左小指1', '左小指2', '左小指3',
'右親指0', '右親指1', '右親指2', '右人指1', '右人指2', '右人指3', '右中指1', '右中指2', '右中指3',
'右薬指1', '右薬指2', '右薬指3', '右小指1', '右小指2', '右小指3',
'下半身',
'左足', '左ひざ', '左足首', '左足先EX', '右足', '右ひざ', '右足首', '右足先EX']