レイ タイプ切り替えシェーダ

レイ タイプ切り替えシェーダ

汎用的な切り替え

mip_rayswitch および mip_rayswitch_advanced のユーティリティ シェーダを使用して、各種のレイでさまざまな結果を返すことができます。これを有効に利用できるケースは次のように多数ありますが、これらに限定されるものではありません。

mip_rayswitch シェーダは、他のカラー セット(通常は他のサブシェーダのセット)を受け入れて、特定のクラスのレイを求める単純なシェーダです。

declare shader "mip_rayswitch" (
        color  "eye",
        color  "transparent",
        color  "reflection",
        color  "refraction",
        color  "finalgather",
        color  "environment",
        color  "shadow",
        color  "photon",
        color  "default"
    )
    version 1
    apply material, texture, environment
end declare

プライマリ レイの場合、eye は視点からのレイの結果を設定します。

セカンダリ レイの場合、transparentreflectionenvironment は、それぞれ透明度レイ、反射レイ、環境レイの結果です。

finalgather は、ファイナル ギャザー レイの結果であり、ファイナル ギャザー レイに対する子レイの結果でもあります。

同様に、shadow はシャドウ レイの結果であり、photon はすべてのフォトン レイを受け取ります。

最後に、default はその他のレイ タイプの結果です。これは失敗した場合の既定ではなく、シェーダに接続したかどうかにかかわらず、上記レイ タイプはそれぞれその結果を返します(つまり、通常は 0 0 0 0 黒)。

失敗した場合の既定が必要なときは、拡張バージョンのシェーダを使用する必要があります。

declare shader "mip_rayswitch_advanced" (
        shader "eye",
        shader "transparent",
        shader "reflection",
        shader "refraction",
        shader "finalgather",
        shader "environment",
        shader "any_secondary",
        shader "shadow",
        shader "photon",
        shader "default"
    )
    version 1
    apply material, texture, environment
end declare

このシェーダは、mip_rayswitch と非常に似た処理を行いますが、タイプ "color" の入力を受け入れるかわりに、タイプ "shader" の入力を受け入れます。

これにより、固定カラーを直接割り当てできなくなりますが、代わりに失敗した場合の既定が得られます。

同様に各パラメータが機能します。eyetransparentreflectionrefraction などがあり、それぞれ視点からのレイ、透明度レイ、反射レイ、屈折レイのシェーダです。

これらのシェーダのいずれも指定されない場合、失敗したケースのうちの 1 つに引き継がれる点が異なります。特定のセカンダリ レイ タイプのシェーダがいずれも指定されない場合は、そのタイプのレイが到達すると、any_secondary は、明示的に設定されていないすべてのセカンダリ レイ タイプに対応するように機能します。

同様に、default パラメータも、このパラメータよりも上に指定されていないどのシェーダにも対応するように機能します。

環境の切り替え

mental ray を使用していて発生する従来の問題は、実際の使用で、環境の概念に対するバックグラウンドの概念を区別する必要が多いのに対して、"環境" という 1 つの概念だけしかないことです。

このシェーダは、まさにこれを実現します。

declare shader "mip_rayswitch_environment" (
        color   "background"  default 0 0 0 0,
        color   "environment" default 0 0 0 0,
    )
    apply texture, environment
    version 1
end declare

シェーダは、任意の視点からのレイ、視点からのレイの子である透明度レイ、または前の透明度レイと同じ方向に移動する任意の屈折レイ(つまり、タイプ miRAY_REFRACT のレイで、1.0 の IOR で屈折していて、視点からのレイの直接の子)の background を返します。

その他のタイプのレイの場合(反射、屈折、ファイナル ギャザーなど)シェーダは、environment カラーを返します。

シェーダは、カメラ環境としての使用を想定していますが、"プライマリ" レイおよび "セカンダリ" レイの区別が必要な多くのケースで、シェーディング グラフのどこでもレイ切り替えノードとして機能します。

たとえば、「ベスト オブ ボース ワールド」のページで説明されている mip_matteshadow の "best of both worlds" の使用をサポートするために、プライマリ レイとセカンダリ レイ間を切り替えるには、これが理想的なシェーダです。

レンダー ステージの切り替え

mental ray がレンダリング パイプラインのどこにあるかによって、さまざまなカラーやサブシェーダの使用が必要になる場合があります。たとえば、ファイナル ギャザー レイに対して特定のマテリアルを完全に不透明にしたり、フォトンの放出中はライトを別のカラーにしたりする場合などがあります。

declare shader "mip_rayswitch_stage" (
        color "unknown",
        color "main_render",
        color "finalgather_precomp",
        color "ao_precomp",
        color "caustic_photons",
        color "globillum_photons",
        color "importon_emit",
        color "lightmapping"
    )
    version 1
    apply material, texture, environment
end declare

パラメータはすべて、他のすべての切り替えシェーダと同様に作用します。

unknown は "不明な" ステージ用です。これは、通常は呼び出されませんが、現時点では明らかでない、今後の mental ray バージョンで導入される新しいレンダリング ステージを回避するための安全上の配慮として存在します。

通常のタイルのレンダリング パス時、シェーダは main_render 入力の値を返します。

ファイナル ギャザー再計算フェーズでは、シェーダは finalgather_precomp の値を返します。

アンビエント オクルージョン再計算フェーズでは、シェーダは ao_precomp の値を返します。mental ray 3.7 では、このフェーズ中にシェーダを呼び出すことがまったくないため、これが呼び出されることはありませんが、今後のバージョンの mental ray では動作が異なる場合があります。

コースティクス フォトン トレーシング時はcaustic_photons 入力の値、グローバル イルミネーション フォトン トレーシング時は globillum_photons 入力の値が使用されます。

インポートンの放出フェーズでは、importon_emit からの値が使用されます。

最後に、ライト マッピング前処理フェーズでは(たとえば、サブサーフェス分散シェーダで使用される)、lightmapping の値が使用されます。