123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- #if VFX_GRAPH_10_0_0_OR_NEWER
- using System;
- using System.Linq;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Rendering;
- using UnityEngine.UIElements;
- using UnityEditor.UIElements;
- using UnityEditor.ShaderGraph;
- using UnityEditor.ShaderGraph.Drawing;
- using UnityEditor.Graphing.Util;
- using UnityEditor.ShaderGraph.Internal;
- using UnityEditor.ShaderGraph.Legacy;
-
- namespace UnityEditor.ShaderGraph
- {
- sealed class VFXTarget : Target, ILegacyTarget, IMaySupportVFX, IMayObsolete
- {
- public const string kVisualEffectTargetListedKey = "VFX.VisualEffectTargetListed";
-
- [SerializeField]
- bool m_Lit;
-
- [SerializeField]
- bool m_AlphaTest = false;
-
- public VFXTarget()
- {
- displayName = "Visual Effect (deprecated)";
- }
-
- public bool lit
- {
- get => m_Lit;
- set => m_Lit = value;
- }
-
- public bool alphaTest
- {
- get => m_AlphaTest;
- set => m_AlphaTest = value;
- }
-
- public override bool IsActive() => true;
-
- public override void Setup(ref TargetSetupContext context)
- {
- }
-
- public override void GetFields(ref TargetFieldContext context)
- {
- }
-
- public override bool IsNodeAllowedByTarget(Type nodeType)
- {
- return base.IsNodeAllowedByTarget(nodeType);
- }
-
- public override void GetActiveBlocks(ref TargetActiveBlockContext context)
- {
- context.AddBlock(BlockFields.SurfaceDescription.BaseColor);
- context.AddBlock(BlockFields.SurfaceDescription.Alpha);
- context.AddBlock(BlockFields.SurfaceDescription.Metallic, lit);
- context.AddBlock(BlockFields.SurfaceDescription.Smoothness, lit);
- context.AddBlock(BlockFields.SurfaceDescription.NormalTS, lit);
- context.AddBlock(BlockFields.SurfaceDescription.Emission);
- context.AddBlock(BlockFields.SurfaceDescription.AlphaClipThreshold, alphaTest);
- }
-
- enum MaterialMode
- {
- Unlit,
- Lit
- }
-
- public override void GetPropertiesGUI(ref TargetPropertyGUIContext context, Action onChange, Action<String> registerUndo)
- {
- context.AddProperty("Material", new EnumField(MaterialMode.Unlit) { value = m_Lit ? MaterialMode.Lit : MaterialMode.Unlit }, evt =>
- {
- var newLit = (MaterialMode)evt.newValue == MaterialMode.Lit;
- if (Equals(m_Lit, newLit))
- return;
-
- registerUndo("Change Material Lit");
- m_Lit = newLit;
- onChange();
- });
-
- context.AddProperty("Alpha Clipping", new Toggle() { value = m_AlphaTest }, (evt) =>
- {
- if (Equals(m_AlphaTest, evt.newValue))
- return;
-
- registerUndo("Change Alpha Test");
- m_AlphaTest = evt.newValue;
- onChange();
- });
- }
-
- public static Dictionary<BlockFieldDescriptor, int> s_BlockMap = new Dictionary<BlockFieldDescriptor, int>()
- {
- { BlockFields.SurfaceDescription.BaseColor, ShaderGraphVfxAsset.ColorSlotId },
- { BlockFields.SurfaceDescription.Metallic, ShaderGraphVfxAsset.MetallicSlotId },
- { BlockFields.SurfaceDescription.Smoothness, ShaderGraphVfxAsset.SmoothnessSlotId },
- { BlockFields.SurfaceDescription.NormalTS, ShaderGraphVfxAsset.NormalSlotId },
- { BlockFields.SurfaceDescription.Emission, ShaderGraphVfxAsset.EmissiveSlotId },
- { BlockFields.SurfaceDescription.Alpha, ShaderGraphVfxAsset.AlphaSlotId },
- { BlockFields.SurfaceDescription.AlphaClipThreshold, ShaderGraphVfxAsset.AlphaThresholdSlotId },
- };
-
- public bool TryUpgradeFromMasterNode(IMasterNode1 masterNode, out Dictionary<BlockFieldDescriptor, int> blockMap)
- {
- blockMap = null;
- if (!(masterNode is VisualEffectMasterNode1 vfxMasterNode))
- return false;
-
- lit = vfxMasterNode.m_Lit;
- alphaTest = vfxMasterNode.m_AlphaTest;
-
- blockMap = new Dictionary<BlockFieldDescriptor, int>();
- if (lit)
- {
- blockMap.Add(BlockFields.SurfaceDescription.BaseColor, ShaderGraphVfxAsset.BaseColorSlotId);
- blockMap.Add(BlockFields.SurfaceDescription.Metallic, ShaderGraphVfxAsset.MetallicSlotId);
- blockMap.Add(BlockFields.SurfaceDescription.Smoothness, ShaderGraphVfxAsset.SmoothnessSlotId);
- blockMap.Add(BlockFields.SurfaceDescription.NormalTS, ShaderGraphVfxAsset.NormalSlotId);
- blockMap.Add(BlockFields.SurfaceDescription.Emission, ShaderGraphVfxAsset.EmissiveSlotId);
- }
- else
- {
- blockMap.Add(BlockFields.SurfaceDescription.BaseColor, ShaderGraphVfxAsset.ColorSlotId);
- }
-
- blockMap.Add(BlockFields.SurfaceDescription.Alpha, ShaderGraphVfxAsset.AlphaSlotId);
-
- if (alphaTest)
- {
- blockMap.Add(BlockFields.SurfaceDescription.AlphaClipThreshold, ShaderGraphVfxAsset.AlphaThresholdSlotId);
- }
-
- return true;
- }
-
- public override bool WorksWithSRP(RenderPipelineAsset scriptableRenderPipeline)
- {
- return GraphicsSettings.currentRenderPipeline != null && scriptableRenderPipeline?.GetType() == GraphicsSettings.currentRenderPipeline.GetType();
- }
-
- public bool SupportsVFX() => true;
- public bool CanSupportVFX() => true;
- public bool IsObsolete()
- {
- var isObsolete = !EditorPrefs.GetBool(kVisualEffectTargetListedKey, false);
- return isObsolete;
- }
- }
- }
- #endif
|