フェノメナ

実際の用途には、付属のフェノメナで十分なことが多いので、付属のフェノメナを最初に説明します。経験豊富なユーザは、これらをテンプレートしてオリジナルのフェノメナを作成したり、高度なトピックで説明するコンポーネント シェーダを使用したりすることができます。これらのフェノメナは入力パラメータを論理グループにグループ化するための構造を使用します。この論理グループは、mental ray の各種 OEM 統合のユーザインタフェースによって、自動的にグループ化されます。

高速、単純フェノメナ

このフェノメナは(明示的に指定しない限り)自動的に必要なライトマップを生成し、ライトマップデータを入力し、サブサーフェス スキャタリングを使用した一般的な半透明のオブジェクトとしてオブジェクトをシェーディングします。散乱は 2 つに分けて行われ、1 つはオブジェクトの前面、もう 1 つはオブジェクトの後面について行います。

シェーダはいくつかのライトの成分を重ね合わせること(misss_fast_shader 参照)によって動作し、最終結果を得ていると言うこともできます。以下の法則を念頭においておきましょう。


カラーのフロー
misss_fast_simple_phen
    material "misss_fast_simple_phen" (
        color texture   "lightmap",
        color texture   "depthmap",
        string          "lightmap_group",
        scalar          "lightmap_size",
        integer         "samples",
        shader          "bump",
        struct "d" {
            color       "ambient",
            color       "overall_color",
            color       "diffuse_color",
            scalar      "diffuse_weight",
            color       "front_sss_color",
            scalar      "front_sss_weight",
            scalar      "front_sss_radius",
            color       "back_sss_color",
            scalar      "back_sss_weight",
            scalar      "back_sss_radius",
            scalar      "back_sss_depth"
        },
        struct "s" {
            color       "specular",
            scalar      "exponent"
        },
        struct "a" {
            scalar      "lightmap_gamma",
            boolean     "indirect",
            scalar      "scale_conversion",
            scalar      "scatter_bias",
            scalar      "falloff",
            boolean     "screen_composit"
        },
        integer         "mode",
        array light     "lights")
lightmap
depthmap
通常は指定しません。これらは、シェーダがシェーダ間で自動的に作成されたライトマップの名前を伝達するために使用する、特殊なパラメータです。経験豊富なユーザは書き込み可能なテクスチャを渡し、lightmap_group および lightmap_size の両パラメータを未定義にしておくことができます。詳細は 自動ライトマップ生成を参照してください。
lightmap_group
散乱グループの名前です。ライトマップ/デプスマップのペアが内部的に作成され、この名前が付けられます。相互の内部に光を散乱するすべてのオブジェクトは、同じ散乱グループに属する必要があります。メモリを節約するために、散乱グループの数はできるだけ少なくします。人の手や顔などは、同じ散乱グループを使用できます(異なる複数の人物の手や顔であってもその方が効率的です)。一般に、別の散乱グループを使用する必要があるのは、同じグループを使用することが原因となってオブジェクトが相互の内部に不正確に散乱され、可視の問題が発生する場合のみです。たとえば、2 人のキャラクタが握手する場合には、2 人の手を別の散乱グループに属させる必要があります (ネットワーク レンダリングの注意事項も参照してください)。
lightmap_size
ライトマップのサイズをレンダー サイズのパーセンテージで指定します。ライトマップはレンダー空間に作成され、ファイナル レンダーのスクリーン ピクセルに関連付けられます。50 %以下でも十分な場合もあります(デフォルトでもあります)が、エッジ アーティファクトが見受けられた場合にはこの値を増加します。
samples
レンダリング後の個々のレイあたり、ライトマップからのサンプル量を(最大で)どれほど考慮するかを、できれば 2 の累乗で設定します。使用可能な範囲での最小値は 32 で、通常は 128 で十分です。ただし、散乱の半径が大きい場合は、イメージノイズを回避するためにサンプル数を増加する必要があります。
bump
法線を摂動させることでバンプを生成する、すべてのシェーダを渡すことができます。シェーダのカラー出力(設定されている場合)は使用されません。
ambient
任意のシェーダによって追加されるアンビエント コンポーネントまたは追加の拡散ライトです。このライトはライトマップにも追加され、他の光源と同じように散乱されるため、HDRI ライトを追加するのに適した場所です。HDRI ライトは環境マップおよびオクルージョン マップに基づきます。
overall_color
全体的な拡散カラーです。これに続くすべての拡散カラーにこのグローバル カラーが乗算されて、最終結果が得られます。このパラメータは最終的に計算された拡散カラーを要求に応じて色づけする場合や、すべての拡散光を減衰するようなマップを適用する場合に便利です。たとえば、ほくろはその下からの光をほぼすべて遮るため(散乱があったとしても)、汚れやテクスチャリングされた眉などと同様にこのシェーダの用途として考えられます。
diffuse_color
diffuse_weight
通常の Lambert の拡散ライティングのカラーとウェイト(簡単に調整を行うための単純な乗数)で、配下にある散乱された拡散光の上位にレイヤー化されます。
front_sss_color
front_sss_weight
前面サーフェス スキャタリングに使用するカラーとウェイトです。
front_sss_radius
前面サーフェスの散乱の半径です。光はサーフェス上でこの距離を散乱し、モデルの作成に使用された単位に関わらず、サーフェス上で scale_conversion パラメータによって除算されます。
back_sss_color
back_sss_weight
後面サーフェス スキャタリング(すなわちオブジェクトを貫通する光)に使用するカラーとウェイトです。
back_sss_radius
back_sss_depth
後面サーフェスからの光が前面サーフェスで可視である場合の散乱の半径および深度です。半径と深度は同じ値に設定するのが普通です(深度が指定されていない場合にはデフォルトで半径と同じ値に設定されます)が、個別に設定してより詳細にコントロールすることもできます。
specular
exponent
スペキュラ ハイライトで使用するスペキュラ カラーおよび phong の指数です。
lightmap_gamma
ライトマップに格納される光のガンマ曲線です。この値が 1.0 の場合は、通常の Lambert 拡散光が格納されます。1.0 よりも小さい場合は、曲線は「フラット化」され、光は入射する光に対して垂直な領域に向かって放出されます。1.0 よりも大きい場合は、曲線は「狭め」られ、光は光源に垂直に面した領域に集中します。0.4 から 0.8 までの範囲で十分な場合がほとんどです。
indirect
true の場合は、ライトマップに含まれるすべての間接ライティング(フォトン、ファイナル ギャザー、その他)が散乱されます。この処理はレンダリング時間を要するため、散乱が見て取れるほど間接ライトの影響があるか、わざわざレンダリング時間を費やすに値するほどの差がないかを、1 つ 1 つ判断しなくてはなりません。
scale_conversion
すべての距離をリニアに分割できる単純なユーティリティ機能です。散乱は距離に依存するので、インチ単位を使用したモデル用に設計されたマテリアルをメートル単位のモデルにロードしてもうまくいかなかったり、またその逆のこともあります。そのような場合は、ここで変換係数を渡します。
scatter_bias
0.0 に設定すると散乱は完全に均等になります。正の値では前面に多く散乱、負の値では後面に多く散乱します。可能な範囲は -1.0 から 1.0 までですが、実際に役に立つ範囲はさらに狭くなります。まず 0.1(わずかに前面に多く散乱より)から始めるとよいでしょう。
falloff
散乱半径に沿った距離減衰のシェイプを設定します。この値が高いほど減衰は急になり、低いほど緩やかな減衰になりますが、同時に明確な散乱距離も短くなるので、もう少し「ソフトな」外観を得たいという場合には、実際の散乱距離を長くすることによって埋め合わせる必要があります。値が高い場合(1.0 から 10.0)は、散乱半径よりも小さいサンプルのうちほぼすべてのウェイトが同等になります。値が低い場合(0.1 から 1.0)は、散乱半径のエッジに近いサンプルのウェイトは少なくなります。
screen_composit
オンにした場合は、スクリーン合成が選択されます。多数のライトのレイヤの成分を単純に加算すると、露出過多で白飛びしてしまいがちですが、人間の目は本質的にリニアではなく、別の方法で強度を感知します。このオプションでは、多くの合成アプリケーションでレイヤ間におけるスクリーン転送モードと呼ばれる、よりソフトでより見栄えのよい結果を生み出す機能を使用できます。オフにした場合は、通常の追加が使用されます。ハイダイナミックレンジでレンダリングし、最終出力段階ですでに最終的な輝度を圧縮して適切なトーンオペレータを適用してあるのであれば、このオプションはオフにします。
mode
ライト リストで使用するモード セレクタです。
lights
直接ライトのリストです。

高速スキン フェノメナ

スキン シェーディング用のより高度なフェノメナには、3 レイヤ散乱およびスキン固有の鏡面反射性機能があります。多くのパラメータは misss_fast_simple_phen と共有です。


スキン シェーダの構造

レイヤにおけるスキンのシミュレートは、最上位の反射光沢レイヤ(鏡面反射性およびサーフェスの非散乱 Lambert 拡散反射に使用)、二重レイヤのサブサーフェス スキャタリング(表皮とその下のレイヤ(ここでは集合的に「皮下」と呼びます)における散乱をシミュレート)、後面からの「貫通」散乱によって実現されます。

misss_fast_skin_phen
    material "misss_fast_skin_phen" (
        color texture   "lightmap",
        color texture   "depthmap",
        string          "lightmap_group",
        scalar          "lightmap_size",
        integer         "samples",
        shader          "bump",
        struct "d" {
            color       "ambient",
            color       "overall_color",
            color       "diffuse_color",
            scalar      "diffuse_weight",

            color       "front_sss_color",
            scalar      "front_sss_weight",
            scalar      "front_sss_radius",
            color       "mid_sss_color",
            scalar      "mid_sss_weight",
            scalar      "mid_sss_radius",
            color       "back_sss_color",
            scalar      "back_sss_weight",
            scalar      "back_sss_radius",
            scalar      "back_sss_depth"
        },
        struct "s" {
            scalar      "overall_weight",
            scalar      "edge_factor",
            color       "primary_spec_color",
            scalar      "primary_weight",
            scalar      "primary_edge_weight",
            scalar      "primary_shinyness",

            color       "secondary_spec_color",
            scalar      "secondary_weight",
            scalar      "secondary_edge_weight",
            scalar      "secondary_shinyness",

            scalar      "reflect_weight",
            scalar      "reflect_edge_weight",
            scalar      "reflect_shinyness",
            boolean     "reflect_environment_only",
            shader      "environment"
        },
        struct "a" {
            scalar      "lightmap_gamma",
            boolean     "indirect",
            scalar      "scale_conversion",
            scalar      "scatter_bias",
            scalar      "falloff",
            boolean     "screen_composit"
        },
        integer         "mode",
        array light     "lights")

lightmapdepthmaplightmap_grouplightmap_sizesamplesbumpambientlightmap_gammaindirectscale_conversionscatter_biasfalloffscreen_composit の各パラメータは、すべて misss_fast_simple_phen における各パラメータと同じように動作します。

overall_color
すべての拡散コンポーネントの全体的な配色です。このカラーは配下にあるすべてのレイヤ(非散乱、表皮、皮下、後面)に影響し、全体的なカラーの調整およびほくろ、テクスチャリングした眉、汚れなどといった、その下の光を遮るようなサーフェスフィーチャのテクスチャ マッピングに使用します。
diffuse_color
diffuse_weight
通常の Lambert 拡散コンポーネントのカラーとウェイトです。小さなバンプがすべて配置される、スキンの最上位のレイヤーを表します。白色人種のスキンの場合は、カラーはほぼ白色(場合によってはわずかに青を加えたもの)、適切な拡散のウェイトは 0.3 前後になります。
front_sss_color
front_sss_weight
front_sss_radius
表皮のスキンレイヤ内のカラー、ウェイト、散乱半径で、表面の下にある白または黄色がかったレイヤです。適切な値は、わずかに黄色がかったカラーに、ウェイトは 0.5、半径は 5mm から 10mm(0.2 インチから 0.4 インチ)程度です。
mid_sss_color
mid_sss_weight
mid_sss_radius
皮下のスキン レイヤのカラー、ウェイト、散乱半径です。これらのパラメータの機能は front_ で開始されるもののパラメータと同じですが、これは上位のレイヤの下にある別のレイヤのもので、より深く赤みがかった「肉」らしい散乱です。赤みまたはオレンジがかったカラーに 0.5 前後のウェイト、10mm から 25mm (0.4 インチから 1.0 インチ)程度の半径から試してみるとよいでしょう。
back_sss_color
back_sss_weight
back_sss_radius

back_sss_depth
肉をまっすぐに貫通する光を表します(「耳が赤くなる」様子など)。
overall_weight
鏡面反射性および反射の全体的なレベルです。一般に、あらゆる鏡面反射性マップはここで追加され、その後関連するすべての鏡面反射性オプションのレベルに作用します。
edge_factor
エッジ反射エフェクトの「エッジの幅」を設定します。スキンの反射はほぼ垂直に近い角度から見たときに最大になります(「フレネル効果」と呼ばれます)が、このパラメータはこのエッジの幅を設定します。値を大きくするほどエッジが狭くなっていきます。このエッジ幅は以下にリストされるすべてのエッジのウェイトに適用されます。
primary_spec_color
primary_spec_weight
鏡面反射性のある最初のレイヤで使用するカラーとベースウェイトです。スキンの鏡面反射性機能は 2 層構造で、スキンの幅広いソフトな鏡面反射性と、最上位のレイヤの油分および水分による反射に近い鏡面反射性の両方をシミュレートできます。
primary_edge_weight
エッジにおける最終的な鏡面反射性が weightedge weight の合計になるような、エッジ用の追加の乗数を設定します。
primary_shinyness
スペキュラ指数です。値が大きいほど小さく鋭いスペキュラ ハイライト(エッジをソフトにした phong モデルの変形)が作成されます。
secondary_spec_color
secondary_spec_weight

secondary_edge_weight
secondary_shinyness
primary_ で始まるパラメータとまったく同じように動作しする、鏡面反射性のある 2 つ目のレイヤー用のパラメータです。スキンの場合は、最初のスペキュラレイヤの光沢を非常に低く(3.0 から 8.0)、かつレベルも低く(0.1 から 0.3)しておき、エッジ ウェイトは高く(0.5 から 1.0)、わずかに青みがかったカラーにしておき、2 つ目のレイヤでは光沢を高く(20 から 100)、レベルは中程度(0.3 から 0.6)にし、エッジの強調は行わない、というのが一般的な指針です。鏡面反射性チャンネルにマッピングを追加すると、リアルさが大幅に向上します。
reflect_weight
reflect_edge_weight
反射のウェイトとエッジ ウェイトです。この値がゼロ以外である場合は、実際の(光沢のある)反射が追加されます。
reflect_shinyness
光沢のある反射の光沢の値です。0.0 の場合は、標準のレイトレースされたミラー反射が使用されますが、ゼロ以外の値の場合は光沢のある反射が生成され、レンダリング時間が増加します。
reflect_environment_only
true の場合は現在の環境マップが反射用にサンプリングされ、実際のレイはトレーシングされません。
environment
ローカル環境シェーダを指定します。
mode
ライト リスト で使用するモード セレクタです。
lights
直接ライトのリストです。

ディスプレイスメントによる高速スキン

このフェノメナは misss_fast_skin_phen とまったく同じものですが、ディスプレイスメント マッピングをサポートしています。個別のフェノメナとして提供されている理由は、ディスプレイスメントを使用したフェノメナは常にオブジェクトをディスプレイスしようと試みるためです。

misss_fast_skin_phen_d
    material "misss_fast_skin_phen_d" (
        color texture   "lightmap",
        color texture   "depthmap",
        string          "lightmap_group",
        scalar          "lightmap_size",
        integer         "samples",
        shader          "displace",
        shader          "bump",
        struct "d" {
            ...
        }
        integer         "mode",
        array light     "lights")
displace
サーフェスをディスプレイスするシェーダです。

その他のパラメータはすべて misss_fast_skin_phen と同じです。

Copyright (©) 1986-2008 by mental images GmbH