Blenderのプロジェクト作成において、より高度な使い方や効率的な管理ができるように基礎的なデータ構造を理解したいと思い勉強したことをまとめます。
Sceneの管理などするときに、データ構造がわからないまま進めると誤っていろいろデータを消してしまいそうで、どうしても基礎的なBlenderの動作・データ管理法を理解する必要性が出てきてしまいました…。
どのデータがどことつながっていて、どこを消したらリンクされてるデータが消えてるか知りたいと思ったんですが、そもそも自分が思ってるデータ構造(親と子の木構造)とBlenderのデータ管理構造って全然違うということがわかってきました。
Blenderのデータ構造って、親から子への木構造があって、親が削除されれば子も削除されて…みたいなトップダウン方式ではなく、ぼっちに厳しいコミュニティ構造…みたいな感じですね(悲しい)。
データ構造がわかるとどうしてこうなるんだろう…という細かい疑問がある程度解決していくので、Blenderでプロジェクト管理している方はBlenderのデータ構造について知っておくといいんじゃないかと思いました。
記事や動画をいくつか見たんですが、この方の説明の仕方が腑に落ちたというか、そういうことかとわかりやすかったので参考動画としてリンクを貼っておきます。↓
Blenderのデータ構造の全体

Blenderはデータブロック(Data Blocks)という単位でデータを管理しています。すべての要素(メッシュ、マテリアル、画像、アーマチュアなど)はこのデータブロックの一種です。
具体的に言うと
- Collectionデータブロック
- 持ってるオブジェクト一覧、表示オンオフ情報等
- Materialデータブロック
- 基本色、ノードツリー、透明情報
- Objectデータブロック
- オブジェクトの種類、本体データ、トランスフォーム情報

この構造はどこで見れるかというと、
メニュー右側のアウトライナーのDisplay Modeのプルダウンメニューを開いて、Blender Fileモードにします。

Blender Fileモードの表示にすると、今現在このファイルが持っているデータブロックの一覧が表示されます。
まずデータブロックのカテゴリが並んでいるので、それを開きます。
例えばObjectsを開くと、Camera,Cube,Lightなど、今あるオブジェクトのデータブロックが入っています。
※ これらは bpy.data
からアクセスできます(例:bpy.data.meshes
)。
データブロック一覧については公式のマニュアルに載っています↓
データブロックの関係・構造的な特徴
データブロック同士の関係・そのつながりについて解説していきます。データブロック同士のつながり、どうリンクしているのかがわかると、フェイクユーザー機能やシングルユーザー化の意味がもっとわかりやすくなります。
データブロックのユーザー化、リンク
データブロック同士の立場は対等
データブロックのつながりは、親と子とか、木構造のように、どちらの方が立場が上である、どちらかが一方を所有しているみたいな構造ではありません。


なので、上の図を見てもわかるように、ObjectのCubeのデータブロックを削除してもMeshのCubeデータブロックは残っています。
誰かが誰かのユーザーになる、リンクというつながり

データブロック同士は、親とか子ではなく、使いたいデータブロックのユーザーになります。使いたいときに使いたいデータブロックのユーザーとなってリンクするシステムです。
所有ではなくリンクなので、Objectが削除されても、MaterialやMeshのデータブロックは残り、また誰かが使ったり、再利用できます。
※リンクするときに、どのデータブロックがどのデータブロックのユーザーになれるかは決まっているので、リンクの方向やペアは決まっています(=一方向)。
リンクの方向の一例
Scene > Collection > Object > Mesh > Material > Image
SceneはCollectionのユーザーとなり、CollectionはObjectのユーザーになり…と続きます。

例えば、キューブとトーラスのメッシュデータブロックが、Redという赤いマテリアルを使いたい!というとき、Redのマテリアルデータブロックのユーザーとなってリンクします。
二つのオブジェクトが赤くなりました。
マテリアルのプロパティのリンク表示画面に、ユーザー2人(キューブ、トーラスのMeshデータブロックのこと)がリンクしていることが表示されています。
リンクのショートカット

Blenderは、複数のオブジェクトを選択し、Ctrl + L で、様々なデータブロックをリンクさせることができます。
例えばLink Materialsを選択すると、アクティブ(オレンジ線で選択)になってるオブジェクト・メッシュについてるマテリアルを、他方のメッシュにもリンクさせることができます。
他にもアニメーションやメッシュなどもリンクさせることができます。
シングルユーザー化
共有物を勝手に変えないために

例えば、ここにボブとスザンヌというオブジェクト・メッシュを作成し、二人でmonkeyMatという肌色のマテリアルのユーザーとなって使用している場面があります。
ボブが「赤くしよう」と言い出して、このmonkeyMatを赤くすると、スザンヌと二人で共有(リンク)しているマテリアルなので、スザンヌも赤くなってしまいます。

共有しているデータブロックを変更しないよう、シングルユーザー化という機能があります。
2人で使っていることを示す2の数字がでているボタンを押すとシングルユーザー化されて、ボブだけのマテリアルブロックが複製されます。


マテリアルが複製されると、名前がmonkeyMat.001になり、元のmonkeyMatとは別ものになったことがわかります。
データブロックは、オブジェクトならオブジェクトの名前空間、マテリアルならマテリアルの名前空間があり、その中で必ず別名をつけなければなりません。同名なら同じデータブロックということになります。
フェイクユーザー機能
ぼっちは消される厳しいBlender界

ところで、誰にもユーザーになってもらえないデータブロックは一体どうなるのでしょうか。
Blenderではユーザーが0になったデータブロックは、保存時や次回ファイルを開いたときに削除されてしまいます。
使われてないデータに容量を食われないためのBlenderの良い機能ですが、ちょっと悲しいですね。
データブロックの特徴まとめ
- 再利用可能(リンク)
マテリアルを複数オブジェクトで共有するように、同じデータブロックを複数箇所で使えます。 - ユーザー数(Users)
各データブロックには「何個のオブジェクトが使っているか」というカウントがあります。これを元に、不要なデータをBlenderが削除(パージ)したりします。 - 名前で識別
データブロックには名前があり、同一タイプ内でユニークです。違うデータブロック同士なら同じ名前をつけることができます。(例:Object [Cube], Mesh [Cube])
データブロックのプロパティ
データブロックは数多くのプロパティを持ち、様々な設定情報を持っています。

Blender画面の右下にPropertiesというウィンドウがあり、そこで様々なデータブロックのプロパティを設定できます。
例えばWorld Propertyを開くと、上部に
Scene > World
と表示され、Sceneが参照(リンク)しているWorldのデータブロックのプロパティであることがわかります。
この画面の場合、メッシュを選択しているので、Object Data Propertyはメッシュ、Material Propertyではマテリアルのリンク先を変更できたりもします。
Object Data Property

Material Property

オブジェクトとメッシュ(Object Data)のつながりは特別
オブジェクトはメッシュがないと存在できない

以前、リンクでつながってるデータブロックは、片方を消しても片方は削除されない、と言いましたが、例外があります。
メッシュデータブロックを削除したり、オブジェクトからメッシュへのリンクを切ると、オブジェクトデータブロックは消えてしまいます。
オブジェクトデータブロックはトランスフォームなどの情報を持ちますが、それ自体は何も形状を持たないただのコンテナです。
オブジェクトデータとしてメッシュなどを参照し、形状を得ないと存在することができません。

ObjectはMesh、Curve、Light、Camera、Armatureなどの[Object Data]データブロックとリンクして存在します。
※「Objectのデータブロック」と「Object Dataのデータブロック」はややこしいですが違うものです。Object DataはMesh、Curve、Light、Camera、Armatureの形態をとることができ、それぞれ固有のデータブロック様式を持っています。この記事の中ではわかりやすさのためMeshのデータブロックをよく例にだしているだけです。
トランスフォームの情報
また、オブジェクトモードでのトランスフォームはオブジェクトデータブロックに保存されますが、編集モードでのトランスフォームはメッシュなどのデータブロックに保存されます。
オブジェクトモードでのトランスフォーム

編集モードでのトランスフォーム

メッシュやその形状そのものの位置や形状の情報と、オブジェクトデータブロックのトランスフォームの情報を合成して最終的な見た目を出力します。
ワールド空間の頂点座標 = オブジェクトのトランスフォームマトリクス × メッシュのローカル頂点座標
同じメッシュを、違うオブジェクトのトランスフォームで、移動、回転、スケールを加えて配置することができ、これがインスタンス化と呼ばれています
オブジェクトのインスタンス化

Blenderではオブジェクトを選択し、Alt + Dを押すことでインスタンス化することができます
左画像:できたオブジェクトデータブロックは別名の違うものですが、リンクしているメッシュデータブロックは同一のものです。

右クリックで出てくるメニューからも操作できます。
- Shift + D(通常の複製):
- Duplicate Objects ObjectもMeshも複製 → 完全に独立した2つのメッシュ。
- Alt + D(リンク複製):
- Duplicate Linked Objectのみ複製 → 同じメッシュを共有=インスタンス化
オブジェクトとメッシュのリンクだけ特別にインスタンス化と呼ばれている理由
メッシュはポリゴンデータ(頂点・エッジ・面)=超高コストなデータです。同じ形状を複数の場所に配置したいとき、それぞれ別に持つと非常にメモリを消費します。しかしオブジェクトだけ複製し、メッシュは共有すれば
メモリ:激減(メッシュ1つだけ)
処理:軽量(GPUインスタンシングが効く)
GPUにとっては「同じモデルをいろんな場所に複製して描画する」ことが、非常に高速な処理として扱えます(バッチ処理が可能)。
「メッシュの共有」は単なるデータの再利用ではなく、レンダリング最適化のためのキー技術です。これが「インスタンス化(インスタンシング)=軽量複製」として、3DCG分野全体で特別視される理由です。
でも結局は、メッシュデータブロックを共有しているだけなんですね。
コレクションのインスタンス化?

アウトライナー上でコレクションを選択して右クリックすると、オブジェクトのときと同様に
Duplicate Collection…別物として複製
Duplicate Linked…Object Dataをリンク
のメニューがあります。が、これはコレクションのインスタンス化ではありません。
Duplicate Linkedで作成されたコレクションは、コレクション自体がインスタンスなのではなく、インスタンス化したオブジェクトを含むように作成されているだけです。
Collection Instance

アセットや、外部のファイルからコレクションインスタンスとしてインポートすると編集できないコレクションのデータが表示されます。
これらは外部の実態データを参照しているだけで、Make Localなどで実態化しないと編集することができません。
Blenderでいうコレクションのインスタンスとはこちらを指すそうです。
リンクしたデータブロックの利用とメリット
リンクしたデータブロックを使った効率的なシーンの作り方の一例を紹介します。
昼と夜のシーンを作る

昼の広場にスザンヌがいるシーンがあります。

Sceneのプルダウンメニューから、Linked Copyを選ぶと、全てのオブジェクトをリンク(共有)して新しいシーンを作成できます。

できたScene.001はワールド背景もリンクされているので昼だったのですが、これをシングルユーザー化して、別の背景をつけ、夜のシーンにします。
これで、同じオブジェクトを使って昼と夜のシーンを作成することができます。
片一方のスザンヌの位置や回転を変えてみると

もう一方のスザンヌのトランスフォームも変わっています。

このように、リンクするデータブロック、シングルユーザー化するデータブロックを上手く利用することで、時間や季節が違うシーンを作れたり、編集・加工を一か所で済ませることができます。
他にもSceneについてもっと詳細に書いた記事もあります↓
まとめ
Blenderのデータブロック構造とその“つながり”の本質
Blenderは、すべての要素(形状・マテリアル・画像など)を“データブロック”として扱い、それらを参照でつないでいる仕組みを採用しています。
この“つながり”の理解が、効率的な制作とトラブルの回避に直結します。
🔗 データブロックの基本構造
- Object(オブジェクト)は、位置・回転・スケールを保持する「入れ物」。
- Mesh / Curve / Armatureなどのデータブロックを参照することで中身を持つ。
- さらに、MeshはMaterialやUVマップ、頂点グループなど他のデータブロックともつながっている。
🧠 インスタンス(データの共有)
- 同じMeshを複数のObjectが使えば、それはインスタンスになる。
- オブジェクトごとのトランスフォームは独立していても、編集モードで形状を変えると全てのインスタンスに反映される。
- メモリ効率が良く、軽量化・高速化につながる。
👤 シングルユーザー化(Make Single User)
- 共有されているMeshやMaterialなどは、初期状態では「共通のコピー(ユーザー数 > 1)」として使われている。
- 「シングルユーザー化」すると、そのデータブロックだけを複製して専用化する。
- 例:複製したCubeの片方だけ形状を変えたい → Meshをシングルユーザーにする。
🧹 使われていないデータの自動削除
- Blenderは「ユーザー数が0のデータブロックは保存時に削除」される仕組みを持っている。
- 例:オブジェクトを削除して、そのMeshに他のオブジェクトからの参照もなければ → 次回保存時にMeshも自動削除される。
- アウトライナーの「Blender File」「Unused Data」ビューで確認可能。
📌 Fake User(フェイクユーザー)
- 一時的に使っていないデータを削除されないようにするには「Fake User」にチェックを入れる。
- 特にマテリアルやアクションで有用。
✅ 最終的に重要なのは:「どのデータが、どこから、どう参照されているか?」
この関係性がわかると:
- 不要なデータの削除が正しく行える
- インスタンスやリンクを使った効率的なシーン構築ができる
- 複雑なエラーや挙動の原因も追いやすくなる
Blenderをより“設計的に”使うために、データブロックの構造とルールを理解することが大切です。
言うのは簡単だけど、自分もまだ混乱することがあります…どこがどこのデータとつながっているかの把握はいきなり完璧にはできないので、やはり慣れもあるかもしれません…。