Skip to content

fix: FBX のノード名が連番付きでも、2 回目以降の読み込みで prefab のマテリアルを当てる (#155) - #156

Merged
utagestudio merged 1 commit into
release/1.12.0from
fix/155-numbered-node-names
Oct 25, 2026
Merged

utagestudio merged 1 commit into
release/1.12.0from
fix/155-numbered-node-names

Conversation

@utagestudio

@utagestudio utagestudio commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

Closes #155

#154(#152)の上に積んだ PR です。#154 をマージしたら、base を release/1.12.0 に付け替えます。

変更内容

FBX のノード名がもともと連番付き(Base-Ring.001 など)のとき、同じ FBX を 2 回目以降に読み込むと Blender が Base-Ring.002 に付け替える。prefab の表を引く照合が表の名前の連番を外していなかったので、2 回目以降の読み込みでは prefab の .mat が当たらず、FBX のマテリアルのままになっていた。

  • core/prefab.find_renderer: 今までの照合(完全一致 → オブジェクト名の連番を外した形 → メッシュ参照の fileID)が外れたら、表の名前の連番も外して比べる。該当する行が 1 つだけならそれを使い、複数ある(Body と Body.001 が両方ある FBX など)ときは決められないので引かない
  • core/scene_import.parts_to_hide: Scenes 単位の LOD の段と無効な Renderer の判定も、同じ形で照合する
  • 合成のシーン用パッケージに、ノード名が連番付きの Rings.fbx と、その Ring.001 だけを指す色違いの prefab(RingRed / RingPlain)を追加した。修正前のコードでは、2 つ目の RingRed が FBX のマテリアルのままになって統合テストが失敗する
  • バージョンを 1.12.0-dev.5 にした

確認

手元の実パッケージ 14 個を、#154 の時点のコードとこのブランチで Models / Prefabs / Scenes の単位ごとに読み込み、オブジェクトごとのマテリアルと表示・非表示を比べた。

パッケージ 単位 変化
Gothic Lights Prefabs 29 個が FBX のマテリアル → prefab の .mat
Gothic Lights Scenes 14 個が FBX のマテリアル → prefab の .mat
Japanese Street Scenes _LOD1 の 86 個(ドア・家・ガレージ扉)が非表示になった。今まで LOD の段を引けず、LOD0 と重なって表示されていた
ほかの 12 パッケージ、各単位 — 変化なし(Shibuya の Scenes 55,701 個を含む)

正しく割り当てられていたものが変わったケースは、1 つもなかった。

  • 単体テストと、合成パッケージの統合テスト 13 ファイル、Yumeka 1.0.4 の統合テストがすべて通過

手動確認の手順

  1. Gothic Lights を読み込み、Prefabs タブで Ceiling-Light-001 - Rusty Black と、同じ FBX を使うほかの色違いをまとめて選んで Import する
  2. 2 つ目以降のコレクションでも、燭台(Candle-Holder)とリング(Base-Ring)に prefab の .mat(Black-Rusty-Steel など)が付いていること。修正前は FBX のマテリアル(Candle-Holder.001 など)だった
  3. Japanese Street のシーン(86 個は 3 シーンの合計)を Scenes で読み込み、ドアの _LOD1 が非表示になっていること

🤖 Generated with Claude Code

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>
@utagestudio
utagestudio changed the base branch from feat/152-skip-unused-parts to release/1.12.0 October 25, 2026 14:42
@utagestudio
utagestudio merged commit e4cb9c0 into release/1.12.0 Oct 25, 2026
5 checks passed
@utagestudio
utagestudio deleted the fix/155-numbered-node-names 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

Development

Successfully merging this pull request may close these issues.

1 participant