mental ray の物理的な太陽と空のシェーダは、物理的に忠実な昼光のシミュレーションと昼光の高精度なレンダリングを実現するために設計されています。
mental ray 3.6+ のライブラリにライティング分析用のツールが新たに加わりました。標準の 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)です。
これらの実際の輝度値は、フォトグラフィックなトーン マッパ(トーン マッパを参照)に対する入力として使用するのに最適です。
概要
分析用途
一般的な概要
単位
![]() Haze(かすみ)= 8 | ![]() Haze(かすみ)= 15 |
![]() redblueshift(赤/青シフト)= -0.3 | ![]() redblueshift(赤/青シフト)= +0.3 |
mia_physicalsun は、太陽光と太陽から放出されるフォトンのカラーと強度を定義するために使用します。このシェーダは、ライト シェーダおよびフォトン放出シェーダとしてディレクショナル ライトに適用する必要があります(その他のライト タイプに適用しても機能しません)。
version 6
apply light
end declare
上記で説明したとおり、mia_physicalsun には、mia_physicalsky と共通のパラメータがいくつかあります(haze、redblueshift など)。mia_physicalsun のこれらのパラメータの値は、mia_physicalsky の値と一致している必要があります。
mia_physicalsun に固有のパラメータは以下のとおりです。
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 を使用して、モデルの"下部"にある仮想地表プレーンを作成することもできます。これにより、実際に地平線までのジオメトリをモデリングする必要がなくなります。仮想地表プレーンは、地面の外観と地面からのバウンス ライトの両方を提供します。
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
このパラメータを使用すると、水平線の位置を調整できます。水平線は実際に 3D 空間の特定の"高さ"に存在するわけではありません。特定の角度より下に沈む光線のシェーディング エフェクトです。このパラメータは、この角度を調整します。使用可能な範囲は極端で、-10.0(水平線は"天底: 観測点の真下")~ 10.0(水平線は天頂: 観測点の頭上)です。実用的な値は小さい数値のみです。たとえば、-0.2 に設定すると、水平線は有限で可視の地表プレーンのエッジの直下に下がります。
注: horizon_height は、mia_physicalsky シェーダの水平線の視覚表現だけでなく、mia_physicalsun 自体のカラーにも影響します。太陽が "沈む" 地点は、実際にはゼロ以外の horizon_height に変化します。
horizon_height(水平線の高さ)= 0.0、horizon_blur(水平線ブラー)= 0.0 horizon_height(水平線の高さ)= -0.3、horizon_blur(水平線ブラー)= 0.2
赤色の地面 緑色の地面太陽のパラメータ
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
)
空のパラメータ
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,




多数の空のモデルは、空のみがシーンを照明しているという前提のもと、地面からのバウンス ライトによる影響を無視します。たとえば、mia_physicalsky の出力と IES スカイ モデルとを比較するには、ground_color を黒に設定する必要があります。
このエフェクトを使用するには、シェーダを レンズまたはカメラ ボリューム シェーダとして適用する必要があります。
ただし、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_glow_intensity(太陽のグロー強度)= 5 | ![]() sun_glow_intensity(太陽のグロー強度)= 0.1 |
![]() sun_disk_scale(日輪のスケール)= 1 | ![]() sun_disk_scale(日輪のスケール)= 4 |
CIE スカイ モデルは、ライティング分析に使用する標準モデルです。無色(グレースケール)モデルなので、"魅力的なイメージ" の作成には適していませんが、標準化された(既知の)輝度配分に従うという利点があります。
# 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 シェーダに固有です。
従来のコンピュータ グラフィックスには、空またはその他の "環境" 光(取得した 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 シェーダは、光およびフォトン放出シェーダとして長方形タイプのエリアライトに適用する必要があります。mental ray のライトのインスタンスは、可視に設定する必要があります(ポータル ライトが ファイナル ギャザー レイを "遮断"可能であることは技術的要件です。ライトがレンダリングで実際に可視であるかどうかは、シェーダによって処理されます)。
さらに、mental ray のライトのインスタンスは、長方形のエリア ライトがライト自体の座標空間の X/Y 平面で延長されるように設定する必要があります。また、ライトの変換はライトのインスタンスの変換で処理される必要があります5。
以下のパラメータがあります。
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 つの機能があります。
パラメータを白から変更すると、目に見える結果(このパラメータを変更することによって変更される)と放出されたライトの強度(このパラメータによる影響を受けない)の間のバランスを意図的に変更できます。これはノイズの防止に役立ちます。
これにより、mia_portal_light シェーダが窓に貼り付けられた "ジェル" としての役割も兼任し、屋外で見られるライトの強度を抑制し、露出過度や白とびを防止できます。実際に放出されるライトの強度はこの影響を受けません。また、窓を通過するその他の光線の強度にも影響しません。屈折または反射などに現れる、目に見えるものに対してのみ影響します。
このセクションでは、mental ray の以前のバージョンの機能と比較して、ポータル ライトを使用する利点について検討します。
以下のシーン7を使用します。
ポータル ライト、GI、FG を使用したシーン
シーンは、太陽と空のシェーダによって照明されているだけで、屋内に光源はありません。
CIE スカイ モデル
declare shader "mia_ciesky" (
boolean "on" default on,
color "rgb_unit_conversion" default 0.0001 0.0001 0.0001,
スカイ ポータルと環境ポータル
問題点

解決策
mia_portal_light
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
例

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

ポータル ライトによって、無償で 1 度バウンスする空のライティング
FG レイのバウンスを 1 に設定しているにもかかわらず、窓の内側の壁で天空光が跳ね返っている点に注意してください。
![]() ポータル ライトと 3 度の拡散バウンスを使用 | ![]() GI(フォトン)を使用 |
複数の拡散バウンスをオン(左)にすると、イメージにリアルさ加わります。GI(フォトン)をオンにすると、ポータル ライトが実際にフォトンを投射するため、非常にバランスの取れたイメージが生成されます。太陽光が跳ね返ることによりバランスが大きく崩れることがなくなり、天空光はフォトンとして均等に跳ね返ります。
最後に、屋内のライトのいずれかをオンにし、ポータル ライトの transparency パラメータを使用して屋外の景色の露出過剰に対処して最終的なイメージを取得します。

最終的なイメージ
ポータル ライトを利用することについてのまとめ

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