イメージ ベースド ライティング

プラグイン ノードをイメージ ライトとして分類する

プラグイン ノードを登録する際、ルートとともに分類を指定することにより、環境に対する内部ハードウェア ライティング評価の使用を選択することが可能です。これにより、プラグイン ノードが Maya の内部 IBL (イメージ)ライトのように動作することが可能になります。

/drawdb/light/image

たとえば、次のようになります。

/drawdb/light/image/environment

指定された場合は、既定の 3D UI 描画実装が使用されます。明示的なオーバーライド分類が指定された場合は、描画にそのオーバーライドが使用されます。

複数のノードがイメージ分類を使用する場合、最初のノードのみが内部ライティングに影響するものとして考慮されます。

Arnold for Maya の aiSkyDomeLight ライトはこの分類を使用します。したがって、環境ライティングをサポートします。

評価

現在、内部ハードウェア ライティング評価は、Maya のノードに定義されている場合に、次のアトリビュートをサポートします。

カラー入力を指定すると、シェーダで使用する放射環境マップスペキュラ環境マップという 2 つのマップが内部的に生成されます。

スペキュラ マップは、異なるレベルの鏡面性のサンプルが含まれた Z スライスを持つ 3D マップです。

以下に例を示します。これらのイメージは 8 レベルのサンプリングで生成された 3D マップを表現しています。

このイメージは、生成された放射 2D テクスチャを表現しています。

このイメージは、入力環境テクスチャを表現しています。

このイメージは、イメージ ライトとして分類されるプラグイン ノードで指定されているように、サンプルの環境マップを使用して Blinn シェーダを表現しています。

API アクセス

シェーダ フラグメントを作成するとき、次の名前を使用して入力シェーダ プロパティを指定することにより、環境データに暗黙的にアクセスできます。

たとえば、最終カラーを計算するために IrradianceEnv と SpecularEnv を取得するコンバイナは次の通りです。

<fragment uiName="myShaderCombiner" name="myShaderCombiner" type="plumbing" class="ShadeFragment" version="1.0" feature_level="0">
    <description><![CDATA[Combines inputs from shader fragments.]]></description>
    <properties>
        <float3 name="color" />
        <float3 name="specularColor" />
        <float name="Ks" />
        <float name="Kd" />
        <float3 name="IrradianceEnv" />
        <float3 name="SpecularEnv" />
    </properties>
    <values>
        <float3 name="color" value="1.0 1.0 1.0" />
        <float3 name="specularColor" value="0.0 0.0 0.0" />
        <float name="Ks" value=”0.2”/>
        <float name="Kd" value=“0.8”/>
        <float3 name="IrradianceEnv" value="0.0 0.0 0.0" />
        <float3 name="SpecularEnv" value="0.0 0.0 0.0" />
    </values>
    <outputs>
        <struct name="myShaderCombiner" struct_name="mayaSurfaceShaderOutput" />
    </outputs>
    <implementation>
        // Sample implementation using environment inputs
        <implementation render="OGSRenderer" language="Cg" lang_version="2.1">
            <function_name val="myShaderCombiner" />
            <source>
                <![CDATA[
                mayaSurfaceShaderOutput myShaderCombiner(
                float3 color,
                float3 specularColor,
                float Ks,
                float Kd,
                float3 IrradianceEnv,
                float3 SpecularEnv)
{
    mayaSurfaceShaderOutput result;
    float3 diffuse = color * IrradianceEnv * Kd;
    float3 specular = specularColor * SpecularEnv * Ks;

    result.outColor = diffuse + specular;
    result.outTransparency = float3(0.0f, 0.0f, 0.0f);
    result.outGlowColor = float3(0.0f, 0.0f, 0.0f);
    result.outMatteOpacity = float3(-1.0e+06f, -1.0e+06f, -1.0e+06f);
    result.outSurfaceFinal = float4(result.outColor, 1.0f);
    return result;
}

Maya のシーンにイメージ ベースのライトが存在する場合は、vImplicitiewport とバッチ レンダリングに対して暗黙的バインドが実行されます。ハードウェア レンダラが選択されている場合は、ハイパーシェード(Hypershade)内のマテリアル ビューア(Material Viewer)に対して暗黙的環境ライティングのバインドが実行されます。ハードウェア スウォッチ レンダリングはどの環境ライティングもバインドしません。

MDrawContext::getInternalTexture() インタフェースの kIrradianceEnvironmentkSpecularEnvironment の enum により、内部放射とスペキュラ環境マップに対する暗黙的アクセスが許可されます。

テクスチャは、描画コンテキストが使用可能なときにアクティブな最初のイメージ ライトに対して使用できます。