Blenderには、削除したデータは一時的に保持する仕様がある。
削除したデータは保存して開き直さない限り、まだ消えていない。
この未使用データをすぐさま削除する方法を紹介する。
もくじ
未使用データとは
未使用データとは、データ名のとなりに「0」と表示されているデータのことである。
上画像のマテリアルは、どのオブジェクトにも割り当てられていない(ユーザーがいない = 0ユーザー)。
この仕様は、削除したけどやっぱり使いたくなったという時に便利ではある。
問題点
未使用データは本来後述の作業を行わなくても、保存と開き直しを行うことで自然に消える。
ただし、これは階層の数だけ徐々に消えていく。
「コレクション > 子コレクション > オブジェクト > メッシュデータ」のように、親データがまず消えないと。まだそのデータは親が使っていることになるので、この階層の回数だけ繰り返す必要がある。
(1例として、コレクション階層の深いシーンをフルコピーし、シーンを削除したときに深い階層の未使用コレクションが残る)
保存して「開き直す」を実行する
ファイルを開き直せば自動で消える。これを、階層の数だけ繰り返す。
- ファイルを保存する
- ファイル > 「開き直す」
- 再度ファイルを開き、未使用データの階層が全て消えるまで繰り返す
CUIで処理する
未使用データが残ったblendファイルが大量にあり、手作業で全てのblendファイルを修正するのは手間なので、半自動でこれを行う。
ファイルを保存するだけのコードとBlenderのコマンドを利用して、「ファイルを開いて保存して終了する」というだけの処理を行う。
save_def
下記のコードを新規テキストファイルにsave_def.pyとして好きな場所に保存する
import bpy bpy.ops.wm.save_mainfile()
コマンド
下記のコードを未使用データが消えるまで必要なら数回実行する。
- 自身のBlender.exeの場所と、対象のblendファイルのパス、save_def.pyのパスに書き換えること。
- コマンドプロンプトで実行すること(コマンドプロンプトは、エクスプローラーのパス部分にcmdと入力して開くと楽)。
- --factory-startup はアドオンなどがない初期設定で起動するため、起動が多少早くなる。ただし「hoge.blend1」のような自動バックアップ用のゴミができるのが欠点
C:\Program Files\Blender-2.92\blender.exe -b "C:\~~~\hoge.blend" --factory-startup -P "C:\Users\~~~\Desktop\save_def.py"
パージを利用する
アウトライナーのパージから、未使用データを全て削除することができる。
パージだと削除処理があるようで、未使用データ量が多いとそれなりに時間がかかる。
保存と開き直しの方法だと削除処理がないようなので、未使用なデータ量が多いなら保存と開き直しを何度か繰り返した方が手っ取り早い。
- アウトライナーの表示を孤立データに切り替える
- ヘッダー右上のパージを実行する
注意点
データ構造が深い場合は、パージを何度か繰り返す必要がある。
パージ機能は、どのデータでも利用されていない(ユーザーがない)データのみが削除される。
階層を削除
アウトライナーでコレクションを右クリックして、「階層を削除」を実行すれば中身の階層を含めて全て一括削除できる。
データ量が多い場合は時間がかかるので注意。
トップバーからアクセス
ファイル > クリーンアップ > 全て消去でも同様のオペレーターを実行できる。
(表示名が違うだけでパージと同じ)
Blender2.93以降では、再帰的削除ができる
開発中(2021-03-23時点)のBlender2.93では、再帰的な削除(深い階層の中身まで繰り返して削除)オプションが利用できるようになっている。
「階層構造になっているデータを繰り返し除去しないと消えない」という問題に対処できるようになるようだ。