Dev:JA/Ref/Release Notes/2.66/Image Transparency
目次
Blender 2.66: 画像の透過処理
イメージパイプラインがリファクタリングされ、画像の透過処理が改善されました。二つの画像用のアルファタイプがあり、それぞれ別の用途に便利で、現在は適切な変換と演算を自動的に行おうとします。従来は正しい結果にするためには手動でプリマルチプライオプションをONにする必要がありました。
この Blender内での変換が、バイト精度のバッファではストレートアルファを、Float精度の画像とバッファではプリマルチプライアルファストレージを使用するようになりました。
コンポジティングとレンダリング
コンポジティングとレンダリングでは、プリマルチプライアルファが Blender内では標準となっています。レンダーレイヤーはプリマルチプライアルファになり、レンダリングやコンポジティング中に読み込まれた画像はこれに変換されます。
コンポジティング
もしいくつかのコンポジターの演算がストレートアルファで行われていた場合、アルファ変換(Alpha Convert)ノードが使用できます。一般的にはアルファなしのRGBチャンネルでもっといい結果を出せるところでの色補正演算などです。 もしコンポジター内でアルファがストレートに変換された場合、コンポジット(Composite)出力ノードの前にプリマルチプライに変換し直すべきです。さもないとアーティファクトが発生する恐れがあります。
Blender 内部レンダーのアルファ
レンダープロパティ→▼シェーディング(Renderプロパティ→▼Shading)のアルファ(Alpha)オプションが変更されました。現在二つのオプションがあります。
- 背景(Sky)はアルファなしでレンダリングし、画像の背景をワールドのスカイで埋めます。
- 透明(Transparent)はアルファチャンネルをレンダリングし、プリマルチプライアルファピクセルを出力します。
従来のバージョンと比べ、ストレート(Straight)アルファモードが削除されています。理由は従来ユーザーが手動で設定していたのを、自動的に正しいアルファモードでファイルが保存できるようになったためです。
また、背景アルファモードではもうアルファチャンネルを出力しません。そのような画像を直接出力すると、アンチエイリアシングされた縁にジャギーが発生し異常な結果になるためです。
Cycles レンダーのアルファ
透過(Transparent)オプションは変更されずに残っており、ONにするとプリマルチプライアルファでレンダリング画像が作成されます。従来との違いは、皆さんが PNG や同様の画像ファイルの保存のアルファタイプを正しく変換する必要がなくなり、これが自動的に行われることです。
OpenGL レンダーのアルファ
OpenGL レンダーは Blender 内部レンダラと同じルールに従っています。もしアルファモードが背景(Sky)の場合は OpenGL レンダー出力では透過せず、アルファモードが透明(Transparent)である場合、透過エリアに色が表示されません。
クイックテクスチャペインティングは内部的にアルファを透過に設定しているため、このツールで使用されている OpenGL レンダーはクイックテクスチャペインティングに全く影響を及ぼさない、背景を透過した画像を生成します。
画像ファイル
ファイルの保存では、自動的にそのファイルフォーマットに適したアルファタイプに画像が変換されます。
- 8ビットフォーマット(PNG など)はストレートアルファで保存され、Floatフォーマット(OpenEXR、DPXなど)ではプリマルチプライアルファが使用されます。
- TIFF は両アルファタイプに対応しているため、少し違った処理が行われます。8ビット TIFF はストレートアルファで保存されますが、16ビット TIFF はプリマルチプライアルファで保存されます。TIFF メタデータに適切な情報が保存され、Gimp などの他のソフトウェアでも常に正しく開くことができるでしょう。
ファイル読み込み時は、そのファイルのアルファモードを手動で設定できるようになりました。ただし、通常はデフォルトのままにした方が正しい結果が得られるでしょう。
新たにアルファに関するオプションが画像に追加されました。アルファを使用(Use Alpha)です。このオプションをOFFにすると、画像のアルファチャンネルが無視され、画像は完全に不透明で読み込まれます。このオプションはテクスチャ用のアルファを使用(Use Alpha)オプションを置き換えるものです。
理論
ストレートアルファ(Straight Alpha)
これは Photoshop や Gimp などのペイントプログラムで使用されているアルファタイプで、PNG、BMP、Targa などの一般的なファイルフォーマットで使用されています。そのため、画像テクスチャや Web 用の出力用には通常、ストレートアルファが使用されます。RGBA カラーは(R, G, B, A)チャンネルとして格納され、RGB チャンネルはアルファチャンネルの影響を受けません。
プリマルチプライアルファ(Premultiplied Alpha)
レンダリングはプリマルチプライアルファ画像で出力し、OpenEXR ファイルフォーマットがこのアルファタイプを使用します。そのため、レンダリングとコンポジティング用の内部ファイルは大抵プリマルチプライアルファとして保存されます。ストレートアルファに比べ、色は(R*A, G*A, B*A, A)として格納されていると見なされ、アルファは RGB チャンネルに乗算されます。
これはレンダーエンジンの性質にあった出力であり、RGB チャンネルが視点からの光の量を表し、アルファは背後からの光をどれぐらい遮っているのかを表しています。
変換
二つのアルファタイプの変換は単純な演算ではなく、データを失う可能性があります。多くの場合は微妙な物ですが、両アルファタイプがお互いにできないデータを表現できるためです。
ストレートアルファは RGBカラー画像と、分離されたアルファマスクと考えられます。このマスクが完全に透過する領域でも、まだ色は RGB チャンネルに存在できます。プリマルチプライアルファへの変換で、このマスクを「適用」すると、このような領域の色が黒になって失われてしまいます。
一方、プリマルチプライアルファは、光の放射と背後からの光の透過のレンダリングを表現できます。例えば透過する炎のレンダリング画像は光の放射だけでなく、背後のオブジェクトからのすべての光も通り抜けます。ストレートアルファに変換することで、この効果が失われます。