11using System . Collections . ObjectModel ;
22using UnityEngine ;
3- using UnityEngine . Experimental . Rendering ;
43using UnityEngine . Rendering ;
54
65public class VXGIRenderPipeline : RenderPipeline {
7- public static bool isD3D11Supported {
8- get { return _D3D11DeviceType . Contains ( SystemInfo . graphicsDeviceType ) ; }
9- }
6+ public static bool isD3D11Supported => _D3D11DeviceType . Contains ( SystemInfo . graphicsDeviceType ) ;
107
11- public DrawRendererFlags drawRendererFlags {
12- get { return _drawRendererFlags ; }
13- }
14- public RendererConfiguration rendererConfiguration {
15- get { return _rendererConfiguration ; }
16- }
8+ public PerObjectData PerObjectData { get ; }
179
1810 static readonly ReadOnlyCollection < GraphicsDeviceType > _D3D11DeviceType = new ReadOnlyCollection < GraphicsDeviceType > ( new [ ] {
1911 GraphicsDeviceType . Direct3D11 ,
@@ -23,10 +15,8 @@ public RendererConfiguration rendererConfiguration {
2315 } ) ;
2416
2517 CommandBuffer _command ;
26- CullResults _cullResults ;
27- DrawRendererFlags _drawRendererFlags ;
28- FilterRenderersSettings _filterSettings ;
29- RendererConfiguration _rendererConfiguration ;
18+ FilteringSettings _filteringSettings ;
19+ ScriptableCullingParameters _cullingParameters ;
3020 VXGIRenderer _renderer ;
3121
3222 public static void TriggerCameraCallback ( Camera camera , string message , Camera . CameraCallback callback ) {
@@ -37,63 +27,53 @@ public static void TriggerCameraCallback(Camera camera, string message, Camera.C
3727 public VXGIRenderPipeline ( VXGIRenderPipelineAsset asset ) {
3828 _renderer = new VXGIRenderer ( this ) ;
3929 _command = new CommandBuffer ( ) { name = "VXGI.RenderPipeline" } ;
40- _filterSettings = new FilterRenderersSettings ( true ) { renderQueueRange = RenderQueueRange . opaque } ;
41-
42- _drawRendererFlags = DrawRendererFlags . None ;
43- if ( asset . dynamicBatching ) _drawRendererFlags |= DrawRendererFlags . EnableDynamicBatching ;
44-
45- _rendererConfiguration = RendererConfiguration . None ;
46-
47- if ( asset . environmentLighting ) _rendererConfiguration |= RendererConfiguration . PerObjectLightProbe ;
48- if ( asset . environmentReflections ) _rendererConfiguration |= RendererConfiguration . PerObjectReflectionProbes ;
30+ _filteringSettings = FilteringSettings . defaultValue ;
4931
32+ PerObjectData = asset . perObjectData ;
5033 Shader . globalRenderPipeline = "VXGI" ;
51-
5234 GraphicsSettings . lightsUseLinearIntensity = true ;
5335 GraphicsSettings . useScriptableRenderPipelineBatching = asset . SRPBatching ;
5436 }
5537
56- public override void Dispose ( ) {
57- base . Dispose ( ) ;
38+ protected override void Dispose ( bool disposing ) {
39+ base . Dispose ( disposing ) ;
5840
5941 _command . Dispose ( ) ;
6042
6143 Shader . globalRenderPipeline = string . Empty ;
6244 }
6345
64- public override void Render ( ScriptableRenderContext renderContext , Camera [ ] cameras ) {
65- base . Render ( renderContext , cameras ) ;
66- BeginFrameRendering ( cameras ) ;
46+ protected override void Render ( ScriptableRenderContext renderContext , Camera [ ] cameras ) {
47+ var mainCamera = Camera . main ;
6748
68- foreach ( var camera in cameras ) {
69- BeginCameraRendering ( camera ) ;
49+ BeginFrameRendering ( renderContext , cameras ) ;
7050
71- var vxgi = camera . GetComponent < VXGI > ( ) ;
51+ foreach ( var camera in cameras ) {
52+ BeginCameraRendering ( renderContext , camera ) ;
7253
73- if ( vxgi != null && vxgi . isActiveAndEnabled ) {
54+ if ( camera . TryGetComponent < VXGI > ( out var vxgi ) && vxgi . isActiveAndEnabled ) {
7455 vxgi . Render ( renderContext , _renderer ) ;
7556 } else {
76- bool rendered = false ;
77-
7857#if UNITY_EDITOR
7958 if ( camera . cameraType == CameraType . SceneView ) {
8059 ScriptableRenderContext . EmitWorldGeometryForSceneView ( camera ) ;
8160 }
8261
83- if ( Camera . main != null ) {
84- vxgi = Camera . main . GetComponent < VXGI > ( ) ;
85-
86- if ( vxgi != null && vxgi . isActiveAndEnabled ) {
87- vxgi . Render ( renderContext , camera , _renderer ) ;
88- rendered = true ;
89- }
62+ if ( mainCamera != null && mainCamera . TryGetComponent < VXGI > ( out vxgi ) && vxgi . isActiveAndEnabled ) {
63+ vxgi . Render ( renderContext , camera , _renderer ) ;
64+ } else {
65+ RenderFallback ( renderContext , camera ) ;
9066 }
67+ #else
68+ RenderFallback ( renderContext , camera ) ;
9169#endif
92-
93- if ( ! rendered ) RenderFallback ( renderContext , camera ) ;
9470 }
71+
72+ EndCameraRendering ( renderContext , camera ) ;
9573 }
9674
75+ EndFrameRendering ( renderContext , cameras ) ;
76+
9777 renderContext . Submit ( ) ;
9878 }
9979
@@ -106,20 +86,19 @@ void RenderFallback(ScriptableRenderContext renderContext, Camera camera) {
10686
10787 TriggerCameraCallback ( camera , "OnPreCull" , Camera . onPreCull ) ;
10888
109- ScriptableCullingParameters cullingParams ;
110- if ( ! CullResults . GetCullingParameters ( camera , out cullingParams ) ) return ;
111- CullResults . Cull ( ref cullingParams , renderContext , ref _cullResults ) ;
89+ if ( ! camera . TryGetCullingParameters ( out _cullingParameters ) ) return ;
11290
113- var drawSettings = new DrawRendererSettings ( camera , new ShaderPassName ( "ForwardBase" ) ) ;
114- drawSettings . SetShaderPassName ( 1 , new ShaderPassName ( "PrepassBase" ) ) ;
115- drawSettings . SetShaderPassName ( 2 , new ShaderPassName ( "Always" ) ) ;
116- drawSettings . SetShaderPassName ( 3 , new ShaderPassName ( "Vertex" ) ) ;
117- drawSettings . SetShaderPassName ( 4 , new ShaderPassName ( "VertexLMRGBM" ) ) ;
118- drawSettings . SetShaderPassName ( 5 , new ShaderPassName ( "VertexLM" ) ) ;
119- drawSettings . flags = _drawRendererFlags ;
91+ var cullingResults = renderContext . Cull ( ref _cullingParameters ) ;
92+ var drawingSettings = new DrawingSettings { perObjectData = PerObjectData } ;
93+ drawingSettings . SetShaderPassName ( 0 , ShaderTagIDs . Deferred ) ;
94+ drawingSettings . SetShaderPassName ( 1 , ShaderTagIDs . PrepassBase ) ;
95+ drawingSettings . SetShaderPassName ( 2 , ShaderTagIDs . Always ) ;
96+ drawingSettings . SetShaderPassName ( 3 , ShaderTagIDs . Vertex ) ;
97+ drawingSettings . SetShaderPassName ( 4 , ShaderTagIDs . VertexLMRGBM ) ;
98+ drawingSettings . SetShaderPassName ( 5 , ShaderTagIDs . VertexLM ) ;
12099
121100 renderContext . SetupCameraProperties ( camera ) ;
122- renderContext . DrawRenderers ( _cullResults . visibleRenderers , ref drawSettings , _filterSettings ) ;
101+ renderContext . DrawRenderers ( cullingResults , ref drawingSettings , ref _filteringSettings ) ;
123102 renderContext . DrawSkybox ( camera ) ;
124103
125104 TriggerCameraCallback ( camera , "OnPostRender" , Camera . onPostRender ) ;
0 commit comments