カード/不透明度シェーダ

はじめに

ポスト プロダクションの形式を必要としないレンダリングの実行時には、透明度について特別に考慮する必要はありません。何らかの透明度シェーダを追加するだけで、mental ray によってすべて適切にレンダリングされます。

ただし、イメージのポスト プロダクション作業を開始した直後に、複数のフレーム バッファにレンダリングする際には、"z" (深度)または "m" (モーション ベクトル)のような、mental ray の組み込みフレーム バッファを使用している場合でも、透明度の処理方法について特に考慮する必要があります。

一般的に、mental ray は、そのフレーム バッファ データを、視点からのレイ、つまり、カメラで撮影される最初のオブジェクトにヒットするレイから収集します。そのため、z 深度やモーション ベクトルなどはこの最初のオブジェクトから取得されます。

ヒットした最初のオブジェクトが完全に透明な場合はどうなるのでしょうか。または、部分的に透明な場合はどうなるのでしょうか。たとえば、平面にマップされた木のイメージが不透明度マスクで切り取られ、家の正面に立っているような場合です 1

透明度に関するその他のシェーダを使用すると、多くの場合、最終レンダリングで木が正しく表示され、枝の間に家が見えている状態でも、"z" (深度) (およびその他のフレーム バッファ)には、平面の深度が含まれてしまいます。ほとんどのポスト処理作業において、これは望ましいことではありません。

この問題を解決するために、mental ray API には、"交差が発生しなかったかのように"レイを継続する mi_trace_continue という関数が含まれています。シェーダ mip_card_opacity はこれを内部的に使用し、"標準の" 透明度と mi_trace_continue の使用を切り替えて、与えられたしきい値で "完全に" 透明なオブジェクトを作成します。

mip_card_opacity

declare shader "mip_card_opacity" (
        color   "input",
        boolean "opacity_in_alpha",
        scalar  "opacity",
        boolean "opacity_is_premultiplied",
        scalar  "opacity_threshold"
    )
    version 1
    apply material
end declare

input パラメータはオブジェクトのカラーです。

opacity_in_alpha がオンの場合、input カラーのアルファ コンポーネントを不透明度として使用します。

opacity_in_alpha がオフの場合、opacity パラメータを不透明度として使用します。

opacity_is_premultiplied がオンの場合、input カラーは不透明度の値で乗算済みであると見なされます。オフの場合、input カラーは、使用される前に不透明度の値で減衰(乗算)されます。

最後に、opacity_threshold は、シェーダが標準の透明度を使用する状態から "完全な透明" に切り替わる時点の不透明度レベルを設定します。通常、この値は 0.0 に設定しておく必要があります。つまり、完全に透明なピクセルのみが実際には "存在すらしない" と見なされますが、この値を増やすと、フレーム バッファでは、さらに "不透明な" ピクセルが "存在しない" と見なされるようになります。実際に目に見えるレンダリング結果は同じであり、これによって影響を受けるのは、メイン カラー フレーム バッファ以外のフレーム バッファの内容のみです。


脚注
1
平面イメージを使用して複雑なオブジェクトを表現することは、レンダリング業界では、"カード" に物を重ねることとして知られています。これがシェーダの名前の由来です。