From b7feb2e2e8837522eb099d10cb66348dca590837 Mon Sep 17 00:00:00 2001 From: UuuNyaa Date: Thu, 4 Aug 2022 02:09:59 -0700 Subject: [PATCH] Add Add Center of Gravity feature --- mmd_uuunyaa_tools/__init__.py | 2 +- .../converters/physics/panels.py | 104 ----- mmd_uuunyaa_tools/generators/physics.py | 58 +++ mmd_uuunyaa_tools/m17n.py | 428 +++++++++--------- mmd_uuunyaa_tools/panels.py | 101 +++++ 5 files changed, 380 insertions(+), 313 deletions(-) delete mode 100644 mmd_uuunyaa_tools/converters/physics/panels.py create mode 100644 mmd_uuunyaa_tools/generators/physics.py diff --git a/mmd_uuunyaa_tools/__init__.py b/mmd_uuunyaa_tools/__init__.py index 12715e7..f237a3d 100644 --- a/mmd_uuunyaa_tools/__init__.py +++ b/mmd_uuunyaa_tools/__init__.py @@ -27,7 +27,7 @@ 'name': 'mmd_uuunyaa_tools', 'description': 'Utility tools for MMD model & scene editing by Uuu(/>ω<)/Nyaa!.', 'author': 'UuuNyaa', - 'version': (1, 4, 0), + 'version': (1, 5, 0), 'blender': (2, 83, 0), 'warning': '', 'location': 'View3D > Sidebar > MMD Tools Panel', diff --git a/mmd_uuunyaa_tools/converters/physics/panels.py b/mmd_uuunyaa_tools/converters/physics/panels.py deleted file mode 100644 index 8fe9067..0000000 --- a/mmd_uuunyaa_tools/converters/physics/panels.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2021 UuuNyaa -# This file is part of MMD UuuNyaa Tools. - -import bpy -from mmd_uuunyaa_tools.converters.physics.cloth import ( - ConvertRigidBodyToClothOperator, RemoveMeshCloth, SelectClothMesh) -from mmd_uuunyaa_tools.converters.physics.cloth_pyramid import ( - AddPyramidMeshByBreastBoneOperator, AssignPyramidWeightsOperator, - ConvertPyramidMeshToClothOperator) -from mmd_uuunyaa_tools.converters.physics.collision import ( - RemoveMeshCollision, SelectCollisionMesh) -from mmd_uuunyaa_tools.converters.physics.cloth_bone import StretchBoneToVertexOperator -from mmd_uuunyaa_tools.m17n import _ -from mmd_uuunyaa_tools.utilities import import_mmd_tools - -mmd_tools = import_mmd_tools() - - -class UuuNyaaPhysicsPanel(bpy.types.Panel): - bl_idname = 'UUUNYAA_PT_physics' - bl_label = _('UuuNyaa Physics') - bl_space_type = 'VIEW_3D' - bl_region_type = 'UI' - bl_category = 'MMD' - - def draw(self, context: bpy.types.Context): - layout = self.layout - - col = layout.column(align=True) - col.label(text=_('Relevant Selection:'), icon='RESTRICT_SELECT_OFF') - grid = col.grid_flow(row_major=True) - row = grid.row(align=True) - row.label(text=_('Collision Mesh'), icon='MOD_PHYSICS') - row.operator(SelectCollisionMesh.bl_idname, text=_(''), icon='RESTRICT_SELECT_OFF') - row.operator(RemoveMeshCollision.bl_idname, text=_(''), icon='TRASH') - - mmd_root_object = mmd_tools.core.model.Model.findRoot(context.active_object) - if mmd_root_object is None: - col = layout.column(align=True) - col.label(text=_('MMD Model is not selected.'), icon='ERROR') - else: - mmd_root = mmd_root_object.mmd_root - - row = grid.row(align=True) - row.label(text=_('Rigid Body'), icon='RIGID_BODY') - row.operator_context = 'EXEC_DEFAULT' - operator = row.operator('mmd_tools.rigid_body_select', text=_(''), icon='RESTRICT_SELECT_OFF') - operator.properties = set(['collision_group_number', 'shape']) - row.operator_context = 'INVOKE_DEFAULT' - row.prop(mmd_root, 'show_rigid_bodies', toggle=True, icon_only=True, icon='HIDE_OFF' if mmd_root.show_rigid_bodies else 'HIDE_ON') - row.operator('rigidbody.objects_remove', text=_(''), icon='TRASH') - - row = grid.row(align=True) - row.label(text=_('Cloth Mesh'), icon='MOD_CLOTH') - row.operator(SelectClothMesh.bl_idname, text=_(''), icon='RESTRICT_SELECT_OFF') - row.prop(mmd_root_object, 'mmd_uuunyaa_tools_show_cloths', toggle=True, icon_only=True, icon='HIDE_OFF' if mmd_root_object.mmd_uuunyaa_tools_show_cloths else 'HIDE_ON') - row.operator(RemoveMeshCloth.bl_idname, text=_(''), icon='TRASH') - - col = layout.column(align=True) - col.label(text=_('Converter:'), icon='SHADERFX') - - row = col.row(align=True) - row.operator_context = 'EXEC_DEFAULT' - row.operator(ConvertRigidBodyToClothOperator.bl_idname, text=_('Rigid Body to Cloth'), icon='MATCLOTH') - row.operator_context = 'INVOKE_DEFAULT' - row.operator(ConvertRigidBodyToClothOperator.bl_idname, text=_(''), icon='WINDOW') - - col = layout.column(align=True) - col.label(text=_('Pyramid Cloth:'), icon='MESH_CONE') - grid = col.grid_flow(row_major=True, align=True) - grid.row(align=True).operator(AddPyramidMeshByBreastBoneOperator.bl_idname, text=_('Add Pyramid'), icon='CONE') - grid.row(align=True).operator(ConvertPyramidMeshToClothOperator.bl_idname, text=_('Pyramid to Cloth'), icon='MOD_CLOTH') - grid.row(align=True).operator(AssignPyramidWeightsOperator.bl_idname, text=_('Repaint Weight'), icon='WPAINT_HLT') - - col = layout.column(align=True) - col.label(text=_('Misc:'), icon='BLENDER') - grid = col.grid_flow(row_major=True) - grid.row(align=True).operator(StretchBoneToVertexOperator.bl_idname, text=_('Stretch Bone to Vertex'), icon='CONSTRAINT_BONE') - - @staticmethod - def _toggle_visibility_of_cloths(obj, context): - mmd_root_object = mmd_tools.core.model.Model.findRoot(obj) - mmd_model = mmd_tools.core.model.Model(mmd_root_object) - hide = not mmd_root_object.mmd_uuunyaa_tools_show_cloths - - cloth_object: bpy.types.Object - for cloth_object in mmd_model.cloths(): - cloth_object.hide = hide - - if hide and context.active_object is None: - context.view_layer.objects.active = mmd_root_object - - @staticmethod - def register(): - # pylint: disable=assignment-from-no-return - bpy.types.Object.mmd_uuunyaa_tools_show_cloths = bpy.props.BoolProperty( - default=True, - update=UuuNyaaPhysicsPanel._toggle_visibility_of_cloths - ) - - @staticmethod - def unregister(): - del bpy.types.Object.mmd_uuunyaa_tools_show_cloths diff --git a/mmd_uuunyaa_tools/generators/physics.py b/mmd_uuunyaa_tools/generators/physics.py new file mode 100644 index 0000000..d0d807d --- /dev/null +++ b/mmd_uuunyaa_tools/generators/physics.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 UuuNyaa +# This file is part of MMD UuuNyaa Tools. + +from typing import List + +import bpy +from mmd_uuunyaa_tools.m17n import _ + + +class AddCenterOfGravityObject(bpy.types.Operator): + bl_idname = 'mmd_uuunyaa_tools.add_center_of_gravity_object' + bl_label = _('Add Center of Gravity') + bl_options = {'REGISTER', 'UNDO'} + + radius: bpy.props.FloatProperty(name=_('Radius'), default=0.1, min=0.0, precision=4, unit='LENGTH') + + @classmethod + def poll(cls, context: bpy.types.Context): + return context.mode == 'POSE' and len(context.selected_pose_bones) > 0 + + def execute(self, context: bpy.types.Context): + armature_object: bpy.types.Object = context.active_object + selected_pose_bones: List[bpy.types.PoseBone] = context.selected_pose_bones + + center_object: bpy.types.Object = bpy.data.objects.new('EMPTY', None) + center_object.name = 'CenterOfGravity' + center_object.empty_display_type = 'PLAIN_AXES' + center_object.empty_display_size = self.radius + center_object.show_in_front = True + context.view_layer.active_layer_collection.collection.objects.link(center_object) + + total_bone_length = sum([b.length for b in selected_pose_bones]) + + for pose_bone in selected_pose_bones: + constraint: bpy.types.CopyLocationConstraint = center_object.constraints.new('COPY_LOCATION') + constraint.name = f'CenterOfGravity.{pose_bone.name}' + constraint.target = armature_object + constraint.subtarget = pose_bone.name + constraint.head_tail = 0.5 + constraint.use_offset = True + constraint.influence = pose_bone.length / total_bone_length + + floor_object: bpy.types.Object = bpy.data.objects.new('EMPTY', None) + floor_object.name = 'CenterOfGravityOnFloor' + floor_object.parent = center_object + floor_object.empty_display_type = 'SPHERE' + floor_object.empty_display_size = self.radius + floor_object.show_in_front = True + context.view_layer.active_layer_collection.collection.objects.link(floor_object) + + constraint: bpy.types.CopyLocationConstraint = floor_object.constraints.new('COPY_LOCATION') + constraint.target = armature_object + constraint.use_x = False + constraint.use_y = False + constraint.use_z = True + + return {'FINISHED'} diff --git a/mmd_uuunyaa_tools/m17n.py b/mmd_uuunyaa_tools/m17n.py index af21317..8458b8b 100644 --- a/mmd_uuunyaa_tools/m17n.py +++ b/mmd_uuunyaa_tools/m17n.py @@ -260,7 +260,7 @@ def unregister(): ("*", "Upper Body2 as"): "上半身2として", #: mmd_uuunyaa_tools/converters/armatures/operators.py:345 ("*", "Lower Body as"): "下半身として", - #: mmd_uuunyaa_tools/converters/armatures/operators.py:381 mmd_uuunyaa_tools/converters/armatures/operators.py:450 mmd_uuunyaa_tools/panels.py:62 mmd_uuunyaa_tools/panels.py:67 + #: mmd_uuunyaa_tools/converters/armatures/operators.py:381 mmd_uuunyaa_tools/converters/armatures/operators.py:450 mmd_uuunyaa_tools/panels.py:75 mmd_uuunyaa_tools/panels.py:80 ("Operator", "Apply MMD Rest Pose"): "MMDレストポーズを適用", #: mmd_uuunyaa_tools/converters/armatures/operators.py:384 mmd_uuunyaa_tools/converters/armatures/operators.py:453 ("*", "Iterations"): "反復", @@ -382,8 +382,8 @@ def unregister(): ("*", "Minimum Distance"): "最小距離", #: mmd_uuunyaa_tools/converters/physics/cloth.py:466 ("*", "Impulse Clamping"): "撃力を制限", - #: mmd_uuunyaa_tools/converters/physics/cloth_bone.py:15 mmd_uuunyaa_tools/converters/physics/panels.py:79 - ("*", "Stretch Bone to Vertex"): "ボーンを頂点にストレッチ", + #: mmd_uuunyaa_tools/converters/physics/cloth_bone.py:15 mmd_uuunyaa_tools/panels.py:142 + ("Operator", "Stretch Bone to Vertex"): "ボーンを頂点にストレッチ", #: mmd_uuunyaa_tools/converters/physics/cloth_pyramid.py:160 ("*", "Target bones not found."): "対象ボーンが見つからない", #: mmd_uuunyaa_tools/converters/physics/cloth_pyramid.py:775 @@ -444,32 +444,6 @@ def unregister(): ("*", "Brush Default"): "ブラシ デフォルト", #: mmd_uuunyaa_tools/converters/physics/dynamic_paint.py:185 ("*", "Active Surface"): "アクティブサーフェス", - #: mmd_uuunyaa_tools/converters/physics/panels.py:22 - ("*", "UuuNyaa Physics"): "UuuNyaa物理演算", - #: mmd_uuunyaa_tools/converters/physics/panels.py:31 - ("*", "Relevant Selection:"): "関連選択", - #: mmd_uuunyaa_tools/converters/physics/panels.py:34 - ("*", "Collision Mesh"): "コリジョンメッシュ", - #: mmd_uuunyaa_tools/converters/physics/panels.py:41 - ("*", "MMD Model is not selected."): "MMDモデルが未選択", - #: mmd_uuunyaa_tools/converters/physics/panels.py:46 - ("*", "Rigid Body"): "リジッドボディ", - #: mmd_uuunyaa_tools/converters/physics/panels.py:55 - ("*", "Cloth Mesh"): "クロスメッシュ", - #: mmd_uuunyaa_tools/converters/physics/panels.py:61 - ("*", "Converter:"): "コンバーター:", - #: mmd_uuunyaa_tools/converters/physics/panels.py:65 - ("Operator", "Rigid Body to Cloth"): "リジッドボディをクロスに", - #: mmd_uuunyaa_tools/converters/physics/panels.py:70 - ("*", "Pyramid Cloth:"): "ピラミッドクロス:", - #: mmd_uuunyaa_tools/converters/physics/panels.py:72 - ("Operator", "Add Pyramid"): "ピラミッドを追加", - #: mmd_uuunyaa_tools/converters/physics/panels.py:73 - ("Operator", "Pyramid to Cloth"): "ピラミッドをクロスに", - #: mmd_uuunyaa_tools/converters/physics/panels.py:74 - ("Operator", "Repaint Weight"): "ウェイト再ペイント", - #: mmd_uuunyaa_tools/converters/physics/panels.py:77 - ("*", "Misc:"): "その他", #: mmd_uuunyaa_tools/converters/physics/rigid_body.py:15 ("*", "UuuNyaa Rigid Body Adjuster"): "UuuNyaaリジッドボディ調整器", #: mmd_uuunyaa_tools/converters/physics/rigid_body.py:35 @@ -506,43 +480,43 @@ def unregister(): #: mmd_uuunyaa_tools/editors/menus.py:95 mmd_uuunyaa_tools/editors/operators.py:455 ("Operator", "Scaled"): "スケール済", ("*", "Scaled"): "スケール済", - #: mmd_uuunyaa_tools/editors/nodes.py:223 + #: mmd_uuunyaa_tools/editors/nodes.py:233 ("*", "Skin Color Adjust"): "肌カラー調整", - #: mmd_uuunyaa_tools/editors/nodes.py:226 mmd_uuunyaa_tools/tuners/material_tuners.py:261 + #: mmd_uuunyaa_tools/editors/nodes.py:236 mmd_uuunyaa_tools/tuners/material_tuners.py:251 ("*", "Skin Bump"): "肌 凹凸", - #: mmd_uuunyaa_tools/editors/nodes.py:229 + #: mmd_uuunyaa_tools/editors/nodes.py:239 ("*", "Fabric Woven Texture"): "布地織物テクスチャ", - #: mmd_uuunyaa_tools/editors/nodes.py:232 mmd_uuunyaa_tools/tuners/material_tuners.py:389 + #: mmd_uuunyaa_tools/editors/nodes.py:242 mmd_uuunyaa_tools/tuners/material_tuners.py:373 ("*", "Fabric Bump"): "布地 凹凸", - #: mmd_uuunyaa_tools/editors/nodes.py:235 + #: mmd_uuunyaa_tools/editors/nodes.py:245 ("*", "Wave Bump"): "波形バンプ", - #: mmd_uuunyaa_tools/editors/nodes.py:238 + #: mmd_uuunyaa_tools/editors/nodes.py:248 ("*", "Magic Bump"): "マジックバンプ", - #: mmd_uuunyaa_tools/editors/nodes.py:241 + #: mmd_uuunyaa_tools/editors/nodes.py:251 ("*", "Shadowless BSDF"): "影なしBSDF", - #: mmd_uuunyaa_tools/editors/nodes.py:244 + #: mmd_uuunyaa_tools/editors/nodes.py:254 ("*", "Gem BSDF"): "宝石BSDF", - #: mmd_uuunyaa_tools/editors/nodes.py:247 + #: mmd_uuunyaa_tools/editors/nodes.py:257 ("*", "Liquid BSDF"): "液体BSDF", - #: mmd_uuunyaa_tools/editors/nodes.py:250 + #: mmd_uuunyaa_tools/editors/nodes.py:260 ("*", "Knit Texture"): "編み物Bテクスチャ", - #: mmd_uuunyaa_tools/editors/nodes.py:253 + #: mmd_uuunyaa_tools/editors/nodes.py:263 ("*", "Leather Texture"): "革テクスチャ", - #: mmd_uuunyaa_tools/editors/nodes.py:256 + #: mmd_uuunyaa_tools/editors/nodes.py:266 ("*", "Watercolor Texture"): "水彩画テクスチャ", - #: mmd_uuunyaa_tools/editors/nodes.py:259 + #: mmd_uuunyaa_tools/editors/nodes.py:269 ("*", "Toon Shader Texture"): "トーンシェーダーテクスチャ", - #: mmd_uuunyaa_tools/editors/nodes.py:262 + #: mmd_uuunyaa_tools/editors/nodes.py:272 ("*", "MMDTexUV"): "MMDTexUV", - #: mmd_uuunyaa_tools/editors/nodes.py:265 mmd_uuunyaa_tools/tuners/material_adjusters.py:103 + #: mmd_uuunyaa_tools/editors/nodes.py:275 mmd_uuunyaa_tools/tuners/material_adjusters.py:103 ("*", "Subsurface Adjuster"): "サブサーフェス調節器", - #: mmd_uuunyaa_tools/editors/nodes.py:268 mmd_uuunyaa_tools/tuners/material_adjusters.py:58 + #: mmd_uuunyaa_tools/editors/nodes.py:278 mmd_uuunyaa_tools/tuners/material_adjusters.py:58 ("*", "Wet Adjuster"): "ウエット調節器", - #: mmd_uuunyaa_tools/editors/nodes.py:271 mmd_uuunyaa_tools/tuners/material_adjusters.py:195 + #: mmd_uuunyaa_tools/editors/nodes.py:281 mmd_uuunyaa_tools/tuners/material_adjusters.py:195 ("*", "Emission Adjuster"): "放射調節器", - #: mmd_uuunyaa_tools/editors/nodes.py:274 mmd_uuunyaa_tools/tuners/material_adjusters.py:149 + #: mmd_uuunyaa_tools/editors/nodes.py:284 mmd_uuunyaa_tools/tuners/material_adjusters.py:149 ("*", "Glitter Adjuster"): "グリッター調整器", - #: mmd_uuunyaa_tools/editors/nodes.py:316 + #: mmd_uuunyaa_tools/editors/nodes.py:326 ("*", "Sun Direction"): "太陽の方向", #: mmd_uuunyaa_tools/editors/operators.py:19 ("Operator", "Convert Materials for Eevee"): "マテリアルをEevee用に変換", @@ -594,6 +568,10 @@ def unregister(): ("*", "Update {} ready!"): "更新できます! {}", #: mmd_uuunyaa_tools/externals/addon_updater/addon_updater_ops.py:1067 mmd_uuunyaa_tools/externals/addon_updater/addon_updater_ops.py:1210 ("*", "Update now to {}"): "今すぐ更新 {}", + #: mmd_uuunyaa_tools/generators/physics.py:15 mmd_uuunyaa_tools/panels.py:143 + ("Operator", "Add Center of Gravity"): "重心を追加", + #: mmd_uuunyaa_tools/generators/physics.py:18 + ("*", "Radius"): "半径", #: mmd_uuunyaa_tools/generators/skin_hair.py:117 ("*", "Add Skin Hair Mesh"): "体毛メッシュを追加", #: mmd_uuunyaa_tools/generators/skin_hair.py:118 @@ -622,20 +600,46 @@ def unregister(): ("Operator", "Skin Hair"): "体毛", #: mmd_uuunyaa_tools/generators/skin_hair.py:188 ("*", "UuuNyaa Extras"): "UuuNyaaその他", - #: mmd_uuunyaa_tools/panels.py:20 + #: mmd_uuunyaa_tools/panels.py:33 ("*", "UuuNyaa Operator"): "UuuNyaaオペレーター", - #: mmd_uuunyaa_tools/panels.py:30 + #: mmd_uuunyaa_tools/panels.py:43 ("*", "Render:"): "レンダー:", - #: mmd_uuunyaa_tools/panels.py:38 + #: mmd_uuunyaa_tools/panels.py:51 ("*", "MMD to Rigify:"): "MMDからRigify:", - #: mmd_uuunyaa_tools/panels.py:42 + #: mmd_uuunyaa_tools/panels.py:55 ("Operator", "Add Metarig"): "メタリグを追加", - #: mmd_uuunyaa_tools/panels.py:59 + #: mmd_uuunyaa_tools/panels.py:72 ("*", "Rigify to MMD:"): "RigifyからMMD:", - #: mmd_uuunyaa_tools/panels.py:61 mmd_uuunyaa_tools/panels.py:66 + #: mmd_uuunyaa_tools/panels.py:74 mmd_uuunyaa_tools/panels.py:79 ("Operator", "Convert to MMD compatible"): "MMD互換に変換", - #: mmd_uuunyaa_tools/panels.py:64 + #: mmd_uuunyaa_tools/panels.py:77 ("*", "(Experimental) Auto-Rig to MMD:"): "(実験的) Auto-RigからMMD:", + #: mmd_uuunyaa_tools/panels.py:85 + ("*", "UuuNyaa Physics"): "UuuNyaa物理演算", + #: mmd_uuunyaa_tools/panels.py:94 + ("*", "Relevant Selection:"): "関連選択", + #: mmd_uuunyaa_tools/panels.py:97 + ("*", "Collision Mesh"): "コリジョンメッシュ", + #: mmd_uuunyaa_tools/panels.py:104 + ("*", "MMD Model is not selected."): "MMDモデルが未選択", + #: mmd_uuunyaa_tools/panels.py:109 + ("*", "Rigid Body"): "リジッドボディ", + #: mmd_uuunyaa_tools/panels.py:118 + ("*", "Cloth Mesh"): "クロスメッシュ", + #: mmd_uuunyaa_tools/panels.py:124 + ("*", "Converter:"): "コンバーター:", + #: mmd_uuunyaa_tools/panels.py:128 + ("Operator", "Rigid Body to Cloth"): "リジッドボディをクロスに", + #: mmd_uuunyaa_tools/panels.py:133 + ("*", "Pyramid Cloth:"): "ピラミッドクロス:", + #: mmd_uuunyaa_tools/panels.py:135 + ("Operator", "Add Pyramid"): "ピラミッドを追加", + #: mmd_uuunyaa_tools/panels.py:136 + ("Operator", "Pyramid to Cloth"): "ピラミッドをクロスに", + #: mmd_uuunyaa_tools/panels.py:137 + ("Operator", "Repaint Weight"): "ウェイト再ペイント", + #: mmd_uuunyaa_tools/panels.py:140 + ("*", "Misc:"): "その他", #: mmd_uuunyaa_tools/preferences.py:22 ("*", "Asset Search Results Max. Display Count"): "アセットサーチ結果の最大表示件数", #: mmd_uuunyaa_tools/preferences.py:23 @@ -738,7 +742,7 @@ def unregister(): ("*", "Shadowless"): "シャドウレス", #: mmd_uuunyaa_tools/tuners/material_adjusters.py:61 mmd_uuunyaa_tools/tuners/material_adjusters.py:152 ("*", "Specular"): "スペキュラー", - #: mmd_uuunyaa_tools/tuners/material_adjusters.py:62 mmd_uuunyaa_tools/tuners/material_adjusters.py:153 mmd_uuunyaa_tools/tuners/material_tuners.py:645 + #: mmd_uuunyaa_tools/tuners/material_adjusters.py:62 mmd_uuunyaa_tools/tuners/material_adjusters.py:153 mmd_uuunyaa_tools/tuners/material_tuners.py:629 ("*", "Roughness"): "粗さ", #: mmd_uuunyaa_tools/tuners/material_adjusters.py:63 mmd_uuunyaa_tools/tuners/panels.py:182 ("*", "Wet"): "ウェット", @@ -756,11 +760,11 @@ def unregister(): ("*", "Subsurface Color"): "サブサーフェスカラー", #: mmd_uuunyaa_tools/tuners/material_adjusters.py:154 mmd_uuunyaa_tools/tuners/panels.py:183 ("Operator", "Glitter"): "グリッター", - #: mmd_uuunyaa_tools/tuners/material_adjusters.py:198 mmd_uuunyaa_tools/tuners/material_tuners.py:456 mmd_uuunyaa_tools/tuners/material_tuners.py:527 mmd_uuunyaa_tools/tuners/material_tuners.py:598 mmd_uuunyaa_tools/tuners/material_tuners.py:873 + #: mmd_uuunyaa_tools/tuners/material_adjusters.py:198 mmd_uuunyaa_tools/tuners/material_tuners.py:440 mmd_uuunyaa_tools/tuners/material_tuners.py:511 mmd_uuunyaa_tools/tuners/material_tuners.py:582 mmd_uuunyaa_tools/tuners/material_tuners.py:851 ("*", "Color"): "カラー", #: mmd_uuunyaa_tools/tuners/material_adjusters.py:199 ("*", "Threshold"): "しきい値", - #: mmd_uuunyaa_tools/tuners/material_adjusters.py:200 mmd_uuunyaa_tools/tuners/material_tuners.py:462 mmd_uuunyaa_tools/tuners/material_tuners.py:533 mmd_uuunyaa_tools/tuners/material_tuners.py:648 + #: mmd_uuunyaa_tools/tuners/material_adjusters.py:200 mmd_uuunyaa_tools/tuners/material_tuners.py:446 mmd_uuunyaa_tools/tuners/material_tuners.py:517 mmd_uuunyaa_tools/tuners/material_tuners.py:632 ("*", "Strength"): "強さ", #: mmd_uuunyaa_tools/tuners/material_adjusters.py:201 mmd_uuunyaa_tools/tuners/panels.py:184 ("Operator", "Emission"): "放射", @@ -771,97 +775,97 @@ def unregister(): ("*", "Transparent"): "伝播", #: mmd_uuunyaa_tools/tuners/material_tuners.py:73 ("*", "Eye Highlight"): "目ハイライト", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:98 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:96 ("*", "Eye White"): "白目", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:123 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:119 ("*", "Eye Iris"): "虹彩", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:153 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:147 ("*", "Eye Lash"): "まつ毛", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:181 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:173 ("*", "Hair Matte"): "髪 つや消し", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:209 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:199 ("*", "Skin Mucosa"): "粘膜", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:303 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:293 ("*", "Metal Noble"): "貴金属", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:331 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:319 ("*", "Metal Base"): "卑金属", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:358 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:344 ("*", "Stone Gem"): "石 宝石", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:420 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:404 ("*", "Fabric Wave"): "布地 波形", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:453 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:437 ("*", "Fabric Cotton"): "布地 綿", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:457 mmd_uuunyaa_tools/tuners/material_tuners.py:528 mmd_uuunyaa_tools/tuners/material_tuners.py:599 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:441 mmd_uuunyaa_tools/tuners/material_tuners.py:512 mmd_uuunyaa_tools/tuners/material_tuners.py:583 ("*", "Alpha"): "アルファ", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:458 mmd_uuunyaa_tools/tuners/material_tuners.py:529 mmd_uuunyaa_tools/tuners/material_tuners.py:601 mmd_uuunyaa_tools/tuners/material_tuners.py:650 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:442 mmd_uuunyaa_tools/tuners/material_tuners.py:513 mmd_uuunyaa_tools/tuners/material_tuners.py:585 mmd_uuunyaa_tools/tuners/material_tuners.py:634 ("*", "Vector"): "ベクトル", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:459 mmd_uuunyaa_tools/tuners/material_tuners.py:530 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:443 mmd_uuunyaa_tools/tuners/material_tuners.py:514 ("*", "Impurity"): "不純物", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:460 mmd_uuunyaa_tools/tuners/material_tuners.py:531 mmd_uuunyaa_tools/tuners/material_tuners.py:603 mmd_uuunyaa_tools/tuners/material_tuners.py:647 mmd_uuunyaa_tools/tuners/material_tuners.py:874 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:444 mmd_uuunyaa_tools/tuners/material_tuners.py:515 mmd_uuunyaa_tools/tuners/material_tuners.py:587 mmd_uuunyaa_tools/tuners/material_tuners.py:631 mmd_uuunyaa_tools/tuners/material_tuners.py:852 ("*", "Scale"): "スケール", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:461 mmd_uuunyaa_tools/tuners/material_tuners.py:532 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:445 mmd_uuunyaa_tools/tuners/material_tuners.py:516 ("*", "Angle"): "角度", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:463 mmd_uuunyaa_tools/tuners/material_tuners.py:534 mmd_uuunyaa_tools/tuners/material_tuners.py:600 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:447 mmd_uuunyaa_tools/tuners/material_tuners.py:518 mmd_uuunyaa_tools/tuners/material_tuners.py:584 ("*", "Hole Alpha"): "穴アルファ", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:464 mmd_uuunyaa_tools/tuners/material_tuners.py:535 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:448 mmd_uuunyaa_tools/tuners/material_tuners.py:519 ("*", "Gaps"): "すき間", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:465 mmd_uuunyaa_tools/tuners/material_tuners.py:536 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:449 mmd_uuunyaa_tools/tuners/material_tuners.py:520 ("*", "Warp"): "縦糸", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:466 mmd_uuunyaa_tools/tuners/material_tuners.py:537 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:450 mmd_uuunyaa_tools/tuners/material_tuners.py:521 ("*", "Woof"): "横糸", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:467 mmd_uuunyaa_tools/tuners/material_tuners.py:538 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:451 mmd_uuunyaa_tools/tuners/material_tuners.py:522 ("*", "Distortion"): "歪み", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:468 mmd_uuunyaa_tools/tuners/material_tuners.py:539 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:452 mmd_uuunyaa_tools/tuners/material_tuners.py:523 ("*", "Fibers"): "繊維", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:469 mmd_uuunyaa_tools/tuners/material_tuners.py:540 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:453 mmd_uuunyaa_tools/tuners/material_tuners.py:524 ("*", "Fuzziness"): "曖昧さ", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:470 mmd_uuunyaa_tools/tuners/material_tuners.py:541 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:454 mmd_uuunyaa_tools/tuners/material_tuners.py:525 ("*", "Errors"): "誤差", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:524 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:508 ("*", "Fabric Silk"): "布地 絹", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:595 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:579 ("*", "Fabric Knit"): "編物", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:602 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:586 ("*", "Random Hue"): "ランダム色相", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:604 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:588 ("*", "X Compression"): "X圧縮", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:640 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:624 ("*", "Fabric Leather"): "革", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:643 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:627 ("*", "Primary Color"): "プライマリーカラー", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:644 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:628 ("*", "Secondary Color"): "セカンダリーカラー", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:646 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:630 ("*", "Old/New"): "古い/新しい", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:649 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:633 ("*", "Tartiary Detail"): "詳細さ", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:689 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:673 ("*", "Plastic Gloss"): "プラスチック 光沢", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:717 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:699 ("*", "Plastic Bump"): "プラスチック 凹凸", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:749 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:731 ("*", "Plastic Matte"): "プラスチック つや消し", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:777 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:757 ("*", "Plastic Emission"): "プラスチック 発光", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:806 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:784 ("*", "Liquid Water"): "水", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:833 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:811 ("*", "Liquid Cloudy"): "液体 白濁", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:870 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:848 ("*", "Artistic Watercolor"): "表現手法 水彩画", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:875 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:853 ("*", "Background Scale"): "背景スケール", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:876 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:854 ("*", "Bleed Strength"): "滲み強度", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:909 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:885 ("*", "Toon Shader"): "トーンシェーダー", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:912 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:888 ("*", "Base Color"): "ベースカラー", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:913 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:889 ("*", "Highlight Color"): "ハイライトカラー", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:914 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:890 ("*", "Shadow Color"): "影のカラー", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:915 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:891 ("*", "Rim Light Strength"): "リムライト強度", #: mmd_uuunyaa_tools/tuners/operators.py:13 ("Operator", "Tune Lighting"): "ライト調整", @@ -905,6 +909,8 @@ def unregister(): ("*", "Choose the material you want to use"): "マテリアルを選択", #: mmd_uuunyaa_tools/tuners/properties.py:63 ("*", "Choose the geometry nodes you want to use"): "ジオメトリノードを選択", + #: MISSING + ("*", "Size"): "サイズ", }, "zh_CN": { #: mmd_uuunyaa_tools/__init__.py:41 @@ -1143,7 +1149,7 @@ def unregister(): ("*", "Upper Body2 as"): "上半身2为", #: mmd_uuunyaa_tools/converters/armatures/operators.py:345 ("*", "Lower Body as"): "下半身为", - #: mmd_uuunyaa_tools/converters/armatures/operators.py:381 mmd_uuunyaa_tools/converters/armatures/operators.py:450 mmd_uuunyaa_tools/panels.py:62 mmd_uuunyaa_tools/panels.py:67 + #: mmd_uuunyaa_tools/converters/armatures/operators.py:381 mmd_uuunyaa_tools/converters/armatures/operators.py:450 mmd_uuunyaa_tools/panels.py:75 mmd_uuunyaa_tools/panels.py:80 ("Operator", "Apply MMD Rest Pose"): "应用MMD静置姿态", #: mmd_uuunyaa_tools/converters/armatures/operators.py:384 mmd_uuunyaa_tools/converters/armatures/operators.py:453 ("*", "Iterations"): "迭代", @@ -1265,8 +1271,8 @@ def unregister(): ("*", "Minimum Distance"): "最小距离", #: mmd_uuunyaa_tools/converters/physics/cloth.py:466 ("*", "Impulse Clamping"): "冲量钳制", - #: mmd_uuunyaa_tools/converters/physics/cloth_bone.py:15 mmd_uuunyaa_tools/converters/physics/panels.py:79 - ("*", "Stretch Bone to Vertex"): "拉伸骨骼到顶点", + #: mmd_uuunyaa_tools/converters/physics/cloth_bone.py:15 mmd_uuunyaa_tools/panels.py:142 + ("Operator", "Stretch Bone to Vertex"): "拉伸骨骼到顶点", #: mmd_uuunyaa_tools/converters/physics/cloth_pyramid.py:160 ("*", "Target bones not found."): "没有找到目标骨骼", #: mmd_uuunyaa_tools/converters/physics/cloth_pyramid.py:775 @@ -1327,32 +1333,6 @@ def unregister(): ("*", "Brush Default"): "笔刷 默认", #: mmd_uuunyaa_tools/converters/physics/dynamic_paint.py:185 ("*", "Active Surface"): "活动表面", - #: mmd_uuunyaa_tools/converters/physics/panels.py:22 - ("*", "UuuNyaa Physics"): "UuuNyaa物理计算", - #: mmd_uuunyaa_tools/converters/physics/panels.py:31 - ("*", "Relevant Selection:"): "相关选:", - #: mmd_uuunyaa_tools/converters/physics/panels.py:34 - ("*", "Collision Mesh"): "碰撞网格", - #: mmd_uuunyaa_tools/converters/physics/panels.py:41 - ("*", "MMD Model is not selected."): "未选择MMD模型", - #: mmd_uuunyaa_tools/converters/physics/panels.py:46 - ("*", "Rigid Body"): "刚体", - #: mmd_uuunyaa_tools/converters/physics/panels.py:55 - ("*", "Cloth Mesh"): "布料网格", - #: mmd_uuunyaa_tools/converters/physics/panels.py:61 - ("*", "Converter:"): "转换器:", - #: mmd_uuunyaa_tools/converters/physics/panels.py:65 - ("Operator", "Rigid Body to Cloth"): "将刚体转换为布料", - #: mmd_uuunyaa_tools/converters/physics/panels.py:70 - ("*", "Pyramid Cloth:"): "金字塔布料:", - #: mmd_uuunyaa_tools/converters/physics/panels.py:72 - ("Operator", "Add Pyramid"): "添加金字塔", - #: mmd_uuunyaa_tools/converters/physics/panels.py:73 - ("Operator", "Pyramid to Cloth"): "将金字塔转换为布料", - #: mmd_uuunyaa_tools/converters/physics/panels.py:74 - ("Operator", "Repaint Weight"): "重新权重绘制", - #: mmd_uuunyaa_tools/converters/physics/panels.py:77 - ("*", "Misc:"): "杂项", #: mmd_uuunyaa_tools/converters/physics/rigid_body.py:15 ("*", "UuuNyaa Rigid Body Adjuster"): "UuuNyaa刚体调整器", #: mmd_uuunyaa_tools/converters/physics/rigid_body.py:35 @@ -1389,43 +1369,43 @@ def unregister(): #: mmd_uuunyaa_tools/editors/menus.py:95 mmd_uuunyaa_tools/editors/operators.py:455 ("Operator", "Scaled"): "缩放过", ("*", "Scaled"): "缩放过", - #: mmd_uuunyaa_tools/editors/nodes.py:223 + #: mmd_uuunyaa_tools/editors/nodes.py:233 ("*", "Skin Color Adjust"): "皮肤色调整", - #: mmd_uuunyaa_tools/editors/nodes.py:226 mmd_uuunyaa_tools/tuners/material_tuners.py:261 + #: mmd_uuunyaa_tools/editors/nodes.py:236 mmd_uuunyaa_tools/tuners/material_tuners.py:251 ("*", "Skin Bump"): "皮肤 凹凸", - #: mmd_uuunyaa_tools/editors/nodes.py:229 + #: mmd_uuunyaa_tools/editors/nodes.py:239 ("*", "Fabric Woven Texture"): "织物编织纹理", - #: mmd_uuunyaa_tools/editors/nodes.py:232 mmd_uuunyaa_tools/tuners/material_tuners.py:389 + #: mmd_uuunyaa_tools/editors/nodes.py:242 mmd_uuunyaa_tools/tuners/material_tuners.py:373 ("*", "Fabric Bump"): "织物 凹凸", - #: mmd_uuunyaa_tools/editors/nodes.py:235 + #: mmd_uuunyaa_tools/editors/nodes.py:245 ("*", "Wave Bump"): "波浪凹凸", - #: mmd_uuunyaa_tools/editors/nodes.py:238 + #: mmd_uuunyaa_tools/editors/nodes.py:248 ("*", "Magic Bump"): "迷幻凹凸", - #: mmd_uuunyaa_tools/editors/nodes.py:241 + #: mmd_uuunyaa_tools/editors/nodes.py:251 ("*", "Shadowless BSDF"): "无影BSDF", - #: mmd_uuunyaa_tools/editors/nodes.py:244 + #: mmd_uuunyaa_tools/editors/nodes.py:254 ("*", "Gem BSDF"): "宝石BSDF", - #: mmd_uuunyaa_tools/editors/nodes.py:247 + #: mmd_uuunyaa_tools/editors/nodes.py:257 ("*", "Liquid BSDF"): "液体BSDF", - #: mmd_uuunyaa_tools/editors/nodes.py:250 + #: mmd_uuunyaa_tools/editors/nodes.py:260 ("*", "Knit Texture"): "针织纹理", - #: mmd_uuunyaa_tools/editors/nodes.py:253 + #: mmd_uuunyaa_tools/editors/nodes.py:263 ("*", "Leather Texture"): "皮革纹理", - #: mmd_uuunyaa_tools/editors/nodes.py:256 + #: mmd_uuunyaa_tools/editors/nodes.py:266 ("*", "Watercolor Texture"): "水彩画纹理", - #: mmd_uuunyaa_tools/editors/nodes.py:259 + #: mmd_uuunyaa_tools/editors/nodes.py:269 ("*", "Toon Shader Texture"): "卡通着色器纹理", - #: mmd_uuunyaa_tools/editors/nodes.py:262 + #: mmd_uuunyaa_tools/editors/nodes.py:272 ("*", "MMDTexUV"): "MMDTexUV", - #: mmd_uuunyaa_tools/editors/nodes.py:265 mmd_uuunyaa_tools/tuners/material_adjusters.py:103 + #: mmd_uuunyaa_tools/editors/nodes.py:275 mmd_uuunyaa_tools/tuners/material_adjusters.py:103 ("*", "Subsurface Adjuster"): "次表面调整器", - #: mmd_uuunyaa_tools/editors/nodes.py:268 mmd_uuunyaa_tools/tuners/material_adjusters.py:58 + #: mmd_uuunyaa_tools/editors/nodes.py:278 mmd_uuunyaa_tools/tuners/material_adjusters.py:58 ("*", "Wet Adjuster"): "湿润调整器", - #: mmd_uuunyaa_tools/editors/nodes.py:271 mmd_uuunyaa_tools/tuners/material_adjusters.py:195 + #: mmd_uuunyaa_tools/editors/nodes.py:281 mmd_uuunyaa_tools/tuners/material_adjusters.py:195 ("*", "Emission Adjuster"): "发射调整器", - #: mmd_uuunyaa_tools/editors/nodes.py:274 mmd_uuunyaa_tools/tuners/material_adjusters.py:149 + #: mmd_uuunyaa_tools/editors/nodes.py:284 mmd_uuunyaa_tools/tuners/material_adjusters.py:149 ("*", "Glitter Adjuster"): "闪耀调整器", - #: mmd_uuunyaa_tools/editors/nodes.py:316 + #: mmd_uuunyaa_tools/editors/nodes.py:326 ("*", "Sun Direction"): "太阳方向", #: mmd_uuunyaa_tools/editors/operators.py:19 ("Operator", "Convert Materials for Eevee"): "转换材质给Eevee", @@ -1477,6 +1457,10 @@ def unregister(): ("*", "Update {} ready!"): "可以更新!", #: mmd_uuunyaa_tools/externals/addon_updater/addon_updater_ops.py:1067 mmd_uuunyaa_tools/externals/addon_updater/addon_updater_ops.py:1210 ("*", "Update now to {}"): "立即更新 {}", + #: mmd_uuunyaa_tools/generators/physics.py:15 mmd_uuunyaa_tools/panels.py:143 + ("Operator", "Add Center of Gravity"): "添加重心", + #: mmd_uuunyaa_tools/generators/physics.py:18 + ("*", "Radius"): "半径", #: mmd_uuunyaa_tools/generators/skin_hair.py:117 ("*", "Add Skin Hair Mesh"): "添加体毛网格", #: mmd_uuunyaa_tools/generators/skin_hair.py:118 @@ -1505,20 +1489,46 @@ def unregister(): ("Operator", "Skin Hair"): "体毛", #: mmd_uuunyaa_tools/generators/skin_hair.py:188 ("*", "UuuNyaa Extras"): "UuuNyaa其他项", - #: mmd_uuunyaa_tools/panels.py:20 + #: mmd_uuunyaa_tools/panels.py:33 ("*", "UuuNyaa Operator"): "UuuNyaa操作项", - #: mmd_uuunyaa_tools/panels.py:30 + #: mmd_uuunyaa_tools/panels.py:43 ("*", "Render:"): "渲染:", - #: mmd_uuunyaa_tools/panels.py:38 + #: mmd_uuunyaa_tools/panels.py:51 ("*", "MMD to Rigify:"): "MMD到Rigify:", - #: mmd_uuunyaa_tools/panels.py:42 + #: mmd_uuunyaa_tools/panels.py:55 ("Operator", "Add Metarig"): "添加Metarig", - #: mmd_uuunyaa_tools/panels.py:59 + #: mmd_uuunyaa_tools/panels.py:72 ("*", "Rigify to MMD:"): "Rigify到MMD:", - #: mmd_uuunyaa_tools/panels.py:61 mmd_uuunyaa_tools/panels.py:66 + #: mmd_uuunyaa_tools/panels.py:74 mmd_uuunyaa_tools/panels.py:79 ("Operator", "Convert to MMD compatible"): "转换为MMD兼容", - #: mmd_uuunyaa_tools/panels.py:64 + #: mmd_uuunyaa_tools/panels.py:77 ("*", "(Experimental) Auto-Rig to MMD:"): "(实验的) Auto-Rig到MMD:", + #: mmd_uuunyaa_tools/panels.py:85 + ("*", "UuuNyaa Physics"): "UuuNyaa物理计算", + #: mmd_uuunyaa_tools/panels.py:94 + ("*", "Relevant Selection:"): "相关选:", + #: mmd_uuunyaa_tools/panels.py:97 + ("*", "Collision Mesh"): "碰撞网格", + #: mmd_uuunyaa_tools/panels.py:104 + ("*", "MMD Model is not selected."): "未选择MMD模型", + #: mmd_uuunyaa_tools/panels.py:109 + ("*", "Rigid Body"): "刚体", + #: mmd_uuunyaa_tools/panels.py:118 + ("*", "Cloth Mesh"): "布料网格", + #: mmd_uuunyaa_tools/panels.py:124 + ("*", "Converter:"): "转换器:", + #: mmd_uuunyaa_tools/panels.py:128 + ("Operator", "Rigid Body to Cloth"): "将刚体转换为布料", + #: mmd_uuunyaa_tools/panels.py:133 + ("*", "Pyramid Cloth:"): "金字塔布料:", + #: mmd_uuunyaa_tools/panels.py:135 + ("Operator", "Add Pyramid"): "添加金字塔", + #: mmd_uuunyaa_tools/panels.py:136 + ("Operator", "Pyramid to Cloth"): "将金字塔转换为布料", + #: mmd_uuunyaa_tools/panels.py:137 + ("Operator", "Repaint Weight"): "重新权重绘制", + #: mmd_uuunyaa_tools/panels.py:140 + ("*", "Misc:"): "杂项", #: mmd_uuunyaa_tools/preferences.py:22 ("*", "Asset Search Results Max. Display Count"): "显示的资产搜索结果的最大数量", #: mmd_uuunyaa_tools/preferences.py:23 @@ -1621,7 +1631,7 @@ def unregister(): ("*", "Shadowless"): "无影", #: mmd_uuunyaa_tools/tuners/material_adjusters.py:61 mmd_uuunyaa_tools/tuners/material_adjusters.py:152 ("*", "Specular"): "高光", - #: mmd_uuunyaa_tools/tuners/material_adjusters.py:62 mmd_uuunyaa_tools/tuners/material_adjusters.py:153 mmd_uuunyaa_tools/tuners/material_tuners.py:645 + #: mmd_uuunyaa_tools/tuners/material_adjusters.py:62 mmd_uuunyaa_tools/tuners/material_adjusters.py:153 mmd_uuunyaa_tools/tuners/material_tuners.py:629 ("*", "Roughness"): "糙度", #: mmd_uuunyaa_tools/tuners/material_adjusters.py:63 mmd_uuunyaa_tools/tuners/panels.py:182 ("*", "Wet"): "湿润", @@ -1639,11 +1649,11 @@ def unregister(): ("*", "Subsurface Color"): "次表面颜色", #: mmd_uuunyaa_tools/tuners/material_adjusters.py:154 mmd_uuunyaa_tools/tuners/panels.py:183 ("Operator", "Glitter"): "闪耀", - #: mmd_uuunyaa_tools/tuners/material_adjusters.py:198 mmd_uuunyaa_tools/tuners/material_tuners.py:456 mmd_uuunyaa_tools/tuners/material_tuners.py:527 mmd_uuunyaa_tools/tuners/material_tuners.py:598 mmd_uuunyaa_tools/tuners/material_tuners.py:873 + #: mmd_uuunyaa_tools/tuners/material_adjusters.py:198 mmd_uuunyaa_tools/tuners/material_tuners.py:440 mmd_uuunyaa_tools/tuners/material_tuners.py:511 mmd_uuunyaa_tools/tuners/material_tuners.py:582 mmd_uuunyaa_tools/tuners/material_tuners.py:851 ("*", "Color"): "颜色", #: mmd_uuunyaa_tools/tuners/material_adjusters.py:199 ("*", "Threshold"): "阈值", - #: mmd_uuunyaa_tools/tuners/material_adjusters.py:200 mmd_uuunyaa_tools/tuners/material_tuners.py:462 mmd_uuunyaa_tools/tuners/material_tuners.py:533 mmd_uuunyaa_tools/tuners/material_tuners.py:648 + #: mmd_uuunyaa_tools/tuners/material_adjusters.py:200 mmd_uuunyaa_tools/tuners/material_tuners.py:446 mmd_uuunyaa_tools/tuners/material_tuners.py:517 mmd_uuunyaa_tools/tuners/material_tuners.py:632 ("*", "Strength"): "强度/力度", #: mmd_uuunyaa_tools/tuners/material_adjusters.py:201 mmd_uuunyaa_tools/tuners/panels.py:184 ("*", "Emission"): "发射", @@ -1654,97 +1664,97 @@ def unregister(): ("*", "Transparent"): "透明", #: mmd_uuunyaa_tools/tuners/material_tuners.py:73 ("*", "Eye Highlight"): "眼高亮", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:98 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:96 ("*", "Eye White"): "眼白", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:123 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:119 ("*", "Eye Iris"): "眼睛虹膜", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:153 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:147 ("*", "Eye Lash"): "眼睫毛", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:181 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:173 ("*", "Hair Matte"): "头发 哑光", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:209 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:199 ("*", "Skin Mucosa"): "粘膜", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:303 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:293 ("*", "Metal Noble"): "贵重金属", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:331 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:319 ("*", "Metal Base"): "基本金属", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:358 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:344 ("*", "Stone Gem"): "石头 宝石", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:420 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:404 ("*", "Fabric Wave"): "织物 波浪", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:453 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:437 ("*", "Fabric Cotton"): "织物 棉布", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:457 mmd_uuunyaa_tools/tuners/material_tuners.py:528 mmd_uuunyaa_tools/tuners/material_tuners.py:599 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:441 mmd_uuunyaa_tools/tuners/material_tuners.py:512 mmd_uuunyaa_tools/tuners/material_tuners.py:583 ("*", "Alpha"): "Alpha", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:458 mmd_uuunyaa_tools/tuners/material_tuners.py:529 mmd_uuunyaa_tools/tuners/material_tuners.py:601 mmd_uuunyaa_tools/tuners/material_tuners.py:650 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:442 mmd_uuunyaa_tools/tuners/material_tuners.py:513 mmd_uuunyaa_tools/tuners/material_tuners.py:585 mmd_uuunyaa_tools/tuners/material_tuners.py:634 ("*", "Vector"): "矢量", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:459 mmd_uuunyaa_tools/tuners/material_tuners.py:530 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:443 mmd_uuunyaa_tools/tuners/material_tuners.py:514 ("*", "Impurity"): "杂质", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:460 mmd_uuunyaa_tools/tuners/material_tuners.py:531 mmd_uuunyaa_tools/tuners/material_tuners.py:603 mmd_uuunyaa_tools/tuners/material_tuners.py:647 mmd_uuunyaa_tools/tuners/material_tuners.py:874 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:444 mmd_uuunyaa_tools/tuners/material_tuners.py:515 mmd_uuunyaa_tools/tuners/material_tuners.py:587 mmd_uuunyaa_tools/tuners/material_tuners.py:631 mmd_uuunyaa_tools/tuners/material_tuners.py:852 ("*", "Scale"): "缩放", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:461 mmd_uuunyaa_tools/tuners/material_tuners.py:532 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:445 mmd_uuunyaa_tools/tuners/material_tuners.py:516 ("*", "Angle"): "角度", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:463 mmd_uuunyaa_tools/tuners/material_tuners.py:534 mmd_uuunyaa_tools/tuners/material_tuners.py:600 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:447 mmd_uuunyaa_tools/tuners/material_tuners.py:518 mmd_uuunyaa_tools/tuners/material_tuners.py:584 ("*", "Hole Alpha"): "孔Alpha", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:464 mmd_uuunyaa_tools/tuners/material_tuners.py:535 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:448 mmd_uuunyaa_tools/tuners/material_tuners.py:519 ("*", "Gaps"): "差距", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:465 mmd_uuunyaa_tools/tuners/material_tuners.py:536 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:449 mmd_uuunyaa_tools/tuners/material_tuners.py:520 ("*", "Warp"): "经线", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:466 mmd_uuunyaa_tools/tuners/material_tuners.py:537 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:450 mmd_uuunyaa_tools/tuners/material_tuners.py:521 ("*", "Woof"): "纬线", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:467 mmd_uuunyaa_tools/tuners/material_tuners.py:538 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:451 mmd_uuunyaa_tools/tuners/material_tuners.py:522 ("*", "Distortion"): "畸变", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:468 mmd_uuunyaa_tools/tuners/material_tuners.py:539 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:452 mmd_uuunyaa_tools/tuners/material_tuners.py:523 ("*", "Fibers"): "纤维", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:469 mmd_uuunyaa_tools/tuners/material_tuners.py:540 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:453 mmd_uuunyaa_tools/tuners/material_tuners.py:524 ("*", "Fuzziness"): "模糊性", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:470 mmd_uuunyaa_tools/tuners/material_tuners.py:541 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:454 mmd_uuunyaa_tools/tuners/material_tuners.py:525 ("*", "Errors"): "錯誤", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:524 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:508 ("*", "Fabric Silk"): "织物 丝绸", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:595 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:579 ("*", "Fabric Knit"): "织物 针织", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:602 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:586 ("*", "Random Hue"): "随机色相", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:604 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:588 ("*", "X Compression"): "X压缩", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:640 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:624 ("*", "Fabric Leather"): "织物 皮革", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:643 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:627 ("*", "Primary Color"): "主色", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:644 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:628 ("*", "Secondary Color"): "二次色", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:646 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:630 ("*", "Old/New"): "旧 / 新", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:649 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:633 ("*", "Tartiary Detail"): "详细性", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:689 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:673 ("*", "Plastic Gloss"): "塑胶 光泽", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:717 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:699 ("*", "Plastic Bump"): "塑胶 凹凸", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:749 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:731 ("*", "Plastic Matte"): "塑胶 哑光", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:777 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:757 ("*", "Plastic Emission"): "塑胶 发射", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:806 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:784 ("*", "Liquid Water"): "液体 水", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:833 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:811 ("*", "Liquid Cloudy"): "液体 多云", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:870 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:848 ("*", "Artistic Watercolor"): "艺术性的 水彩画", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:875 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:853 ("*", "Background Scale"): "背景缩放", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:876 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:854 ("*", "Bleed Strength"): "渗水强度", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:909 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:885 ("*", "Toon Shader"): "卡通着色器", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:912 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:888 ("*", "Base Color"): "基础色", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:913 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:889 ("*", "Highlight Color"): "高亮色", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:914 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:890 ("*", "Shadow Color"): "阴影色", - #: mmd_uuunyaa_tools/tuners/material_tuners.py:915 + #: mmd_uuunyaa_tools/tuners/material_tuners.py:891 ("*", "Rim Light Strength"): "边缘光强度", #: mmd_uuunyaa_tools/tuners/operators.py:13 ("Operator", "Tune Lighting"): "照明调整", @@ -1788,6 +1798,8 @@ def unregister(): ("*", "Choose the material you want to use"): "选择你的材质", #: mmd_uuunyaa_tools/tuners/properties.py:63 ("*", "Choose the geometry nodes you want to use"): "选择你的几何节点", + #: MISSING + ("*", "Size"): "", }, } # ##### END AUTOGENERATED I18N SECTION ##### diff --git a/mmd_uuunyaa_tools/panels.py b/mmd_uuunyaa_tools/panels.py index 212cadd..b3e6151 100644 --- a/mmd_uuunyaa_tools/panels.py +++ b/mmd_uuunyaa_tools/panels.py @@ -9,10 +9,23 @@ MMDArmatureAddMetarig, MMDAutoRigApplyMMDRestPose, MMDAutoRigConvert, MMDRigifyApplyMMDRestPose, MMDRigifyConvert, MMDRigifyIntegrateFocusOnMMD, MMDRigifyIntegrateFocusOnRigify) +from mmd_uuunyaa_tools.converters.physics.cloth import ( + ConvertRigidBodyToClothOperator, RemoveMeshCloth, SelectClothMesh) +from mmd_uuunyaa_tools.converters.physics.cloth_bone import \ + StretchBoneToVertexOperator +from mmd_uuunyaa_tools.converters.physics.cloth_pyramid import ( + AddPyramidMeshByBreastBoneOperator, AssignPyramidWeightsOperator, + ConvertPyramidMeshToClothOperator) +from mmd_uuunyaa_tools.converters.physics.collision import ( + RemoveMeshCollision, SelectCollisionMesh) from mmd_uuunyaa_tools.editors.operators import (SetupRenderEngineForEevee, SetupRenderEngineForToonEevee, SetupRenderEngineForWorkbench) +from mmd_uuunyaa_tools.generators.physics import AddCenterOfGravityObject from mmd_uuunyaa_tools.m17n import _ +from mmd_uuunyaa_tools.utilities import import_mmd_tools + +mmd_tools = import_mmd_tools() class OperatorPanel(bpy.types.Panel): @@ -65,3 +78,91 @@ def draw(self, _context): grid = col.grid_flow(row_major=True, align=True) grid.row(align=True).operator(MMDAutoRigConvert.bl_idname, text=_('Convert to MMD compatible'), icon='ARMATURE_DATA') grid.row(align=True).operator(MMDAutoRigApplyMMDRestPose.bl_idname, text=_('Apply MMD Rest Pose')) + + +class UuuNyaaPhysicsPanel(bpy.types.Panel): + bl_idname = 'UUUNYAA_PT_physics' + bl_label = _('UuuNyaa Physics') + bl_space_type = 'VIEW_3D' + bl_region_type = 'UI' + bl_category = 'MMD' + + def draw(self, context: bpy.types.Context): + layout = self.layout + + col = layout.column(align=True) + col.label(text=_('Relevant Selection:'), icon='RESTRICT_SELECT_OFF') + grid = col.grid_flow(row_major=True) + row = grid.row(align=True) + row.label(text=_('Collision Mesh'), icon='MOD_PHYSICS') + row.operator(SelectCollisionMesh.bl_idname, text=_(''), icon='RESTRICT_SELECT_OFF') + row.operator(RemoveMeshCollision.bl_idname, text=_(''), icon='TRASH') + + mmd_root_object = mmd_tools.core.model.Model.findRoot(context.active_object) + if mmd_root_object is None: + col = layout.column(align=True) + col.label(text=_('MMD Model is not selected.'), icon='ERROR') + else: + mmd_root = mmd_root_object.mmd_root + + row = grid.row(align=True) + row.label(text=_('Rigid Body'), icon='RIGID_BODY') + row.operator_context = 'EXEC_DEFAULT' + operator = row.operator('mmd_tools.rigid_body_select', text=_(''), icon='RESTRICT_SELECT_OFF') + operator.properties = set(['collision_group_number', 'shape']) + row.operator_context = 'INVOKE_DEFAULT' + row.prop(mmd_root, 'show_rigid_bodies', toggle=True, icon_only=True, icon='HIDE_OFF' if mmd_root.show_rigid_bodies else 'HIDE_ON') + row.operator('rigidbody.objects_remove', text=_(''), icon='TRASH') + + row = grid.row(align=True) + row.label(text=_('Cloth Mesh'), icon='MOD_CLOTH') + row.operator(SelectClothMesh.bl_idname, text=_(''), icon='RESTRICT_SELECT_OFF') + row.prop(mmd_root_object, 'mmd_uuunyaa_tools_show_cloths', toggle=True, icon_only=True, icon='HIDE_OFF' if mmd_root_object.mmd_uuunyaa_tools_show_cloths else 'HIDE_ON') + row.operator(RemoveMeshCloth.bl_idname, text=_(''), icon='TRASH') + + col = layout.column(align=True) + col.label(text=_('Converter:'), icon='SHADERFX') + + row = col.row(align=True) + row.operator_context = 'EXEC_DEFAULT' + row.operator(ConvertRigidBodyToClothOperator.bl_idname, text=_('Rigid Body to Cloth'), icon='MATCLOTH') + row.operator_context = 'INVOKE_DEFAULT' + row.operator(ConvertRigidBodyToClothOperator.bl_idname, text=_(''), icon='WINDOW') + + col = layout.column(align=True) + col.label(text=_('Pyramid Cloth:'), icon='MESH_CONE') + grid = col.grid_flow(row_major=True, align=True) + grid.row(align=True).operator(AddPyramidMeshByBreastBoneOperator.bl_idname, text=_('Add Pyramid'), icon='CONE') + grid.row(align=True).operator(ConvertPyramidMeshToClothOperator.bl_idname, text=_('Pyramid to Cloth'), icon='MOD_CLOTH') + grid.row(align=True).operator(AssignPyramidWeightsOperator.bl_idname, text=_('Repaint Weight'), icon='WPAINT_HLT') + + col = layout.column(align=True) + col.label(text=_('Misc:'), icon='BLENDER') + grid = col.grid_flow(row_major=True) + grid.row(align=True).operator(StretchBoneToVertexOperator.bl_idname, text=_('Stretch Bone to Vertex'), icon='CONSTRAINT_BONE') + grid.row(align=True).operator(AddCenterOfGravityObject.bl_idname, text=_('Add Center of Gravity'), icon='ORIENTATION_CURSOR') + + @staticmethod + def _toggle_visibility_of_cloths(obj, context): + mmd_root_object = mmd_tools.core.model.Model.findRoot(obj) + mmd_model = mmd_tools.core.model.Model(mmd_root_object) + hide = not mmd_root_object.mmd_uuunyaa_tools_show_cloths + + cloth_object: bpy.types.Object + for cloth_object in mmd_model.cloths(): + cloth_object.hide = hide + + if hide and context.active_object is None: + context.view_layer.objects.active = mmd_root_object + + @staticmethod + def register(): + # pylint: disable=assignment-from-no-return + bpy.types.Object.mmd_uuunyaa_tools_show_cloths = bpy.props.BoolProperty( + default=True, + update=UuuNyaaPhysicsPanel._toggle_visibility_of_cloths + ) + + @staticmethod + def unregister(): + del bpy.types.Object.mmd_uuunyaa_tools_show_cloths