Skip to content

Commit

Permalink
Merge pull request #15 from miu200521358/develop
Browse files Browse the repository at this point in the history
ver2.01.06 (2023/10/22)
  • Loading branch information
miu200521358 authored Oct 29, 2023
2 parents 70fcf26 + 3716e5f commit ea6bcb7
Show file tree
Hide file tree
Showing 10 changed files with 137 additions and 28 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -126,3 +126,4 @@ history.json
src/example.py
test/resources/サンプルモデル.pmx
test/resources/サンプルモーション.vmd
配布/
10 changes: 10 additions & 0 deletions archive/Readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,16 @@ https://github.com/miu200521358/vroid2pmx
���@����
----------------------------------------------------------------

ver2.01.06 (2023/10/22)
�Evrm1.0�ŏo�͂����ꍇ�̃G���[�n���h�����O�lj�
�E�}�e���A���팸�ŏo�͂����ꍇ�̃n���h�����O�lj�
�@�E�}�e���A����2���܂łɍ팸�����Ǝ��s���܂�
�@�E�{�[�����K�؂Ɋ��蓖�Ă��ĂȂ��ꍇ�APmxTailor�p�ݒ�C���|�[�gJSON������Ȃ��ꍇ������܂�
�EVRoid Studio�x�[�^�łŃG�N�X�|�[�g����vrm���x�������ŏo�͂ł���悤����
�@�Evrm�̃��[�t���������łƈقȂ邽�߁A�lj����[�t�̐������X���[���܂�
�@�@�iVRoid Studio�Őݒ肵�����[�t�͂��̂܂܂̖��O�ŏo�͂��܂��j
�@�E�`��ɂ���Ă�PmxTailor�p�ݒ�t�@�C���̏o�͂Ɏ��s����”\��������܂�

ver2.01.05 (2023/04/22)
�EVRoid Studio 1.22.0 �ȍ~�ŁA
�@PmxTailor�ݒ�p�G�N�X�|�[�g�����ōގ������Ȃ��������̃n���h�����O�lj�
Expand Down
14 changes: 14 additions & 0 deletions archive/β版Readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,20 @@
���@rivision
----------------------------------------------------------------

Vroid2Pmx_2.01.06_��03 (2023/09/30)
�EVRoid Studio�������łŃG�N�X�|�[�g����vrm�̕ϊ��Ɏ��s����ꍇ���������̂��C��

Vroid2Pmx_2.01.06_��02 (2023/09/27)
�EVRoid Studio�x�[�^�łŃG�N�X�|�[�g����vrm���x�������ŏo�͂ł���悤����
�@�Evrm�̃��[�t���������łƈقȂ邽�߁A�lj����[�t�̐������X���[���܂�
�@�@�iVRoid Studio�Őݒ肵�����[�t�͂��̂܂܂̖��O�ŏo�͂��܂��j
�@�E�`��ɂ���Ă�PmxTailor�p�ݒ�t�@�C���̏o�͂Ɏ��s����”\��������܂�

Vroid2Pmx_2.01.06_��01 (2023/09/26)
�Evrm1.0�ŏo�͂����ꍇ�̃G���[�n���h�����O�lj�
�E�}�e���A���팸�ŏo�͂����ꍇ�̃n���h�����O�lj�
�@���{�[�����K�؂Ɋ��蓖�Ă��ĂȂ��ꍇ�APmxTailor�p�ݒ�C���|�[�gJSON������Ȃ��ꍇ������܂�

Vroid2Pmx_2.01.05_��01 (2023/04/15)
�EPmxTailor�ݒ�p�G�N�X�|�[�g�����ŁA�ގ������Ȃ��������̃n���h�����O�lj�

Expand Down
61 changes: 61 additions & 0 deletions rivision.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,65 @@

Vroid2Pmx_2.01.06_��03 (2023/09/30)

�EVRoid Studio�������łŃG�N�X�|�[�g����vrm�̕ϊ��Ɏ��s����ꍇ���������̂��C��<br>
<br>
�� ���m�|�X�g<br>
(������)<br>
<br>
�� �z�z�ꏊ<br>
https://fire.st/jVPUABu


VRoid Studio 1.x �ō쐬����vrm�f�[�^����pmx�iMMD�p���f���j�f�[�^�ɕϊ��ł��� �uVroid2Pmx�v�x�[�^�ł��A�b�v�f�[�g���܂����I

v2.01.06_��02
�EVRoid Studio�x�[�^�łŃG�N�X�|�[�g����vrm���x�������ŏo�͂ł���悤����
�@�����[�t�lj������Ή�

���R�~���j�e�B�z�z
https://com.nicovideo.jp/community/co5387214


�� VRoid Studio�x�[�^�ňꕔ�Ή�

VRoid Studio�x�[�^�łŃG�N�X�|�[�g����vrm���A�x�������ŏo�͂܂ł͂ł���悤�ɂ��Ă݂܂����B
�������A���[�t���������łƈقȂ邽�߁A�lj����[�t�̐����̓X���[����܂�
�iVRoid Studio�Őݒ肵�����[�t�͂��̂܂܂̖��O�ŏo�͂��܂��j
PmxTailor�p�ݒ�t�@�C�����o�͂��܂����A���܂Ɍ��ʂ��ςȂ̂ł����ӂ�������



vrm1.0�̉�͂͌��ݑΉ����Ă��Ȃ��̂ŁA�K�؂ȃ��b�Z�[�W���o�͏o����悤�n���h�����O��lj����܂���

�� �}�e���A���팸���̃n���h�����O�lj�

vrm�G�N�X�|�[�g���Ƀ}�e���A�����팸�����ꍇ�A�o�͂Ɏ��s����s��ɑΉ����܂���
���ߑ��Ȃǂ̗h�ꕨ�ݒ肪�Ȃ��Ȃ��Ă���ꍇ�APmxTailor�p�ݒ�t�@�C��JSON�ɂ��ݒ肪�lj�����܂���



�� ����g�U�n�X�L�b�v�����lj�

����g�U�͍\���I�ɕ��G�ł��܂����Ƃ����ւ����ʂɓ�����Ȃ��ꍇ�����邽�߁A��U���O����悤�ɂ��܂���
���萔�ł�������g�U����ꂽ���ꍇ�̓v���O�C���œ��꒼���Ă�������


�� �t�@�C�������������C��

�t�@�C������PMX���f�����𗬗p���Ă���̂ł����A�����Ƀt�@�C�����Ƃ��ďo�͂ł��Ȃ������񂪂������ꍇ�Ƀt�@�C���p�X�����ŃG���[���������Ă����̂ŁAPMX���f��������t�@�C�����Ƃ��ďo�͂ł��Ȃ��������폜����悤�ɂ��܂���


�� Vroid�Ή�����

Vroid2Pmx�o�R�i�㔼�g3�j�̃��f���Ńt�B�b�e�B���O���Y��ɂȂ�Ȃ��p�^�[�����������̂������‚��C�����Ă��܂�
�ȑO����Y��Ƀt�B�b�e�B���O�ł���悤�ɂȂ��Ă���c�͂��ł���







https://fire.st/RIy5ZY4
Vroid2Pmx_1.00.00_��01 (2021/11/21)
�E�V�K�쐬
Expand Down
2 changes: 1 addition & 1 deletion src/executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from utils.MLogger import MLogger
from utils import MFileUtils

VERSION_NAME = "2.01.05"
VERSION_NAME = "2.01.06"

# 指数表記なし、有効小数点桁数6、30を超えると省略あり、一行の文字数200
np.set_printoptions(suppress=True, precision=6, threshold=30, linewidth=200)
Expand Down
3 changes: 2 additions & 1 deletion src/locale/en_US/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -411,5 +411,6 @@
"-- 身体剛体準備終了": "--Completion of body rigid body preparation",
"-- -- 身体剛体[%s]": "---- Body Rigid Body [ %s]",
"舌関連頂点が見つからなかったため、舌分離処理をスキップします": "No tongue-related vertices found, skipping tongue separation processing",
"-- Aスタンス・親指調整終了": "-- Finished A stance/thumb adjustment"
"-- Aスタンス・親指調整終了": "-- Finished A stance/thumb adjustment",
"出力ソフト情報がないため、処理を中断します。\nvrm1.0でエクスポートした場合、vrm0.0でエクスポートし直してください。": "The process is aborted because there is no output software information. \nIf you exported with vrm1.0, please re-export with vrm0.0."
}
3 changes: 2 additions & 1 deletion src/locale/ja_JP/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -411,5 +411,6 @@
"-- 身体剛体準備終了": "-- 身体剛体準備終了",
"-- -- 身体剛体[%s]": "-- -- 身体剛体[%s]",
"舌関連頂点が見つからなかったため、舌分離処理をスキップします": "舌関連頂点が見つからなかったため、舌分離処理をスキップします",
"-- Aスタンス・親指調整終了": "-- Aスタンス・親指調整終了"
"-- Aスタンス・親指調整終了": "-- Aスタンス・親指調整終了",
"出力ソフト情報がないため、処理を中断します。\nvrm1.0でエクスポートした場合、vrm0.0でエクスポートし直してください。": "出力ソフト情報がないため、処理を中断します。\nvrm1.0でエクスポートした場合、vrm0.0でエクスポートし直してください。"
}
3 changes: 2 additions & 1 deletion src/locale/zh_CN/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -414,5 +414,6 @@
"-- 身体剛体準備終了": "--完成刚体刚体准备",
"-- -- 身体剛体[%s]": "---- Body 刚体 [%s]",
"舌関連頂点が見つからなかったため、舌分離処理をスキップします": "未找到舌相关顶点,跳过舌分离处理",
"-- Aスタンス・親指調整終了": "-- 完成了姿势/拇指调整"
"-- Aスタンス・親指調整終了": "-- 完成了姿势/拇指调整",
"出力ソフト情報がないため、処理を中断します。\nvrm1.0でエクスポートした場合、vrm0.0でエクスポートし直してください。": "由于没有输出软件信息,进程被中止。 \n如果您已使用vrm1.0 导出,请使用 vrm0.0 重新导出。"
}
66 changes: 43 additions & 23 deletions src/service/VroidExportService.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,17 +106,25 @@ def execute(self):
except MKilledException:
return False
except SizingException as se:
logger.error("Vroid2Pmx処理が処理できないデータで終了しました。\n\n%s", se.message, decoration=MLogger.DECORATION_BOX)
logger.error(
"Vroid2Pmx処理が処理できないデータで終了しました。\n\n%s\n%s",
"2.01.06",
se.message,
decoration=MLogger.DECORATION_BOX,
)
except Exception:
logger.critical(
"Vroid2Pmx処理が意図せぬエラーで終了しました。\n\n%s", traceback.format_exc(), decoration=MLogger.DECORATION_BOX
"Vroid2Pmx処理が意図せぬエラーで終了しました。\n\n%s\n%s",
"2.01.06",
traceback.format_exc(),
decoration=MLogger.DECORATION_BOX,
)
finally:
logging.shutdown()

def vroid2pmx(self):
try:
model, tex_dir_path, setting_dir_path = self.create_model()
model, tex_dir_path, setting_dir_path, is_vroid1 = self.create_model()
if not model:
return False

Expand All @@ -132,7 +140,7 @@ def vroid2pmx(self):
if not model:
return False

model = self.convert_morph(model)
model = self.convert_morph(model, is_vroid1)
if not model:
return False

Expand Down Expand Up @@ -1032,7 +1040,7 @@ def calc_normal(self, bone_mat: MMatrix4x4, normal: MVector3D):

return MVector3D(np.sum(normal.data() * bone_invert_mat, axis=1)).normalized()

def convert_morph(self, model: PmxModel):
def convert_morph(self, model: PmxModel, is_vroid1: bool):
# グループモーフ定義
if (
"extensions" not in model.json_data
Expand All @@ -1050,8 +1058,9 @@ def convert_morph(self, model: PmxModel):
logger.info("-- -- モーフ調整準備")

face_close_dict = {}
for base_offset in target_morphs["Fcl_EYE_Close"].offsets:
face_close_dict[base_offset.vertex_index] = base_offset.position_offset.copy().data()
if is_vroid1:
for base_offset in target_morphs["Fcl_EYE_Close"].offsets:
face_close_dict[base_offset.vertex_index] = base_offset.position_offset.copy().data()

face_material_index_vertices = []
face_left_close_index_vertices = []
Expand Down Expand Up @@ -1949,6 +1958,7 @@ def convert_mesh(self, model: PmxModel, bone_name_dict: dict, tex_dir_path: str)
indices_by_materials = {}
materials_by_type = {}
registed_material_names = []
midx = 0

for vertex_key, vertex_dict in vertex_blocks.items():
start_vidx = vertex_dict["start"]
Expand Down Expand Up @@ -2154,7 +2164,7 @@ def convert_mesh(self, model: PmxModel, bone_name_dict: dict, tex_dir_path: str)
if "vectorProperties" in material_ext and "_ShadeColor" in material_ext["vectorProperties"]:
toon_sharing_flag = 0
if material_ext["textureProperties"]["_MainTex"] < len(model.json_data["images"]):
toon_img_name = f'{model.json_data["images"][material_ext["textureProperties"]["_MainTex"]]["name"]}_Toon.bmp'
toon_img_name = f'{model.json_data["images"][material_ext["textureProperties"]["_MainTex"]].get("name", f"M{midx:03d}")}_Toon.bmp'
else:
toon_img_name = f"{material_name}_Toon.bmp"

Expand Down Expand Up @@ -2220,6 +2230,7 @@ def convert_mesh(self, model: PmxModel, bone_name_dict: dict, tex_dir_path: str)
material.vertex_count += len(indices)

logger.info("-- 面・材質データ解析[%s-%s]", index_accessor, material_accessor)
midx += 1

# 材質を透過順に並べ替て設定
index_idx = 0
Expand Down Expand Up @@ -3003,25 +3014,30 @@ def create_model(self):
or "VRM" not in model.json_data["extensions"]
or "exporterVersion" not in model.json_data["extensions"]["VRM"]
):
logger.error("出力ソフト情報がないため、処理を中断します。", decoration=MLogger.DECORATION_BOX)
return None, None, None
logger.error(
"出力ソフト情報がないため、処理を中断します。\nvrm1.0でエクスポートした場合、vrm0.0でエクスポートし直してください。",
decoration=MLogger.DECORATION_BOX,
)
return None, None, None, None

if (
"extensions" not in model.json_data
or "VRM" not in model.json_data["extensions"]
or "meta" not in model.json_data["extensions"]["VRM"]
):
logger.error("メタ情報がないため、処理を中断します。", decoration=MLogger.DECORATION_BOX)
return None, None, None
return None, None, None, None

if "VRoidStudio-0." in model.json_data["extensions"]["VRM"]["exporterVersion"]:
# VRoid Studioベータ版はNG
logger.error(
"VRoid Studio ベータ版 で出力されたvrmデータではあるため、処理を中断します。\n正式版でコンバートしてから再度試してください。\n出力元: %s",
model.json_data["extensions"]["VRM"]["exporterVersion"],
decoration=MLogger.DECORATION_BOX,
)
return None, None, None
# if "VRoidStudio-0." in model.json_data["extensions"]["VRM"]["exporterVersion"]:
# # VRoid Studioベータ版はNG
# logger.error(
# "VRoid Studio ベータ版 で出力されたvrmデータではあるため、処理を中断します。\n正式版でコンバートしてから再度試してください。\n出力元: %s",
# model.json_data["extensions"]["VRM"]["exporterVersion"],
# decoration=MLogger.DECORATION_BOX,
# )
# return None, None, None

is_vroid1 = True

if "VRoid Studio-1." not in model.json_data["extensions"]["VRM"]["exporterVersion"]:
# VRoid Studio正式版じゃなくても警告だけに留める
Expand All @@ -3030,6 +3046,7 @@ def create_model(self):
model.json_data["extensions"]["VRM"]["exporterVersion"],
decoration=MLogger.DECORATION_BOX,
)
is_vroid1 = False

if "title" in model.json_data["extensions"]["VRM"]["meta"]:
model.name = model.json_data["extensions"]["VRM"]["meta"]["title"]
Expand Down Expand Up @@ -3091,19 +3108,22 @@ def create_model(self):

if "images" not in model.json_data:
logger.error("変換可能な画像情報がないため、処理を中断します。", decoration=MLogger.DECORATION_BOX)
return None, None, None
return None, None, None, None

# jsonデータの中に画像データの指定がある場合
image_offset = 0
for image in model.json_data["images"]:
for iidx, image in enumerate(model.json_data["images"]):
if int(image["bufferView"]) < len(model.json_data["bufferViews"]):
image_buffer = model.json_data["bufferViews"][int(image["bufferView"])]
# 画像の開始位置はオフセット分ずらす
image_start = self.offset + image_buffer["byteOffset"]
# 拡張子
ext = MIME_TYPE[image["mimeType"]]
# 画像名
image_name = f"{image['name']}.{ext}"
if "name" in image:
image_name = f"{image['name']}.{ext}"
else:
image_name = f"T{iidx:03d}.{ext}"
with open(os.path.join(glft_dir_path, image_name), "wb") as ibf:
ibf.write(self.buffer[image_start : (image_start + image_buffer["byteLength"])])
# オフセット加算
Expand All @@ -3115,7 +3135,7 @@ def create_model(self):

logger.info("-- テクスチャデータ解析終了")

return model, tex_dir_path, setting_dir_path
return model, tex_dir_path, setting_dir_path, is_vroid1

# アクセサ経由で値を取得する
# https://github.com/ft-lab/Documents_glTF/blob/master/structure.md
Expand Down
2 changes: 1 addition & 1 deletion vroid2pmx.spec
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ exe = EXE(pyz,
a.zipfiles,
a.datas,
[],
name='Vroid2Pmx_2.01.05',
name='Vroid2Pmx_2.01.06',
debug=False,
bootloader_ignore_signals=False,
strip=False,
Expand Down

0 comments on commit ea6bcb7

Please sign in to comment.