OSDN Git Service

new project
[mindgames/Mindgames_main.git] / Mindgames / Library / PackageCache / com.unity.render-pipelines.high-definition@6.9.0-preview / Editor / VFXGraph / VFXHDRPSubOutput.cs
1 using System.Collections.Generic;
2 using System.Linq;
3 using UnityEngine;
4 using UnityEngine.Experimental.Rendering.HDPipeline;
5
6 using static UnityEditor.VFX.VFXAbstractRenderedOutput;
7 using static UnityEngine.Experimental.Rendering.HDPipeline.HDRenderQueue;
8
9 namespace UnityEditor.VFX
10 {
11     class VFXHDRPSubOutput : VFXSRPSubOutput
12     {
13         [VFXSetting(VFXSettingAttribute.VisibleFlags.InInspector), Header("HDRP")]
14         public OpaqueRenderQueue opaqueRenderQueue = OpaqueRenderQueue.Default;
15
16         [VFXSetting(VFXSettingAttribute.VisibleFlags.InInspector), Header("HDRP")]
17         public TransparentRenderQueue transparentRenderQueue = TransparentRenderQueue.Default;
18
19         // Caps
20         public override bool supportsExposure { get { return true; } }
21
22         protected override IEnumerable<string> filteredOutSettings
23         {
24             get
25             {
26                 if (owner.isBlendModeOpaque)
27                     yield return "transparentRenderQueue";
28                 else
29                     yield return "opaqueRenderQueue";
30             }
31         }
32
33         public override string GetBlendModeStr()
34         {
35             bool isOffscreen = transparentRenderQueue == TransparentRenderQueue.LowResolution || transparentRenderQueue == TransparentRenderQueue.AfterPostProcessing;
36             bool isLit = owner is VFXAbstractParticleHDRPLitOutput;
37             switch (owner.blendMode)
38             {
39                 case BlendMode.Additive:
40                     return string.Format("Blend {0} One {1}", isLit ? "One" : "SrcAlpha", isOffscreen ? ", Zero One" : "");
41                 case BlendMode.Alpha:
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
48                 default:
49                     return string.Empty;
50             }
51         }
52
53         public override string GetRenderQueueStr()
54         {
55             RenderQueueType renderQueueType;
56             string prefix = string.Empty;
57             if (owner.isBlendModeOpaque)
58             {
59                 prefix = "Geometry";
60                 renderQueueType = HDRenderQueue.ConvertFromOpaqueRenderQueue(opaqueRenderQueue);
61             }
62             else
63             {
64                 prefix = "Transparent";
65                 renderQueueType = HDRenderQueue.ConvertFromTransparentRenderQueue(transparentRenderQueue);
66             }
67
68             int renderQueue = HDRenderQueue.ChangeType(renderQueueType, 0, owner.blendMode == BlendMode.Masked) - (int)(owner.isBlendModeOpaque ? Priority.Opaque : Priority.Transparent);
69             return prefix + renderQueue.ToString("+#;-#;+0");
70         }
71     }
72 }