元記事:Transparent Filtering
Blender は透明な物を "Alpha" 値(不透明度)の設定によりレンダリングしており、Alpha が0の場合、100%透明であることを意味します。この Alpha 値は、あるピクセルが覆っている他のピクセルと、どれだけブレンドするかを定義しています。
これは画像処理からの慣習であり、Blender の古いピクセルベースのスキャンラインレンダリングシステムと相性がいいのです。
しかしながら多くの「現実」の透明な素材 ― ガラスなど ― の材質の色は、背後にある物(もしくはライトや光)とブレンドされてはいないでしょう。ただし、同様にフィルタは適用すべきです。この演算は実際には乗算であり、ブレンドではありません。例えば半透明な赤い素材(RGB:1, 0, 0)はすべての緑と青を遮断します。
このようなフィルタを定義するには、二つのアプローチがあります。
Povray: Filter 0.7、Transmit 0.7、両方を0.7
前者を選択する場合、自由な創作が可能になりますが、フィルタの決定に新しい RGB カラーをミックスするだけでなく、Material 自身に使用している同じ Texture にもこのフィルタを適用する必要がある、という欠点があります。更にこの方法では、Alpha自身は除外されており、基本的には全く違う演算になります。
この Povray のサンプルも奇妙です…この選択は単純な Alpha と Filter の加算で、簡単に実行不可能なオーバーフローに陥り、ユーザにとって編集がすばやくできる方法ではないことは明白です。
しかしながら、Alpha が従来どおりに役割を果たしつつ、後方互換性を保って追加できる方法であるという利点があります。
さまざまな方法をテストしていく中で、最も論理的な選択肢が現れました。それは単一の新しい Filter 値を定める方法で、Alpha の mix 演算の透過部分にのみ演算を行うというものです。
Filter が0.0 で、背景色(もしくは光)が Material を通してそのまま「透過」し、1.0で「透過した」部分を完全にフィルタリングします。ここの「透過」量は今も Alpha で決定されることに注意して下さい。
これはまた、単体の "AlphaOver" 演算に従来どおり集中できることも意味し、5番目の色成分(F = Filter) を使用してフィルタリングを行います。
更にいいことに、RGBA + F カラーは五重奏で一貫性のある挙動をし、ピクセルベースの Alpha の加算と同じように上手く適用できます。
透過処理のフィルタリング
Alpha、transmit、filter、transparency…
Blender は透明な物を "Alpha" 値(不透明度)の設定によりレンダリングしており、Alpha が0の場合、100%透明であることを意味します。この Alpha 値は、あるピクセルが覆っている他のピクセルと、どれだけブレンドするかを定義しています。
これは画像処理からの慣習であり、Blender の古いピクセルベースのスキャンラインレンダリングシステムと相性がいいのです。
しかしながら多くの「現実」の透明な素材 ― ガラスなど ― の材質の色は、背後にある物(もしくはライトや光)とブレンドされてはいないでしょう。ただし、同様にフィルタは適用すべきです。この演算は実際には乗算であり、ブレンドではありません。例えば半透明な赤い素材(RGB:1, 0, 0)はすべての緑と青を遮断します。
このようなフィルタを定義するには、二つのアプローチがあります。
- 新しいRGBフィルタカラー
Alpha の代わりに、この RGB カラーがフィルタの役を務めます。例えば Maya では、これがオプション(Alpha か RGB フィルタかの選択)になっています。 - Alpha 値と Filter 値
Povray では、Alpha は "Transmit" (1.0 - alpha) とリネームされ、新しい値、"Filter" が加算されています。ここでは両演算は結果を加算することで協力します。
詳細が以下にあります。
http://www.cs.tut.fi/~tgraf/harjoitustyot/tutorial/tutorial1.7.html
http://www.povray.org/documentation/view/3.6.1/230/
Povray: Filter 0.7、Transmit 0.7、両方を0.7
前者を選択する場合、自由な創作が可能になりますが、フィルタの決定に新しい RGB カラーをミックスするだけでなく、Material 自身に使用している同じ Texture にもこのフィルタを適用する必要がある、という欠点があります。更にこの方法では、Alpha自身は除外されており、基本的には全く違う演算になります。
この Povray のサンプルも奇妙です…この選択は単純な Alpha と Filter の加算で、簡単に実行不可能なオーバーフローに陥り、ユーザにとって編集がすばやくできる方法ではないことは明白です。
しかしながら、Alpha が従来どおりに役割を果たしつつ、後方互換性を保って追加できる方法であるという利点があります。
Blender: RGBA+F
さまざまな方法をテストしていく中で、最も論理的な選択肢が現れました。それは単一の新しい Filter 値を定める方法で、Alpha の mix 演算の透過部分にのみ演算を行うというものです。
Filter が0.0 で、背景色(もしくは光)が Material を通してそのまま「透過」し、1.0で「透過した」部分を完全にフィルタリングします。ここの「透過」量は今も Alpha で決定されることに注意して下さい。
これはまた、単体の "AlphaOver" 演算に従来どおり集中できることも意味し、5番目の色成分(F = Filter) を使用してフィルタリングを行います。
更にいいことに、RGBA + F カラーは五重奏で一貫性のある挙動をし、ピクセルベースの Alpha の加算と同じように上手く適用できます。
/* regular alpha; RGBAo over RGBAu */
Rn = (1-Ao)*Ru + Ao*Ro;
Gn = (1-Ao)*Gu + Ao*Go;
Bn = (1-Ao)*Bu + Ao*Bo;
An= (1-Ao)*Au + Ao;
/* filtered alpha; RGBAFo over RGBAFu */
fr= 1+ Fo*(Ro-1);
fg= 1+ Fo*(Go-1);
fb= 1+ Fo*(Bo-1);
Rn = fr*(1-Ao)*Ru + Ao*Ro;
Gn = fg*(1-Ao)*Gu + Ao*Go;
Bn = fb*(1-Ao)*Bu + Ao*Bo;
An= (1-Ao)*Au + Ao;
Fn= (1-Ao)*Fu + Ao*Fo;
Blender は AlphaUnder 演算だけでなく、AlphaOver も使用しており、これは後ろから前への透過のレンダリング用です。RGBA でこれらの関数は連係できるようになり、a*(b*c) が (a*b)*c と同等になることを意味します。しかしまだ、これが RGBA+F 方法の目的に正しいものか証明する必要があります。実装と将来の課題
現在、フィルタリングされた透過処理はレイトレースレンダラにのみ実装されています。
"Mirror Transp" パネルの新しいボタン、"Filter" で使用できます。このボタンはオプション、"RayTransp" をセットした時にのみ表示されることに注意して下さい。
100%カラーフィルタリングするには、Alpha は0、Filter を1.0にして下さい。0の Alpha はフレネルの設定でも得られます。
Alpha
レイトレースによる透過では、画像のAlphaチャネルも保存するようになりました。このRGBカラーは、Sky を適用してレンダリングした時、Sky カラーで「汚染」されます。
将来的には、Zバッファベースの透過レンダリングでも RGB+F カラーをこの類のフィルタリングに使用する予定です。
同様に、カラー加算合成(Haloなど)を決定する統一された方法を探し、証明と研究を行うことも必要です。
投票数:76
平均点:10.00
Blender2.37 Field と Deflection |
Blender機能別 |
Blender2.37 Timeline |
ログイン
クイックリンク
2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki