My shader graph with custom functions throws errors & warnings

Shader error in 'Shader Graphs/hidden/preview/Multiply_c1863e04608f4df39a32c1d12bc1816c': '_AdditionalLightsPosition': implicit array missing initial value at /Projects/UNITY/ProjectCamping/Library/PackageCache/com.unity.render-pipelines.universal@14.0.10/ShaderLibrary/Input.hlsl(151) (on d3d11)

Compiling Subshader: 0, Pass: <Unnamed Pass 0>, Fragment program with <no keywords>
Platform defines: SHADER_API_DESKTOP UNITY_ENABLE_DETAIL_NORMALMAP UNITY_ENABLE_REFLECTION_BUFFERS UNITY_LIGHTMAP_FULL_HDR UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BLENDING UNITY_SPECCUBE_BOX_PROJECTION UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS
Disabled keywords: SHADER_API_GLES30 UNITY_ASTC_NORMALMAP_ENCODING UNITY_COLORSPACE_GAMMA UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS UNITY_HARDWARE_TIER1 UNITY_HARDWARE_TIER2 UNITY_HARDWARE_TIER3 UNITY_LIGHTMAP_DLDR_ENCODING UNITY_LIGHTMAP_RGBM_ENCODING UNITY_METAL_SHADOWS_USE_POINT_FILTERING UNITY_NO_DXT5nm UNITY_NO_FULL_STANDARD_SHADER UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 UNITY_PBS_USE_BRDF3 UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION UNITY_UNIFIED_SHADER_PRECISION_MODEL UNITY_VIRTUAL_TEXTURING

Shader error in 'Shader Graphs/hidden/preview/Multiply_c1863e04608f4df39a32c1d12bc1816c': undeclared identifier 'MAX_VISIBLE_LIGHT_COUNT_DESKTOP' at /Projects/UNITY/ProjectCamping/Library/PackageCache/com.unity.render-pipelines.universal@14.0.10/ShaderLibrary/Input.hlsl(151) (on d3d11)

Compiling Subshader: 0, Pass: <Unnamed Pass 0>, Fragment program with <no keywords>
Platform defines: SHADER_API_DESKTOP UNITY_ENABLE_DETAIL_NORMALMAP UNITY_ENABLE_REFLECTION_BUFFERS UNITY_LIGHTMAP_FULL_HDR UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BLENDING UNITY_SPECCUBE_BOX_PROJECTION UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS
Disabled keywords: SHADER_API_GLES30 UNITY_ASTC_NORMALMAP_ENCODING UNITY_COLORSPACE_GAMMA UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS UNITY_HARDWARE_TIER1 UNITY_HARDWARE_TIER2 UNITY_HARDWARE_TIER3 UNITY_LIGHTMAP_DLDR_ENCODING UNITY_LIGHTMAP_RGBM_ENCODING UNITY_METAL_SHADOWS_USE_POINT_FILTERING UNITY_NO_DXT5nm UNITY_NO_FULL_STANDARD_SHADER UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 UNITY_PBS_USE_BRDF3 UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION UNITY_UNIFIED_SHADER_PRECISION_MODEL UNITY_VIRTUAL_TEXTURING

Shader warning in 'Shader Graphs/hidden/preview/Multiply_c1863e04608f4df39a32c1d12bc1816c': 'UNITY_MATRIX_I_P': macro redefinition. Previous definition found at C:/Projects/UNITY/ProjectCamping/Library/PackageCache/com.unity.shadergraph@14.0.10/ShaderGraphLibrary/ShaderVariablesMatrixDefsLegacyUnity.hlsl:13. at /Projects/UNITY/ProjectCamping/Library/PackageCache/com.unity.render-pipelines.universal@14.0.10/ShaderLibrary/Input.hlsl(193)

Shader warning in 'Shader Graphs/hidden/preview/Multiply_c1863e04608f4df39a32c1d12bc1816c': 'UNITY_MATRIX_I_VP': macro redefinition. Previous definition found at C:/Projects/UNITY/ProjectCamping/Library/PackageCache/com.unity.shadergraph@14.0.10/ShaderGraphLibrary/ShaderVariablesMatrixDefsLegacyUnity.hlsl:15. at /Projects/UNITY/ProjectCamping/Library/PackageCache/com.unity.render-pipelines.universal@14.0.10/ShaderLibrary/Input.hlsl(195)

Shader error in 'Shader Graphs/hidden/preview/trowbridgeReitzAnisotropicNDFCustomFunction_24f8a070c6374375b4c9ff181831dd8b': variable '_trowbridgeReitzAnisotropicNDFCustomFunction_24f8a070c6374375b4c9ff181831dd8b_ANDF_5_Float' used without having been completely initialized at line 208 (on d3d11)

Compiling Subshader: 0, Pass: <Unnamed Pass 0>, Fragment program with <no keywords>
Platform defines: SHADER_API_DESKTOP UNITY_ENABLE_DETAIL_NORMALMAP UNITY_ENABLE_REFLECTION_BUFFERS UNITY_LIGHTMAP_FULL_HDR UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BLENDING UNITY_SPECCUBE_BOX_PROJECTION UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS
Disabled keywords: SHADER_API_GLES30 UNITY_ASTC_NORMALMAP_ENCODING UNITY_COLORSPACE_GAMMA UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS UNITY_HARDWARE_TIER1 UNITY_HARDWARE_TIER2 UNITY_HARDWARE_TIER3 UNITY_LIGHTMAP_DLDR_ENCODING UNITY_LIGHTMAP_RGBM_ENCODING UNITY_METAL_SHADOWS_USE_POINT_FILTERING UNITY_NO_DXT5nm UNITY_NO_FULL_STANDARD_SHADER UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 UNITY_PBS_USE_BRDF3 UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION UNITY_UNIFIED_SHADER_PRECISION_MODEL UNITY_VIRTUAL_TEXTURING

Shader warning in 'Shader Graphs/hidden/preview/trowbridgeReitzAnisotropicNDFCustomFunction_24f8a070c6374375b4c9ff181831dd8b': value cannot be infinity, isfinite() may not be necessary.  /Gis may force isfinite() to be performed at line 208 (on d3d11)

Compiling Subshader: 0, Pass: <Unnamed Pass 0>, Fragment program with <no keywords>
Platform defines: SHADER_API_DESKTOP UNITY_ENABLE_DETAIL_NORMALMAP UNITY_ENABLE_REFLECTION_BUFFERS UNITY_LIGHTMAP_FULL_HDR UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BLENDING UNITY_SPECCUBE_BOX_PROJECTION UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS
Disabled keywords: SHADER_API_GLES30 UNITY_ASTC_NORMALMAP_ENCODING UNITY_COLORSPACE_GAMMA UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS UNITY_HARDWARE_TIER1 UNITY_HARDWARE_TIER2 UNITY_HARDWARE_TIER3 UNITY_LIGHTMAP_DLDR_ENCODING UNITY_LIGHTMAP_RGBM_ENCODING UNITY_METAL_SHADOWS_USE_POINT_FILTERING UNITY_NO_DXT5nm UNITY_NO_FULL_STANDARD_SHADER UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 UNITY_PBS_USE_BRDF3 UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION UNITY_UNIFIED_SHADER_PRECISION_MODEL UNITY_VIRTUAL_TEXTURING

here is my custom function code:

#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl"

void GetMainLight_float(out float4 Position, out float4 Colors)
{
    Position = _MainLightPosition.xyzw;
    Colors = _MainLightColor.rgba;
}

void GetIfLighting_float(float4 Input, out float4 Output)
{
    if (_MainLightPosition.w == 1)
	{
		Output = float4(0.0, 0.0, 0.0, 0.0);
	}
	else
	{
		Output = Input;
	}
}

void GetPBRNormal_float(Matrix3x3 TangentMatrix, float3 SampledNormalMap, out float3 Normal)
{
	Normal = mul(TangentMatrix, SampledNormalMap.xyz * 2 - 1);
}

void FPower5_float(float A, out float B)
{
    B = pow(1 - A, 5);
}

// Diffuse distribution functions

void lambertDiffuse_float(float3 albedo, out float3 lambert)
{
    return albedo / PI;
}

// Fresnel functions

void fresnel1_float(float3 F0, float NdotV, out float3 fresnel)
{
    return F0 + (1 - F0) * fPow5(NdotV);
}

void fresnel2_float(float3 F0, float NdotV, float Roughness, out float3 fresnel)
{
    return F0 + (max(1.0 - Roughness, F0) - F0) * fPow5(NdotV);
}

void fresnelDisney_float(float HdotL, float NdotL, float NdotV, float Roughness, out float3 disneyFresnel)
{
    float k = 0.5 + 2 * Roughness * sqrt(HdotL);
    float firstTerm = (k - 1) * fPow5(NdotV) + 1;
    float secondTerm = (k - 1) * fPow5(NdotL) + 1;
    return firstTerm * secondTerm;
}

void F0_float(float Ior, out float F)
{
    F = pow((1.0 - Ior) / (1.0 + Ior), 2);
}

// Normal distribution functions

void trowbridgeReitzNDF_float(float NdotH, float Roughness, out float RNDF)
{
    float alpha = Roughness * Roughness;
    float alpha2 = alpha * alpha;
    float NdotH2 = NdotH * NdotH;
    float denominator = PI * pow((alpha2 - 1) * NdotH2 + 1, 2);
    RNDF = alpha2 / denominator;
}

void trowbridgeReitzAnisotropicNDF_float(float NdotH, float Roughness, float Anisotropy, float HdotT, float HdotB, out float ANDF)
{
    float aspect = sqrt(1.0 - 0.9 * Anisotropy);
    float alpha = Roughness * Roughness;

    float roughT = alpha / aspect;
    float roughB = alpha * aspect;

    float alpha2 = alpha * alpha;
    float NdotH2 = NdotH * NdotH;
    float HdotT2 = HdotT * HdotT;
    float HdotB2 = HdotB * HdotB;

    float denominator = PI * roughT * roughB * pow(HdotT2 / (roughT * roughT) + HdotB2 / (roughB * roughB) + NdotH2, 2);
    ANDF = 1 / denominator;
}

// Geometric attenuation functions

void cookTorranceGAF1_float(float NdotH, float NdotV, float HdotV, float NdotL, float TGAF)
{
    float firstTerm = 2 * NdotH * NdotV / HdotV;
    float secondTerm = 2 * NdotH * NdotL / HdotV;
    TGAF = min(1, min(firstTerm, secondTerm));
}

void schlickBeckmannGAF2_float(float dotProduct, float Roughness, float TGAF)
{
    float alpha = Roughness * Roughness;
    float k = alpha * 0.797884560803;  // sqrt(2 / PI)
    TGAF = dotProduct / (dotProduct * (1 - k) + k);
}

// Helpers
void gammaCorrection_float(float3 v, float3 correction)
{
    correction = pow(v, 1.0 / 2.2);
}

void sRGB2Lin_float(float3 sRGB, float3 Linear)
{
    Linear = return pow(sRGB, 2.2);
}
1 Like

Experiencing the same issue when trying to include these in my Custom Function Node HLSL file:

#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
Shader error in 'Shader Graphs/hidden/preview/MyCustomFunction_44bcb93d40c243b6915652b1a29425a5': '_AdditionalLightsPosition': implicit array missing initial value at /MyProject/Library/PackageCache/com.unity.render-pipelines.universal@14.0.11/ShaderLibrary/Input.hlsl(151) (on d3d11)

Compiling Subshader: 0, Pass: <Unnamed Pass 0>, Vertex program with <no keywords>
Platform defines: SHADER_API_DESKTOP UNITY_ENABLE_DETAIL_NORMALMAP UNITY_ENABLE_REFLECTION_BUFFERS UNITY_LIGHTMAP_FULL_HDR UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BLENDING UNITY_SPECCUBE_BOX_PROJECTION UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS
Disabled keywords: SHADER_API_GLES30 UNITY_ASTC_NORMALMAP_ENCODING UNITY_COLORSPACE_GAMMA UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS UNITY_HARDWARE_TIER1 UNITY_HARDWARE_TIER2 UNITY_HARDWARE_TIER3 UNITY_LIGHTMAP_DLDR_ENCODING UNITY_LIGHTMAP_RGBM_ENCODING UNITY_METAL_SHADOWS_USE_POINT_FILTERING UNITY_NO_DXT5nm UNITY_NO_FULL_STANDARD_SHADER UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 UNITY_PBS_USE_BRDF3 UNITY_PRETRANSFORM_TO_DISPLAY_ORIENTATION UNITY_UNIFIED_SHADER_PRECISION_MODEL UNITY_VIRTUAL_TEXTURING

The same issue. Is there any solution please?

Still no solution for this issue???

I suspect that the shaders you’ve listed here render just fine in your game and in the main viewport? But you’re concerned about the errors anyway?

When Shader Graph is rendering the node previews and the main preview, we want those to render as fast as possible and not use extra system resources. For those reasons, the previews don’t have access to the data in variables such as _AdditionalLightsPosition. So the shaders will still work fine in the game. The engine is just telling you that the preview renders inside Shader Graph itself aren’t going to work as you expect.

If you want to get rid of the errors, when you use a custom function that references those types of variables, you need to set up a condition to handle the previews case.

So you’d do something like this:

#if !defined(SHADERGRAPH_PREVIEW)

void GetMainLight_float(out float4 Position, out float4 Colors)
{
    Position = _MainLightPosition.xyzw;
    Colors = _MainLightColor.rgba;
}

#else

void GetMainLight_float(out float4 Position, out float4 Colors)
{
    Position = float4(0,0,0,0);
    Colors = float4(0,0,0,0);
}

#endif

So in this example, we set up a version of the function that works correctly when in the context of the game and a second version that works when we’re rendering the previews in Shader Graph.