はじめに
今回はShaderGraphでポイントライト等のライトの使用方法を紹介します
環境は Unity 2021.3.25f1です
Universal Render Pipeline を使用しています。
DirectionalLightを使用する場合は下記を参考すると良いです
ノード作成
現状はライトを取得するノードがないためCustom functionノードでライトを取得する処理を記述します。
処理の詳細です。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