@volter/blender-engine 0.1.148 → 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.
- package/LICENSE +16 -0
- package/README.md +4 -11
- package/browser/addons/vrm/LICENSE_(OPTION1)_MIT.txt +22 -0
- package/browser/addons/vrm/LICENSE_(OPTION2)_GPL-3_0.txt +674 -0
- package/browser/addons/vrm/LICENSE_MAIN.txt +1 -0
- package/browser/addons/vrm/README.txt +3 -0
- package/browser/addons/vrm/__init__.py +41 -0
- package/browser/addons/vrm/blender_manifest.toml +16 -0
- package/browser/addons/vrm/common/__init__.py +1 -0
- package/browser/addons/vrm/common/animation.py +58 -0
- package/browser/addons/vrm/common/blender_manifest.py +82 -0
- package/browser/addons/vrm/common/char.py +16 -0
- package/browser/addons/vrm/common/convert.py +287 -0
- package/browser/addons/vrm/common/convert_any.py +48 -0
- package/browser/addons/vrm/common/debug.py +40 -0
- package/browser/addons/vrm/common/deep.py +162 -0
- package/browser/addons/vrm/common/error_dialog.py +274 -0
- package/browser/addons/vrm/common/fs.py +71 -0
- package/browser/addons/vrm/common/gl.py +20 -0
- package/browser/addons/vrm/common/gltf.py +1149 -0
- package/browser/addons/vrm/common/human_bone_mapper/__init__.py +1 -0
- package/browser/addons/vrm/common/human_bone_mapper/biped_mapping.py +84 -0
- package/browser/addons/vrm/common/human_bone_mapper/cats_blender_plugin_fix_model_mapping.py +63 -0
- package/browser/addons/vrm/common/human_bone_mapper/human_bone_mapper.py +203 -0
- package/browser/addons/vrm/common/human_bone_mapper/microsoft_rocketbox_mapping.py +69 -0
- package/browser/addons/vrm/common/human_bone_mapper/mixamo_mapping.py +62 -0
- package/browser/addons/vrm/common/human_bone_mapper/mmd_mapping.py +115 -0
- package/browser/addons/vrm/common/human_bone_mapper/mpfb_mapping.py +120 -0
- package/browser/addons/vrm/common/human_bone_mapper/ready_player_me_mapping.py +65 -0
- package/browser/addons/vrm/common/human_bone_mapper/reallusion_mapping.py +94 -0
- package/browser/addons/vrm/common/human_bone_mapper/rigify_meta_rig_mapping.py +65 -0
- package/browser/addons/vrm/common/human_bone_mapper/structure_based_mapping.py +891 -0
- package/browser/addons/vrm/common/human_bone_mapper/unreal_mapping.py +62 -0
- package/browser/addons/vrm/common/human_bone_mapper/vrm_addon_mapping.py +112 -0
- package/browser/addons/vrm/common/human_bone_mapper/vroid_mapping.py +89 -0
- package/browser/addons/vrm/common/legacy_gltf.py +16 -0
- package/browser/addons/vrm/common/logger.py +84 -0
- package/browser/addons/vrm/common/mtoon0.blend +0 -0
- package/browser/addons/vrm/common/mtoon1.blend +0 -0
- package/browser/addons/vrm/common/mtoon1_outline.blend +0 -0
- package/browser/addons/vrm/common/mtoon_auto_setup.blend +0 -0
- package/browser/addons/vrm/common/mtoon_unversioned.py +62 -0
- package/browser/addons/vrm/common/ops/__init__.py +10 -0
- package/browser/addons/vrm/common/ops/export_scene.py +67 -0
- package/browser/addons/vrm/common/ops/icyp.py +53 -0
- package/browser/addons/vrm/common/ops/import_scene.py +57 -0
- package/browser/addons/vrm/common/ops/vrm.py +2380 -0
- package/browser/addons/vrm/common/ops/wm.py +167 -0
- package/browser/addons/vrm/common/preferences.py +362 -0
- package/browser/addons/vrm/common/progress.py +87 -0
- package/browser/addons/vrm/common/rotation.py +89 -0
- package/browser/addons/vrm/common/safe_removal.py +46 -0
- package/browser/addons/vrm/common/scene_watcher.py +230 -0
- package/browser/addons/vrm/common/shader.py +2243 -0
- package/browser/addons/vrm/common/shape_key_mapper/__init__.py +1 -0
- package/browser/addons/vrm/common/shape_key_mapper/arkit_mapping.py +168 -0
- package/browser/addons/vrm/common/shape_key_mapper/mmd_mapping.py +62 -0
- package/browser/addons/vrm/common/shape_key_mapper/ready_player_me_mapping.py +52 -0
- package/browser/addons/vrm/common/shape_key_mapper/vrchat_mapping.py +17 -0
- package/browser/addons/vrm/common/third_party_user_extension.py +214 -0
- package/browser/addons/vrm/common/transparent_z_write.blend +0 -0
- package/browser/addons/vrm/common/version.py +161 -0
- package/browser/addons/vrm/common/vrm0/__init__.py +1 -0
- package/browser/addons/vrm/common/vrm0/human_bone.py +662 -0
- package/browser/addons/vrm/common/vrm0/material_property.py +346 -0
- package/browser/addons/vrm/common/vrm1/__init__.py +1 -0
- package/browser/addons/vrm/common/vrm1/expression_preset.py +207 -0
- package/browser/addons/vrm/common/vrm1/human_bone.py +822 -0
- package/browser/addons/vrm/common/workspace.py +227 -0
- package/browser/addons/vrm/common/writable_context.py +77 -0
- package/browser/addons/vrm/documentation/en-us/animation/index.md +63 -0
- package/browser/addons/vrm/documentation/en-us/create-humanoid-vrm-from-scratch/index.md +131 -0
- package/browser/addons/vrm/documentation/en-us/create-simple-vrm-from-scratch/index.md +30 -0
- package/browser/addons/vrm/documentation/en-us/development/index.md +136 -0
- package/browser/addons/vrm/documentation/en-us/index.md +41 -0
- package/browser/addons/vrm/documentation/en-us/installation/index.md +152 -0
- package/browser/addons/vrm/documentation/en-us/material-mtoon/index.md +122 -0
- package/browser/addons/vrm/documentation/en-us/material-pbr/index.md +94 -0
- package/browser/addons/vrm/documentation/en-us/scripting-api/index.md +391 -0
- package/browser/addons/vrm/documentation/en-us/ui/export_scene.vrm/index.md +57 -0
- package/browser/addons/vrm/documentation/en-us/ui/export_scene.vrma/index.md +17 -0
- package/browser/addons/vrm/documentation/en-us/ui/import_scene.vrm/index.md +61 -0
- package/browser/addons/vrm/documentation/en-us/ui/import_scene.vrma/index.md +13 -0
- package/browser/addons/vrm/documentation/ja-jp/animation/index.md +57 -0
- package/browser/addons/vrm/documentation/ja-jp/create-humanoid-vrm-from-scratch/index.md +129 -0
- package/browser/addons/vrm/documentation/ja-jp/create-simple-vrm-from-scratch/index.md +29 -0
- package/browser/addons/vrm/documentation/ja-jp/development/index.md +137 -0
- package/browser/addons/vrm/documentation/ja-jp/index.md +37 -0
- package/browser/addons/vrm/documentation/ja-jp/installation/index.md +150 -0
- package/browser/addons/vrm/documentation/ja-jp/material-mtoon/index.md +113 -0
- package/browser/addons/vrm/documentation/ja-jp/material-pbr/index.md +90 -0
- package/browser/addons/vrm/documentation/ja-jp/scripting-api/index.md +389 -0
- package/browser/addons/vrm/documentation/ja-jp/ui/export_scene.vrm/index.md +55 -0
- package/browser/addons/vrm/documentation/ja-jp/ui/export_scene.vrma/index.md +19 -0
- package/browser/addons/vrm/documentation/ja-jp/ui/import_scene.vrm/index.md +56 -0
- package/browser/addons/vrm/documentation/ja-jp/ui/import_scene.vrma/index.md +14 -0
- package/browser/addons/vrm/editor/__init__.py +1 -0
- package/browser/addons/vrm/editor/extension.py +425 -0
- package/browser/addons/vrm/editor/extension_accessor.py +75 -0
- package/browser/addons/vrm/editor/handler.py +84 -0
- package/browser/addons/vrm/editor/khr_character/__init__.py +1 -0
- package/browser/addons/vrm/editor/khr_character/panel.py +69 -0
- package/browser/addons/vrm/editor/khr_character/property_group.py +27 -0
- package/browser/addons/vrm/editor/khr_xmp_json_ld/__init__.py +1 -0
- package/browser/addons/vrm/editor/khr_xmp_json_ld/ops.py +464 -0
- package/browser/addons/vrm/editor/khr_xmp_json_ld/panel.py +136 -0
- package/browser/addons/vrm/editor/khr_xmp_json_ld/property_group.py +83 -0
- package/browser/addons/vrm/editor/khr_xmp_json_ld/ui_list.py +198 -0
- package/browser/addons/vrm/editor/make_armature.py +709 -0
- package/browser/addons/vrm/editor/menu.py +147 -0
- package/browser/addons/vrm/editor/migration.py +297 -0
- package/browser/addons/vrm/editor/mtoon1/__init__.py +1 -0
- package/browser/addons/vrm/editor/mtoon1/handler.py +20 -0
- package/browser/addons/vrm/editor/mtoon1/migration.py +536 -0
- package/browser/addons/vrm/editor/mtoon1/ops.py +304 -0
- package/browser/addons/vrm/editor/mtoon1/panel.py +442 -0
- package/browser/addons/vrm/editor/mtoon1/property_group.py +4977 -0
- package/browser/addons/vrm/editor/mtoon1/scene_watcher.py +381 -0
- package/browser/addons/vrm/editor/node_constraint1/__init__.py +1 -0
- package/browser/addons/vrm/editor/node_constraint1/panel.py +317 -0
- package/browser/addons/vrm/editor/node_constraint1/property_group.py +25 -0
- package/browser/addons/vrm/editor/ops.py +471 -0
- package/browser/addons/vrm/editor/panel.py +315 -0
- package/browser/addons/vrm/editor/property_group.py +888 -0
- package/browser/addons/vrm/editor/search.py +682 -0
- package/browser/addons/vrm/editor/spring_bone1/__init__.py +1 -0
- package/browser/addons/vrm/editor/spring_bone1/handler.py +994 -0
- package/browser/addons/vrm/editor/spring_bone1/menu.py +246 -0
- package/browser/addons/vrm/editor/spring_bone1/migration.py +86 -0
- package/browser/addons/vrm/editor/spring_bone1/ops.py +1679 -0
- package/browser/addons/vrm/editor/spring_bone1/panel.py +605 -0
- package/browser/addons/vrm/editor/spring_bone1/property_group.py +1457 -0
- package/browser/addons/vrm/editor/spring_bone1/ui_list.py +408 -0
- package/browser/addons/vrm/editor/subscription.py +123 -0
- package/browser/addons/vrm/editor/t_pose.py +713 -0
- package/browser/addons/vrm/editor/validation.py +1271 -0
- package/browser/addons/vrm/editor/vrm0/__init__.py +1 -0
- package/browser/addons/vrm/editor/vrm0/gizmo_group.py +63 -0
- package/browser/addons/vrm/editor/vrm0/handler.py +23 -0
- package/browser/addons/vrm/editor/vrm0/menu.py +145 -0
- package/browser/addons/vrm/editor/vrm0/migration.py +761 -0
- package/browser/addons/vrm/editor/vrm0/ops.py +2145 -0
- package/browser/addons/vrm/editor/vrm0/panel.py +1333 -0
- package/browser/addons/vrm/editor/vrm0/property_group.py +1818 -0
- package/browser/addons/vrm/editor/vrm0/ui_list.py +688 -0
- package/browser/addons/vrm/editor/vrm1/__init__.py +1 -0
- package/browser/addons/vrm/editor/vrm1/handler.py +28 -0
- package/browser/addons/vrm/editor/vrm1/menu.py +76 -0
- package/browser/addons/vrm/editor/vrm1/migration.py +321 -0
- package/browser/addons/vrm/editor/vrm1/ops.py +2679 -0
- package/browser/addons/vrm/editor/vrm1/panel.py +1243 -0
- package/browser/addons/vrm/editor/vrm1/property_group.py +2087 -0
- package/browser/addons/vrm/editor/vrm1/scene_watcher.py +90 -0
- package/browser/addons/vrm/editor/vrm1/ui_list.py +533 -0
- package/browser/addons/vrm/exporter/__init__.py +1 -0
- package/browser/addons/vrm/exporter/abstract_base_vrm_exporter.py +628 -0
- package/browser/addons/vrm/exporter/export_scene.py +930 -0
- package/browser/addons/vrm/exporter/gltf2_export_user_extension.py +45 -0
- package/browser/addons/vrm/exporter/khr_character_exporter.py +34 -0
- package/browser/addons/vrm/exporter/vrm0_exporter.py +4020 -0
- package/browser/addons/vrm/exporter/vrm1_exporter.py +3682 -0
- package/browser/addons/vrm/exporter/vrm_animation_exporter.py +1035 -0
- package/browser/addons/vrm/external/__init__.py +1 -0
- package/browser/addons/vrm/external/auto_rig_pro_support.py +3 -0
- package/browser/addons/vrm/external/io_scene_gltf2_support.py +418 -0
- package/browser/addons/vrm/external/rigify_support.py +1 -0
- package/browser/addons/vrm/importer/__init__.py +1 -0
- package/browser/addons/vrm/importer/abstract_base_vrm_importer.py +1548 -0
- package/browser/addons/vrm/importer/file_handler.py +34 -0
- package/browser/addons/vrm/importer/gltf2_import_user_extension.py +268 -0
- package/browser/addons/vrm/importer/import_scene.py +646 -0
- package/browser/addons/vrm/importer/license_validation.py +198 -0
- package/browser/addons/vrm/importer/vrm0_importer.py +1723 -0
- package/browser/addons/vrm/importer/vrm1_importer.py +2014 -0
- package/browser/addons/vrm/importer/vrm_animation_importer.py +763 -0
- package/browser/addons/vrm/importer/vrm_diff.py +316 -0
- package/browser/addons/vrm/locale/__init__.py +1 -0
- package/browser/addons/vrm/locale/ja_jp.py +826 -0
- package/browser/addons/vrm/locale/ruff.toml +8 -0
- package/browser/addons/vrm/locale/translation_dictionary.py +10 -0
- package/browser/addons/vrm/locale/zh_hans.py +928 -0
- package/browser/addons/vrm/registration.py +670 -0
- package/browser/addons/vrm.json +18 -0
- package/browser/blender-emscripten-engine.mts +60 -128
- package/browser/blender-engine.mts +20 -186
- package/browser/blender-wali-engine.mts +35 -81
- package/browser/describe-thrown.mts +3 -6
- package/browser/document-chunks.mts +4 -16
- package/browser/gltf_export.py +3161 -0
- package/browser/heap-growth.mts +23 -0
- package/browser/index.ts +2 -0
- package/browser/protocol.ts +119 -35
- package/browser/pull-job.mts +2 -10
- package/browser/rna.ts +190 -73
- package/browser/runtime.ts +197 -82
- package/browser/session-addons.mts +33 -0
- package/browser/session-frame.mts +5 -24
- package/browser/session.py +1338 -1427
- package/browser/three/attach-presenter.ts +11 -39
- package/browser/three/blender-base64.ts +1 -36
- package/browser/three/blender-corner-normals.ts +1 -23
- package/browser/three/blender-display-shaders.json +1 -1
- package/browser/three/blender-display-shaders.lut +0 -0
- package/browser/three/blender-display-transform.ts +2 -1
- package/browser/three/blender-frame-columns.ts +5 -13
- package/browser/three/blender-graph-material.ts +18 -3
- package/browser/three/blender-node-graph.ts +10 -34
- package/browser/three/blender-physical-material.ts +2 -31
- package/browser/three/blender-runtime-armature.ts +7 -60
- package/browser/three/blender-runtime-frame.ts +9 -23
- package/browser/three/blender-runtime-geometry.ts +22 -26
- package/browser/three/blender-runtime-lighting.ts +48 -178
- package/browser/three/blender-runtime-shadows.ts +187 -1
- package/browser/three/blender-runtime-skeleton.ts +53 -1
- package/browser/three/blender-runtime-view.ts +505 -283
- package/browser/three/blender-runtime-weights.ts +9 -72
- package/browser/three/blender-sky.ts +13 -33
- package/browser/three/blender-triangulate.ts +7 -35
- package/browser/three/blender-viewport-sampling.ts +235 -0
- package/browser/three/blender-workbench-material.ts +25 -29
- package/browser/three/blender-workbench-outline.ts +199 -0
- package/browser/three/blender-world-volume.ts +62 -10
- package/browser/three/presenter.ts +10 -26
- package/browser/three/release.ts +5 -21
- package/browser/three/sky-precompute-worker.ts +1 -18
- package/browser/three/sky-worker.ts +5 -23
- package/browser/three/world-field-sampler.ts +12 -26
- package/browser/volter_three.py +9 -105
- package/browser/worker.ts +156 -151
- package/package.json +5 -2
- package/wasm/BUNDLE.json +17 -17
- package/wasm/DEPENDENCY-LICENSES.txt +14 -0
- package/wasm/blender_browser.data.br +0 -0
- package/wasm/blender_browser.js +1 -1
- package/wasm/blender_browser.wasm.br +0 -0
- package/browser/frame-transfer.mts +0 -19
- package/browser/three/agx-base-srgb.lut +0 -0
- package/browser/three/agx-look-medium-high-contrast.lut +0 -0
- package/browser/three/agx-look-punchy.lut +0 -0
- package/browser/three/blender-agx.ts +0 -235
- package/browser/three/blender-display-lut.ts +0 -145
- package/browser/three/blender-filmic.ts +0 -49
- package/browser/three/blender-standard.ts +0 -68
- package/browser/three/blender-world-visibility.ts +0 -278
- package/browser/three/filmic-srgb.lut +0 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "物理ベースのマテリアル設定"
|
|
3
|
+
description: "プリンシプルBSDFシェーダーを用いた物理ベースのマテリアルを設定します。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
リアルな物理ベースのマテリアルをVRMに設定します。
|
|
7
|
+
|
|
8
|
+

|
|
9
|
+
|
|
10
|
+
VRM Add-on for Blenderでは、リアルな物理ベースのマテリアルの設定はBlenderのglTF
|
|
11
|
+
2.0アドオンの処理と全く同じ処理を行っています。
|
|
12
|
+
詳しくは該当するドキュメントを参照ください
|
|
13
|
+
|
|
14
|
+
https://docs.blender.org/manual/ja/2.93/addons/import_export/scene_gltf2.html#exported-materials
|
|
15
|
+
|
|
16
|
+
Blenderを起動したら、初めから表示されている立方体を削除します。まずその立方体にマウスの左クリックして選択します。
|
|
17
|
+
|
|
18
|
+

|
|
19
|
+
|
|
20
|
+
選択すると、立方体の周りがオレンジ色になります。その状態でキーボードの `x`
|
|
21
|
+
キーを押してください。
|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+
削除の確認表示がされるので、そのままキーボードの `Enter` キーを押してください。
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
成功すると立方体が削除されます。次に、三角形からなる球を追加します。
|
|
30
|
+
3Dビューポート内にカーソルを置いた状態で、キーボードの `Shift` キーを押したまま
|
|
31
|
+
`a` キーを押してください。 オブジェクトの追加メニューが表示されるため `メッシュ`
|
|
32
|
+
→ `ICO球` を選択してください。
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
成功すると、三角形からなる球が追加されます。
|
|
37
|
+
|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
次にマテリアルの色を確認できるようにします。
|
|
41
|
+
3Dビューポート内にカーソルを置いた状態で、キーボードの `z`
|
|
42
|
+
キーを押すことでプレビュー表示選択メニューが出ます。
|
|
43
|
+
その状態でマウスを下に移動し `マテリアルプレビュー` を選択します。
|
|
44
|
+
|
|
45
|
+

|
|
46
|
+
|
|
47
|
+
成功すると、表示の灰色っぽさが増します。とはいえ変化はほとんどないですが、デフォルトのままだと色つけても表示に反映されないので注意してください。
|
|
48
|
+
|
|
49
|
+

|
|
50
|
+
|
|
51
|
+
この状態でマテリアルの設定を行います。右下の「」アイコンのタブを選び
|
|
52
|
+
`新規` ボタンを押します。
|
|
53
|
+
|
|
54
|
+

|
|
55
|
+
|
|
56
|
+
`マテリアル` という名前のマテリアルが追加されます。 また `サーフェス` の設定が
|
|
57
|
+
`プリンシプルBSDF` になっていることを確認してください。
|
|
58
|
+
|
|
59
|
+

|
|
60
|
+
|
|
61
|
+
`プリンシプルBSDF`
|
|
62
|
+
を設定することで、リアルな物理ベースの質感の設定ができ、その設定をそのままVRMにエクスポートすることができます。
|
|
63
|
+
|
|
64
|
+

|
|
65
|
+
|
|
66
|
+
次に `ベースカラー` を選択し、色選択ポップアップが出るので青を入力します。
|
|
67
|
+
|
|
68
|
+

|
|
69
|
+
|
|
70
|
+
次に `メタリック` の値を `0.5` に設定します。
|
|
71
|
+
|
|
72
|
+

|
|
73
|
+
|
|
74
|
+
このモデルをVRMとして保存します。メニューの `ファイル` → `エクスポート` →
|
|
75
|
+
`VRM (.vrm)` を選択します。
|
|
76
|
+
|
|
77
|
+

|
|
78
|
+
|
|
79
|
+
ファイル保存用のウィンドウが出るので、ファイル名と保存先を入力し
|
|
80
|
+
`VRMをエクスポート` を押します。
|
|
81
|
+
|
|
82
|
+

|
|
83
|
+
|
|
84
|
+
成功するとVRMファイルが指定された場所に保存されます。
|
|
85
|
+
|
|
86
|
+

|
|
87
|
+
|
|
88
|
+
こちらのページで動作確認ができます。
|
|
89
|
+
|
|
90
|
+
- https://hub.vroid.com/characters/3819557420301868457/models/3988362170085862123
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Pythonスクリプトによる自動化サンプル"
|
|
3
|
+
description: "Pythonスクリプトを利用してVRM関連処理を自動化するサンプルです。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Pythonスクリプトを利用してVRM関連処理を自動化するサンプルです。
|
|
7
|
+
|
|
8
|
+

|
|
9
|
+
|
|
10
|
+
## VRMファイルのインポート
|
|
11
|
+
|
|
12
|
+
```python
|
|
13
|
+
import bpy
|
|
14
|
+
|
|
15
|
+
result = bpy.ops.import_scene.vrm(filepath="path_to_your_vrm_model.vrm")
|
|
16
|
+
if result != {"FINISHED"}:
|
|
17
|
+
raise Exception(f"Failed to import vrm: {result}")
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## VRMファイルのエクスポート
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
import bpy
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
|
|
26
|
+
output_filepath = str(Path.home() / "path_to_your_new_vrm_model.vrm")
|
|
27
|
+
result = bpy.ops.export_scene.vrm(filepath=output_filepath)
|
|
28
|
+
if result != {"FINISHED"}:
|
|
29
|
+
raise Exception(f"Failed to export vrm: {result}")
|
|
30
|
+
|
|
31
|
+
print(f"{output_filepath=}")
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## VRMメタデータの設定
|
|
35
|
+
|
|
36
|
+
VRM 1.0のモデルを想定します。
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
import bpy
|
|
40
|
+
|
|
41
|
+
context = bpy.context
|
|
42
|
+
|
|
43
|
+
bpy.ops.object.add(type="ARMATURE", location=(0, 0, 0))
|
|
44
|
+
|
|
45
|
+
armature = context.object
|
|
46
|
+
armature.data.vrm_addon_extension.spec_version = "1.0"
|
|
47
|
+
|
|
48
|
+
meta = armature.data.vrm_addon_extension.vrm1.meta
|
|
49
|
+
meta.vrm_name = "Your Model Name"
|
|
50
|
+
meta.version = "1.0.0"
|
|
51
|
+
meta.authors.add().value = "Author 1"
|
|
52
|
+
meta.copyright_information = "Copyright Information"
|
|
53
|
+
meta.contact_information = "Contact Information"
|
|
54
|
+
meta.references.add().value = "https://example.com"
|
|
55
|
+
meta.third_party_licenses = "Third Party Licenses"
|
|
56
|
+
thumbnail_image = context.blend_data.images.new(name="New Image", width=32, height=32)
|
|
57
|
+
meta.thumbnail_image = thumbnail_image
|
|
58
|
+
meta.avatar_permission = "onlyAuthor" # or "onlySeparatelyLicensedPerson", "everyone"
|
|
59
|
+
meta.allow_excessively_violent_usage = False
|
|
60
|
+
meta.allow_excessively_sexual_usage = False
|
|
61
|
+
meta.commercial_usage = "personalNonProfit" # or "personalProfit", "corporation"
|
|
62
|
+
meta.allow_political_or_religious_usage = False
|
|
63
|
+
meta.allow_antisocial_or_hate_usage = False
|
|
64
|
+
meta.credit_notation = "required" # or "unnecessary"
|
|
65
|
+
meta.allow_redistribution = False
|
|
66
|
+
meta.modification = (
|
|
67
|
+
"prohibited" # or "allowModification", "allowModificationRedistribution"
|
|
68
|
+
)
|
|
69
|
+
meta.other_license_url = ""
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## VRMヒューマンボーンの設定
|
|
73
|
+
|
|
74
|
+
VRM 1.0のモデルを想定します。
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
import bpy
|
|
78
|
+
|
|
79
|
+
context = bpy.context
|
|
80
|
+
|
|
81
|
+
bpy.ops.object.add(type="ARMATURE", location=(0, 0, 0))
|
|
82
|
+
armature = context.object
|
|
83
|
+
armature.data.vrm_addon_extension.spec_version = "1.0"
|
|
84
|
+
|
|
85
|
+
bpy.ops.object.mode_set(mode="EDIT")
|
|
86
|
+
|
|
87
|
+
hips_bone = armature.data.edit_bones.new("hips")
|
|
88
|
+
hips_bone.head = (0, 0, 0.5)
|
|
89
|
+
hips_bone.tail = (0, 0, 0.75)
|
|
90
|
+
|
|
91
|
+
spine_bone = armature.data.edit_bones.new("spine")
|
|
92
|
+
spine_bone.parent = hips_bone
|
|
93
|
+
spine_bone.head = (0, 0, 0.75)
|
|
94
|
+
spine_bone.tail = (0, 0, 1)
|
|
95
|
+
|
|
96
|
+
bpy.ops.object.mode_set(mode="OBJECT")
|
|
97
|
+
|
|
98
|
+
armature.data.vrm_addon_extension.vrm1.humanoid.human_bones.hips.node.bone_name = "hips"
|
|
99
|
+
armature.data.vrm_addon_extension.vrm1.humanoid.human_bones.spine.node.bone_name = (
|
|
100
|
+
"spine"
|
|
101
|
+
)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## VRM MToonマテリアルの値を設定
|
|
105
|
+
|
|
106
|
+
```python
|
|
107
|
+
import bpy
|
|
108
|
+
|
|
109
|
+
context = bpy.context
|
|
110
|
+
|
|
111
|
+
image = context.blend_data.images.new(name="New Image", width=32, height=32)
|
|
112
|
+
|
|
113
|
+
material = context.blend_data.materials.new("New MToon Material")
|
|
114
|
+
material.vrm_addon_extension.mtoon1.enabled = True
|
|
115
|
+
|
|
116
|
+
gltf = material.vrm_addon_extension.mtoon1
|
|
117
|
+
gltf.pbr_metallic_roughness.base_color_factor = (0, 1, 0, 1)
|
|
118
|
+
gltf.pbr_metallic_roughness.base_color_texture.index.source = image
|
|
119
|
+
|
|
120
|
+
# base_color_texture以外のテクスチャにも同様の設定が可能
|
|
121
|
+
gltf.pbr_metallic_roughness.base_color_texture.index.sampler.mag_filter = (
|
|
122
|
+
"NEAREST" # or "LINEAR"
|
|
123
|
+
)
|
|
124
|
+
gltf.pbr_metallic_roughness.base_color_texture.index.sampler.min_filter = "NEAREST" # or "LINEAR", "NEAREST_MIPMAP_NEAREST", "LINEAR_MIPMAP_NEAREST", "NEAREST_MIPMAP_LINEAR", "LINEAR_MIPMAP_LINEAR"
|
|
125
|
+
gltf.pbr_metallic_roughness.base_color_texture.index.sampler.wrap_s = (
|
|
126
|
+
"REPEAT" # or "CLAMP_TO_EDGE", "MIRRORED_REPEAT"
|
|
127
|
+
)
|
|
128
|
+
gltf.pbr_metallic_roughness.base_color_texture.index.sampler.wrap_t = (
|
|
129
|
+
"REPEAT" # or "CLAMP_TO_EDGE", "MIRRORED_REPEAT"
|
|
130
|
+
)
|
|
131
|
+
gltf.pbr_metallic_roughness.base_color_texture.extensions.khr_texture_transform.offset = (
|
|
132
|
+
0,
|
|
133
|
+
0,
|
|
134
|
+
)
|
|
135
|
+
gltf.pbr_metallic_roughness.base_color_texture.extensions.khr_texture_transform.scale = (
|
|
136
|
+
1,
|
|
137
|
+
1,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
gltf.alpha_mode = "OPAQUE" # or "MASK", "BLEND"
|
|
141
|
+
gltf.double_sided = False
|
|
142
|
+
gltf.alpha_cutoff = 0.5
|
|
143
|
+
gltf.normal_texture.index.source = image
|
|
144
|
+
gltf.normal_texture.scale = 1
|
|
145
|
+
gltf.emissive_texture.index.source = image
|
|
146
|
+
gltf.emissive_factor = (0, 0, 0)
|
|
147
|
+
gltf.extensions.khr_materials_emissive_strength.emissive_strength = 1.0
|
|
148
|
+
|
|
149
|
+
mtoon = gltf.extensions.vrmc_materials_mtoon
|
|
150
|
+
mtoon.transparent_with_z_write = False
|
|
151
|
+
mtoon.render_queue_offset_number = 0
|
|
152
|
+
mtoon.shade_multiply_texture.index.source = image
|
|
153
|
+
mtoon.shade_color_factor = (0, 0, 1)
|
|
154
|
+
mtoon.shading_shift_texture.index.source = image
|
|
155
|
+
mtoon.shading_shift_texture.scale = 1
|
|
156
|
+
mtoon.shading_shift_factor = 0
|
|
157
|
+
mtoon.shading_toony_factor = 0
|
|
158
|
+
mtoon.gi_equalization_factor = 0
|
|
159
|
+
mtoon.matcap_factor = (1, 1, 1)
|
|
160
|
+
mtoon.matcap_texture.index.source = image
|
|
161
|
+
mtoon.parametric_rim_color_factor = (0, 0, 0)
|
|
162
|
+
mtoon.rim_multiply_texture.index.source = image
|
|
163
|
+
mtoon.rim_lighting_mix_factor = 0
|
|
164
|
+
mtoon.parametric_rim_fresnel_power_factor = 1.0
|
|
165
|
+
mtoon.parametric_rim_lift_factor = 1.0
|
|
166
|
+
mtoon.outline_width_mode = "worldCoordinates" # or "none", "screenCoordinates"
|
|
167
|
+
mtoon.outline_width_factor = 0.01
|
|
168
|
+
mtoon.outline_width_multiply_texture.index.source = image
|
|
169
|
+
mtoon.outline_color_factor = (0, 0, 0)
|
|
170
|
+
mtoon.outline_lighting_mix_factor = 0
|
|
171
|
+
mtoon.uv_animation_mask_texture.index.source = image
|
|
172
|
+
mtoon.uv_animation_scroll_x_speed_factor = 0
|
|
173
|
+
mtoon.uv_animation_scroll_y_speed_factor = 0
|
|
174
|
+
mtoon.uv_animation_rotation_speed_factor = 0
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## VRMのキャラクターを動的に生成しファイルにエクスポート
|
|
178
|
+
|
|
179
|
+

|
|
180
|
+
|
|
181
|
+
[人型のVRMモデルを作る](../create-humanoid-vrm-from-scratch/)の手順をスクリプトで自動化し、VRMとしてエクスポートします。
|
|
182
|
+
|
|
183
|
+
```python
|
|
184
|
+
from pathlib import Path
|
|
185
|
+
|
|
186
|
+
import bpy
|
|
187
|
+
|
|
188
|
+
# 初期化
|
|
189
|
+
|
|
190
|
+
if bpy.app.module:
|
|
191
|
+
bpy.ops.preferences.addon_enable(module="io_scene_vrm")
|
|
192
|
+
|
|
193
|
+
# アーマチュアを作成
|
|
194
|
+
|
|
195
|
+
armature_data = bpy.data.armatures.new("Armature")
|
|
196
|
+
armature_object = bpy.data.objects.new("Armature", armature_data)
|
|
197
|
+
bpy.context.scene.collection.objects.link(armature_object)
|
|
198
|
+
bpy.context.view_layer.objects.active = armature_object
|
|
199
|
+
|
|
200
|
+
bpy.ops.object.mode_set(mode="EDIT")
|
|
201
|
+
|
|
202
|
+
hips_bone = armature_data.edit_bones.new("hips")
|
|
203
|
+
hips_bone.head = (0, 0, 0.5)
|
|
204
|
+
hips_bone.tail = (0, 1, 0.5)
|
|
205
|
+
hips_bone_name = hips_bone.name
|
|
206
|
+
|
|
207
|
+
right_upper_leg_bone = armature_data.edit_bones.new("upper_leg.R")
|
|
208
|
+
right_upper_leg_bone.head = (-0.125, 0, 0.5)
|
|
209
|
+
right_upper_leg_bone.tail = (-0.125, 1, 0.5)
|
|
210
|
+
right_upper_leg_bone.parent = hips_bone
|
|
211
|
+
right_upper_leg_bone_name = right_upper_leg_bone.name
|
|
212
|
+
|
|
213
|
+
right_lower_leg_bone = armature_data.edit_bones.new("lower_leg.R")
|
|
214
|
+
right_lower_leg_bone.head = (-0.125, 0, 0.25)
|
|
215
|
+
right_lower_leg_bone.tail = (-0.125, 1, 0.25)
|
|
216
|
+
right_lower_leg_bone.parent = right_upper_leg_bone
|
|
217
|
+
right_lower_leg_bone_name = right_lower_leg_bone.name
|
|
218
|
+
|
|
219
|
+
right_foot_bone = armature_data.edit_bones.new("foot.R")
|
|
220
|
+
right_foot_bone.head = (-0.125, 0, 0)
|
|
221
|
+
right_foot_bone.tail = (-0.125, 1, 0)
|
|
222
|
+
right_foot_bone.parent = right_lower_leg_bone
|
|
223
|
+
right_foot_bone_name = right_foot_bone.name
|
|
224
|
+
|
|
225
|
+
left_upper_leg_bone = armature_data.edit_bones.new("upper_leg.L")
|
|
226
|
+
left_upper_leg_bone.head = (0.125, 0, 0.5)
|
|
227
|
+
left_upper_leg_bone.tail = (0.125, 1, 0.5)
|
|
228
|
+
left_upper_leg_bone.parent = hips_bone
|
|
229
|
+
left_upper_leg_bone_name = left_upper_leg_bone.name
|
|
230
|
+
|
|
231
|
+
left_lower_leg_bone = armature_data.edit_bones.new("lower_leg.L")
|
|
232
|
+
left_lower_leg_bone.head = (0.125, 0, 0.25)
|
|
233
|
+
left_lower_leg_bone.tail = (0.125, 1, 0.25)
|
|
234
|
+
left_lower_leg_bone.parent = left_upper_leg_bone
|
|
235
|
+
left_lower_leg_bone_name = left_lower_leg_bone.name
|
|
236
|
+
|
|
237
|
+
left_foot_bone = armature_data.edit_bones.new("foot.L")
|
|
238
|
+
left_foot_bone.head = (0.125, 0, 0)
|
|
239
|
+
left_foot_bone.tail = (0.125, 1, 0)
|
|
240
|
+
left_foot_bone.parent = left_lower_leg_bone
|
|
241
|
+
left_foot_bone_name = left_foot_bone.name
|
|
242
|
+
|
|
243
|
+
spine_bone = armature_data.edit_bones.new("spine")
|
|
244
|
+
spine_bone.head = (0, 0, 0.625)
|
|
245
|
+
spine_bone.tail = (0, 1, 0.625)
|
|
246
|
+
spine_bone.parent = hips_bone
|
|
247
|
+
spine_bone_name = spine_bone.name
|
|
248
|
+
|
|
249
|
+
right_upper_arm_bone = armature_data.edit_bones.new("upper_arm.R")
|
|
250
|
+
right_upper_arm_bone.head = (-0.125, 0, 0.75)
|
|
251
|
+
right_upper_arm_bone.tail = (-0.125, 1, 0.75)
|
|
252
|
+
right_upper_arm_bone.parent = spine_bone
|
|
253
|
+
right_upper_arm_bone_name = right_upper_arm_bone.name
|
|
254
|
+
|
|
255
|
+
right_lower_arm_bone = armature_data.edit_bones.new("lower_arm.R")
|
|
256
|
+
right_lower_arm_bone.head = (-0.25, 0, 0.75)
|
|
257
|
+
right_lower_arm_bone.tail = (-0.25, 1, 0.75)
|
|
258
|
+
right_lower_arm_bone.parent = right_upper_arm_bone
|
|
259
|
+
right_lower_arm_bone_name = right_lower_arm_bone.name
|
|
260
|
+
|
|
261
|
+
right_hand_bone = armature_data.edit_bones.new("hand.R")
|
|
262
|
+
right_hand_bone.head = (-0.375, 0, 0.75)
|
|
263
|
+
right_hand_bone.tail = (-0.375, 1, 0.75)
|
|
264
|
+
right_hand_bone.parent = right_lower_arm_bone
|
|
265
|
+
right_hand_bone_name = right_hand_bone.name
|
|
266
|
+
|
|
267
|
+
left_upper_arm_bone = armature_data.edit_bones.new("upper_arm.L")
|
|
268
|
+
left_upper_arm_bone.head = (0.125, 0, 0.75)
|
|
269
|
+
left_upper_arm_bone.tail = (0.125, 1, 0.75)
|
|
270
|
+
left_upper_arm_bone.parent = spine_bone
|
|
271
|
+
left_upper_arm_bone_name = left_upper_arm_bone.name
|
|
272
|
+
|
|
273
|
+
left_lower_arm_bone = armature_data.edit_bones.new("lower_arm.L")
|
|
274
|
+
left_lower_arm_bone.head = (0.25, 0, 0.75)
|
|
275
|
+
left_lower_arm_bone.tail = (0.25, 1, 0.75)
|
|
276
|
+
left_lower_arm_bone.parent = left_upper_arm_bone
|
|
277
|
+
left_lower_arm_bone_name = left_lower_arm_bone.name
|
|
278
|
+
|
|
279
|
+
left_hand_bone = armature_data.edit_bones.new("hand.L")
|
|
280
|
+
left_hand_bone.head = (0.375, 0, 0.75)
|
|
281
|
+
left_hand_bone.tail = (0.375, 1, 0.75)
|
|
282
|
+
left_hand_bone.parent = left_lower_arm_bone
|
|
283
|
+
left_hand_bone_name = left_hand_bone.name
|
|
284
|
+
|
|
285
|
+
head_bone = armature_data.edit_bones.new("head")
|
|
286
|
+
head_bone.head = (0, 0, 0.75)
|
|
287
|
+
head_bone.tail = (0, 1, 0.75)
|
|
288
|
+
head_bone.parent = spine_bone
|
|
289
|
+
head_bone_name = head_bone.name
|
|
290
|
+
|
|
291
|
+
bpy.ops.object.mode_set(mode="OBJECT")
|
|
292
|
+
|
|
293
|
+
# VRM Human Boneを割り当て
|
|
294
|
+
|
|
295
|
+
humanoid = armature_data.vrm_addon_extension.vrm1.humanoid
|
|
296
|
+
humanoid.human_bones.head.node.bone_name = head_bone_name
|
|
297
|
+
humanoid.human_bones.spine.node.bone_name = spine_bone_name
|
|
298
|
+
humanoid.human_bones.hips.node.bone_name = hips_bone_name
|
|
299
|
+
humanoid.human_bones.right_upper_arm.node.bone_name = right_upper_arm_bone_name
|
|
300
|
+
humanoid.human_bones.right_lower_arm.node.bone_name = right_lower_arm_bone_name
|
|
301
|
+
humanoid.human_bones.right_hand.node.bone_name = right_hand_bone_name
|
|
302
|
+
humanoid.human_bones.left_upper_arm.node.bone_name = left_upper_arm_bone_name
|
|
303
|
+
humanoid.human_bones.left_lower_arm.node.bone_name = left_lower_arm_bone_name
|
|
304
|
+
humanoid.human_bones.left_hand.node.bone_name = left_hand_bone_name
|
|
305
|
+
humanoid.human_bones.right_upper_leg.node.bone_name = right_upper_leg_bone_name
|
|
306
|
+
humanoid.human_bones.right_lower_leg.node.bone_name = right_lower_leg_bone_name
|
|
307
|
+
humanoid.human_bones.right_foot.node.bone_name = right_foot_bone_name
|
|
308
|
+
humanoid.human_bones.left_upper_leg.node.bone_name = left_upper_leg_bone_name
|
|
309
|
+
humanoid.human_bones.left_lower_leg.node.bone_name = left_lower_leg_bone_name
|
|
310
|
+
humanoid.human_bones.left_foot.node.bone_name = left_foot_bone_name
|
|
311
|
+
|
|
312
|
+
# メッシュを追加
|
|
313
|
+
|
|
314
|
+
bpy.ops.mesh.primitive_uv_sphere_add(radius=0.25)
|
|
315
|
+
head = bpy.context.active_object
|
|
316
|
+
head.parent = armature_object
|
|
317
|
+
head.parent_bone = humanoid.human_bones.head.node.bone_name
|
|
318
|
+
head.parent_type = "BONE"
|
|
319
|
+
|
|
320
|
+
bpy.ops.mesh.primitive_cube_add(size=0.4)
|
|
321
|
+
spine = bpy.context.active_object
|
|
322
|
+
spine.parent = armature_object
|
|
323
|
+
spine.parent_bone = humanoid.human_bones.spine.node.bone_name
|
|
324
|
+
spine.parent_type = "BONE"
|
|
325
|
+
|
|
326
|
+
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.1)
|
|
327
|
+
left_upper_arm = bpy.context.active_object
|
|
328
|
+
left_upper_arm.parent = armature_object
|
|
329
|
+
left_upper_arm.parent_bone = humanoid.human_bones.left_upper_arm.node.bone_name
|
|
330
|
+
left_upper_arm.parent_type = "BONE"
|
|
331
|
+
|
|
332
|
+
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.1)
|
|
333
|
+
left_hand = bpy.context.active_object
|
|
334
|
+
left_hand.parent = armature_object
|
|
335
|
+
left_hand.parent_bone = humanoid.human_bones.left_hand.node.bone_name
|
|
336
|
+
left_hand.parent_type = "BONE"
|
|
337
|
+
|
|
338
|
+
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.1)
|
|
339
|
+
right_upper_arm = bpy.context.active_object
|
|
340
|
+
right_upper_arm.parent = armature_object
|
|
341
|
+
right_upper_arm.parent_bone = humanoid.human_bones.right_upper_arm.node.bone_name
|
|
342
|
+
right_upper_arm.parent_type = "BONE"
|
|
343
|
+
|
|
344
|
+
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.1)
|
|
345
|
+
right_hand = bpy.context.active_object
|
|
346
|
+
right_hand.parent = armature_object
|
|
347
|
+
right_hand.parent_bone = humanoid.human_bones.right_hand.node.bone_name
|
|
348
|
+
right_hand.parent_type = "BONE"
|
|
349
|
+
|
|
350
|
+
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.1)
|
|
351
|
+
left_upper_leg = bpy.context.active_object
|
|
352
|
+
left_upper_leg.parent = armature_object
|
|
353
|
+
left_upper_leg.parent_bone = humanoid.human_bones.left_upper_leg.node.bone_name
|
|
354
|
+
left_upper_leg.parent_type = "BONE"
|
|
355
|
+
|
|
356
|
+
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.1)
|
|
357
|
+
right_upper_leg = bpy.context.active_object
|
|
358
|
+
right_upper_leg.parent = armature_object
|
|
359
|
+
right_upper_leg.parent_bone = humanoid.human_bones.right_upper_leg.node.bone_name
|
|
360
|
+
right_upper_leg.parent_type = "BONE"
|
|
361
|
+
|
|
362
|
+
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.1)
|
|
363
|
+
left_lower_leg = bpy.context.active_object
|
|
364
|
+
left_lower_leg.parent = armature_object
|
|
365
|
+
left_lower_leg.parent_bone = humanoid.human_bones.left_lower_leg.node.bone_name
|
|
366
|
+
left_lower_leg.parent_type = "BONE"
|
|
367
|
+
|
|
368
|
+
bpy.ops.mesh.primitive_ico_sphere_add(radius=0.1)
|
|
369
|
+
right_lower_leg = bpy.context.active_object
|
|
370
|
+
right_lower_leg.parent = armature_object
|
|
371
|
+
right_lower_leg.parent_bone = humanoid.human_bones.right_lower_leg.node.bone_name
|
|
372
|
+
right_lower_leg.parent_type = "BONE"
|
|
373
|
+
|
|
374
|
+
# メタデータを設定
|
|
375
|
+
|
|
376
|
+
meta = armature_data.vrm_addon_extension.vrm1.meta
|
|
377
|
+
meta.vrm_name = "Your Model Name"
|
|
378
|
+
meta.version = "1.0.0"
|
|
379
|
+
|
|
380
|
+
# ファイルに保存
|
|
381
|
+
|
|
382
|
+
output_filepath = str(Path(__file__).parent / "path_to_your_vrm_model.vrm")
|
|
383
|
+
result = bpy.ops.export_scene.vrm(filepath=output_filepath)
|
|
384
|
+
if result != {"FINISHED"}:
|
|
385
|
+
message = f"Failed to export vrm: {result}"
|
|
386
|
+
raise RuntimeError(message)
|
|
387
|
+
|
|
388
|
+
print(f'Saved the VRM file to "{output_filepath}"')
|
|
389
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "VRM(.vrm)のエクスポート"
|
|
3
|
+
description: "BlenderからVRM(.vrm)を書き出す手順と各オプションを説明します。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
メニューの `ファイル` → `エクスポート` → `VRM (.vrm)`
|
|
7
|
+
を選択することで、VRMのエクスポートダイアログが表示されます。 `保存`
|
|
8
|
+
ボタンを押すと、現在編集中のアーマチュアがVRMファイルとしてエクスポートされます。
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
## オプション
|
|
13
|
+
|
|
14
|
+
### ✅ 非表示のオブジェクトを含める
|
|
15
|
+
|
|
16
|
+
エクスポート時に非表示のオブジェクトを含めます。
|
|
17
|
+
例外的に、エクスポート対象のアーマチュアだけは非表示でもエクスポートします。
|
|
18
|
+
|
|
19
|
+
### ✅ 選択されたオブジェクトのみ
|
|
20
|
+
|
|
21
|
+
選択中のオブジェクトのみエクスポートします。
|
|
22
|
+
|
|
23
|
+
### ✅ 高度なオプションを有効にする
|
|
24
|
+
|
|
25
|
+
【高度なオプション】の項目を有効にします。
|
|
26
|
+
これらの項目を変更すると、VRMファイルのアプリケーション間の互換性が失われることがあるので注意してください。
|
|
27
|
+
|
|
28
|
+
### ✅ 【高度なオプション】【VRM 1.0のみ】スパースアクセッサを利用する
|
|
29
|
+
|
|
30
|
+
シェイプキーのエクスポート時にスパースアクセッサを利用します。
|
|
31
|
+
シェイプキーを利用しているモデルでファイルサイズが削減される可能性がありますが、
|
|
32
|
+
[UniVRM 0.115.0以下](https://github.com/saturday06/VRM-Addon-for-Blender/issues/381#issuecomment-1838365762)を利用している古いアプリでVRMファイルが読めなくなります。
|
|
33
|
+
|
|
34
|
+
### ✅ 【高度なオプション】【VRM 1.0のみ】全てのボーンウェイトをエクスポートする
|
|
35
|
+
|
|
36
|
+
全てのボーンウェイトをエクスポートします。VRMは仕様上は、
|
|
37
|
+
1つの頂点に対して255個までのボーンウェイトを割り当てることができます。
|
|
38
|
+
しかし、ほとんどのVRMを扱うアプリケーションは、1つの頂点にあたり4つのウェイトまでしか解釈しません。
|
|
39
|
+
そのため、デフォルトでは表示互換性のためエクスポートするウェイトは4つまでに制限しています。
|
|
40
|
+
この制限を外し、すべてのボーンウェイトをエクスポートするようにします。
|
|
41
|
+
アプリケーションによってメッシュが大きく崩れることがあるため、慎重にウェイトを設定するか、
|
|
42
|
+
エクスポート結果を特定のアプリケーションのみで利用する場合にご利用ください。
|
|
43
|
+
|
|
44
|
+
### ✅ 【高度なオプション】【VRM 1.0のみ】ライトをエクスポートする
|
|
45
|
+
|
|
46
|
+
ライトオブジェクトをエクスポート対象に含めます。VRMにおけるライトの扱いは現在コンセンサスが無く、
|
|
47
|
+
どのような結果になるかが予測できません。ライトを扱えるアプリケーションのみで利用する場合にご利用ください。
|
|
48
|
+
|
|
49
|
+
### ✅ 【高度なオプション】【VRM 1.0のみ】glTFアニメーションをエクスポートする
|
|
50
|
+
|
|
51
|
+
glTFアニメーションをエクスポートします。デフォルトではglTFアニメーションはエクスポートしません。
|
|
52
|
+
VRMファイルはモーションのリターゲッティングをすることが前提のフォーマットのため、
|
|
53
|
+
そのままglTFのアニメーションがそのまま適用できないことが多いです。 代わりに
|
|
54
|
+
[VRM Animation](https://vrm-addon-for-blender.info/ja-jp/animation/)
|
|
55
|
+
の利用を検討してください。
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "VRM Animation(.vrma)のエクスポート"
|
|
3
|
+
description: "BlenderからVRM Animation(.vrma)を書き出す方法と含まれるデータを説明します。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
メニューの `ファイル` → `エクスポート` → `VRM Animation (.vrma)`
|
|
7
|
+
を選択することで、 [VRM Animation](../../animation/)
|
|
8
|
+
のエクスポートダイアログが表示されます。
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
`保存` ボタンを押すと、シーンに配置されているVRM
|
|
13
|
+
1.0に割り当てられているアニメーションのうち、
|
|
14
|
+
次に条件に当てはまるものがVRMAファイルとしてエクスポートされます。
|
|
15
|
+
|
|
16
|
+
- VRM Humanoidボーンに割り当てられているボーンの回転値
|
|
17
|
+
- VRM Humanoidボーンのうち、Hipsボーンに割り当てられているボーンの移動値
|
|
18
|
+
- VRM Expressionsのプレビューの値
|
|
19
|
+
- VRM Look AtのPreview Targetに指定されているオブジェクトの移動値
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "VRM(.vrm)のインポート"
|
|
3
|
+
description: "BlenderにVRM(.vrm)を読み込み、インポート設定を調整する方法を説明します。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
メニューの `ファイル` → `インポート` → `VRM (.vrm)`
|
|
7
|
+
を選択することで、VRMのインポートダイアログが表示されます。VRMファイルを選択して
|
|
8
|
+
`開く` ボタンを押すとシーンにVRMファイルが展開されます。
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
## オプション
|
|
13
|
+
|
|
14
|
+
### ✅ テクスチャ画像をフォルダに展開
|
|
15
|
+
|
|
16
|
+
VRMファイルの配置場所と同じ場所にフォルダを作成し、VRMファイル内に存在するテクスチャを展開します。
|
|
17
|
+
チェックをしない場合、テクスチャは現在編集中の `.blend`
|
|
18
|
+
ファイル内に埋め込まれます。
|
|
19
|
+
|
|
20
|
+
### ✅ 既に存在するテクスチャ画像のフォルダを上書きしない
|
|
21
|
+
|
|
22
|
+
テクスチャ画像用のフォルダ作成時に、既にフォルダが存在している場合は連番を付与し、
|
|
23
|
+
フォルダの上書きが発生しないようにします。
|
|
24
|
+
|
|
25
|
+
### ✅ 3Dビューをマテリアルプレビューに設定
|
|
26
|
+
|
|
27
|
+
VRMファイルの読み込み後、3Dビューポートのシェーディング設定をマテリアルプレビューに設定します。
|
|
28
|
+
こちら、Blenderに慣れている人にとってはあまり意味のない設定ではありますが、
|
|
29
|
+
まだ慣れていない人がインポート直後に、別プラットフォームでの表示とほぼ同じ表示を再現することによって、
|
|
30
|
+
テンションを上げて欲しいという思いがあります。
|
|
31
|
+
|
|
32
|
+
### ✅ ビュー変換を「標準」に設定
|
|
33
|
+
|
|
34
|
+
VRMファイルの読み込み後、カラーマネージメントのビュー変換を「標準」に設定します。
|
|
35
|
+
VRMファイルはBlenderのデフォルトのビュー変換設定と相性が悪く、若干くすんだ表示になることが多いです。
|
|
36
|
+
ビュー変換を「標準」にすることで、この問題を解決します。
|
|
37
|
+
|
|
38
|
+
### ✅ アーマチュアのビューポート表示を「ワイヤーフレーム」に設定
|
|
39
|
+
|
|
40
|
+
VRMファイルの読み込み後、アーマチュアのビューポート表示を「ワイヤーフレーム」に設定します。
|
|
41
|
+
|
|
42
|
+
### ✅ アーマチュアを最前面に表示
|
|
43
|
+
|
|
44
|
+
VRMファイルの読み込み後、アーマチュアを最前面に表示します。
|
|
45
|
+
|
|
46
|
+
### ✅ ボーンの形状表示をデフォルトのものにする
|
|
47
|
+
|
|
48
|
+
VRMの親仕様であるglTF形式の公式インポーターは、ボーンの形状表示をICO球などに自動で変更することがあります。
|
|
49
|
+
しかし、アドオン作者としては、主に人型のアーマチュアが展開されるVRMファイルに対してはこの動作は不自然に感じています。
|
|
50
|
+
これを抑制し、デフォルトの角錐に設定します。
|
|
51
|
+
|
|
52
|
+
### ✅ MToonアウトラインのプレビューを有効にする
|
|
53
|
+
|
|
54
|
+
VRMに含まれるトゥーンシェーダーである「MToon」は、アニメ風のアウトラインの描画機能を含みます。
|
|
55
|
+
こちらは背面法により実装されているため、有効にすると統計オーバーレイに表示される頂点数が増えたり、
|
|
56
|
+
ビューポートの動作負荷が高まることがあります。無効にすることで、これらの問題を解決できます。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "VRM Animation(.vrma)のインポート"
|
|
3
|
+
description: "VRM 1.0モデルにVRM Animation(.vrma)を読み込む手順を説明します。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
メニューの `ファイル` → `インポート` → `VRM Animation (.vrma)`
|
|
7
|
+
を選択することで、 [VRM Animation](../../animation/)
|
|
8
|
+
のインポートダイアログが表示されます。
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
VRMAファイルを選択して `開く` ボタンを押すと、 現在のシーンのVRM
|
|
13
|
+
1.0モデルにアニメーションが反映されます。 現在のシーンにVRM
|
|
14
|
+
1.0モデルが存在しない場合、最小のモデルを自動生成します。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT OR GPL-3.0-or-later
|