-
-
Save ciro-unity/a55d73bcda93ca149cf7fd7e407f8812 to your computer and use it in GitHub Desktop.
//This API to create new nodes has been deprecated in early 2019. | |
//This means that if you are on a more recent version of Shader Graph and Universal Render Pipeline, you should use instead a pre-made node, which acts like a container that allows you to inject custom HLSL code into Shader Graph without the need to create a node from scratch. | |
//Please use the new node, not the C# API described here. | |
// | |
//You can find more details about that node in the Docs: https://docs.unity3d.com/Packages/com.unity.shadergraph@6.7/manual/Custom-Function-Node.html | |
//I also blogged about it here: https://connect.unity.com/p/adding-your-own-hlsl-code-to-shader-graph-the-custom-function-node | |
// | |
//If you are still on a very old version of Lightweight Render Pipeline (you shouldn't!!), you can still see the C# code for this custom node by rolling back to a previous version. |
Updated for 2018.3 and SG 4.6.0
https://gist.github.com/bitinn/72922a0a69f6d723d94e94f2fc21230e
Updated for 2018.3 and SG 4.6.0
https://gist.github.com/bitinn/72922a0a69f6d723d94e94f2fc21230e
Youur subscript doesn't accept the variable mainLight.distanceAttenuation in the shader, and it throws me an error when I plug the shader into the PBR Master node. Any idea of what could be wrong ? Thank you for your script though.
Updated for 2018.3 and SG 4.6.0
https://gist.github.com/bitinn/72922a0a69f6d723d94e94f2fc21230eYouur subscript doesn't accept the variable mainLight.distanceAttenuation in the shader, and it throws me an error when I plug the shader into the PBR Master node. Any idea of what could be wrong ? Thank you for your script though.
@ClemGG If you replace the Attenuation = mainLight.distanceAttenuation;
with Attenuation = mainLight.attenuation;
that should fix the error that it throws. Looks like it was a property name change in the Lighting.hlsl file that the script calls from.
Updated for 2018.3 and SG 4.6.0
https://gist.github.com/bitinn/72922a0a69f6d723d94e94f2fc21230eYouur subscript doesn't accept the variable mainLight.distanceAttenuation in the shader, and it throws me an error when I plug the shader into the PBR Master node. Any idea of what could be wrong ? Thank you for your script though.
Hey, I get a similar error inside of Unity, "Invalid subscript attenuation". It works inside Shader Graph but throws up a pink texture inside the Unity Editor (using LWRP). Making changes to the attenuation calls or removing them completely from the custom script didn't appear to have an effect
EDIT : After checking the changelog they made changes to how attenuation is stored. This will work out of the box with LightWeightRenderPipeline v 3.3.0, the change is in v 4.0
Bump, I made a version updated for SG+LWRP 4.9.0 and unity 2018.3 because they changed it again
https://gist.github.com/Derulan/23df32f5794c82cecbff911984116a66
Any advice to get this to work in HDRP?
I'm trying to use this in a scene where the main light rotates. I'm running into 2 problems. The first being that it doesn't seem to be able to detect where the light is actually aimed at. The second is that this only happens in my main scene, not in any test scenes. Visual Studio has a lot of things marked with red lines when I look at it but have no idea what to do. Any suggestions?
Anyone got this to work with the latest hdrp? Shader says 'unrecognized identifier 'Light' '
I have this: Attenuation = MainLightRealtimeShadow(shadowCoord);
But disconnecting the link from Attenuation doesn't seem to do anything at all, and my objects can't receive shadows. Ideas?
If anyone uses Unity 2019.1+ and can't use this custom node anymore, here's a replacement posted by @toothbrush on the Unity forums. Shader preview won't work, sadly, but it'll work in-game.
Updated version as custom node for Unity 2019.1 (tested on Shader graph 5.13)
Add a node of type Custom Function and point it to MainLightNode.hlsl.
Or alternatively, add it as a SubGraph.
@baukeJansen For some reason I can get this to work properly- the shader graph asset has a warning:
Output value 'ShadowPassVertex' is not completely initialized
Compiling Vertex program with UNITY_PASS_SHADOWCASTER INSTANCING_ON
Platform defines: UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_COLORSPACE_GAMMA UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_FULL_HDR
And the properties do not show up in the inspector for the graph or material that uses the graph.
Have tried with both subgraph and custom function.
This is my setup:https://imgur.com/a/zNZuBAg
I am very new to shader graph so am finding this a bit of a struggle. Unity 2019.1 and Shader graph 5.13 with LWRP 5.13
Thanks.
@ewencluley The warning message that you added shouldn't stop the shader from working.
Your setup also looks good although the preview of the MainLightNode is different for me.
If you open up the subgraph, does the custom node give any errors or warnings? (balloon with a # at the top right of the node)
@baukeJansen Seriously sorry, apparently I didn't realize there was a seperate Save Asset
button in the shader graph editor and that Ctrl+S
didnt actually save it. It is working now I have saved it. Thanks for the help anyway, good to have confirmation that I was almost there!
This does not work with,
Unity: 2019.1.1.f1
Shader Graph: 5.13.0
LWRP: 5.13.0
It casts a lot of errors, all stating "is inaccessible due to its protection level"
@dog199200 I assume you're referring to the original C# code posted by ciro-unity? Creating custom nodes from c# code in this way is no longer possible. Instead we now have Custom Function nodes which allow for adding hlsl directly.
The update i posted Should work on shader graph 5.13.
@baukeJansen Thank you! I completed overlooked that.
Updated version as custom node for Unity 2019.1 (tested on Shader graph 5.13)
Add a node of type Custom Function and point it to MainLightNode.hlsl.
Or alternatively, add it as a SubGraph.
@baukeJansen is there a version of this that works for the HDRP?
@TerabyteTim i haven't done anything with HDRP yet, so not from me. If there is a custom node function available in HDRP i would assume that the MainLightNode_float function still works.
It probably needs some adjustments in the imports thought (possibly removing them and just using '#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Lighting.hlsl" might work). If not you'll have to get the missing functions from the unity shaders source code.
Please post it if you manage to get it to work :)
After research it seems there's no way to get main light attenuation in the HDRP yet, so looks like we will have to wait for Unity to expose those settings to get any shaders working that rely on light data
@earthtojens First off, looking for an answer to your problem I accidently ran into this page which is honestly more hidden that it should be: Custom node documentation
(may come in handy).
Secondly, I'm assuming you didn't put 'Light' in the name field of the custom function as this would give a similar error.
Most likely one of the hlsl imports is referencing to the Light_float variable which is not included in your build for some reason. Looking through the imported shader source-code i couldn't find any reference to this variable thought. What happens if you create the variable manually at the start of the file float Light_Float;
?
Also restarting unity / re-saving the shader might be worth trying if you haven't already.
@baukeJansen I am only able to get your updated MainLightNode.hlsl to work with Shader Graph 5.10 using Unity 2019.1.2f1 (Windows)
If I use Shader Graph 5.13 I get these errors when restarting Unity and the PBR Master material is reported as not being compat with the render pipeline. If I revert Shader Graph back to 5.10 and restart Unity, everything works again.
Library\PackageCache\com.unity.render-pipelines.lightweight@5.7.2\Editor\ShaderGraph\LightWeightUnlitSubShader.cs(14,39): error CS0535: 'LightWeightUnlitSubShader' does not implement interface member 'ISubShader.GetPreviewPassIndex()'
Library\PackageCache\com.unity.render-pipelines.lightweight@5.7.2\Editor\ShaderGraph\LightWeightPBRSubShader.cs(15,37): error CS0535: 'LightWeightPBRSubShader' does not implement interface member 'ISubShader.GetPreviewPassIndex()'
ArgumentException: Can not deserialize (UnityEditor.Rendering.LWRP.LightWeightPBRSubShader), type is invalid
UnityEditor.Graphing.SerializationHelper.Deserialize[T] (UnityEditor.Graphing.SerializationHelper+JSONSerializedElement item, System.Collections.Generic.Dictionary`2[TKey,TValue] remapper, System.Object[] constructorArgs) (at Library/PackageCache/com.unity.shadergraph@5.13.0/Editor/Data/Util/SerializationHelper.cs:103)
UnityEditor.Graphing.SerializationHelper.Deserialize[T] (System.Collections.Generic.IEnumerable`1[T] list, System.Collections.Generic.Dictionary`2[TKey,TValue] remapper, System.Object[] constructorArgs) (at Library/PackageCache/com.unity.shadergraph@5.13.0/Editor/Data/Util/SerializationHelper.cs:153)
UnityEditor.EditorApplication:Internal_CallUpdateFunctions()
Funny thing is there are no changes between Shader Graph 5.10 and 5.13 in the Unity Shader Graph Change log that reveal to me what may be the issue
Thoughts?
@earthtojens I upgraded to unity 2019.1.3f1 using shader graph 5.13 and the shader seems to be working just fine for me. Honestly I can't make much out of the errors you're getting either.
The latest version of LightWeightUnlitSubShader.cs does implement the GetPreviewPassIndex function. Your package seems to refer to version 5.7.2 (although I'm not 100% if that's incorrect).
One thought i had was re-creating the shader while you're on 5.13 and removing the old one from your project. Other then that I'm pretty lost as well. You could try the shader graph section on the unity forums if these errors persist.
EDIT:: NO
(maybe not)
importing both lwrp and hdrp made the errors go away BUT im not sure how the shader will handle it
I can't understand. I recreated the whole graph (and custom nodes), used the latest custom node from @baukeJansen, and nothing works. The problem came from the very start from the normal blend node.
No errors, no warnings, most of the previews are broken (except fresnel, of course). I've tested it with both 5.13 and 5.16 LWRP+SG, no difference.
@earthtojens First off, looking for an answer to your problem I accidently ran into this page which is honestly more hidden that it should be:
Custom node documentation
(may come in handy).
Secondly, I'm assuming you didn't put 'Light' in the name field of the custom function as this would give a similar error.
Just make this a little clearer, if you call your function "Main Light" you'll get this error, where as "MainLight" is perfectly fine. I guess space in the custom function name is not allowed.
Hey everyone, as I reported in the gist itself, the API described here is really obsolete now. Please refer to this blog post for the explanation: https://connect.unity.com/p/adding-your-own-hlsl-code-to-shader-graph-the-custom-function-node
As such, I hid the code. You shouldn't use it if you're in a recent version of Universal Render Pipeline. Please use the Custom Function Node instead: https://docs.unity3d.com/Packages/com.unity.shadergraph@6.7/manual/Custom-Function-Node.html
I have the same issue