@@ -24,14 +24,7 @@ static void CreateHDRenderLoop()
2424
2525#endif
2626
27- public class SkyParameters
28- {
29- public Cubemap skyHDRI ;
30- public float rotation ;
31- public float exposure ;
32- public float multiplier ;
33- }
34-
27+ SkyRenderer m_SkyRenderer = null ;
3528 [ SerializeField ]
3629 SkyParameters m_SkyParameters = new SkyParameters ( ) ;
3730
@@ -82,7 +75,7 @@ public void InitGBuffers(int width, int height, CommandBuffer cmd)
8275 }
8376 }
8477
85- public RenderTargetIdentifier [ ] GetGBuffers ( CommandBuffer cmd )
78+ public RenderTargetIdentifier [ ] GetGBuffers ( )
8679 {
8780 var colorMRTs = new RenderTargetIdentifier [ gbufferCount ] ;
8881 for ( int index = 0 ; index < gbufferCount ; index ++ )
@@ -128,8 +121,6 @@ public void BindBuffers(Material mat)
128121 TextureSettings m_TextureSettings = TextureSettings . Default ;
129122
130123 // Various set of material use in render loop
131- Material m_SkyboxMaterial ;
132- Material m_SkyHDRIMaterial ;
133124 Material m_DeferredMaterial ;
134125 Material m_FinalPassMaterial ;
135126 Material m_DebugViewMaterialGBuffer ;
@@ -140,6 +131,12 @@ public void BindBuffers(Material mat)
140131 int s_VelocityBuffer ;
141132 int s_DistortionBuffer ;
142133
134+ RenderTargetIdentifier s_CameraColorBufferRT ;
135+ RenderTargetIdentifier s_CameraDepthBufferRT ;
136+ RenderTargetIdentifier s_VelocityBufferRT ;
137+ RenderTargetIdentifier s_DistortionBufferRT ;
138+
139+
143140 public class LightList
144141 {
145142 public List < DirectionalLightData > directionalLights ;
@@ -174,31 +171,20 @@ void OnValidate()
174171 Rebuild ( ) ;
175172 }
176173
177- Material CreateEngineMaterial ( string shaderPath )
178- {
179- var mat = new Material ( Shader . Find ( shaderPath ) as Shader )
180- {
181- hideFlags = HideFlags . HideAndDontSave
182- } ;
183- return mat ;
184- }
185-
186174 public override void Rebuild ( )
187175 {
188176 s_CameraColorBuffer = Shader . PropertyToID ( "_CameraColorTexture" ) ;
189177 s_CameraDepthBuffer = Shader . PropertyToID ( "_CameraDepthTexture" ) ;
190178
191- // TODO: We need to have an API to send our sky information to Enlighten. For now use a workaround through skybox/cubemap material...
192- m_SkyboxMaterial = CreateEngineMaterial ( "Skybox/Cubemap" ) ;
193- RenderSettings . skybox = m_SkyboxMaterial ; // Setup this material as the default to be use in RenderSettings
194- RenderSettings . ambientIntensity = 1.0f ; // fix this to 1, this parameter should not exist!
195- RenderSettings . ambientMode = UnityEngine . Rendering . AmbientMode . Skybox ; // Force skybox for our HDRI
196- RenderSettings . reflectionIntensity = 1.0f ;
179+ s_CameraColorBufferRT = new RenderTargetIdentifier ( s_CameraColorBuffer ) ;
180+ s_CameraDepthBufferRT = new RenderTargetIdentifier ( s_CameraDepthBuffer ) ;
181+
182+ m_SkyRenderer = new SkyRenderer ( ) ;
183+ m_SkyRenderer . Rebuild ( ) ;
197184
198- m_SkyHDRIMaterial = CreateEngineMaterial ( "Hidden/HDRenderLoop/SkyHDRI" ) ;
199- m_DeferredMaterial = CreateEngineMaterial ( "Hidden/HDRenderLoop/Deferred" ) ;
200- m_FinalPassMaterial = CreateEngineMaterial ( "Hidden/HDRenderLoop/FinalPass" ) ;
201- m_DebugViewMaterialGBuffer = CreateEngineMaterial ( "Hidden/HDRenderLoop/DebugViewMaterialGBuffer" ) ;
185+ m_DeferredMaterial = Utilities . CreateEngineMaterial ( "Hidden/HDRenderLoop/Deferred" ) ;
186+ m_FinalPassMaterial = Utilities . CreateEngineMaterial ( "Hidden/HDRenderLoop/FinalPass" ) ;
187+ m_DebugViewMaterialGBuffer = Utilities . CreateEngineMaterial ( "Hidden/HDRenderLoop/DebugViewMaterialGBuffer" ) ;
202188
203189 m_ShadowPass = new ShadowRenderPass ( m_ShadowSettings ) ;
204190
@@ -222,9 +208,11 @@ public override void Rebuild()
222208 m_gbufferManager . SetBufferDescription ( m_gbufferManager . gbufferCount , "_VelocityTexture" , Builtin . RenderLoop . GetVelocityBufferFormat ( ) , Builtin . RenderLoop . GetVelocityBufferReadWrite ( ) ) ;
223209 m_gbufferManager . gbufferCount ++ ;
224210 }
211+ s_VelocityBufferRT = new RenderTargetIdentifier ( s_VelocityBuffer ) ;
225212#pragma warning restore 162
226213
227214 s_DistortionBuffer = Shader . PropertyToID ( "_DistortionTexture" ) ;
215+ s_DistortionBufferRT = new RenderTargetIdentifier ( s_DistortionBuffer ) ;
228216
229217 m_LitRenderLoop . Rebuild ( ) ;
230218
@@ -247,16 +235,16 @@ void OnDisable()
247235 m_LitRenderLoop . OnDisable ( ) ;
248236 m_SinglePassLightLoop . OnDisable ( ) ;
249237 //m_TilePassLightLoop.OnDisable();
250-
251- if ( m_SkyboxMaterial ) DestroyImmediate ( m_SkyboxMaterial ) ;
252- if ( m_SkyHDRIMaterial ) DestroyImmediate ( m_SkyHDRIMaterial ) ;
253- if ( m_DeferredMaterial ) DestroyImmediate ( m_DeferredMaterial ) ;
254- if ( m_FinalPassMaterial ) DestroyImmediate ( m_FinalPassMaterial ) ;
255- if ( m_DebugViewMaterialGBuffer ) DestroyImmediate ( m_DebugViewMaterialGBuffer ) ;
238+
239+ Utilities . Destroy ( m_DeferredMaterial ) ;
240+ Utilities . Destroy ( m_FinalPassMaterial ) ;
241+ Utilities . Destroy ( m_DebugViewMaterialGBuffer ) ;
256242
257243 m_CubeReflTexArray . Release ( ) ;
258244 m_CookieTexArray . Release ( ) ;
259245 m_CubeCookieTexArray . Release ( ) ;
246+
247+ m_SkyRenderer . OnDisable ( ) ;
260248 }
261249
262250 void NewFrame ( )
@@ -314,7 +302,7 @@ void InitAndClearBuffer(Camera camera, RenderLoop renderLoop)
314302 var cmd = new CommandBuffer ( ) ;
315303 cmd . name = "Clear GBuffer" ;
316304 // Write into the Camera Depth buffer
317- cmd . SetRenderTarget ( m_gbufferManager . GetGBuffers ( cmd ) , new RenderTargetIdentifier ( s_CameraDepthBuffer ) ) ;
305+ cmd . SetRenderTarget ( m_gbufferManager . GetGBuffers ( ) , new RenderTargetIdentifier ( s_CameraDepthBuffer ) ) ;
318306 // Clear everything
319307 // TODO: Clear is not required for color as we rewrite everything, will save performance.
320308 cmd . ClearRenderTarget ( false , true , new Color ( 0 , 0 , 0 , 0 ) ) ;
@@ -325,56 +313,28 @@ void InitAndClearBuffer(Camera camera, RenderLoop renderLoop)
325313 // END TEMP
326314 }
327315
328- void RenderOpaqueNoLightingRenderList ( CullResults cull , Camera camera , RenderLoop renderLoop , string passName )
316+ void RenderOpaqueRenderList ( CullResults cull , Camera camera , RenderLoop renderLoop , string passName , RendererConfiguration rendererConfiguration = 0 )
329317 {
330318 if ( ! debugParameters . displayOpaqueObjects )
331319 return ;
332320
333321 var settings = new DrawRendererSettings ( cull , camera , new ShaderPassName ( passName ) )
334322 {
335- rendererConfiguration = 0 ,
336- sorting = { sortOptions = SortOptions . SortByMaterialThenMesh }
337- } ;
338- settings . inputFilter . SetQueuesOpaque ( ) ;
339- renderLoop . DrawRenderers ( ref settings ) ;
340- }
341-
342- void RenderOpaqueRenderList ( CullResults cull , Camera camera , RenderLoop renderLoop , string passName )
343- {
344- if ( ! debugParameters . displayOpaqueObjects )
345- return ;
346-
347- var settings = new DrawRendererSettings ( cull , camera , new ShaderPassName ( passName ) )
348- {
349- rendererConfiguration = RendererConfiguration . PerObjectLightProbe | RendererConfiguration . PerObjectReflectionProbes | RendererConfiguration . PerObjectLightmaps | RendererConfiguration . PerObjectLightProbeProxyVolume ,
323+ rendererConfiguration = rendererConfiguration ,
350324 sorting = { sortOptions = SortOptions . SortByMaterialThenMesh }
351325 } ;
352326 settings . inputFilter . SetQueuesOpaque ( ) ;
353327 renderLoop . DrawRenderers ( ref settings ) ;
354328 }
355329
356- void RenderTransparentNoLightingRenderList ( CullResults cull , Camera camera , RenderLoop renderLoop , string passName )
357- {
358- if ( ! debugParameters . displayTransparentObjects )
359- return ;
360-
361- var settings = new DrawRendererSettings ( cull , camera , new ShaderPassName ( passName ) )
362- {
363- rendererConfiguration = 0 ,
364- sorting = { sortOptions = SortOptions . BackToFront }
365- } ;
366- settings . inputFilter . SetQueuesTransparent ( ) ;
367- renderLoop . DrawRenderers ( ref settings ) ;
368- }
369-
370- void RenderTransparentRenderList ( CullResults cull , Camera camera , RenderLoop renderLoop , string passName )
330+ void RenderTransparentRenderList ( CullResults cull , Camera camera , RenderLoop renderLoop , string passName , RendererConfiguration rendererConfiguration = 0 )
371331 {
372332 if ( ! debugParameters . displayTransparentObjects )
373333 return ;
374334
375335 var settings = new DrawRendererSettings ( cull , camera , new ShaderPassName ( passName ) )
376336 {
377- rendererConfiguration = RendererConfiguration . PerObjectLightProbe | RendererConfiguration . PerObjectReflectionProbes | RendererConfiguration . PerObjectLightmaps | RendererConfiguration . PerObjectLightProbeProxyVolume ,
337+ rendererConfiguration = rendererConfiguration ,
378338 sorting = { sortOptions = SortOptions . BackToFront }
379339 } ;
380340 settings . inputFilter . SetQueuesTransparent ( ) ;
@@ -395,7 +355,7 @@ void RenderDepthPrepass(CullResults cull, Camera camera, RenderLoop renderLoop)
395355 renderLoop . ExecuteCommandBuffer ( cmd ) ;
396356 cmd . Dispose ( ) ;
397357
398- RenderOpaqueNoLightingRenderList ( cull , camera , renderLoop , "DepthOnly" ) ;
358+ RenderOpaqueRenderList ( cull , camera , renderLoop , "DepthOnly" ) ;
399359 }
400360
401361 void RenderGBuffer ( CullResults cull , Camera camera , RenderLoop renderLoop )
@@ -407,12 +367,12 @@ void RenderGBuffer(CullResults cull, Camera camera, RenderLoop renderLoop)
407367
408368 // setup GBuffer for rendering
409369 var cmd = new CommandBuffer { name = "GBuffer Pass" } ;
410- cmd . SetRenderTarget ( m_gbufferManager . GetGBuffers ( cmd ) , new RenderTargetIdentifier ( s_CameraDepthBuffer ) ) ;
370+ cmd . SetRenderTarget ( m_gbufferManager . GetGBuffers ( ) , new RenderTargetIdentifier ( s_CameraDepthBuffer ) ) ;
411371 renderLoop . ExecuteCommandBuffer ( cmd ) ;
412372 cmd . Dispose ( ) ;
413373
414374 // render opaque objects into GBuffer
415- RenderOpaqueRenderList ( cull , camera , renderLoop , "GBuffer" ) ;
375+ RenderOpaqueRenderList ( cull , camera , renderLoop , "GBuffer" , Utilities . kRendererConfigurationBakedLighting ) ;
416376 }
417377
418378 // This pass is use in case of forward opaque and deferred rendering. We need to render forward objects before tile lighting pass
@@ -423,12 +383,12 @@ void RenderForwardOpaqueDepth(CullResults cull, Camera camera, RenderLoop render
423383 return ;
424384
425385 // TODO: Use the render queue index to only send the forward opaque!
426- var cmd = new CommandBuffer { name = "Depth Prepass" } ;
386+ var cmd = new CommandBuffer { name = "Depth Prepass" } ;
427387 cmd . SetRenderTarget ( new RenderTargetIdentifier ( s_CameraDepthBuffer ) ) ;
428388 renderLoop . ExecuteCommandBuffer ( cmd ) ;
429389 cmd . Dispose ( ) ;
430390
431- RenderOpaqueNoLightingRenderList ( cull , camera , renderLoop , "DepthOnly" ) ;
391+ RenderOpaqueRenderList ( cull , camera , renderLoop , "DepthOnly" ) ;
432392 }
433393
434394 void RenderDebugViewMaterial ( CullResults cull , Camera camera , RenderLoop renderLoop )
@@ -516,54 +476,7 @@ void RenderDeferredLighting(Camera camera, RenderLoop renderLoop)
516476
517477 void RenderSky ( Camera camera , RenderLoop renderLoop )
518478 {
519- /*
520- // Render sky into a cubemap - doesn't happen every frame, can be control
521-
522- // TODO: do a render to texture here
523-
524- // Downsample the cubemap and provide it to Enlighten
525-
526- // TODO: currently workaround is to set the cubemap in a Skybox/cubemap material
527- //m_SkyboxMaterial.SetTexture(cubemap);
528-
529- // Render the sky itself
530-
531- Vector3[] vertData = new Vector3[4];
532- vertData[0] = new Vector3(-1.0f, -1.0f, 0.0f);
533- vertData[1] = new Vector3(1.0f, -1.0f, 0.0f);
534- vertData[2] = new Vector3(1.0f, 1.0f, 0.0f);
535- vertData[3] = new Vector3(-1.0f, 1.0f, 0.0f);
536-
537- Vector3[] eyeVectorData = new Vector3[4];
538- // camera.worldToCameraMatrix, camera.projectionMatrix
539- // Get view vector vased on the frustrum, i.e (invert transform frustrum get position etc...)
540- eyeVectorData[0] =
541- eyeVectorData[1] =
542- eyeVectorData[2] =
543- eyeVectorData[3] =
544-
545- // Write out the mesh
546- var triangles = new int[4];
547- for (int i = 0; i < 4; i++)
548- {
549- triangles[i] = i;
550- }
551-
552- Mesh mesh = new Mesh
553- {
554- vertices = vertData,
555- normals = eyeVectorData,
556- triangles = triangles
557- };
558-
559- m_SkyHDRIMaterial.SetTexture("_Cubemap", skyParameters.skyHDRI);
560- m_SkyHDRIMaterial.SetVector("_SkyParam", new Vector4(skyParameters.exposure, skyParameters.multiplier, skyParameters.rotation, 0.0f));
561-
562- var cmd = new CommandBuffer { name = "Skybox" };
563- cmd.DrawMesh(mesh, Matrix4x4.identity, m_SkyHDRIMaterial);
564- renderloop.ExecuteCommandBuffer(cmd);
565- cmd.Dispose();
566- */
479+ m_SkyRenderer . RenderSky ( camera , m_SkyParameters , s_CameraColorBufferRT , s_CameraDepthBufferRT , renderLoop ) ;
567480 }
568481
569482 void RenderForward ( CullResults cullResults , Camera camera , RenderLoop renderLoop )
@@ -581,7 +494,7 @@ void RenderForward(CullResults cullResults, Camera camera, RenderLoop renderLoop
581494 RenderOpaqueRenderList ( cullResults , camera , renderLoop , "Forward" ) ;
582495 }
583496
584- RenderTransparentRenderList ( cullResults , camera , renderLoop , "Forward" ) ;
497+ RenderTransparentRenderList ( cullResults , camera , renderLoop , "Forward" , Utilities . kRendererConfigurationBakedLighting ) ;
585498 }
586499
587500 void RenderForwardUnlit ( CullResults cullResults , Camera camera , RenderLoop renderLoop )
@@ -594,8 +507,8 @@ void RenderForwardUnlit(CullResults cullResults, Camera camera, RenderLoop rende
594507 renderLoop . ExecuteCommandBuffer ( cmd ) ;
595508 cmd . Dispose ( ) ;
596509
597- RenderOpaqueNoLightingRenderList ( cullResults , camera , renderLoop , "ForwardUnlit" ) ;
598- RenderTransparentNoLightingRenderList ( cullResults , camera , renderLoop , "ForwardUnlit" ) ;
510+ RenderOpaqueRenderList ( cullResults , camera , renderLoop , "ForwardUnlit" ) ;
511+ RenderTransparentRenderList ( cullResults , camera , renderLoop , "ForwardUnlit" ) ;
599512 }
600513
601514 void RenderVelocity ( CullResults cullResults , Camera camera , RenderLoop renderLoop )
@@ -615,7 +528,7 @@ void RenderVelocity(CullResults cullResults, Camera camera, RenderLoop renderLoo
615528 renderLoop . ExecuteCommandBuffer ( cmd ) ;
616529 cmd . Dispose ( ) ;
617530
618- RenderOpaqueNoLightingRenderList ( cullResults , camera , renderLoop , "MotionVectors" ) ;
531+ RenderOpaqueRenderList ( cullResults , camera , renderLoop , "MotionVectors" ) ;
619532#pragma warning restore 162 , 429
620533 }
621534
@@ -631,7 +544,7 @@ void RenderDistortion(CullResults cullResults, Camera camera, RenderLoop renderL
631544 cmd . Dispose ( ) ;
632545
633546 // Only transparent object can render distortion vectors
634- RenderTransparentNoLightingRenderList ( cullResults , camera , renderLoop , "DistortionVectors" ) ;
547+ RenderTransparentRenderList ( cullResults , camera , renderLoop , "DistortionVectors" ) ;
635548 }
636549
637550
0 commit comments