blender.org - Rendering features
レンダリング新機能
Zmask レンダリング
レンダリング用のシーンを設定する時、一般的にベクターブラーや色補正用にキャラクタを自身の RenderLayer に分離しておきたいと思うでしょう。環境と合成してしまった後ではそれが困難になるかもしれないからです…例えば、あるキャラクタが草原に立っている時など。
こんな時に必要なのは、キャラクタの前にある草のみを含んでいる画像を結果として出すような特別な RenderLayer です。それをこの "Zmask" 機能が行ってくれます。
この "Zmask" 機能でのワークフローは以下のとおりです
(Scene コンテクスト([F10])の RenderLayer パネル)1. 新しい RenderLayer を追加
2. その後、どの可視レイヤのみ Z 値をレンダリングするのかを指示(RenderLayer ボタン上で[Ctrl]+クリック)
3. そして、"Zmask" オプションを ON にすると、以下のようなことをレンダリング時に行ってくれます。
[wiki]-まず、そのオブジェクトの Z 値で、ステップ(2)の Z レイヤのみに描きます。
-その後、できるだけ一番近い Z 値で、描かなかったピクセルをクリアします。
-そして、通常の Z バッファ処理ラウンドで、可視物をレンダリングするための比較チェックを行います。
[/wiki]
4. Alpha-over で合成できるマスクのできあがり。
この合成の過程は以下の画像をご覧下さい。
草原
| |
Cube(キャラクタ:))
|
Zmask レイヤ
| |
上との合成
|
補足をいくつか。
[wiki]-上の結果は、1回のレンダリングコマンドと、3つの RenderLayer、1つの Composite で行っています。
-新しい 'only render z values in this layer(このレイヤに Z 値のみレンダリング)' は、ソリッド(不透明) Face にのみ作用します。マスクしたい実際のモデルや、他のマスク平面を使用できます。
-また、ネガティブにすること(訳注:二回押し)で、ZMask の前ではなく、後ろのピクセルを分離することもできます。
-テスト用の [[blend ファイル:
http://download.blender.org/demo/test/zmask_compo.blend]]です。[/wiki]
この ZMask RenderLayer オプションは、もっと複雑なマスキングを行うこともできます…更にそのオブジェクト自身や ZMask の前にあるソリッドオブジェクトをマスクに含めることもできます。以下の画像はそれを示したものです。
草原の中のきのこ
| |
きのこを含めたマスク
|
合成結果
| |
RenderLayer ボタン
|
この
新たな .blend ファイルもよく似たケースですが、もっと複雑なレンダリングとマスキングのミックスを行っています。
レンダリング時のインスタンス化
従来、オブジェクトを Dupliverts や Dupliface、Dupiligroups、Particle で複製した時、これらのオブジェクトのデータは一旦、レンダリングエンジンによって各オブジェクトごとに格納されていました。
現在、それがデータが一度格納されるだけになりました。つまり、このようなオブジェクトのレンダリングのメモリ効率が、非常によくなったことということです。これにより、例えば、Peach プロジェクトで多くの木の葉がレンダリングできるようになりました。
ただし、ラジオシティとレイトレーシングはまだ完全にインスタンス化をサポートしていません。つまり、これらの機能でのメモリ使用量は高いままだということです。
また、レンダーエンジンがラスタライズ時にオブジェクトをバウンディングボックスでクリッピングするようになり、パフォーマンスが向上しました。
フルサンプルアンチエリアシング
Blender のレンダーパイプラインのデザインが見直しされた時 ― エレファンツドリームの2006年に ― 未解決事項の一つに、ハイダイナミックレンジカラー(0.0から1.0までの可視範囲を超えた色)を使用した時や、色の補正、再マッピングを行った時に起こる、ポリゴンの端のアンチエリアスがおかしくなることへの対処がありました。もちろんコンポジット中も、Z バッファやIDmask などで同様のクオリティのアンチエリアスが得られるにこしたことはありません。
この問題を分析した結果、ひとつだけ解決できそうな方法がありました。それは、コンポジットをアンチエリアスした画像で行わず、代わりにすべてレンダラからの未加工サンプル上で行うことです。その後、最後の段階ですべてを可視範囲の0〜1にマップし、そしてサンプルを組み合わせ、アンチエリアスされた結果を得るという方法です。
他のプログラムでは、単に2倍もしくは4倍の大きさでレンダリングし、コンポジットを行った後、縮小することで実現しています。Blender では、より進んだ 'distributed jittered sampling(分散ジッターサンプリング)' を使用しており、すでに実際に8つの完成画像("OSA 8" 時)をレンダリングしています。単にこれらすべての画像をディスク上に保存し、後はレンダリング後に読み込み直し、コンポジットを行うだけです。
もしくは要約すると、これは FSA パイプラインなのです。
レンダリング → すべてのサンプルを保存 → コンポジット → 可視範囲にマッピング → サンプルのフィルタリングと合成
一方、以前の OSA では、
レンダリング → サンプルのフィルタリングと合成 → コンポジット → 可視範囲にマッピング
FSA による恩恵
1. ダイナミックレンジレンダリング通常の0〜1の範囲を超えた色を持つ Lamp や Texture を使用する時、Compositor でその調整と可視範囲へのマッピングができます。すべてのコンポジットとリマッピング後にのみ、アンチエリアスフィルタリングとサンプルとの結合が行われます。
コンポジットしない場合でも、この場合での FSA はレンダリングと同様の恩恵を受けます。
2. Solid と ZTransp と Strand の合成で起こる AA の問題の解決Blender は Solid、ZTransp、Strand を別々の「レイヤ」にレンダリングし、Alpha-over 関数で合成します。このようなレイヤを最初にアンチエリアシングし、その後合成すると、異常な部分ができてしまいます(背景がアンチエリアスを通して見えるなど)。FSA でこれを効果的に解決できます。
3. 色・コントラスト・輝度のマッピングコンポジット内のどんな処理でも、2色の白黒にしたとしても、その操作を Raw サンプル上で行うことで、最終的な結果は常に正しくアンチエリアスされます。
4. フルアンチエリアスと Pass の使用Zバッファ、ID マスク、モーションベクトル、Normal などのような Pass は上手くアンチエリアスされません。最終画像にすべてを合成する前に、これらを直接サンプルに適用するともっと上手くいきます。
メモリの使用量とオーバーヘッドFSA は Blender の効率的なタイルベースパイプラインを使用するため、使用に際しレンダリング用にメモリがもっと多く必要になったりすることはありません。ただし少し考慮すべきことがあります。
[wiki]-タイルレンダリング毎に、FSA がレイヤ・パス用バッファをサンプル毎に取得します。例:2kレンダリング、8 Sample、Parts: 4×4では、タイル毎に8×128kピクセルが格納されることになります(訳注:8×2048×1024÷16=8×128k?)。
-そのため、特にスレッドレンダリング(それぞれタイル毎にそれぞれのスレッドがメモリを確保する)時にタイルを小さくするのはいい習慣です。
-また、ひとつのタイルのレンダリングが完了した後、すべての結果を保存するのに 'Save Buffers' を使用します。そのため、タイルを小さくしてレンダリングすることで、FSA のオーバーヘッドを非常に効率的に補填できます。
-FSA によるレンダリング時間のオーバーヘッドは一定です。メモリ確保、バッファへの書き込み、それらの保存のオーバーヘッドのみがレンダリング時間に加算され、シーンの複雑さやレンダリング機能の有無は関係ありません。
-コンポジットのオーバーヘッドも一定ですが、ほとんどの時間が「浪費」されます…それぞれのサンプルごとにフルに合成されるためです。私たちはこの問題を乗り越えるもっといいスレッディング方法を考える予定です。
[/wiki]
Stamp info
レンダリング画像に情報を追加します。
blender.org - Rendering features