@@ -14,10 +14,7 @@ class VFXHDRPSubOutput : VFXSRPSubOutput
1414 public OpaqueRenderQueue opaqueRenderQueue = OpaqueRenderQueue . Default ;
1515
1616 [ VFXSetting ( VFXSettingAttribute . VisibleFlags . InInspector ) , Header ( "HDRP" ) , Tooltip ( "Specifies when in the render queue particles are drawn. This is useful for drawing particles behind refractive surfaces like frosted glass, for performance gains by rendering them in low resolution, or to draw particles after post processing so they are not affected by effects such as Depth of Field." ) ]
17- public TransparentRenderQueue transparentRenderQueue = TransparentRenderQueue . Default ;
18-
19-
20-
17+ public TransparentRenderQueue transparentRenderQueue = TransparentRenderQueue . Default ;
2118
2219 // Caps
2320 public override bool supportsExposure { get { return true ; } }
@@ -37,17 +34,56 @@ protected override IEnumerable<string> filteredOutSettings
3734 {
3835 get
3936 {
40- if ( owner . isBlendModeOpaque )
37+ if ( ! supportsQueueSelection )
38+ {
39+ yield return "transparentRenderQueue" ;
40+ yield return "opaqueRenderQueue" ;
41+ }
42+ else if ( owner . isBlendModeOpaque )
4143 yield return "transparentRenderQueue" ;
4244 else
4345 yield return "opaqueRenderQueue" ;
4446 }
4547 }
4648
49+ protected override void OnSettingModified ( VFXSetting setting )
50+ {
51+ base . OnSettingModified ( setting ) ;
52+ // Reset to default if render queue is invalid
53+ if ( setting . name == "transparentRenderQueue" )
54+ {
55+ if ( ! supportsQueueSelection || ( isLit && transparentRenderQueue == TransparentRenderQueue . AfterPostProcessing ) )
56+ transparentRenderQueue = TransparentRenderQueue . Default ;
57+ }
58+ else if ( setting . name == "opaqueRenderQueue" )
59+ {
60+ if ( ! supportsQueueSelection || ( isLit && opaqueRenderQueue == OpaqueRenderQueue . AfterPostProcessing ) )
61+ opaqueRenderQueue = OpaqueRenderQueue . Default ;
62+ }
63+ }
64+
65+ protected bool isLit => owner is VFXAbstractParticleHDRPLitOutput ;
66+ protected bool supportsQueueSelection => ! ( owner is VFXAbstractDistortionOutput ) ; // TODO Should be made in a more abstract way
67+
68+ public override IEnumerable < int > GetFilteredOutEnumerators ( string name )
69+ {
70+ if ( isLit )
71+ {
72+ switch ( name )
73+ {
74+ case "opaqueRenderQueue" :
75+ yield return ( int ) OpaqueRenderQueue . AfterPostProcessing ;
76+ break ;
77+ case "transparentRenderQueue" :
78+ yield return ( int ) TransparentRenderQueue . AfterPostProcessing ;
79+ break ;
80+ }
81+ }
82+ }
83+
4784 public override string GetBlendModeStr ( )
4885 {
4986 bool isOffscreen = transparentRenderQueue == TransparentRenderQueue . LowResolution || transparentRenderQueue == TransparentRenderQueue . AfterPostProcessing ;
50- bool isLit = owner is VFXAbstractParticleHDRPLitOutput ;
5187 switch ( owner . blendMode )
5288 {
5389 case BlendMode . Additive :
0 commit comments