しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Unity URP で Sprite の向きを無視してカスタムライティングする

※ これは 2023/03/24 時点の Unity 2022.2.12f1 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回は URP 3D で Sprite に Point Light のライティングをあててみたが・・・

Point Light の前に来ると効果が消える

Sprite には向きがあるので、Point Light の前に持ってくるとライティングの効果が消えてしまう!

これを何とかしたい

やることはお手製の Sprite 用 Shader Graph の変更

法線を無視して距離によって追加ライティングを反映させる

青枠のノードが追加した部分で、Position (World)Custom Function につなぎ、Blend (Screen) で明るさを合成して Base Color に出力するようにした

Custom Function は Input を Position (Vector3)、Output を Color (Vector3) にして名前を GetDistanceAdditionalLight に設定

Body には下記のコードを記述

#ifdef SHADERGRAPH_PREVIEW
    Color = half3(0.5, 0.5, 0.5);
#else

    uint lightCount = GetAdditionalLightsCount();
    for (uint lightIndex = 0u; lightIndex < lightCount; ++lightIndex)
    {
        Light light = GetAdditionalLight(lightIndex, Position);
        half3 lightColor  = light.color  * saturate(light.distanceAttenuation) * light.shadowAttenuation;
        Color +=  lightColor;
    }

#endif

これで Point Light の明るさを調整後さっきの操作をもう一回

距離に応じてライティング

今度は前に出ても距離に応じてライティングが当たるようになった