feat: Add VRM Blender addon with complete import/export functionality

- Add core VRM addon infrastructure with manifest and registration
- Add common utilities module with file system, logging, and conversion helpers
- Add human bone mapper with support for multiple rigging standards (Mixamo, MMD, Unreal, Rigify, etc.)
- Add VRM 0.x and 1.x format support with property groups and handlers
- Add editor UI panels for VRM metadata, spring bones, and MToon materials
- Add exporter with glTF2 extension support for VRM format serialization
- Add importer with scene reconstruction and armature generation
- Add MToon shader support with auto-setup and material migration
- Add spring bone physics simulation with constraint handling
- Add node constraint editor for advanced rigging control
- Add comprehensive validation and error handling with user dialogs
- Add scene watcher for real-time property synchronization
- Add workspace management and preference system
- Include Python cache files and Blender manifest configuration
- This is the initial commit establishing the complete VRM addon ecosystem for Blender
This commit is contained in:
2026-01-01 14:21:56 +08:00
commit 091ad6a49a
243 changed files with 60636 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
# This code is auto generated.
# To regenerate, run the `uv run tools/property_typing.py` command.
from collections.abc import Mapping, Sequence
from typing import Optional, Union
import bpy
# This code is auto generated.
# To regenerate, run the `uv run tools/property_typing.py` command.
def vrm(
execution_context: str = "EXEC_DEFAULT",
/,
*,
filter_glob: str = "*.vrm",
use_addon_preferences: bool = False,
export_invisibles: bool = False,
export_only_selections: bool = False,
enable_advanced_preferences: bool = False,
export_all_influences: bool = False,
export_lights: bool = False,
export_gltf_animations: bool = False,
export_try_sparse_sk: bool = False,
errors: Optional[Sequence[Mapping[str, Union[str, int, float, bool]]]] = None,
armature_object_name: str = "",
ignore_warning: bool = False,
filepath: str = "",
check_existing: bool = True,
) -> set[str]:
return bpy.ops.export_scene.vrm( # type: ignore[attr-defined, no-any-return]
execution_context,
filter_glob=filter_glob,
use_addon_preferences=use_addon_preferences,
export_invisibles=export_invisibles,
export_only_selections=export_only_selections,
enable_advanced_preferences=enable_advanced_preferences,
export_all_influences=export_all_influences,
export_lights=export_lights,
export_gltf_animations=export_gltf_animations,
export_try_sparse_sk=export_try_sparse_sk,
errors=errors if errors is not None else [],
armature_object_name=armature_object_name,
ignore_warning=ignore_warning,
filepath=filepath,
check_existing=check_existing,
)
# This code is auto generated.
# To regenerate, run the `uv run tools/property_typing.py` command.
def vrma(
execution_context: str = "EXEC_DEFAULT",
/,
*,
filter_glob: str = "*.vrma",
armature_object_name: str = "",
filepath: str = "",
check_existing: bool = True,
) -> set[str]:
return bpy.ops.export_scene.vrma( # type: ignore[attr-defined, no-any-return]
execution_context,
filter_glob=filter_glob,
armature_object_name=armature_object_name,
filepath=filepath,
check_existing=check_existing,
)