From 81f94a38729f7429bd698dc618faf7942a92fa48 Mon Sep 17 00:00:00 2001 From: z3y Date: Wed, 11 Sep 2024 22:17:46 +0200 Subject: [PATCH] pass branch node --- Editor/ShaderNode/Nodes/PassBranchNode.cs | 100 ++++++++++++++++++ .../ShaderNode/Nodes/PassBranchNode.cs.meta | 11 ++ Shaders/Custom Lighting.meta | 8 -- package.json | 4 +- 4 files changed, 113 insertions(+), 10 deletions(-) create mode 100644 Editor/ShaderNode/Nodes/PassBranchNode.cs create mode 100644 Editor/ShaderNode/Nodes/PassBranchNode.cs.meta delete mode 100644 Shaders/Custom Lighting.meta diff --git a/Editor/ShaderNode/Nodes/PassBranchNode.cs b/Editor/ShaderNode/Nodes/PassBranchNode.cs new file mode 100644 index 0000000..a635210 --- /dev/null +++ b/Editor/ShaderNode/Nodes/PassBranchNode.cs @@ -0,0 +1,100 @@ +using System; +using System.Text; +using Graphlit.Nodes; +using Graphlit.Nodes.PortType; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace Graphlit +{ + [NodeInfo("Utility/Pass Branch"), Serializable] + public class PassBranchNode : ShaderNode + { + const int TRUE = 1; + const int FALSE = 2; + const int OUT = 3; + + [Flags] + public enum Pass { + Forward = 1 << 0, + ForwardAdd = 1 << 1, + ShadowCaster = 1 << 2, + Meta = 1 << 3 + } + + string FlagsToString(GenerationMode generationMode) + { + if (generationMode == GenerationMode.Preview) + { + return passFlags.HasFlag(Pass.Forward) ? "1" :"0"; + } + var sb = new StringBuilder(); + bool or = false; + if (passFlags.HasFlag(Pass.Forward)) + { + or = true; + sb.Append("defined(UNITY_PASS_FORWARDBASE)"); + } + if (passFlags.HasFlag(Pass.ForwardAdd)) + { + if (or) { sb.Append(" || "); }; + or = true; + sb.Append("defined(UNITY_PASS_FORWARDADD)"); + } + if (passFlags.HasFlag(Pass.ShadowCaster)) + { + if (or) { sb.Append(" || "); }; + or = true; + sb.Append("defined(UNITY_PASS_SHADOWCASTER)"); + } + if (passFlags.HasFlag(Pass.Meta)) + { + if (or) { sb.Append(" || "); }; + or = true; + sb.Append("defined(UNITY_PASS_META)"); + } + + if (!or) + { + return "0"; + } + + return sb.ToString(); + } + + [SerializeField] public Pass passFlags; + + public override bool DisablePreview => true; + public override void Initialize() + { + AddPort(new(PortDirection.Input, new Float(1, true), TRUE, "True")); + AddPort(new(PortDirection.Input, new Float(1, true), FALSE, "False")); + AddPort(new(PortDirection.Output, new Float(1, true), OUT)); + + var e = new EnumFlagsField("", passFlags); + e.RegisterValueChangedCallback((e) => + { + passFlags = (Pass)e.newValue; + GeneratePreviewForAffectedNodes(); + }); + extensionContainer.Add(e); + } + + + protected override void Generate(NodeVisitor visitor) + { + ChangeDimensions(OUT, ImplicitTruncation(TRUE, FALSE).dimensions); + SetVariable(OUT, UniqueVariable); + + var data = PortData[OUT]; + var type = (Float)data.Type; + visitor.AppendLine($"{PrecisionString(type.dimensions)} {data.Name};"); + visitor.AppendLine($"#if {FlagsToString(visitor.GenerationMode)}"); + visitor.AppendLine($"{data.Name} = {PortData[TRUE].Name};"); + visitor.AppendLine("#else"); + visitor.AppendLine($"{data.Name} = {PortData[FALSE].Name};"); + visitor.AppendLine("#endif"); + } + } +} \ No newline at end of file diff --git a/Editor/ShaderNode/Nodes/PassBranchNode.cs.meta b/Editor/ShaderNode/Nodes/PassBranchNode.cs.meta new file mode 100644 index 0000000..c0e5d52 --- /dev/null +++ b/Editor/ShaderNode/Nodes/PassBranchNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23cd6914e40350245bc93e83e0cdb34a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Custom Lighting.meta b/Shaders/Custom Lighting.meta deleted file mode 100644 index 722ede8..0000000 --- a/Shaders/Custom Lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 35e082ad3d86106468b1bf36b1c9db82 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/package.json b/package.json index 3c876e8..2820f8a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.z3y.graphlit", - "version": "1.0.2", + "version": "1.0.3", "unity": "2022.3", "displayName": "Graphlit", "hideInEditor": false, @@ -16,4 +16,4 @@ "com.unity.render-pipelines.core": "14.0.8" }, "description": "A Node shader editor" -} +} \ No newline at end of file