太陽と空

概要

mental ray の物理的な太陽と空のシェーダは、物理的に忠実な昼光のシミュレーションと昼光の高精度なレンダリングを実現するために設計されています。

分析用途

mental ray 3.6+ のライブラリにライティング分析用のツールが新たに加わりました。標準の CIE スカイ モデル(晴天と曇天の両方)用の新しいシェーダが追加されています。このシェーダは、グレースケール(カラーなし)で、視覚的に魅力的なイメージを生成するためというよりも、分析用に使用します。詳細は、CIE スカイを参照してください。また、mia_physicalsky シェーダが、Perez スカイ モデルの分析関連パラメータと mia_physicalsun の明示的な照度パラメータと共に強化されています。

一般的な概要

mia_physicalsunmia_physicalsky は、一緒に使用するように設計されています。太陽光を表現するディレクショナル ライトに適用された mia_physicalsun シェーダと、シーン カメラ環境シェーダとして使用された mia_physicalsky を組み合わせて使用します。環境シェーダは、シーンを照明するために、ファイナル ギャザリング(有効に設定されている必要があります)と共に使用する必要があります。太陽光のバウンス ライトは、ファイナル ギャザリングの拡散バウンスまたは GI(フォトン)のいずれかを使用して処理可能です。

屋内ショットの精度を向上させするために、空と mia_portal_light シェーダを組み合わせることができます(スカイ ポータルを参照)。

単位

太陽と空には実際の測光単位が用いられますが、出力は rgb_unit_conversion パラメータを使用して別の単位に変換できます。

このパラメータを 1 1 1 に設定すると、mental ray シェーダ API 関数 mi_sample_light(太陽光用)と mi_compute_avg_radiance(天空光用)の戻り値は、mi_luminance 関数を介して送られた場合、測光量の照度値(ルクス単位)としてみなされます。

大気圏外の太陽の強度は、照度 127,500 lux の 5,900 度 K の黒体放射体として測定されるため、"従来"のレンダリング(一般に、光の強度は 0 ~ 1)と比較した場合、非常に明るくなります。

rgb_unit_conversion パラメータを乗数として適用し、1.0 未満の値(たとえば 0.001 0.001 0.001)に設定すると、未処理の値(ルクス単位)をより"扱いやすい" 単位に変換できます。

便宜上、rgb_unit_conversion の特別な値 0 0 0 は内部的に 80,000 lux(晴れた日の光量とほぼ同じ)に設定され、従来のレンダリングの光レベル 1.0 と等しくなります。

このほかに、rgb_unit_conversion を 0.318 0.318 0.318 に設定する方法があります。最終的なレンダリング イメージのピクセルは(mia_material またはシェーディング変換に従うシェーダを使用してレンダリングされた場合、および mi_luminance 関数を介して送られた場合)、実際の測光量の輝度値(カンデラ/平方メートル単位1)です。

これらの実際の輝度値は、フォトグラフィックなトーン マッパ(トーン マッパを参照)に対する入力として使用するのに最適です。

高速 SSS、太陽、空に関する重要事項

mental ray の高速 SSS シェーダとハイ ダイナミック レンジの間接的な太陽光と天空光を併用するには、Indirect パラメータをオンに設定し、SSS シェーダが天空光(間接光としてみなされる)を散乱させることができるようにすることが重要です。

また、Screen composit パラメータをオフに設定することも重要です(オフにしないと、SSS シェーダの出力がロー ダイナミック レンジに固定され、黒にレンダリングされます)。

共通パラメータ

パラメータの中には、mia_physicalsunmia_physicalsky の両方に存在し、同じ動作をするものがあります。物理的な正確さを維持するには、太陽と空の両方に存在するパラメータを同期させる必要があります。たとえば、太陽と空にそれぞれ異なるhaze(かすみ)の値が設定されている場合、物理的な正確さは保証されません。

最も重要な共通パラメータは、シェーディング全体とカラー化モデルを定義するパラメータです。

太陽のパラメータ

mia_physicalsun は、太陽光と太陽から放出されるフォトンのカラーと強度を定義するために使用します。このシェーダは、ライト シェーダおよびフォトン放出シェーダとしてディレクショナル ライトに適用する必要があります(その他のライト タイプに適用しても機能しません)。


declare shader "mia_physicalsun" (
        boolean "on"                   default on,
        scalar  "multiplier"           default 1.0,
        color   "rgb_unit_conversion"  default 0.0001 0.0001 0.0001,
        scalar  "haze"                 default 0.0,
        scalar  "redblueshift"         default 0.0,
        scalar  "saturation"           default 1.0,
        scalar  "horizon_height"       default 0.0,
        scalar  "shadow_softness"      default 1.0,
        integer "samples"              default 8,
        vector  "photon_bbox_min",
        vector  "photon_bbox_max",
        boolean "automatic_photon_energy",
        boolean "y_is_up",
        integer "illuminance_mode"           default 0,
        scalar  "direct_normal_illuminance"  default 0.0
    )

version 6 apply light

end declare

上記で説明したとおり、mia_physicalsun には、mia_physicalsky と共通のパラメータがいくつかあります(hazeredblueshift など)。mia_physicalsun のこれらのパラメータの値は、mia_physicalsky の値と一致している必要があります。

mia_physicalsun に固有のパラメータは以下のとおりです。

空のパラメータ

mia_physicalsky シェーダは、大気圏の天空を表現するカラー グラデーションを作成するために使用し、ファイナル ギャザリングまたはスカイ ポータル(スカイ ポータルを参照)と共にシーンを照明するために使用します。mia_physicalsky を環境シェーダとして使用する場合、空がカメラに表示され、反射に現れます。

mia_physicalsky を使用して、モデルの"下部"にある仮想地表プレーンを作成することもできます。これにより、実際に地平線までのジオメトリをモデリングする必要がなくなります。仮想地表プレーンは、地面の外観と地面からのバウンス ライトの両方を提供します。


declare shader "mia_physicalsky" (
        boolean "on"                  default on,
        scalar  "multiplier"          default 1.0,
        color   "rgb_unit_conversion" default 0.0001 0.0001 0.0001,
        scalar  "haze"                default 0.0,
        scalar  "redblueshift"        default 0.0,
        scalar  "saturation"          default 1.0,

scalar "horizon_height" default 0.0, scalar "horizon_blur" default 0.1, color "ground_color" default 0.2 0.2 0.2, color "night_color" default 0 0 0,

vector "sun_direction", light "sun",

# The following parameters are only useful # when the shader is used as environment scalar "sun_disk_intensity" default 1.0, scalar "sun_disk_scale" default 4.0, scalar "sun_glow_intensity" default 1.0,

boolean "use_background", shader "background",

# For the lens/volume shader mode scalar "visibility_distance",

boolean "y_is_up", integer "flags",

integer "sky_luminance_mode" default 0, scalar "zenith_luminance" default 0.0, scalar "diffuse_horizontal_illuminance" default 0.0,

# Perez model luminance distribution parameters scalar "a", scalar "b", scalar "c", scalar "d", scalar "e" )

version 5 apply environment, texture, lens, volume

end declare

mia_physicalsky シェーダはレイを異なる方法で扱うという点に注意してください。カメラからの直接レイ、反射レイ、屈折レイは、以下で説明する "sun disk(日輪)" を含むエフェクト "全ての"エフェクトを認識します。しかし、ライティングには既に太陽を表現する直接光(mia_physicalsun シェーダを使用)が含まれているため、sun disk はファイナル ギャザーのレイに対して不可視です3

これらのパラメータは、ファイナル ギャザリング結果には影響を与えません。"目に見える"結果のみ(カメラが捉えるものと、反射と屈折に現れるもの)に影響します。

CIE スカイ モデル

CIE スカイ モデルは、ライティング分析に使用する標準モデルです。無色(グレースケール)モデルなので、"魅力的なイメージ" の作成には適していませんが、標準化された(既知の)輝度配分に従うという利点があります。


declare shader "mia_ciesky" (
        boolean "on"                  default on,
        color   "rgb_unit_conversion" default 0.0001 0.0001 0.0001,

# Luminance parameters boolean "auto_luminance" default on, scalar "zenith_luminance" default 0.0, scalar "diffuse_horizontal_illuminance" default 0.0,

# CIE specific parameters. 0 = clear sky, 1 = overcast scalar "overcast" default 0.0,

# Sun direction vector "sun_direction", light "sun",

# Y vector boolean "y_is_up", )

version 1 apply environment, texture end declare

シェーダは、多数のパラメータを mia_physicalsky と共有します。たとえば、onrgb_unit_conversionsun_directiony_is_up パラメータなどがあり、これらのパラメータは両シェーダで同様に機能します。詳細は、mi_shader__mia_physicalsky を参照してください。

以下のパラメータは mia_ciesky シェーダに固有です。

スカイ ポータルと環境ポータル

問題点

従来のコンピュータ グラフィックスには、空またはその他の "環境" 光(取得した HDRI など)からの間接光のみでシーンを照明するという問題がありました。

mental ray では、ファイナル ギャザリング(以下 FG)を使用し、多数の "FG レイ" をトレースし、環境(またはその他の照明されたサーフェス)に衝突するレイを確認することによってこの問題を解決できます。多数のレイをトレースするため、結果は FG ポイントでキャッシュされ(パフォーマンス向上のため)、"スムージング" によって補間されます。

FG レイが "認識する" 非常に均一な光が多数存在する場合、この方法はうまく機能します。一般に、FG では、シーン内の光レベルが均一の場合には最高の結果が得られます。空によって屋外シーンを照明したり(ほとんどの FG レイは空を "認識" します)、間接光によってほとんどのサーフェスが照明されている屋内の二次的な光を跳ね返らせる(ほとんどの FG レイが既に照明されたサーフェスの一部を "認識" します)のに適しています。

ただし、ライトのない暗い部屋のシーンや、空からの光を取り入れる窓が 1 つのみの場合は、問題を解決するのが困難です。

右のイメージでは、ほぼすべての FG レイが暗闇を "認識" し、ほんの一部のレイのみが小さい窓を "通り抜けて" 空にヒットしています。これを正確に解決するには、非常に多数の FG レイを照射する必要があり、パフォーマンスに悪影響が及びます。

さらに、最初の 2 つのシーン(屋外シーンと十分に照明された屋内シーン)には、高精度な直接シャドウを生成し、シーンのディテールを解決する直接光が既に存在するという点が異なります。FG は、付加的な跳ね返り、または空のライティングにのみ使用され、広い範囲のライティングを提供するものではありません。このため、FG ポイントの補間が原因で発生する "オーバースムージング" がその他の光によって消去されます(または、mia_material の AO を使用して解決できます)。

しかし、一番右のシーンにはこのような直接光は存在せず、すべての光が間接的な天空光です。補間をしようとすれば、見た目に分かるオーバースムージングが発生します。良好なレンダリング結果を作成するには、多数の FG レイおよび高密度な FG ポイント両方が必要です。ただし、こうするとレンダリング時間は長くなります。

屋内のレンダリングによく使用されるテクニックは、FG に依存して空を "認識させる" のではなく、エリア ライトを窓に配置して空のライティングを提供するというものです。ただし、この方法では、"このライトの明るさとカラーをどうするべきか" という問題が出てきます。

解決策

これらのすべての問題を解決するために、まずポータル ライトの概念について説明します。ポータル ライトは(矩形の)エリア ライトで、これを窓に配置します。適切な強度とカラーを、窓のの空(mia_physicalsky などの環境シェーダ)と、その空を "確認" できる範囲4から取得します。

実際には、ポータル ライトは "FG 集光器" のように動作するため、シーン全体に数千単位の FG レイを照射して窓を "見つける" 必要がありません。ポータル ライトは実際に FG レイを遮断し、窓の外側から入射する光を直接光に変換し、高精度なエリア シャドウを生成します。そのため、補間に関連する問題は発生しません。

FG は、黒い部屋ではなく十分照明された部屋を認識することになるため、FG レイの数を大幅に少なくすることができます。さらに、窓から入射する光は直接光になるため、"無償で"追加の光の跳ね返りを 1 つ得ることができます。

mia_portal_light

mia_portal_light シェーダは、光およびフォトン放出シェーダとして長方形タイプのエリアライトに適用する必要があります。mental ray のライトのインスタンスは、可視に設定する必要があります(ポータル ライトが ファイナル ギャザー レイを "遮断"可能であることは技術的要件です。ライトがレンダリングで実際に可視であるかどうかは、シェーダによって処理されます)。

さらに、mental ray のライトのインスタンスは、長方形のエリア ライトがライト自体の座標空間の X/Y 平面で延長されるように設定する必要があります。また、ライトの変換はライトのインスタンスの変換で処理される必要があります5

以下のパラメータがあります。


declare shader "mia_portal_light" (
        boolean "on"                     default on,
        scalar  "multiplier"             default 1.0,
        color   "tint_color"             default 1 1 1,
        boolean "reverse"                default off,
        scalar  "cutoff_threshold"       default 0.005,
        boolean "shadows"                default true,
        boolean "use_custom_environment" default off,
        shader  "custom_environment",
        boolean "visible"                default off,
        boolean "lookup_using_fg_rays"   default on,
        scalar  "shadow_ray_extension"   default 0.0,
        boolean "emit_direct_photons"    default off,
        color   "transparency"           default 1 1 1
    )
    version 9
    apply light, emitter
end declare

on(スカイ ポータルの有効化)はライトを有効または無効にします。

multiplier(強度乗数)は強度を設定し、tint_color(カラーマルチプライヤ)はライトのカラーを変更します。カラーが白で multiplier が 1.0 の場合、放出されるライトの強度(およびカラー)は FG が認識した環境ライト(多数の FG レイを投射することが可能な場合)と等しくなります6

ライトは通常、ライトのインスタンスの座標空間の正 Z 方向に照射します。reverse(反転)がオンの場合、負 Z 方向に照射します。

cutoff_threshold(遮断しきい値)は、パフォーマンス最適化オプションです。このレベルより下のライトは無視され、(エリア ライトのレンダリングに長時間かかる)シャドウ レイはトレースされません。もちろん、ライトが無視されるため、シーンは少し暗めになりますが、膨大なレンダリング時間を大幅に短縮できます。

shadows(シャドウ)はシャドウのオンとオフを切り替えます。

use_custom_environment(カスタム環境の使用)がオフの場合、シェーダはライトのカラーをグローバル カメラ環境から取得します。オンの場合、custom_environment として渡されたシェーダを呼び出してカラーを取得します。

ヒント: シェーダは環境に対するポータルとして機能しますが、custom_environment としてソリッド カラーを返すシェーダを配置することによって"ライト カード" として扱うこともできます。たとえば、mib_blackbody は、特定の色温度のライト カードを作成します。

use_custom_environment がオンで、custom_environment が実際に渡されない場合、シェーダは白いライト カードとして動作します。

visible(可視)は、光を放出するサーフェスが可視かどうかを定義します。オフの場合、視点からのレイ、反射レイなどは通過し、ポータル ライト自体は非表示のままになります(窓の外を "見る" ことができます)。オンの場合、実際に光を放出するサーフェスは視点からのレイ、反射レイなどに対して可視になります(環境シェーダの結果を "見る" ことはできますが、窓の外を "見る" ことはできなくなります)。オンモードは、mia_portal_light をライト カード シェーダとして使用する場合に便利です。

lookup_using_fg_rays(ファイナル ギャザー レイを使用した参照)がオフの場合、環境シェーダは通常の mi_trace_environment() の呼び出しで参照されます。ただし、一部のシェーダは、FG レイまたはその他のレイによって呼び出される場合、別の動作をします(たとえば、mia_physicalsky シェーダは、FG レイに対して可視の太陽の "イメージ" を表示しません)。mia_portal_light の目的は、"FG 集光器" として機能することであるため、その動作に従う必要があります。lookup_using_fg_raysオンの場合、レイのタイプが miRAY_FINALGATHER に設定された環境を呼び出し、これに基づいて動作を切り替えるシェーダが FG レイに適したカラーを返します。

shadow_ray_extension(シャドウ レイの拡張)がゼロの場合、シェーダはライトの "位置から" シャドウ レイのトレースを開始します。正の値の場合、シャドウ レイはその距離を "屋外" で開始します。大きなオブジェクトが窓のすぐにある場合、そのオブジェクトのシャドウが考慮されます。反対に、負の値の場合、シャドウ レイはその距離を窓の内側で開始します。こうすると、必要以上にシャドウを込み入らせてしまう可能性のある、窓付近のジオメトリ(花、カーテンなど)を "スキップ" することができます。

emit_direct_photons(直接フォトンの放出)がオンの場合、ライトは直接的なフォトンを照射するだけで、実際にはまったく間接光を放出しません。

transparency(透明度)パラメータには 2 つの機能があります。

このセクションでは、mental ray の以前のバージョンの機能と比較して、ポータル ライトを使用する利点について検討します。

以下のシーン7を使用します。

ポータル ライト、GI、FG を使用したシーン

ポータル ライト、GI、FG を使用したシーン

シーンは、太陽と空のシェーダによって照明されているだけで、屋内に光源はありません。

ポータル ライトを使用しない

シーンの直接光と間接光を明確に示すために、ここではポータル、GI、FG をオフに設定したシーンを示します。

シーンの直接ライティング

シーンの直接ライティング

上のイメージには、分離された直接光が示されています。この結果は、FG が "認識" するシーンで、完全な暗闇、床上の直接的な太陽光、非常に明るい空、屋外で太陽に照らされた地面で構成された極度に高コントラストのシーン、つまり FG アルゴリズムに対する最適ではない入力です。

FG をオンにし、比較的低い値を設定した結果:

FG レイ 50、密度 0.1

FG レイ 50、密度 0.1

このイメージでは芸術賞を獲得できません。斑点があり、棚が壁から "浮き" 出ているように見えますが、最も驚くべきことは、非常に暗いことです。なぜでしょうか。

理由は、高コントラストな入力にあります。FG には、散在する FG レイが極度に明るい単一のオブジェクトにヒットした場合に小さな斑点が生成されるのを防止する目的のフィルタがあり、このフィルタによって最も明るいレイは除去されます。しかし、このシーンは非常に高コントラストであるため、一部のレイが他のレイに比べて極度に明るいことが予測されます。

FG フィルタ = 0 を使用

FG フィルタ = 0 を使用

この例では、フィルタは私たちの意図に反した動作をしています。上のイメージのように、フィルタをオフにすることもできますが、光の配分は多少改善されるとはいえ、斑点や壁から "浮いて" 見える棚には効果がありません。

mia_material を使用しているため、このような状況に最適な組み込み型のアンビエント オクルージョンがあります。ただし、アンビエント オクルージョンを追加しても部分的にしか役立ちません。

AO を追加 - わずかな効果

AO を追加 - わずかな効果

過去に使用できた唯一の解決策は、単に FG 設定の精度を上げるということでした。非常に低い設定を使用しているため、この段階で低精度なのは当然です。ではここで、ツマミを回して値を上げましょう。

FG レイ 250、密度 0.8

FG レイ 250、密度 0.8

FG レイ 500、密度 1.5

FG レイ 500、密度 1.5

レイの数と密度の設定を上げると精度の向上には役立ちますが、レンダリング時間に大きく影響します。また、高い値を設定しても、とても最適な結果が得られたとは言えません。すべてのディテールを解決するには、一層高い値を設定する必要があります。

ここではFG 設定を高くするのは控えて、光の伝搬に注目してみましょう。FG のレイがバウンスするのは 1 度だけなので、シーンは非常に暗いままです。また、空からの照明は間接光なので、バウンスしません。つまり、このシーンでは、太陽光は 1 度バウンスしますが、天空光はまったくバウンスしないのです。

バウンスを 3 に上げましょう。

バウンスを 3 に設定した FG

バウンスを 3 に設定した FG

光の量が増えました。FG 設定を "高く" するのを控えたため、ライティングは滑らかでなく、ディテールに欠けます。

FG でレイを複数回バウンスさせるのは、mental ray がシーン内で光を伝搬する方法の 1 つです。他には、フォトン(GI)を使用する方法があります。ただし、フォトンを有効にする場合は、FG でレイをバウンスを 1 に戻し、フォトンで残りのすべてのバウンスを処理する必要があります。

FG と GI(フォトン)を併用

FG と GI(フォトン)を併用

どこか違和感のある結果になりました。色が黄色がかっています。なぜでしょうか。これは空がフォトンをまったく生成していないためです。太陽は複数回バウンスしていますが、空のバウンスがゼロに戻っています。

ポータル ライトを使用する

ポータル ライトに戻りましょう。まず、すべての FG とGI をオフに設定し、単にポータル ライトをデフォルト設定を使用して窓に追加します。結果のイメージは以下のとおりです。

ポータル ライトのみ、FG とフォトンなし

ポータル ライトのみ、FG とフォトンなし

上記の FG 結果に非常に似ていますが、ディテールのレベルがずっと高くなっています。補間が行われていないため、棚は壁にしっかりと固定されています。すべてのシャドウに非常に細かいディテールが含まれています。

これは直接光なので、FG をオンにすると、FG で計算されます。ポータル ライトを使用する場合と使用しない場合に FG が "認識" するシーンを比較してみましょう。

ポータル ライトなし

ポータル ライトなし

ポータル ライトあり

ポータル ライトあり

左は、ポータルを使用しない場合に FG が認識する超高コントラストなシーンですが、右は非常にバランスの取れたシーンです。単に微細な直接光で満たされているだけではありません。空自体が FG に対して不可視なので、高コントラストな領域を照射する負担がなく8、ファイナル ギャザリングで発生する問題はほぼ解消されます。

ポータル ライトが直接光である場合の 2 番目の特徴は、FG をオンに戻した場合、"無償で" 光が 1 度バウンスすることです。

ポータル ライトによって、無償で 1 度バウンスする空のライティング

ポータル ライトによって、無償で 1 度バウンスする空のライティング

FG レイのバウンスを 1 に設定しているにもかかわらず、窓の内側の壁で天空光が跳ね返っている点に注意してください。

ポータル ライトと 3 度の拡散バウンスを使用

ポータル ライトと 3 度の拡散バウンスを使用

GI(フォトン)を使用

GI(フォトン)を使用

複数の拡散バウンスをオン(左)にすると、イメージにリアルさ加わります。GI(フォトン)をオンにすると、ポータル ライトが実際にフォトンを投射するため、非常にバランスの取れたイメージが生成されます。太陽光が跳ね返ることによりバランスが大きく崩れることがなくなり、天空光はフォトンとして均等に跳ね返ります。

最後に、屋内のライトのいずれかをオンにし、ポータル ライトの transparency パラメータを使用して屋外の景色の露出過剰に対処して最終的なイメージを取得します。

最終的なイメージ

最終的なイメージ

ポータル ライトを利用することについてのまとめ

ポータル ライトによる、天空光の微妙な相互作用

ポータル ライトによる、天空光の微妙な相互作用


脚注
1
値 0.318(1/pi)は、論理的に完全な均等拡散反射の照度/輝度の比率に基づきます。
2
6,500K の白色点に換算されます。
3
不可視でない場合、ファイナル ギャザリングでノイズが発生し、過剰な光がシーンに追加されます。
4
シェーディング ポイントから確認できる窓の範囲を区切る立体角。
5
ほとんどの OEM アプリケーションでは、mental ray エリア ライトのインスタンスは既にこのように設定されています。
6
FG フィルタが 0 の場合は、非バイアス モードです。
7
サンプルのシーン ジオメトリの大部分は、Giorgio Adolfo Krenkel の好意によって提供されています。
8
ただし、太陽による床上の光の集合部分を直接照射する FG レイは高コントラストな領域を認識します。