-
-
Save simonbroggi/672b979ca37b01db752e0087b26315ab to your computer and use it in GitHub Desktop.
#ifndef MAINLIGHT_INCLUDED | |
#define MAINLIGHT_INCLUDED | |
void GetMainLightData_float(out half3 direction, out half3 color, out half distanceAttenuation, out half shadowAttenuation) | |
{ | |
#ifdef SHADERGRAPH_PREVIEW | |
// In Shader Graph Preview we will assume a default light direction and white color | |
direction = half3(-0.3, -0.8, 0.6); | |
color = half3(1, 1, 1); | |
distanceAttenuation = 1.0; | |
shadowAttenuation = 1.0; | |
#else | |
// Universal Render Pipeline | |
#if defined(UNIVERSAL_LIGHTING_INCLUDED) | |
// GetMainLight defined in Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl | |
Light mainLight = GetMainLight(); | |
direction = -mainLight.direction; | |
color = mainLight.color; | |
distanceAttenuation = mainLight.distanceAttenuation; | |
shadowAttenuation = mainLight.shadowAttenuation; | |
#elif defined(HD_LIGHTING_INCLUDED) | |
// ToDo: make it work for HDRP (check define above) | |
// Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightDefinition.cs.hlsl | |
// if (_DirectionalLightCount > 0) | |
// { | |
// DirectionalLightData light = _DirectionalLightDatas[0]; | |
// lightDir = -light.forward.xyz; | |
// color = light.color; | |
// ...... | |
#endif | |
#endif | |
} | |
#endif |
Hello, did you make any progress on getting this to work with HDRP?
Hello, did you make any progress on getting this to work with HDRP?
No, I haven't looked at it since. But it shouldn't be to hard, I think the comments get point in the right direction..
The problem might be that there is no main light in HDRP. You might need to just take the brightest directional light, or define your main light somewhere.
Hello, did you make any progress on getting this to work with HDRP?
You can hack around the HDRP issue by creating a component to sample your Sun Light. Once you have your component just sample the properties you want and set global variables. Then, in your shaders create the global properties that the component can write to.
Look up the Shader.SetGlobal* methods for setting those global property types.
I have this setup in my project and it works like a charm.
Is there any way to get the main light intensity also?
Hi, I'm getting this error. Do you have any idea why?
Shader error in 'hidden/preview/MainLightNodeCustomFunction_034dc8d0349e4af2abb4da742cca9b07': undeclared identifier 'MainLightNode_float' at line 155 (on d3d11)
Hi, I'm getting this error. Do you have any idea why?
Shader error in 'hidden/preview/MainLightNodeCustomFunction_034dc8d0349e4af2abb4da742cca9b07': undeclared identifier 'MainLightNode_float' at line 155 (on d3d11)
Be sure you set custom function node right.
_half
postfix is important and it should match Precision
in custom function node settings.
Add the file to your Assets folder, then create a custom function node in Shader Graph like such: