1 using System.Collections.Generic;
4 using UnityEngine.Experimental.Rendering.HDPipeline;
6 using static UnityEditor.VFX.VFXAbstractRenderedOutput;
7 using static UnityEngine.Experimental.Rendering.HDPipeline.HDRenderQueue;
9 namespace UnityEditor.VFX
11 class VFXHDRPSubOutput : VFXSRPSubOutput
13 [VFXSetting(VFXSettingAttribute.VisibleFlags.InInspector), Header("HDRP")]
14 public OpaqueRenderQueue opaqueRenderQueue = OpaqueRenderQueue.Default;
16 [VFXSetting(VFXSettingAttribute.VisibleFlags.InInspector), Header("HDRP")]
17 public TransparentRenderQueue transparentRenderQueue = TransparentRenderQueue.Default;
20 public override bool supportsExposure { get { return true; } }
22 protected override IEnumerable<string> filteredOutSettings
26 if (owner.isBlendModeOpaque)
27 yield return "transparentRenderQueue";
29 yield return "opaqueRenderQueue";
33 public override string GetBlendModeStr()
35 bool isOffscreen = transparentRenderQueue == TransparentRenderQueue.LowResolution || transparentRenderQueue == TransparentRenderQueue.AfterPostProcessing;
36 bool isLit = owner is VFXAbstractParticleHDRPLitOutput;
37 switch (owner.blendMode)
39 case BlendMode.Additive:
40 return string.Format("Blend {0} One {1}", isLit ? "One" : "SrcAlpha", isOffscreen ? ", Zero One" : "");
42 return string.Format("Blend {0} OneMinusSrcAlpha {1}", isLit ? "One" : "SrcAlpha", isOffscreen ? ", Zero OneMinusSrcAlpha" : "");
43 case BlendMode.AlphaPremultiplied:
44 return string.Format("Blend One OneMinusSrcAlpha {0}", isOffscreen ? ", Zero OneMinusSrcAlpha" : "");
45 case BlendMode.Opaque:
46 case BlendMode.Masked:
47 return opaqueRenderQueue == OpaqueRenderQueue.AfterPostProcessing ? "Blend One Zero, Zero Zero" : string.Empty; // Blend on for opaque in after post-process for correct compositing TODO Handle that in shader templates directly
53 public override string GetRenderQueueStr()
55 RenderQueueType renderQueueType;
56 string prefix = string.Empty;
57 if (owner.isBlendModeOpaque)
60 renderQueueType = HDRenderQueue.ConvertFromOpaqueRenderQueue(opaqueRenderQueue);
64 prefix = "Transparent";
65 renderQueueType = HDRenderQueue.ConvertFromTransparentRenderQueue(transparentRenderQueue);
68 int renderQueue = HDRenderQueue.ChangeType(renderQueueType, 0, owner.blendMode == BlendMode.Masked) - (int)(owner.isBlendModeOpaque ? Priority.Opaque : Priority.Transparent);
69 return prefix + renderQueue.ToString("+#;-#;+0");