【Unity】ShaderGraphでポイントライト等のライトを使用する

はじめに

今回はShaderGraphでポイントライト等のライトの使用方法を紹介します

環境は Unity 2021.3.25f1です

Universal Render Pipeline を使用しています。

DirectionalLightを使用する場合は下記を参考すると良いです

redhologerbera.hatenablog.com

ノード作成

現状はライトを取得するノードがないためCustom functionノードでライトを取得する処理を記述します。

bravememo.hatenablog.com

処理の詳細です。Unityのバージョンによって#ifdef SHADERGRAPH_PREVIEWの記述が変わります。2020以前の場合は#if SHADERGRAPH_PREVIEWになります

#ifdef SHADERGRAPH_PREVIEW
    //ShaderGraph内の表示
  Color = half3(0.5, 0.5, 0.5);
#else

    uint lightCount = GetAdditionalLightsCount();
    for (uint lightIndex = 0u; lightIndex < lightCount; ++lightIndex)
    {
        //ライトの取得
        Light light = GetAdditionalLight(lightIndex, postion);
        //ライティングの計算
        half3 lightColor  = light.color  * (light.distanceAttenuation* light.shadowAttenuation);
        Color +=  LightingLambert(lightColor, light.direction, normal);
    }

#endif

完成

ポイントライトの影響を受けるシェーダーを作成することができました。

参考 https://blog.unity.com/ja/technology/custom-lighting-in-shader-graph-expanding-your-graphs-in-2019