Skip to content

1.12.0: 使われていない FBX の部品を読み込まないオプション - #157

Merged
utagestudio merged 9 commits into
mainfrom
release/1.12.0
Oct 25, 2026
Merged

utagestudio merged 9 commits into
mainfrom
release/1.12.0

Conversation

@utagestudio

Copy link
Copy Markdown
Owner

含まれる変更

Closes #151
Closes #152
Closes #155

確認したこと

  • extension validate が通る
  • 単体テスト 403 件が OK
  • 統合テスト(バージョン確定後に再実行): synthetic_multi 99 件、synthetic_scene 167 件、scene_prefabs 51 件、scene_keep_unused 14 件、scene_prefabs_keep_unused 29 件、Yumeka 1.0.4 45 件が通る
  • 手元の実パッケージ 14 個で、Unused Parts の ON / OFF で表示されるメッシュの名前と位置が一致(Japanese Train Station の DemoScene は読み込み 34.2 秒 → 3.4 秒、オブジェクト 31,290 → 1,167)

main にマージすると Pages に 1.12.0 が公開されます。その後、同じ zip を extensions.blender.org と BOOTH にも上げます。

🤖 Generated with Claude Code

utagestudio and others added 9 commits October 25, 2026 18:28
Japanese Train Station PBR Pack では駅の部品 54 個が 1 つの FBX にまとまっていて、
prefab は MeshFilter でそのうち 1〜3 個だけを指している。Scenes 単位には表に無いメッシュを
隠す処理(#58)があるが、Prefabs 単位には無く、どの prefab にも 54 個すべてが表示されていた。

Prefabs 単位でも、prefab がモデルを丸ごと置いていない(モデルの PrefabInstance の配置が無い)
場合は、表に無いメッシュを隠し、件数を Scenes 単位と同じ文言で警告に出す。

- core/hierarchy.py: Renderer から作った配置かの判定を built_from_renderers にまとめ、
  parts_to_hide と共用する
- core/prefab.py: models_placed_whole と unused_parts を追加。tables_from_hierarchy は
  求めた配置を受け取れるようにし、prepare_package で配置を 1 回だけ求める
- core/scene_import.py: 文言を unused_warning に切り出し、prefab 用の prefab_warnings を追加
- 合成パッケージの Partial.prefab(Spike だけを使う)を Prefabs 単位の期待値に加えた

バージョンは 1.12.0 の開発を始めるので 1.12.0-dev.1 にする(#152 の機能追加と一緒に出す)。

Closes #151

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Japanese Train Station PBR Pack の DemoScene では、駅の部品 54 個をまとめた FBX から
prefab が 1〜3 個だけを使うため、配置ごとに FBX を丸ごと複製して残りを隠しており、
非表示のメッシュが 28,015 個できていた。オブジェクトが多く、読み込み・保存・操作が重い。

読み込む単位 Scenes / Prefabs に「Skip Unused Parts」(既定 ON)を追加し、ON なら
prefab・シーンが使っていない部品(#58 / #151 で隠していたもの)を読み込まない。
OFF なら今までどおり読み込んで隠す(照合を誤ったときの逃げ道)。

- Scenes 単位: 最初に読み込んだモデルから使わない部品を消してからテンプレートを作るので、
  以後の配置では必要な分だけを複製する。使い回しのキーに、Renderer から作った配置かと
  メッシュ参照の fileID を加えた
- 消すものは core/scene_import.parts_to_remove が決める。使う部品を子孫に持つものは
  親子関係と位置を保つため残して隠し、子がすべて消えた Empty・アーマチュアは消す。
  使われていないかの判定は unused_in_placement に切り出し、parts_to_hide と共用する
- 消したオブジェクトだけが使っていたメッシュ・アーマチュアのデータも消す。マテリアルは
  同じ回の別のモデルと共有するので消さない
- 警告は「were not imported」の文言で件数を出す
- 選択ダイアログに「Unused Parts」のトグル、オペレーターに skip_unused_parts を追加
- 統合テストに absent(オブジェクトが無いこと)を追加し、OFF を確かめる期待値を
  Scenes / Prefabs に 1 つずつ足した

DemoScene: 読み込み 34.2 秒 → 3.4 秒、オブジェクト 31,290 → 1,167。表示されるメッシュ 555 個は
名前と位置が OFF と一致した(Japanese Street の 2 シーン、Japanese Apartment でも一致)。

Closes #152

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gothic Lights を読み込む単位 Prefabs で読むと、Skip Unused Parts が ON のとき
「StructRNA of type Object has been removed」で読み込みが止まった。

FBX の読み込み直後は、複数のオブジェクトが共有するメッシュでも users が 1 のことがある。
消したオブジェクトのメッシュを users == 0 で消していたため、共有していたほかのオブジェクトまで
Blender がデータと一緒に消し、その参照が無効になっていた。

オブジェクトを先にすべて消し、残したオブジェクトが使っていないデータだけを消すようにした。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
FBX のノード名がもともと「Base-Ring.001」のように連番付きだと、同じ FBX を 2 回目以降に
読み込んだとき Blender が「Base-Ring.002」に付け替える。#151 の unused_parts はオブジェクト名の
連番だけを外していたので、使っている部品まで使われていないと判定し、OFF では隠し、ON では
消していた(Gothic Lights の Ceiling-Light-001 で燭台とリングの 6 個など)。

Scenes 単位の unused_in_placement と同じく、表の名前の連番も外して比べる。外した名前が同じ別の
ノードがあっても、使っている側に倒す(隠したり消したりはしない)。

Gothic Lights の Prefabs で表示されるメッシュが 249 → 278 になり、ON と OFF で一致した。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
FBX のノード名がもともと「Base-Ring.001」のように連番付きだと、同じ FBX を 2 回目以降に
読み込んだとき Blender が「Base-Ring.002」に付け替える。find_renderer はオブジェクト名の連番を
外して引いていたが、表の名前の側は外していなかったので一致せず、prefab の .mat が当たらずに
FBX のマテリアルのままになっていた(Gothic Lights の色違いの吊り下げ灯など。Prefabs 単位で
30 か所、Scenes 単位で 14 か所のスロット)。

- core/prefab.find_renderer: 今までの照合が外れたら、表の名前の連番も外して比べ、該当する行が
  1 つだけならそれを使う。複数あればどれか決められないので引かない
- core/scene_import.parts_to_hide: LOD の段と無効な Renderer の判定も同じ形で照合する
- 合成のシーン用パッケージに、ノード名が連番付きの Rings.fbx と、その Ring.001 だけを指す
  色違いの prefab(RingRed / RingPlain)を加え、Prefabs 単位の期待値で 2 つ目にも .mat が
  当たることを確かめる(修正前は RingRed が FBX のマテリアルのままで失敗する)

Closes #155

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix: 読み込む単位 Prefabs で、prefab が使っていない FBX の部品を隠す (#151)
feat: 使われていない FBX の部品を読み込まないオプション (#152)
fix: FBX のノード名が連番付きでも、2 回目以降の読み込みで prefab のマテリアルを当てる (#155)
読み込む単位 Prefabs で使われていない FBX の部品を隠す修正(#151)、使われていない部品を
読み込まない「Unused Parts」オプション(#152)、連番付きのノード名で prefab のマテリアルが
当たらない不具合の修正(#155)を含む。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@utagestudio
utagestudio merged commit c9884c6 into main Oct 25, 2026
6 checks passed
@utagestudio
utagestudio deleted the release/1.12.0 branch October 25, 2026 14:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant