はじめに
Blenderをはじめ、プリレンダーCGのレンダリングは、時間がかかるが故に非常に気を使う工程です。
寝る前にレンダリングを実行し、起きて見てみたら失敗していた...という経験がある人もいると思います。
失敗の原因には、
- 非表示にしていたオブジェクトがレンダーでは表示されていた
- 処理が重くなるため作業中にオフにしていた機能を、レンダー時にオンにし忘れていた
- テスト用の低クオリティ設定のまま最終的なレンダリングをした
- テクスチャ画像のパスが壊れていた
など、ケアレスミスと呼べるものも多くあります。これらのミスはシーンが複雑になるほど増えていくものです。人の目での確認は限界がありますが、自動化し簡単にチェックできるようになれば、制作が効率化するに違いありません。
そこで、ボタン一つでシーンの問題を一覧で確認できるアドオン FinalCheck を作成しました。個人的に最近の制作でも結構役に立ったのでおすすめしたいです。
FinalCheck - Blender Addon
無料ダウンロードは、Gumroad(投げ銭も可)、もしくはGitHubから。
または、Blender Marketから1ドルで購入できます(いずれも内容は同じです)。
概要
FinalCheckは、シーンの問題をチェックし、簡単に修正できるアドオンです(日本語、英語に対応)。
チェックボタンを押すだけで、問題のあると思われる項目を一覧で表示します。
レンダリングの直前にチェックすることで、ケアレスミスによるレンダリングの失敗を防げます。
チェックする項目
- コレクションの可視性: ビューポートとレンダーでコレクションの可視性が異なるか。
- オブジェクトの可視性: ビューポートとレンダーでオブジェクトの可視性が異なるか。
- パスが不明なファイル: 画像ファイルのパスが壊れているか。
- レンダー領域: レンダー領域が設定されていて、レンダー領域が縮小しているか。
- 解像度%: 解像度%が100%より小さいか。
- サンプル数: レンダーのサンプル数がビューポートのサンプル数より小さいか。
- インスタンス化: ビューポートとレンダーでインスタンサーの可視性が異なるか。
- モディファイア: ビューポートとレンダーでモディファイアの可視性が異なるか。
- コンポジット: ビューアーノードとコンポジットノードのインプットが異なるか。(α版)
- パーティクル
- エミッターを表示: ビューポートとレンダーでエミッターの可視性が異なるか。
- 子パーティクルの量: ビューポートとレンダーで子パーティクルの量が異なるか。
- パーティクルの表示率: ビューポートでのパーティクルの表示率が100%より小さいか。
- グリースペンシル
- モディファイア: ビューポートとレンダーでモディファイアの可視性が異なるか。
- エフェクト: ビューポートとレンダーでエフェクトの可視性が異なるか。
結果の一覧は、シーン - ビューレイヤー - コレクション - オブジェクト - モディファイア - モディファイアの詳細設定(現在パーティクルのみ)というように、階層構造で表示されるため、分かりやすい表示になっています。
また、各項目は、項目の右側に現在の値などのUIが表示され、簡単に修正できます。
[New!] : レンダリング時に自動チェックできるようになりました!(Ver.0.2.0)
設定項目
チェック項目ごとにチェックする・しないを設定から変更できるため、巨大なファイルでも必要なチェックを迅速に行えます。また、全てのシーン・ビューレイヤーをチェックするか、現在のシーン・ビューレイヤーのみをチェックするかも設定できます。
将来的な目標
- ユーザーからの要望があればチェック項目の追加
- レンダリング前に自動的にチェックする機能の追加
- 現状Blender APIの制約的に難しい部分がある。
技術的側面・制作時の課題
Blender APIによる制限
Blender API(bpy)の機能に依存する部分が多く、その制限によってできないことはどうあがいてもできません。
例えば、APIの制限により見送った機能には、
- コンポジットノードのチェック(現在は部分的に実装しています)
などがあります。
また、Blender APIはBlenderのバージョンごとの違いが結構あり、本アドオンはBlender 2.8以前では利用できません。
細かい話になりますが、API経由で設定するアドオン独自のコマンド(オペレーター)は、その引数のタイプが決まっており、リストやメソッド、参照等を渡すことができません。そのため、参照を渡したいときには、オブジェクトIDをstringに変換し、引数に入力し、コマンド内で参照に戻すというオーバーヘッドが発生します(ちなみに、オブジェクトIDは数値で表されますが、intへの変換は桁の問題でできません)。
データ構造の複雑さ
チェックでは様々なBlenderの内部データにアクセスしますが、複雑な部分も多いです。
特にコレクションについては、マスターコレクションと通常のコレクションのクラスが異なったり、それぞれが入れ子になって存在するため、扱いが難しかったものの一つです。
おわりに
個人的に欲しいと思い、2か月ほどかけて制作しました。
自分で使っていて結構役立っているので、ぜひいろんな人に使ってもらいたいと思っています。
フィードバックやバグは、GitHubもしくはTwitterからお願いします。