BlenderのFake Userとは何か

Cropped d4cd7ac1381dc72b731d1c4cdf542dd3.png

未使用Materialが消える理由と、Fake Userの存在意義

Blenderを使っていると、作ったはずのMaterialやActionが、保存後に消えてしまったように見えることがあります。私もblenderの使い始めから今日にいたるまで,よく理解できないまま1年半を過ごしてきました.

特にMaterialでは、次のような場面で混乱しやすくなります。

Materialを作った

まだObjectに割り当てていない

保存して開き直した

Materialが見当たらない

これは、Blenderの Data-block管理 と関係しています。

Blenderでは、Material、Mesh、Image、Action、Node Groupなどが Data-block として管理されています。これらのData-blockには「実際に使われているかどうか」を示す Users という考え方があります。

公式マニュアルでは、実ユーザーを持たないData-blockは通常、blendファイル保存時にクリーンアップされるため、それを防ぐにはFake Userを付けると説明されています。つまりFake Userは、未使用Data-blockを保存対象として残すための仕組みです。

Image

1. Fake Userを理解する前に:Data-blockとは

Blenderでは、画面上に見えるObjectだけでなく、MaterialやMesh、Image、Actionなども個別のデータとして管理されています。

例えば、1つのキャラクターObjectには、次のようなData-blockが関係します。

Object Data-block
Mesh Data-block
Material Data-block
Image Data-block
Action Data-block

MaterialもData-blockの一種です。

Skin_Mat
Shirt_Mat
Eye_Mat

これらは単なる表示名ではなく、Blenderファイル内で管理されるMaterial Data-blockです。

Blender開発者向けドキュメントでも、ID、つまりData-blockにUsersが0の場合はディスクに保存されず、未使用IDを保持するにはFake User相当のフラグが必要であると説明されています。


2. Usersとは何か

Usersとは、そのData-blockがどこから参照されているかを示す考え方です。

Materialで言えば、ObjectのMaterial SlotにMaterial Dataが入っていれば、そのMaterial DataにはUserがあります。

Object A
Material Slot 0 → Skin_Mat

Skin_Mat
Users = 1

同じMaterial Dataを複数Objectが使っている場合は、Usersが増えます。

Object A Slot 0 → Skin_Mat
Object B Slot 0 → Skin_Mat

Skin_Mat
Users = 2

一方、どのObjectのMaterial Slotにも入っていないMaterial Dataは、Users = 0になります。

Old_Mat
Users = 0

このUsers = 0のData-blockが、保存時やPurge時に問題になります。


3. Blenderでは未使用Data-blockが消えることがある

Blenderでは、Users = 0のData-blockは、通常は保存対象から外れます。

これは一見すると不親切に見えます。
しかし、Blenderでは作業中に多くのData-blockが増えます。

例えば、Materialを試作すると、

Material
Material.001
Material.002
Old_Mat
Test_Shader

のように、使わなくなったMaterialが残りやすくなります。

Mesh、Image、Action、Node Groupも同様です。
もし未使用Data-blockをすべて保存し続ける仕様にすると、.blendファイル内に不要データが蓄積しやすくなります。

そのためBlenderでは、

使われているData-blockは保存する
使われていないData-blockは保存対象から外す

という方向の設計になっています。


4. しかし、未使用でも残したいData-blockがある

問題は、Users = 0でも本当に不要とは限らないことです。

例えば、次のようなMaterialは残したい場合があります。

後で使う予定のMaterial
まだObjectに割り当てていないShader
作り込んだNode構成のMaterial
一時的にObjectから外しているMaterial

また、Actionでも同じです。

作成した歩行Animationや待機Animationが、現在どのObjectにも割り当てられていない場合、Users = 0になることがあります。
しかし、それは不要という意味ではありません。

このような「未使用だが残したいData-block」を守るために使うのが Fake User です。


コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA