5
5
using UnityEngine . Experimental . Rendering ;
6
6
using UnityEngine . Rendering ;
7
7
using UnityEngine . Rendering . Universal ;
8
- #if UNITY_6000
8
+ #if UNITY_6000_0_OR_NEWER
9
9
using UnityEngine . Rendering . RenderGraphModule ;
10
10
#endif
11
11
@@ -21,58 +21,35 @@ class GaussianSplatURPFeature : ScriptableRendererFeature
21
21
class GSRenderPass : ScriptableRenderPass
22
22
{
23
23
const string GaussianSplatRTName = "_GaussianSplatRT" ;
24
+ #if ! UNITY_6000_0_OR_NEWER
24
25
RTHandle m_RenderTarget ;
25
- internal ScriptableRenderer m_Renderer = null ;
26
- internal CommandBuffer m_Cmb = null ;
26
+ internal ScriptableRenderer m_Renderer ;
27
+ internal CommandBuffer m_Cmb ;
28
+ #endif
27
29
28
30
public void Dispose ( )
29
31
{
32
+ #if ! UNITY_6000_0_OR_NEWER
30
33
m_RenderTarget ? . Release ( ) ;
34
+ #endif
31
35
}
32
36
33
- public override void OnCameraSetup ( CommandBuffer cmd , ref RenderingData renderingData )
34
- {
35
- RenderTextureDescriptor rtDesc = renderingData . cameraData . cameraTargetDescriptor ;
36
- rtDesc . depthBufferBits = 0 ;
37
- rtDesc . msaaSamples = 1 ;
38
- rtDesc . graphicsFormat = GraphicsFormat . R16G16B16A16_SFloat ;
39
- RenderingUtils . ReAllocateIfNeeded ( ref m_RenderTarget , rtDesc , FilterMode . Point , TextureWrapMode . Clamp , name : GaussianSplatRTName ) ;
40
- cmd . SetGlobalTexture ( m_RenderTarget . name , m_RenderTarget . nameID ) ;
41
-
42
- ConfigureTarget ( m_RenderTarget , m_Renderer . cameraDepthTargetHandle ) ;
43
- ConfigureClear ( ClearFlag . Color , new Color ( 0 , 0 , 0 , 0 ) ) ;
44
- }
45
-
46
- public override void Execute ( ScriptableRenderContext context , ref RenderingData renderingData )
47
- {
48
- if ( m_Cmb == null )
49
- return ;
50
-
51
- // add sorting, view calc and drawing commands for each splat object
52
- Material matComposite = GaussianSplatRenderSystem . instance . SortAndRenderSplats ( renderingData . cameraData . camera , m_Cmb ) ;
53
-
54
- // compose
55
- m_Cmb . BeginSample ( GaussianSplatRenderSystem . s_ProfCompose ) ;
56
- Blitter . BlitCameraTexture ( m_Cmb , m_RenderTarget , m_Renderer . cameraColorTargetHandle , RenderBufferLoadAction . Load , RenderBufferStoreAction . Store , matComposite , 0 ) ;
57
- m_Cmb . EndSample ( GaussianSplatRenderSystem . s_ProfCompose ) ;
58
- context . ExecuteCommandBuffer ( m_Cmb ) ;
59
- }
60
-
61
- #if UNITY_6000
62
- private const string ProfilerTag = "GaussianSplatRenderGraph" ;
63
- private static readonly ProfilingSampler s_profilingSampler = new ( ProfilerTag ) ;
64
- private static readonly int s_gaussianSplatRT = Shader . PropertyToID ( GaussianSplatRTName ) ;
37
+ #if UNITY_6000_0_OR_NEWER
38
+ const string ProfilerTag = "GaussianSplatRenderGraph" ;
39
+ static readonly ProfilingSampler s_profilingSampler = new ( ProfilerTag ) ;
40
+ static readonly int s_gaussianSplatRT = Shader . PropertyToID ( GaussianSplatRTName ) ;
65
41
66
- private class PassData
42
+ class PassData
67
43
{
68
44
internal UniversalCameraData CameraData ;
69
45
internal TextureHandle SourceTexture ;
46
+ internal TextureHandle SourceDepth ;
70
47
internal TextureHandle GaussianSplatRT ;
71
48
}
72
49
73
50
public override void RecordRenderGraph ( RenderGraph renderGraph , ContextContainer frameData )
74
51
{
75
- using var builder = renderGraph . AddUnsafePass < PassData > ( ProfilerTag , out PassData passData ) ;
52
+ using var builder = renderGraph . AddUnsafePass ( ProfilerTag , out PassData passData ) ;
76
53
77
54
var cameraData = frameData . Get < UniversalCameraData > ( ) ;
78
55
var resourceData = frameData . Get < UniversalResourceData > ( ) ;
@@ -85,22 +62,53 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer
85
62
86
63
passData . CameraData = cameraData ;
87
64
passData . SourceTexture = resourceData . activeColorTexture ;
65
+ passData . SourceDepth = resourceData . activeDepthTexture ;
88
66
passData . GaussianSplatRT = textureHandle ;
89
67
68
+ builder . UseTexture ( resourceData . activeColorTexture , AccessFlags . ReadWrite ) ;
69
+ builder . UseTexture ( resourceData . activeDepthTexture ) ;
90
70
builder . UseTexture ( textureHandle , AccessFlags . Write ) ;
91
71
builder . AllowPassCulling ( false ) ;
92
72
builder . SetRenderFunc ( static ( PassData data , UnsafeGraphContext context ) =>
93
73
{
94
74
var commandBuffer = CommandBufferHelpers . GetNativeCommandBuffer ( context . cmd ) ;
95
75
using var _ = new ProfilingScope ( commandBuffer , s_profilingSampler ) ;
96
76
commandBuffer . SetGlobalTexture ( s_gaussianSplatRT , data . GaussianSplatRT ) ;
97
- CoreUtils . SetRenderTarget ( commandBuffer , data . GaussianSplatRT , ClearFlag . Color , Color . clear ) ;
77
+ CoreUtils . SetRenderTarget ( commandBuffer , data . GaussianSplatRT , data . SourceDepth , ClearFlag . Color , Color . clear ) ;
98
78
Material matComposite = GaussianSplatRenderSystem . instance . SortAndRenderSplats ( data . CameraData . camera , commandBuffer ) ;
99
79
commandBuffer . BeginSample ( GaussianSplatRenderSystem . s_ProfCompose ) ;
100
80
Blitter . BlitCameraTexture ( commandBuffer , data . GaussianSplatRT , data . SourceTexture , matComposite , 0 ) ;
101
81
commandBuffer . EndSample ( GaussianSplatRenderSystem . s_ProfCompose ) ;
102
82
} ) ;
103
83
}
84
+ #else
85
+ public override void OnCameraSetup ( CommandBuffer cmd , ref RenderingData renderingData )
86
+ {
87
+ RenderTextureDescriptor rtDesc = renderingData . cameraData . cameraTargetDescriptor ;
88
+ rtDesc . depthBufferBits = 0 ;
89
+ rtDesc . msaaSamples = 1 ;
90
+ rtDesc . graphicsFormat = GraphicsFormat . R16G16B16A16_SFloat ;
91
+ RenderingUtils . ReAllocateIfNeeded ( ref m_RenderTarget , rtDesc , FilterMode . Point , TextureWrapMode . Clamp , name : GaussianSplatRTName ) ;
92
+ cmd . SetGlobalTexture ( m_RenderTarget . name , m_RenderTarget . nameID ) ;
93
+
94
+ ConfigureTarget ( m_RenderTarget , m_Renderer . cameraDepthTargetHandle ) ;
95
+ ConfigureClear ( ClearFlag . Color , new Color ( 0 , 0 , 0 , 0 ) ) ;
96
+ }
97
+
98
+ public override void Execute ( ScriptableRenderContext context , ref RenderingData renderingData )
99
+ {
100
+ if ( m_Cmb == null )
101
+ return ;
102
+
103
+ // add sorting, view calc and drawing commands for each splat object
104
+ Material matComposite = GaussianSplatRenderSystem . instance . SortAndRenderSplats ( renderingData . cameraData . camera , m_Cmb ) ;
105
+
106
+ // compose
107
+ m_Cmb . BeginSample ( GaussianSplatRenderSystem . s_ProfCompose ) ;
108
+ Blitter . BlitCameraTexture ( m_Cmb , m_RenderTarget , m_Renderer . cameraColorTargetHandle , RenderBufferLoadAction . Load , RenderBufferStoreAction . Store , matComposite , 0 ) ;
109
+ m_Cmb . EndSample ( GaussianSplatRenderSystem . s_ProfCompose ) ;
110
+ context . ExecuteCommandBuffer ( m_Cmb ) ;
111
+ }
104
112
#endif
105
113
}
106
114
@@ -122,16 +130,20 @@ public override void OnCameraPreCull(ScriptableRenderer renderer, in CameraData
122
130
if ( ! system . GatherSplatsForCamera ( cameraData . camera ) )
123
131
return ;
124
132
133
+ #if ! UNITY_6000_0_OR_NEWER
125
134
CommandBuffer cmb = system . InitialClearCmdBuffer ( cameraData . camera ) ;
126
135
m_Pass . m_Cmb = cmb ;
136
+ #endif
127
137
m_HasCamera = true ;
128
138
}
129
139
130
140
public override void AddRenderPasses ( ScriptableRenderer renderer , ref RenderingData renderingData )
131
141
{
132
142
if ( ! m_HasCamera )
133
143
return ;
144
+ #if ! UNITY_6000_0_OR_NEWER
134
145
m_Pass . m_Renderer = renderer ;
146
+ #endif
135
147
renderer . EnqueuePass ( m_Pass ) ;
136
148
}
137
149
0 commit comments