太陽と空
はじめに
mental ray の物理的な太陽と空のシェーダは、物理的に忠実な昼光のシミュレーションと昼光の高精度なレンダリングを実現するために設計されています。
分析用途
シェーダ ライブラリには、ライティング分析用のツールがあります。標準の CIE スカイ モデル(晴天と曇天の両方)用のシェーダが用意されています。このシェーダは、グレースケール(カラーなし)で、視覚的に魅力的なイメージを生成するためというよりも、分析用に使用します。詳細は、CIE スカイを参照してください。mia_physicalsky シェーダは、Perez スカイ モデルの分析関連パラメータと mia_physicalsun の明示的な照度パラメータを共にサポートしています。
一般的な概要
mia_physicalsun と mia_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)です。
これらの実際の輝度値は、cm2_factor を 1.0 に設定して、フォトグラフィックなトーン マッパ(トーン マッパを参照)に対する入力として使用するのに最適です。
高速 SSS、太陽、空に関する重要事項
mental ray の高速 SSS シェーダとハイ ダイナミック レンジの間接的な太陽光と天空光を併用するには、Indirect パラメータをオンに設定し、SSS シェーダが天空光(間接光としてみなされる)を散乱させることができるようにすることが重要です。
また、Screen composit パラメータをオフに設定することも重要です(オフにしないと、SSS シェーダの出力がロー ダイナミック レンジに固定され、黒にレンダリングされます)。
共通パラメータ
パラメータの中には、mia_physicalsun と mia_physicalsky の両方に存在し、同じ動作をするものがあります。物理的な正確さを維持するには、太陽と空の両方に存在するパラメータを同期させる必要があります。たとえば、太陽と空にそれぞれ異なる haze (かすみ)の値が設定されている場合、物理的な正確さは保証されません。
最も重要な共通パラメータは、シェーディング全体とカラー化モデルを定義するパラメータです。
- haze (かすみ)は、空気中のかすみの量を設定します。範囲は 0 (完全な晴天)~ 15 (極度な曇天、またはサハラ砂漠の砂嵐)です。かすみは、空と水平線の強度とカラー、太陽光の強度とカラー、日陰の柔らかさ、太陽の周囲のグローの柔らかさ、空気遠近法の強度に影響します。

Haze=0

Haze=3

Haze=8

Haze=15
- redblueshift (赤/青シフト)は、光の "赤み" を芸術的な見地でコントロールします。既定値の 0.0 は物理的に正確な値2ですが、このパラメータを -1.0 (極端な青)~ 1.0 (極端な赤)の範囲に設定して変更できます。

Redness=-0.3

Redness=+0.3
- saturation (彩度)も芸術的なコントロールで、物理的に計算された彩度レベルは 1.0 です。このパラメータの範囲は 0.0 (白黒)~2.0 (極端に高い彩度)です。
太陽のパラメータ
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 と共通のパラメータがいくつかあります(haze、redblueshift など)。mia_physicalsun のこれらのパラメータの値は、mia_physicalsky の値と一致している必要があります。mia_physicalsun に固有のパラメータは以下のとおりです。
- samples は、ソフト シャドウのシャドウ サンプル数です。0 に設定すると、ソフト シャドウは生成されません。
- shadow_softness は、ソフト シャドウの柔らかさです。1.0 は、実際の日陰に最も忠実な柔らかさに相当する値です。低い値を設定すると、シャドウはよりハードになり、高い値を設定すると、より柔らかくなります。
- photon_bbox_min と photon_bbox_max を 0,0,0 に設定したままにすると、フォトン バウンディング ボックスはシェーダによって自動的に計算されます。これらのパラメータを設定すると、light の座標系内にフォトンの放出範囲のバウンディング ボックスが定義されます。これは、GI フォトンを特定の領域に "限定" するために使用できます。たとえば、背景として大都市をモデリングした場合に、屋内のみをレンダリングすると、mental ray は既定で都市全体を対象にフォトンを放出するため、屋内に放出されるフォトンはわずかです。photon_bbox_max と photon_bbox_min パラメータを使用すると、mia_physicalsun のフォトンの放出範囲を目的の窓に限定できるため、屋内のレンダリングの速度と精度が向上します。
- automatic_photon_energy を使用すると、フォトン エネルギーを自動的に計算できます。このパラメータをオンにすると、太陽エネルギーに一致する有効なエネルギー値を光源に設定する必要がありません(ただし、ゼロ以外のエネルギー値を設定するか、mental ray でフォトン放出を無効にする必要があります)。フォトンの正確なエネルギーとカラーが自動的に計算されます。このパラメータをオフにすると、フォトンのエネルギーは光源のエネルギー値によって定義された値になります。
- illuminance_mode がゼロの場合、既定の太陽の強度(haze、太陽角、太陽路程などに基づいて内部的に計算された値)が使用されます。この値は、ライブラリの以前のバージョンとの互換性があります。illuminance_mode が 1 の場合、太陽光には direct_normal_illuminance パラメータによって直接法線輝度(ルクス単位)が設定されます。太陽光のカラーは、以前と同様に haze によって定義され、強度のみが変更されます。
空のパラメータ
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",
boolean "physically_scaled_sun"
)
version 5
apply environment, texture, lens, volume
end declare
- on (オン)はシェーダのオンとオフを切り替えます。既定は on です。
- multiplier (乗数)は光の出力用のスカラー乗数です。既定は 1.0 です。既定は 1.0 です。
- rgb_unit_conversion (RGB 単位変換)を使用すると、単位を設定できます。特別な値 0 0 0 に設定すると、80,000 lux (晴れた日の光レベル)は出力レベル 1 に相当し、ロー ダイナミック レンジのレンダリングに適しています。
- horizon_height (水平線の高さ)は水平線の "レベル" を設定します。既定値 0.0 を使用すると、水平線は標準の "高さ" に配置されます。ただし、水平線は無限に遠ざかるため、地面を表現する有限のジオメトリと結合すると問題が発生する可能性があります。また、山頂やニューヨークの超高層ビルなど、高地に位置する場所をレンダリングする場合(水平線が実際には見る人の視点より "下" の位置にある場合)にも問題が発生する可能性があります。
このパラメータを使用すると、水平線の位置を調整できます。水平線は実際に 3D 空間の特定の "高さ" に存在するわけではありません。特定の角度より下に沈む光線のシェーディング エフェクトです。このパラメータは、この角度を調整します。使用可能な範囲は極端で、-10.0 (水平線は "天底: 観測点の真下")~10.0 (水平線は天頂: 観測点の頭上)です。実用的な値は小さい数値のみです。実用的な値は小さい数値のみです。たとえば、-0.2 に設定すると、水平線は有限で可視の地表プレーンのエッジの直下に下がります。
注: horizon_height は、mia_physicalsky シェーダの水平線の視覚表現だけでなく、mia_physicalsun 自体のカラーにも影響します。太陽が "沈む" 地点は、実際にはゼロ以外の horizon_height に変化します。
- horizon_blur (水平線ブラー)は水平線をレンダリングする場合の "ぼかし" を設定します。0.0 に設定すると、水平線は完全にシャープになります。一般に、低い値(0.5 未満)を使用しますが、最大で 10.0 まで設定できます。この場合、水平線はブラーのみで構成され、実質的には水平線ではなくなります。
horizon_height=0.0,
horizon_blur=0.0
horizon_height=-0.3,
horizon_blur=0.2
- ground_color (地表カラー)は、仮想地表プレーンのカラーです。これは拡散反射値(アルベド)であるという点に注意してください。地面は、この拡散カラーが設定された均等拡散反射のように見えます。太陽と空のみによって照明され、シャドウは受けません。

赤色の地面

緑色の地面
上のイメージで、地面からのバウンス ライトが家の壁にどのように色合いを付けているかに注目してください。また、仮想地表プレーンはシャドウを受けていない点に注目してください。
多数の空のモデルは、空のみがシーンを照明しているという前提のもと、地面からのバウンス ライトによる影響を無視します。たとえば、mia_physicalsky の出力と IES スカイ モデルとを比較するには、ground_color を黒に設定する必要があります。
- night_color (夜のカラー)は空の最小限のカラーです。空はこの値より暗くなることはありません。日没後に輝く、月、星、高層の巻雲などを追加するのに便利です。太陽が沈み、空が暗くなっても、night_color のエフェクトは影響を受けず、"基本の光レベル" として維持されます。
- sun_direction (太陽の方向)は、手動で指定した場合の太陽面の方向です。sun (太陽)パラメータが使用されている場合、このパラメータは無視されます。
- sun は太陽の方向を自動的に設定する手段です。陽を表現するディレクショナル ライト(mia_physicalsun シェーダが設定されたライトと同じ)を含むライトのインスタンスのタグです。これにより、可視の太陽面は実際の太陽光の方向に自動的に従います。
- 空気遠近法は、遠方のオブジェクトがどの程度かすんで見えるか、およびそのオブジェクトの色がスペクトラムの青の端にどの程度近くなるかを知らせるためにペインタによって使用される用語です。 mia_physicalsky は、これを visibility_distance パラメータでエミュレートします。 ゼロ以外の値を設定すると、"10 %の可視距離" が定義されます。すなわち、haze レベル 0.0 の 10 のかすみが可視状態になる距離です。
このエフェクトを使用するには、シェーダをレンズまたはカメラ ボリューム シェーダとして適用する必要があります。
- y_is_up (Y アップ)は "上" 方向を向く要素を定義します。mental ray の OEM 統合製品の一部では、Z 軸を "上" とみなすため、このパラメータをオフにする必要があります。それ以外の Y 軸を "上" とみなす製品では、このパラメータをオンにする必要があります。
- flags (フラグ)は将来的な拡張機能で、テストや内部アルゴリズムのコントロールです。ゼロに設定する必要があります。
- sky_luminance_mode (空の輝度モード)がゼロの場合、空の輝度は haze レベル、太陽の位置などに基づいて自動的に計算されます。この値はシェーダの以前のバージョンとの互換性があります。
ただし、sky_luminance_mode がゼロ以外の場合、天空全体の輝度の配分は Perez モデルに従います。a、b、c、d、e という名前の 5 つのパラメータによって定義されます。そのため、このモデルを使用するには、Perez 係数の有効なセットが必要です(ただし、天空全体のカラー配分は、haze パラメータによって定義されます)。
sky_luminance_mode が 1 の場合、空の輝度は zenith_luminance (天頂の輝度)パラメータ(カンデラ/平方メートル単位)か、または既知の diffuse_horizontal_illuminance (拡散水平輝度)値(ルクス単位)のいずれかを設定して定義します(両方を設定しないようにしてください)。
sky_luminance_mode が 2 の場合、天頂の輝度は CIE クリアスカイ モデルから算出されます。
mia_physicalsky シェーダはレイを異なる方法で扱うという点に注意してください。カメラからの直接レイ、反射レイ、屈折レイは、以下で説明する "sun disk (日輪)" を含む "全ての" エフェクトを認識します。しかし、ライティングには既に太陽を表現する直接光(mia_physicalsun シェーダを使用)が含まれているため、sun disk はファイナル ギャザーのレイに対して不可視です3。
これらのパラメータは、ファイナル ギャザリング結果には影響を与えません。"目に見える" 結果のみ(カメラが捉えるものと、反射と屈折に現れるもの)に影響します。
- sun_disk_intensity (日輪の強度)と sun_glow_intensity (太陽のグロー強度)は、可視の日輪と太陽のグローの強度で、太陽の "外観" を調整するために使用します。
glow_intensity=5
glow_intensity=0.1
- physically_scaled_sun では、太陽の強度が物理的にスケールされます。sun_intensity を 1.0 に指定すると、太陽は現実の世界と同じ明るさになります。sun_intensity を使用して強度を調整することもできます(2.0の値を指定すると、太陽は実際の太陽の 2 倍の明るさになります)。glow_intensity と sun_scale を使用して、太陽のアスペクトを調整することもできますが、自動的に調整されて補正される全体的なエネルギーには影響しません。
- sun_scale (日輪のスケール)は可視の太陽面のサイズを設定します。値 1.0 は "物理的に正確な" サイズですが、人間の目は写真の中の太陽のサイズを適切に判断しない傾向にあるため、既定値は若干視覚的な感覚に近い 4.0 です。
sun_scale=1
sun_scale=4
- use_background (バックグラウンドの使用)が有効で、background (バックグラウンド)が設定されていない場合、レンダリングのバックグラウンドは透明黒になり、外部での合成にはこの設定が適しています。background シェーダが提供されている場合、レンダリングのバックグラウンドはそのシェーダから取得されます(たとえば、実際の場所や類似した場所のバックグラウンド写真を参照するテクスチャ シェーダなど)。いずれの場合も、mia_physicalsky は屈折と反射に表示されます。
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 と共有します。たとえば、on、rgb_unit_conversion、sun_direction、y_is_up パラメータなどがあり、これらのパラメータは両シェーダで同様に機能します。詳細は、mi_shader__mia_physicalsky を参照してください。
以下のパラメータは mia_ciesky シェーダに固有です。
- auto_luminance。オンの場合、空の輝度は zenith_luminance パラメータ(カンデラ/平方メートル単位)、または既知の diffuse_horizontal_illuminance 値(ルクス単位)のいずれかを設定して定義します(両方を設定しないようにしてください)。
- overcast がゼロの場合、CIE クリア スカイ モデルが使用されます。overcast が 1.0 の場合、CIE オーバーキャスト モデルが使用されます。中間の値の場合、2 つのモデルのリニア補間が使用されます。
スカイ ポータルと環境ポータル
問題点
従来のコンピュータ グラフィックスには、空またはその他の "環境" 光(取得した 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 つの機能があります。
- visible が on の場合、エリア ライトの "可視カラー" に対する乗数として機能します。これが白の場合、直接 "目に見える" カラーは、物理の法則によって決定された、その量のライトを放出するサーフェスのカラーになります。
パラメータを白から変更すると、目に見える結果(このパラメータを変更することによって変更される)と放出されたライトの強度(このパラメータによる影響を受けない)の間のバランスを意図的に変更できます。これはノイズの防止に役立ちます。
- visible がoffの場合、エリア ライトの透明度を定義します。
これにより、mia_portal_light シェーダが窓に貼り付けられた "ジェル" としての役割も兼任し、屋外で見られるライトの強度を抑制し、露出過度や白とびを防止できます。実際に放出されるライトの強度はこの影響を受けません。また、窓を通過するその他の光線の強度にも影響しません。屈折または反射などに現れる、目に見えるものに対してのみ影響します。
例
このセクションでは、mental ray の以前のバージョンの機能と比較して、ポータル ライトを使用する利点について検討します。
以下のシーン7 を使用します。

ポータル ライト、GI、FG を使用したシーン
シーンは、太陽と空のシェーダによって照明されているだけで、屋内に光源はありません。
ポータル ライトを使用しない
シーンの直接光と間接光を明確に示すために、ここではポータル、GI、FG をオフに設定したシーンを示します。

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

FG レイ 50、密度 0.1
このイメージでは芸術賞を獲得できません。斑点があり、棚が壁から "浮き" 出ているように見えますが、最も驚くべきことは、非常に暗いことです。なぜでしょうか。
理由は、高コントラストな入力にあります。FG には、散在する FG レイが極度に明るい単一のオブジェクトにヒットした場合に小さな斑点が生成されるのを防止する目的のフィルタがあり、このフィルタによって最も明るいレイは除去されます。しかし、このシーンは非常に高コントラストであるため、一部のレイが他のレイに比べて極度に明るいことが予測されます。

FG フィルタ = 0 を使用
この例では、フィルタは私たちの意図に反した動作をしています。上のイメージのように、フィルタをオフにすることもできますが、光の配分は多少改善されるとはいえ、斑点や壁から "浮いて" 見える棚には効果がありません。
mia_material を使用しているため、このような状況に最適な組み込み型のアンビエント オクルージョンがあります。ただし、アンビエント オクルージョンを追加しても部分的にしか役立ちません。

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

FG レイ 250、密度 0.8

FG レイ 500、密度 1.5
レイの数と密度の設定を上げると精度の向上には役立ちますが、レンダリング時間に大きく影響します。また、高い値を設定しても、とても最適な結果が得られたとは言えません。すべてのディテールを解決するには、一層高い値を設定する必要があります。
ここではFG 設定を高くするのは控えて、光の伝搬に注目してみましょう。FG のレイがバウンスするのは 1 度だけなので、シーンは非常に暗いままです。また、空からの照明は間接光なので、バウンスしません。つまり、このシーンでは、太陽光は 1 度バウンスしますが、天空光はまったくバウンスしないのです。
バウンスを 3 に上げましょう。

バウンスを 3 に設定した FG
光の量が増えました。FG 設定を "高く" するのを控えたため、ライティングは滑らかでなく、ディテールに欠けます。
FG でレイを複数回バウンスさせるのは、mental ray がシーン内で光を伝搬する方法の 1 つです。他には、フォトン(GI)を使用する方法があります。ただし、フォトンを有効にする場合は、FG でレイをバウンスを 1 に戻し、フォトンで残りのすべてのバウンスを処理する必要があります。

FG と GI (フォトン)を併用
どこか違和感のある結果になりました。色が黄色がかっています。なぜでしょうか。これは空がフォトンをまったく生成していないためです。太陽は複数回バウンスしていますが、空のバウンスがゼロに戻っています。
ポータル ライトを使用する
ポータル ライトに戻りましょう。まず、すべての FG とGI をオフに設定し、単にポータル ライトを既定設定を使用して窓に追加します。結果のイメージは以下のとおりです。

ポータル ライトのみ、FG とフォトンなし
上記の FG 結果に似ていますが、ディテールのレベルがずっと高くなっています。 補間が行われていないため、棚は壁にしっかりと固定されています。すべてのシャドウに非常に細かいディテールが含まれています。
これは直接光なので、FG をオンにすると、FG で計算されます。ポータル ライトを使用する場合と使用しない場合に FG が "認識" するシーンを比較してみましょう。

ポータル ライトなし

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

ポータル ライトによって、無償で 1 度バウンスする空のライティング
FG レイのバウンスを 1 に設定しているにもかかわらず、窓の内側の壁で天空光が跳ね返っている点に注意してください。

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

GI (フォトン)を使用
複数の拡散バウンスをオン(左)にすると、イメージにリアルさ加わります。GI (フォトン)をオンにすると、ポータル ライトが実際にフォトンを投射するため、非常にバランスの取れたイメージが生成されます。太陽光が跳ね返ることによりバランスが大きく崩れることがなくなり、天空光はフォトンとして均等に跳ね返ります。
最後に、屋内のライトのいずれかをオンにし、ポータル ライトの transparency パラメータを使用して屋外の景色の露出過剰に対処して最終的なイメージを取得します。

最終的なイメージ
ポータル ライトを利用することについてのまとめ
- ...レンダリング時間を短縮する(極度に高い FG 設定を使用する必要性を軽減する)
- ...シーン内のライトのバランスを維持する(環境ライトをフォトンに変換し、太陽光と同様に屋内を跳ね返らせる)
- 空の照明の精度を向上させ、滑らかな領域を滑らかにして斑点を除去し、最も微細なディテールを忠実に再現する
- ...シーンの設定時間を大幅に短縮する(調整せずに、またはわずかに調整するだけで、常にすぐに使える "最適" なイメージを生成する)

ポータル ライトによる、天空光の微妙な相互作用
フォトメトリック ライト
問題点
ベース mental ray シェーダを使用して、GI (フォトンを使用)を含む物理的に正しいシーンをレンダリングする場合、難しいのはフォトン エネルギーと直接光のバランスを正しく取ることです。これは、一般的に強度は特定の方向の強度として指定される(たとえば、スポットライトのピーク強度など)のに対し、エネルギーは全方向のすべての強度を合計したもの(技術的に言えば総量)であるためです。
このため、たとえばスポットライトでは、同じピーク強度でも、スポットライト円錐の幅によって、またそのコーン内における強度の配分の形によって、異なるフォトン エネルギーが必要になります。これは、数学的に定義された強度配分(スポットライト円錐など)では計算可能ですが、ライト プロファイルで定義された不定の配分の場合はどうでしょうか。
さらに、ライトの方向によって強度が変動するライト(スポットライトまたはライト プロファイルを使用するライト)でのフォトンの収束を最適にするためには、さまざまな方向に異なるエネルギーのフォトンを放出する代わりに、さまざまな密度で同じようなエネルギーのフォトンを放出したほうがよいでしょう。この場合、特定のポイントにおける領域あたりのエネルギー量(フォトン エネルギーの密度)は、そのポイントに到達する直接光に一致している必要があります。
解決策
これらの問題のすべてを解決するため、mia_photometric_light が追加されました。このシェーダは、選択された強度配分の数値的な統合を実行して正しいフォトン エネルギーを自動計算することで、当て推量を行うことなくフォトン エネルギーとライト強度のバランスを取り、加えて、配分に対するフォトン密度の調整もすべて自動的に行います。
これを使用するには、単に光源のライトおよびフォトン シェーダの両方と同じシェーダのインスタンスを使用します。ライトには原点が必要です(このシェーダは、無限光源では機能しません)。ライトは、フォトンを放出するように設定する必要があります。また、ゼロ以外のエネルギー値を設定する必要があります(実際の値はシェーダによってオーバーライドされますが、エネルギー値はゼロ以外にする必要があります。ゼロにすると、mental ray はライトにフォトンを放出しなくなります)。exponent は、常に 2 にします。ライトがスポットライトの場合は、spread 値を使用します。ライトについては mental ray のマニュアルを参照してください。
shader "myLight" "mia_photometric_light" (
"on" true,
"color" 1 1 1,
...
)
light "theLight" = "myLight"
emitter = "myLight"
origin 0 0 0
energy 1 1 1
exponent 2
caustic photons 20000
globillum photons 20000
end light
シェーダは以下のように宣言します。
declare shader "mia_photometric_light" (
boolean "on" default on,
scalar "multiplier" default 1.0,
color "color" default 1.0 1.0 1.0,
# How to define the light intensity
# 0 = using a manual peak intensity in cd
# 1 = using a total amount of lumen
# 2 = using the information stored in the IES file
integer "intensity_mode",
scalar "manual_peak_intensity_cd",
scalar "manual_flux_lm",
# How to define the light distribution
# 0 = Isotropic spherical distribution
# 1 = Spotlight distribution
# 2 = using the information stored in the IES file
integer "distribution_mode" default 0,
scalar "spotlight_cosine_bias",
lightprofile "profile",
# Scene and lighting unit management
scalar "units_to_meter_scale" default 1.0,
scalar "cm2_factor" default 1.0
)
version 2
apply light, emitter
end declare
on (オン)はライトのオンとオフを切り替えます。
multiplier は、調光器のように強度を調整します。この値が 1.0 の場合のみ、以下に説明する強度設定が正確になります。
color は、ライトのカラーです。これが正規化されたカラー(カラーの mi_luminance() が 1.0)の場合のみ、以下に説明する強度設定が正確になります。幸いなことに、mib_cie_d、mib_blackbody などの関数で返されるカラーは正規化されています。
intensity_mode は、定義されているパラメータやライト強度の単位を示します。
- intensity_mode が 0 の場合、ライトのピーク強度は manual_peak_intensity_cd パラメータによって(カンデラ単位で)定義されます。
- intensity_mode が 1 の場合、ライトの全体の流動は manual_peak_intensity_cd パラメータによって(ルーメン単位で)定義されます。
- intensity_mode が 2 の場合、強度は profile パラメータに割り当てられた IES プロファイルに格納されている値から直接派生されます。
distribution_mode は、さまざまな方向へのライトの配分方法を定義します。
- distribution_mode が 0 の場合、ライトは等方性です。つまり、すべての方向に同量のライトが照射されます。
- distribution_mode が 1 の場合、ライトはスポットライトです。このライトでは spread パラメータで、光線の幅を定義する必要があります。コーン内のライトの配分は余弦関数に従い、spotlight_cosine_bias パラメータの累乗に引き上げられます。このため、バイアスが 1.0 より小さい場合には、ライトはコーンのエッジ方向に拡散され、1.0 より大きい場合には、ライトはコーンの中央に向かって集約されます。
- distribution_mode が 2 の場合、ライトの強度分配は profile パラメータに割り当てられた IES プロファイルに格納されている値から取得されます。この distribution_mode を手動の intensity_modes 0 または 1 のいずれかと組み合わせてもかまいません。この場合、IES プロファイルが相対モードで使用され、目的の強度に対応しようとしますが、IES ファイルの方向分配にも引き続き対応しようとします。
実世界での物理的なライティングの単位は、スケールに大きく依存するため、units_to_meter_scale で 1 メートルにいくつのシーン単位が入るかを定義します。たとえば、シーンの単位が 1 ミリメートルである場合、1000 を指定します。
最後に、cm2_factor は、ピクセル値と 1 平方メートルあたりのカンデラの輝度値の間の変換係数です。つまり、強度に関して写真のように正しいレンダリングを生成するには、これが mia_exposure_photographic の cm2_factor と一致している必要があります。単位も参照してください。
脚注 - 1
- 値 0.318 (1/pi)は、論理的に完全な均等拡散反射の照度/輝度の比率に基づきます。
- 2
- 6,500K の白色点に換算されます。
- 3
- 不可視でない場合、ファイナル ギャザリングでノイズが発生し、過剰な光がシーンに追加されます。
- 4
- シェーディング ポイントから確認できる窓の範囲を区切る立体角。
- 5
- ほとんどの OEM アプリケーションでは、mental ray エリア ライトのインスタンスは既にこのように設定されています。
- 6
- FG フィルタが 0 の場合は、非バイアス モードです。
- 7
- サンプルのシーン ジオメトリの大部分は、Giorgio Adolfo Krenkel の好意によって提供されています。
- 8
-
ただし、太陽による床上の光の集合部分を直接照射する FG レイは高コントラストな領域を認識します。