@volter/blender-engine 0.1.147 → 0.1.149

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/LICENSE +16 -0
  2. package/README.md +4 -11
  3. package/browser/addons/vrm/LICENSE_(OPTION1)_MIT.txt +22 -0
  4. package/browser/addons/vrm/LICENSE_(OPTION2)_GPL-3_0.txt +674 -0
  5. package/browser/addons/vrm/LICENSE_MAIN.txt +1 -0
  6. package/browser/addons/vrm/README.txt +3 -0
  7. package/browser/addons/vrm/__init__.py +41 -0
  8. package/browser/addons/vrm/blender_manifest.toml +16 -0
  9. package/browser/addons/vrm/common/__init__.py +1 -0
  10. package/browser/addons/vrm/common/animation.py +58 -0
  11. package/browser/addons/vrm/common/blender_manifest.py +82 -0
  12. package/browser/addons/vrm/common/char.py +16 -0
  13. package/browser/addons/vrm/common/convert.py +287 -0
  14. package/browser/addons/vrm/common/convert_any.py +48 -0
  15. package/browser/addons/vrm/common/debug.py +40 -0
  16. package/browser/addons/vrm/common/deep.py +162 -0
  17. package/browser/addons/vrm/common/error_dialog.py +274 -0
  18. package/browser/addons/vrm/common/fs.py +71 -0
  19. package/browser/addons/vrm/common/gl.py +20 -0
  20. package/browser/addons/vrm/common/gltf.py +1149 -0
  21. package/browser/addons/vrm/common/human_bone_mapper/__init__.py +1 -0
  22. package/browser/addons/vrm/common/human_bone_mapper/biped_mapping.py +84 -0
  23. package/browser/addons/vrm/common/human_bone_mapper/cats_blender_plugin_fix_model_mapping.py +63 -0
  24. package/browser/addons/vrm/common/human_bone_mapper/human_bone_mapper.py +203 -0
  25. package/browser/addons/vrm/common/human_bone_mapper/microsoft_rocketbox_mapping.py +69 -0
  26. package/browser/addons/vrm/common/human_bone_mapper/mixamo_mapping.py +62 -0
  27. package/browser/addons/vrm/common/human_bone_mapper/mmd_mapping.py +115 -0
  28. package/browser/addons/vrm/common/human_bone_mapper/mpfb_mapping.py +120 -0
  29. package/browser/addons/vrm/common/human_bone_mapper/ready_player_me_mapping.py +65 -0
  30. package/browser/addons/vrm/common/human_bone_mapper/reallusion_mapping.py +94 -0
  31. package/browser/addons/vrm/common/human_bone_mapper/rigify_meta_rig_mapping.py +65 -0
  32. package/browser/addons/vrm/common/human_bone_mapper/structure_based_mapping.py +891 -0
  33. package/browser/addons/vrm/common/human_bone_mapper/unreal_mapping.py +62 -0
  34. package/browser/addons/vrm/common/human_bone_mapper/vrm_addon_mapping.py +112 -0
  35. package/browser/addons/vrm/common/human_bone_mapper/vroid_mapping.py +89 -0
  36. package/browser/addons/vrm/common/legacy_gltf.py +16 -0
  37. package/browser/addons/vrm/common/logger.py +84 -0
  38. package/browser/addons/vrm/common/mtoon0.blend +0 -0
  39. package/browser/addons/vrm/common/mtoon1.blend +0 -0
  40. package/browser/addons/vrm/common/mtoon1_outline.blend +0 -0
  41. package/browser/addons/vrm/common/mtoon_auto_setup.blend +0 -0
  42. package/browser/addons/vrm/common/mtoon_unversioned.py +62 -0
  43. package/browser/addons/vrm/common/ops/__init__.py +10 -0
  44. package/browser/addons/vrm/common/ops/export_scene.py +67 -0
  45. package/browser/addons/vrm/common/ops/icyp.py +53 -0
  46. package/browser/addons/vrm/common/ops/import_scene.py +57 -0
  47. package/browser/addons/vrm/common/ops/vrm.py +2380 -0
  48. package/browser/addons/vrm/common/ops/wm.py +167 -0
  49. package/browser/addons/vrm/common/preferences.py +362 -0
  50. package/browser/addons/vrm/common/progress.py +87 -0
  51. package/browser/addons/vrm/common/rotation.py +89 -0
  52. package/browser/addons/vrm/common/safe_removal.py +46 -0
  53. package/browser/addons/vrm/common/scene_watcher.py +230 -0
  54. package/browser/addons/vrm/common/shader.py +2243 -0
  55. package/browser/addons/vrm/common/shape_key_mapper/__init__.py +1 -0
  56. package/browser/addons/vrm/common/shape_key_mapper/arkit_mapping.py +168 -0
  57. package/browser/addons/vrm/common/shape_key_mapper/mmd_mapping.py +62 -0
  58. package/browser/addons/vrm/common/shape_key_mapper/ready_player_me_mapping.py +52 -0
  59. package/browser/addons/vrm/common/shape_key_mapper/vrchat_mapping.py +17 -0
  60. package/browser/addons/vrm/common/third_party_user_extension.py +214 -0
  61. package/browser/addons/vrm/common/transparent_z_write.blend +0 -0
  62. package/browser/addons/vrm/common/version.py +161 -0
  63. package/browser/addons/vrm/common/vrm0/__init__.py +1 -0
  64. package/browser/addons/vrm/common/vrm0/human_bone.py +662 -0
  65. package/browser/addons/vrm/common/vrm0/material_property.py +346 -0
  66. package/browser/addons/vrm/common/vrm1/__init__.py +1 -0
  67. package/browser/addons/vrm/common/vrm1/expression_preset.py +207 -0
  68. package/browser/addons/vrm/common/vrm1/human_bone.py +822 -0
  69. package/browser/addons/vrm/common/workspace.py +227 -0
  70. package/browser/addons/vrm/common/writable_context.py +77 -0
  71. package/browser/addons/vrm/documentation/en-us/animation/index.md +63 -0
  72. package/browser/addons/vrm/documentation/en-us/create-humanoid-vrm-from-scratch/index.md +131 -0
  73. package/browser/addons/vrm/documentation/en-us/create-simple-vrm-from-scratch/index.md +30 -0
  74. package/browser/addons/vrm/documentation/en-us/development/index.md +136 -0
  75. package/browser/addons/vrm/documentation/en-us/index.md +41 -0
  76. package/browser/addons/vrm/documentation/en-us/installation/index.md +152 -0
  77. package/browser/addons/vrm/documentation/en-us/material-mtoon/index.md +122 -0
  78. package/browser/addons/vrm/documentation/en-us/material-pbr/index.md +94 -0
  79. package/browser/addons/vrm/documentation/en-us/scripting-api/index.md +391 -0
  80. package/browser/addons/vrm/documentation/en-us/ui/export_scene.vrm/index.md +57 -0
  81. package/browser/addons/vrm/documentation/en-us/ui/export_scene.vrma/index.md +17 -0
  82. package/browser/addons/vrm/documentation/en-us/ui/import_scene.vrm/index.md +61 -0
  83. package/browser/addons/vrm/documentation/en-us/ui/import_scene.vrma/index.md +13 -0
  84. package/browser/addons/vrm/documentation/ja-jp/animation/index.md +57 -0
  85. package/browser/addons/vrm/documentation/ja-jp/create-humanoid-vrm-from-scratch/index.md +129 -0
  86. package/browser/addons/vrm/documentation/ja-jp/create-simple-vrm-from-scratch/index.md +29 -0
  87. package/browser/addons/vrm/documentation/ja-jp/development/index.md +137 -0
  88. package/browser/addons/vrm/documentation/ja-jp/index.md +37 -0
  89. package/browser/addons/vrm/documentation/ja-jp/installation/index.md +150 -0
  90. package/browser/addons/vrm/documentation/ja-jp/material-mtoon/index.md +113 -0
  91. package/browser/addons/vrm/documentation/ja-jp/material-pbr/index.md +90 -0
  92. package/browser/addons/vrm/documentation/ja-jp/scripting-api/index.md +389 -0
  93. package/browser/addons/vrm/documentation/ja-jp/ui/export_scene.vrm/index.md +55 -0
  94. package/browser/addons/vrm/documentation/ja-jp/ui/export_scene.vrma/index.md +19 -0
  95. package/browser/addons/vrm/documentation/ja-jp/ui/import_scene.vrm/index.md +56 -0
  96. package/browser/addons/vrm/documentation/ja-jp/ui/import_scene.vrma/index.md +14 -0
  97. package/browser/addons/vrm/editor/__init__.py +1 -0
  98. package/browser/addons/vrm/editor/extension.py +425 -0
  99. package/browser/addons/vrm/editor/extension_accessor.py +75 -0
  100. package/browser/addons/vrm/editor/handler.py +84 -0
  101. package/browser/addons/vrm/editor/khr_character/__init__.py +1 -0
  102. package/browser/addons/vrm/editor/khr_character/panel.py +69 -0
  103. package/browser/addons/vrm/editor/khr_character/property_group.py +27 -0
  104. package/browser/addons/vrm/editor/khr_xmp_json_ld/__init__.py +1 -0
  105. package/browser/addons/vrm/editor/khr_xmp_json_ld/ops.py +464 -0
  106. package/browser/addons/vrm/editor/khr_xmp_json_ld/panel.py +136 -0
  107. package/browser/addons/vrm/editor/khr_xmp_json_ld/property_group.py +83 -0
  108. package/browser/addons/vrm/editor/khr_xmp_json_ld/ui_list.py +198 -0
  109. package/browser/addons/vrm/editor/make_armature.py +709 -0
  110. package/browser/addons/vrm/editor/menu.py +147 -0
  111. package/browser/addons/vrm/editor/migration.py +297 -0
  112. package/browser/addons/vrm/editor/mtoon1/__init__.py +1 -0
  113. package/browser/addons/vrm/editor/mtoon1/handler.py +20 -0
  114. package/browser/addons/vrm/editor/mtoon1/migration.py +536 -0
  115. package/browser/addons/vrm/editor/mtoon1/ops.py +304 -0
  116. package/browser/addons/vrm/editor/mtoon1/panel.py +442 -0
  117. package/browser/addons/vrm/editor/mtoon1/property_group.py +4977 -0
  118. package/browser/addons/vrm/editor/mtoon1/scene_watcher.py +381 -0
  119. package/browser/addons/vrm/editor/node_constraint1/__init__.py +1 -0
  120. package/browser/addons/vrm/editor/node_constraint1/panel.py +317 -0
  121. package/browser/addons/vrm/editor/node_constraint1/property_group.py +25 -0
  122. package/browser/addons/vrm/editor/ops.py +471 -0
  123. package/browser/addons/vrm/editor/panel.py +315 -0
  124. package/browser/addons/vrm/editor/property_group.py +888 -0
  125. package/browser/addons/vrm/editor/search.py +682 -0
  126. package/browser/addons/vrm/editor/spring_bone1/__init__.py +1 -0
  127. package/browser/addons/vrm/editor/spring_bone1/handler.py +994 -0
  128. package/browser/addons/vrm/editor/spring_bone1/menu.py +246 -0
  129. package/browser/addons/vrm/editor/spring_bone1/migration.py +86 -0
  130. package/browser/addons/vrm/editor/spring_bone1/ops.py +1679 -0
  131. package/browser/addons/vrm/editor/spring_bone1/panel.py +605 -0
  132. package/browser/addons/vrm/editor/spring_bone1/property_group.py +1457 -0
  133. package/browser/addons/vrm/editor/spring_bone1/ui_list.py +408 -0
  134. package/browser/addons/vrm/editor/subscription.py +123 -0
  135. package/browser/addons/vrm/editor/t_pose.py +713 -0
  136. package/browser/addons/vrm/editor/validation.py +1271 -0
  137. package/browser/addons/vrm/editor/vrm0/__init__.py +1 -0
  138. package/browser/addons/vrm/editor/vrm0/gizmo_group.py +63 -0
  139. package/browser/addons/vrm/editor/vrm0/handler.py +23 -0
  140. package/browser/addons/vrm/editor/vrm0/menu.py +145 -0
  141. package/browser/addons/vrm/editor/vrm0/migration.py +761 -0
  142. package/browser/addons/vrm/editor/vrm0/ops.py +2145 -0
  143. package/browser/addons/vrm/editor/vrm0/panel.py +1333 -0
  144. package/browser/addons/vrm/editor/vrm0/property_group.py +1818 -0
  145. package/browser/addons/vrm/editor/vrm0/ui_list.py +688 -0
  146. package/browser/addons/vrm/editor/vrm1/__init__.py +1 -0
  147. package/browser/addons/vrm/editor/vrm1/handler.py +28 -0
  148. package/browser/addons/vrm/editor/vrm1/menu.py +76 -0
  149. package/browser/addons/vrm/editor/vrm1/migration.py +321 -0
  150. package/browser/addons/vrm/editor/vrm1/ops.py +2679 -0
  151. package/browser/addons/vrm/editor/vrm1/panel.py +1243 -0
  152. package/browser/addons/vrm/editor/vrm1/property_group.py +2087 -0
  153. package/browser/addons/vrm/editor/vrm1/scene_watcher.py +90 -0
  154. package/browser/addons/vrm/editor/vrm1/ui_list.py +533 -0
  155. package/browser/addons/vrm/exporter/__init__.py +1 -0
  156. package/browser/addons/vrm/exporter/abstract_base_vrm_exporter.py +628 -0
  157. package/browser/addons/vrm/exporter/export_scene.py +930 -0
  158. package/browser/addons/vrm/exporter/gltf2_export_user_extension.py +45 -0
  159. package/browser/addons/vrm/exporter/khr_character_exporter.py +34 -0
  160. package/browser/addons/vrm/exporter/vrm0_exporter.py +4020 -0
  161. package/browser/addons/vrm/exporter/vrm1_exporter.py +3682 -0
  162. package/browser/addons/vrm/exporter/vrm_animation_exporter.py +1035 -0
  163. package/browser/addons/vrm/external/__init__.py +1 -0
  164. package/browser/addons/vrm/external/auto_rig_pro_support.py +3 -0
  165. package/browser/addons/vrm/external/io_scene_gltf2_support.py +418 -0
  166. package/browser/addons/vrm/external/rigify_support.py +1 -0
  167. package/browser/addons/vrm/importer/__init__.py +1 -0
  168. package/browser/addons/vrm/importer/abstract_base_vrm_importer.py +1548 -0
  169. package/browser/addons/vrm/importer/file_handler.py +34 -0
  170. package/browser/addons/vrm/importer/gltf2_import_user_extension.py +268 -0
  171. package/browser/addons/vrm/importer/import_scene.py +646 -0
  172. package/browser/addons/vrm/importer/license_validation.py +198 -0
  173. package/browser/addons/vrm/importer/vrm0_importer.py +1723 -0
  174. package/browser/addons/vrm/importer/vrm1_importer.py +2014 -0
  175. package/browser/addons/vrm/importer/vrm_animation_importer.py +763 -0
  176. package/browser/addons/vrm/importer/vrm_diff.py +316 -0
  177. package/browser/addons/vrm/locale/__init__.py +1 -0
  178. package/browser/addons/vrm/locale/ja_jp.py +826 -0
  179. package/browser/addons/vrm/locale/ruff.toml +8 -0
  180. package/browser/addons/vrm/locale/translation_dictionary.py +10 -0
  181. package/browser/addons/vrm/locale/zh_hans.py +928 -0
  182. package/browser/addons/vrm/registration.py +670 -0
  183. package/browser/addons/vrm.json +18 -0
  184. package/browser/blender-emscripten-engine.mts +60 -128
  185. package/browser/blender-engine.mts +20 -186
  186. package/browser/blender-wali-engine.mts +35 -81
  187. package/browser/describe-thrown.mts +3 -6
  188. package/browser/document-chunks.mts +4 -16
  189. package/browser/gltf_export.py +3161 -0
  190. package/browser/heap-growth.mts +23 -0
  191. package/browser/index.ts +2 -0
  192. package/browser/protocol.ts +119 -35
  193. package/browser/pull-job.mts +2 -10
  194. package/browser/rna.ts +190 -73
  195. package/browser/runtime.ts +197 -82
  196. package/browser/session-addons.mts +33 -0
  197. package/browser/session-frame.mts +5 -24
  198. package/browser/session.py +1338 -1427
  199. package/browser/three/attach-presenter.ts +11 -39
  200. package/browser/three/blender-base64.ts +1 -36
  201. package/browser/three/blender-corner-normals.ts +1 -23
  202. package/browser/three/blender-display-shaders.json +1 -1
  203. package/browser/three/blender-display-shaders.lut +0 -0
  204. package/browser/three/blender-display-transform.ts +2 -1
  205. package/browser/three/blender-frame-columns.ts +5 -13
  206. package/browser/three/blender-graph-material.ts +18 -3
  207. package/browser/three/blender-node-graph.ts +10 -34
  208. package/browser/three/blender-physical-material.ts +2 -31
  209. package/browser/three/blender-runtime-armature.ts +7 -60
  210. package/browser/three/blender-runtime-frame.ts +9 -23
  211. package/browser/three/blender-runtime-geometry.ts +22 -26
  212. package/browser/three/blender-runtime-lighting.ts +48 -178
  213. package/browser/three/blender-runtime-shadows.ts +187 -1
  214. package/browser/three/blender-runtime-skeleton.ts +53 -1
  215. package/browser/three/blender-runtime-view.ts +505 -283
  216. package/browser/three/blender-runtime-weights.ts +9 -72
  217. package/browser/three/blender-sky.ts +13 -33
  218. package/browser/three/blender-triangulate.ts +7 -35
  219. package/browser/three/blender-viewport-sampling.ts +235 -0
  220. package/browser/three/blender-workbench-material.ts +25 -29
  221. package/browser/three/blender-workbench-outline.ts +199 -0
  222. package/browser/three/blender-world-volume.ts +62 -10
  223. package/browser/three/presenter.ts +10 -26
  224. package/browser/three/release.ts +5 -21
  225. package/browser/three/sky-precompute-worker.ts +1 -18
  226. package/browser/three/sky-worker.ts +5 -23
  227. package/browser/three/world-field-sampler.ts +12 -26
  228. package/browser/volter_three.py +9 -105
  229. package/browser/worker.ts +156 -151
  230. package/package.json +5 -2
  231. package/wasm/BUNDLE.json +17 -17
  232. package/wasm/DEPENDENCY-LICENSES.txt +14 -0
  233. package/wasm/blender_browser.data.br +0 -0
  234. package/wasm/blender_browser.js +1 -1
  235. package/wasm/blender_browser.wasm.br +0 -0
  236. package/browser/frame-transfer.mts +0 -19
  237. package/browser/three/agx-base-srgb.lut +0 -0
  238. package/browser/three/agx-look-medium-high-contrast.lut +0 -0
  239. package/browser/three/agx-look-punchy.lut +0 -0
  240. package/browser/three/blender-agx.ts +0 -235
  241. package/browser/three/blender-display-lut.ts +0 -145
  242. package/browser/three/blender-filmic.ts +0 -49
  243. package/browser/three/blender-standard.ts +0 -68
  244. package/browser/three/blender-world-visibility.ts +0 -278
  245. package/browser/three/filmic-srgb.lut +0 -0
@@ -0,0 +1,304 @@
1
+ # SPDX-License-Identifier: MIT OR GPL-3.0-or-later
2
+ from pathlib import Path
3
+ from typing import TYPE_CHECKING, ClassVar, Optional
4
+
5
+ from bpy.app.translations import pgettext
6
+ from bpy.props import BoolProperty, EnumProperty, StringProperty
7
+ from bpy.types import (
8
+ Context,
9
+ Event,
10
+ Material,
11
+ Operator,
12
+ )
13
+ from bpy_extras.io_utils import ImportHelper
14
+
15
+ from ...common.logger import get_logger
16
+ from ..extension_accessor import get_material_extension
17
+ from .property_group import (
18
+ Mtoon0ReceiveShadowTexturePropertyGroup,
19
+ Mtoon0ShadingGradeTexturePropertyGroup,
20
+ Mtoon1BaseColorTexturePropertyGroup,
21
+ Mtoon1EmissiveTexturePropertyGroup,
22
+ Mtoon1MatcapTexturePropertyGroup,
23
+ Mtoon1NormalTexturePropertyGroup,
24
+ Mtoon1OutlineWidthMultiplyTexturePropertyGroup,
25
+ Mtoon1RimMultiplyTexturePropertyGroup,
26
+ Mtoon1ShadeMultiplyTexturePropertyGroup,
27
+ Mtoon1ShadingShiftTexturePropertyGroup,
28
+ Mtoon1UvAnimationMaskTexturePropertyGroup,
29
+ convert_material_to_mtoon1,
30
+ convert_mtoon1_to_bsdf_principled,
31
+ refresh_mtoon1_outline,
32
+ reset_shader_node_group,
33
+ )
34
+
35
+ _logger = get_logger(__name__)
36
+
37
+
38
+ class VRM_OT_convert_material_to_mtoon1(Operator):
39
+ bl_idname = "vrm.convert_material_to_mtoon1"
40
+ bl_label = "Convert Material to MToon 1.0"
41
+ bl_description = "Convert Material to MToon 1.0"
42
+ bl_options: ClassVar = {"REGISTER", "UNDO"}
43
+
44
+ material_name: StringProperty( # type: ignore[valid-type]
45
+ options={"HIDDEN"}
46
+ )
47
+
48
+ def execute(self, context: Context) -> set[str]:
49
+ material = context.blend_data.materials.get(self.material_name)
50
+ if not isinstance(material, Material):
51
+ return {"CANCELLED"}
52
+ convert_material_to_mtoon1(material, context)
53
+ return {"FINISHED"}
54
+
55
+ if TYPE_CHECKING:
56
+ # This code is auto generated.
57
+ # To regenerate, run the `uv run tools/property_typing.py` command.
58
+ material_name: str # type: ignore[no-redef]
59
+
60
+
61
+ class VRM_OT_convert_mtoon1_to_bsdf_principled(Operator):
62
+ bl_idname = "vrm.convert_mtoon1_to_bsdf_principled"
63
+ bl_label = "Convert MToon 1.0 to Principled BSDF"
64
+ bl_description = "Convert MToon 1.0 to Principled BSDF"
65
+ bl_options: ClassVar = {"REGISTER", "UNDO"}
66
+
67
+ material_name: StringProperty( # type: ignore[valid-type]
68
+ options={"HIDDEN"}
69
+ )
70
+
71
+ def execute(self, context: Context) -> set[str]:
72
+ material = context.blend_data.materials.get(self.material_name)
73
+ if not isinstance(material, Material):
74
+ return {"CANCELLED"}
75
+ convert_mtoon1_to_bsdf_principled(material)
76
+ return {"FINISHED"}
77
+
78
+ if TYPE_CHECKING:
79
+ # This code is auto generated.
80
+ # To regenerate, run the `uv run tools/property_typing.py` command.
81
+ material_name: str # type: ignore[no-redef]
82
+
83
+
84
+ class VRM_OT_reset_mtoon1_material_shader_node_tree(Operator):
85
+ bl_idname = "vrm.reset_mtoon1_material_shader_node_group"
86
+ bl_label = "Reset Shader Nodes"
87
+ bl_description = "Reset MToon 1.0 Material Shader Node Tree"
88
+ bl_options: ClassVar = {"REGISTER", "UNDO"}
89
+
90
+ material_name: StringProperty( # type: ignore[valid-type]
91
+ options={"HIDDEN"}
92
+ )
93
+
94
+ def execute(self, context: Context) -> set[str]:
95
+ material = context.blend_data.materials.get(self.material_name)
96
+ if not isinstance(material, Material):
97
+ return {"CANCELLED"}
98
+ reset_shader_node_group(
99
+ context, material, reset_material_node_tree=True, reset_node_groups=True
100
+ )
101
+ return {"FINISHED"}
102
+
103
+ if TYPE_CHECKING:
104
+ # This code is auto generated.
105
+ # To regenerate, run the `uv run tools/property_typing.py` command.
106
+ material_name: str # type: ignore[no-redef]
107
+
108
+
109
+ class VRM_OT_import_mtoon1_texture_image_file(Operator, ImportHelper):
110
+ bl_idname = "vrm.import_mtoon1_texture_image_file"
111
+ bl_label = "Open"
112
+ bl_description = "Import Texture Image File"
113
+ bl_options: ClassVar = {"REGISTER", "UNDO"}
114
+
115
+ filepath: StringProperty( # type: ignore[valid-type]
116
+ options={"HIDDEN"},
117
+ subtype="FILE_PATH",
118
+ default="",
119
+ )
120
+
121
+ filter_glob: StringProperty( # type: ignore[valid-type]
122
+ options={"HIDDEN"},
123
+ # https://docs.blender.org/api/2.83/Image.html#Image.file_format
124
+ default=(
125
+ "*.bmp"
126
+ ";*.sgi"
127
+ ";*.bw"
128
+ ";*.rgb"
129
+ ";*.rgba"
130
+ ";*.png"
131
+ ";*.jpg"
132
+ ";*.jpeg"
133
+ ";*.jp2"
134
+ ";*.tga"
135
+ ";*.cin"
136
+ ";*.dpx"
137
+ ";*.exr"
138
+ ";*.hdr"
139
+ ";*.tif"
140
+ ";*.tiff"
141
+ ),
142
+ )
143
+
144
+ material_name: StringProperty( # type: ignore[valid-type]
145
+ options={"HIDDEN"},
146
+ )
147
+
148
+ target_texture_items = (
149
+ (Mtoon1BaseColorTexturePropertyGroup.__name__, "", "", "NONE", 0),
150
+ (Mtoon1ShadeMultiplyTexturePropertyGroup.__name__, "", "", "NONE", 1),
151
+ (Mtoon1NormalTexturePropertyGroup.__name__, "", "", "NONE", 2),
152
+ (Mtoon1ShadingShiftTexturePropertyGroup.__name__, "", "", "NONE", 3),
153
+ (Mtoon1EmissiveTexturePropertyGroup.__name__, "", "", "NONE", 4),
154
+ (Mtoon1RimMultiplyTexturePropertyGroup.__name__, "", "", "NONE", 5),
155
+ (Mtoon1MatcapTexturePropertyGroup.__name__, "", "", "NONE", 6),
156
+ (
157
+ Mtoon1OutlineWidthMultiplyTexturePropertyGroup.__name__,
158
+ "",
159
+ "",
160
+ "NONE",
161
+ 7,
162
+ ),
163
+ (Mtoon1UvAnimationMaskTexturePropertyGroup.__name__, "", "", "NONE", 8),
164
+ (Mtoon0ReceiveShadowTexturePropertyGroup.__name__, "", "", "NONE", 9),
165
+ (Mtoon0ShadingGradeTexturePropertyGroup.__name__, "", "", "NONE", 10),
166
+ )
167
+
168
+ target_texture: EnumProperty( # type: ignore[valid-type]
169
+ options={"HIDDEN"},
170
+ items=target_texture_items,
171
+ name="Target Texture",
172
+ )
173
+
174
+ def execute(self, context: Context) -> set[str]:
175
+ filepath = self.filepath
176
+ if not filepath or not Path(filepath).exists():
177
+ return {"CANCELLED"}
178
+
179
+ last_images_len = len(context.blend_data.images)
180
+ image = context.blend_data.images.load(filepath, check_existing=True)
181
+ created = last_images_len < len(context.blend_data.images)
182
+
183
+ material = context.blend_data.materials.get(self.material_name)
184
+ if not isinstance(material, Material):
185
+ return {"FINISHED"}
186
+
187
+ gltf = get_material_extension(material).mtoon1
188
+ mtoon = gltf.extensions.vrmc_materials_mtoon
189
+
190
+ for texture in (
191
+ gltf.pbr_metallic_roughness.base_color_texture.index,
192
+ mtoon.shade_multiply_texture.index,
193
+ gltf.normal_texture.index,
194
+ mtoon.shading_shift_texture.index,
195
+ gltf.emissive_texture.index,
196
+ mtoon.rim_multiply_texture.index,
197
+ mtoon.matcap_texture.index,
198
+ mtoon.outline_width_multiply_texture.index,
199
+ mtoon.uv_animation_mask_texture.index,
200
+ gltf.mtoon0_receive_shadow_texture,
201
+ gltf.mtoon0_shading_grade_texture,
202
+ ):
203
+ if self.target_texture != type(texture).__name__:
204
+ continue
205
+ texture.source = image
206
+ if created:
207
+ image.colorspace_settings.name = type(texture).colorspace
208
+ return {"FINISHED"}
209
+
210
+ return {"CANCELLED"}
211
+
212
+ def invoke(self, context: Context, event: Event) -> set[str]:
213
+ self.filepath = ""
214
+ return ImportHelper.invoke(self, context, event)
215
+
216
+ if TYPE_CHECKING:
217
+ # This code is auto generated.
218
+ # To regenerate, run the `uv run tools/property_typing.py` command.
219
+ filepath: str # type: ignore[no-redef]
220
+ filter_glob: str # type: ignore[no-redef]
221
+ material_name: str # type: ignore[no-redef]
222
+ target_texture: str # type: ignore[no-redef]
223
+
224
+
225
+ class VRM_OT_refresh_mtoon1_outline(Operator):
226
+ bl_idname = "vrm.refresh_mtoon1_outline"
227
+ bl_label = "Refresh MToon 1.0 Outline Width Mode"
228
+ bl_description = "Import Texture Image File"
229
+ bl_options: ClassVar = {"UNDO"}
230
+
231
+ material_name: StringProperty( # type: ignore[valid-type]
232
+ options={"HIDDEN"}
233
+ )
234
+ create_modifier: BoolProperty( # type: ignore[valid-type]
235
+ options={"HIDDEN"}
236
+ )
237
+
238
+ def execute(self, context: Context) -> set[str]:
239
+ material_name: Optional[str] = self.material_name
240
+ if not material_name:
241
+ material_name = None
242
+ refresh_mtoon1_outline(
243
+ context, material_name, create_modifier=self.create_modifier
244
+ )
245
+ return {"FINISHED"}
246
+
247
+ if TYPE_CHECKING:
248
+ # This code is auto generated.
249
+ # To regenerate, run the `uv run tools/property_typing.py` command.
250
+ material_name: str # type: ignore[no-redef]
251
+ create_modifier: bool # type: ignore[no-redef]
252
+
253
+
254
+ class VRM_OT_show_material_blender_4_2_warning(Operator):
255
+ bl_idname = "vrm.show_material_blender_4_2_warning"
256
+ bl_label = "Blender 4.2 Material Upgrade Warning"
257
+ bl_description = "Show Material Blender 4.2 Warning"
258
+ bl_options: ClassVar = {"REGISTER"}
259
+
260
+ material_name_lines: StringProperty( # type: ignore[valid-type]
261
+ options={"HIDDEN"}
262
+ )
263
+
264
+ def execute(self, _context: Context) -> set[str]:
265
+ return {"FINISHED"}
266
+
267
+ def invoke(self, context: Context, _event: Event) -> set[str]:
268
+ return context.window_manager.invoke_props_dialog(self, width=750)
269
+
270
+ def draw(self, _context: Context) -> None:
271
+ column = self.layout.row(align=True).column()
272
+ text = pgettext(
273
+ 'Updating to Blender 4.2 may unintentionally change the "{alpha_mode}"'
274
+ + ' of some MToon materials to "{transparent}".\n'
275
+ + 'This was previously implemented using the material\'s "{blend_mode}"'
276
+ + " but since that setting was removed in Blender 4.2.\n"
277
+ + 'In the current VRM add-on, the "{alpha_mode}" function has been'
278
+ + " re-implemented using a different method. However, it\n"
279
+ + "was not possible"
280
+ + " to implement automatic migration of old settings values because those"
281
+ + " values could no longer be read.\n"
282
+ + 'Please check the "{alpha_mode}" settings for materials that have'
283
+ + " MToon enabled.\n"
284
+ + "Materials that may be affected are as follows:"
285
+ ).format(
286
+ blend_mode=pgettext("Blend Mode"),
287
+ alpha_mode=pgettext("Alpha Mode"),
288
+ transparent=pgettext("Transparent"),
289
+ )
290
+ description_outer_column = column.column()
291
+ description_outer_column.emboss = "NONE"
292
+ description_column = description_outer_column.box().column(align=True)
293
+ for i, line in enumerate(text.splitlines()):
294
+ icon = "ERROR" if i == 0 else "NONE"
295
+ description_column.label(text=line, translate=False, icon=icon)
296
+ material_column = column.box().column(align=True)
297
+ for line in self.material_name_lines.splitlines():
298
+ material_column.label(text=line, translate=False, icon="MATERIAL")
299
+ column.separator()
300
+
301
+ if TYPE_CHECKING:
302
+ # This code is auto generated.
303
+ # To regenerate, run the `uv run tools/property_typing.py` command.
304
+ material_name_lines: str # type: ignore[no-redef]