Skip to content

Commit d0ebb11

Browse files
committed
Bug fixes from Dynamic GI.
Cleanup buffers after bakes, and only dispatch dynamic GI for scene or game cameras
1 parent 3121550 commit d0ebb11

File tree

2 files changed

+39
-25
lines changed

2 files changed

+39
-25
lines changed

com.unity.render-pipelines.high-definition/Runtime/Lighting/ProbeVolume/DynamicGI/ProbeVolumeDynamicGI.cs

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -307,41 +307,47 @@ public void ClearAllActive(bool clearAll)
307307

308308
internal void DispatchProbePropagation(ScriptableRenderContext renderContext, HDCamera hdCamera, CommandBuffer cmd, ProbeVolumeHandle probeVolume, ProbeDynamicGI giSettings, in ShaderVariablesGlobal shaderGlobals, RTHandle probeVolumeAtlasSHRTHandle)
309309
{
310-
if (probeVolume.parameters.supportDynamicGI
311-
&& probeVolume.IsDataAssigned()
312-
&& probeVolume.HasNeighbors()
313-
&& probeVolume.GetProbeVolumeEngineDataIndex() >= 0)
310+
if (hdCamera.camera.cameraType == CameraType.Game || hdCamera.camera.cameraType == CameraType.SceneView)
314311
{
315-
InitializePropagationBuffers(probeVolume);
316-
317-
if (giSettings.clear.value || _clearAllActive)
312+
if (probeVolume.parameters.supportDynamicGI
313+
&& probeVolume.IsDataAssigned()
314+
&& probeVolume.HasNeighbors()
315+
&& probeVolume.GetProbeVolumeEngineDataIndex() >= 0)
318316
{
319-
ClearRadianceCache(probeVolume);
320-
}
317+
InitializePropagationBuffers(probeVolume);
321318

322-
DispatchPropagationHits(cmd, probeVolume, in giSettings);
323-
DispatchPropagationAxes(cmd, probeVolume, in giSettings);
324-
DispatchPropagationCombine(cmd, probeVolume, in giSettings, in shaderGlobals, probeVolumeAtlasSHRTHandle);
325-
probeVolume.propagationBuffers.SwapRadianceCaches();
326-
}
327-
else
328-
{
329-
if (CleanupPropagation(probeVolume))
319+
if (giSettings.clear.value || _clearAllActive)
320+
{
321+
ClearRadianceCache(probeVolume);
322+
}
323+
324+
DispatchPropagationHits(cmd, probeVolume, in giSettings);
325+
DispatchPropagationAxes(cmd, probeVolume, in giSettings);
326+
DispatchPropagationCombine(cmd, probeVolume, in giSettings, in shaderGlobals, probeVolumeAtlasSHRTHandle);
327+
probeVolume.propagationBuffers.SwapRadianceCaches();
328+
}
329+
else
330330
{
331-
// trigger an update so original bake data gets set since Dynamic GI was disabled
332-
probeVolume.SetDataUpdated(true);
331+
if (CleanupPropagation(probeVolume))
332+
{
333+
// trigger an update so original bake data gets set since Dynamic GI was disabled
334+
probeVolume.SetDataUpdated(true);
335+
}
333336
}
334337
}
335338
}
336339

337340
internal void ClearProbePropagation(ScriptableRenderContext renderContext, HDCamera hdCamera, CommandBuffer cmd, ProbeVolumeHandle probeVolume, ProbeDynamicGI giSettings, in ShaderVariablesGlobal shaderGlobals, RTHandle probeVolumeAtlasSHRTHandle)
338341
{
339-
if (probeVolume.parameters.supportDynamicGI
340-
&& probeVolume.IsDataAssigned()
341-
&& probeVolume.HasNeighbors()
342-
&& probeVolume.GetProbeVolumeEngineDataIndex() >= 0)
342+
if (hdCamera.camera.cameraType == CameraType.Game || hdCamera.camera.cameraType == CameraType.SceneView)
343343
{
344-
DispatchPropagationCombine(cmd, probeVolume, in giSettings, in shaderGlobals, probeVolumeAtlasSHRTHandle, true);
344+
if (probeVolume.parameters.supportDynamicGI
345+
&& probeVolume.IsDataAssigned()
346+
&& probeVolume.HasNeighbors()
347+
&& probeVolume.GetProbeVolumeEngineDataIndex() >= 0)
348+
{
349+
DispatchPropagationCombine(cmd, probeVolume, in giSettings, in shaderGlobals, probeVolumeAtlasSHRTHandle, true);
350+
}
345351
}
346352
}
347353

com.unity.render-pipelines.high-definition/Runtime/Lighting/ProbeVolume/ProbeVolumeManager.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,18 @@ void OnProbesBakeCompleted()
132132

133133
void OnBakeCompleted()
134134
{
135-
var volumesCurrent = (volumesSelected.Count > 0) ? volumesSelected : m_Volumes;
136135
foreach (var volume in m_Volumes)
137136
{
137+
var index = m_Volumes.IndexOf(volume);
138+
if (index == -1)
139+
continue;
140+
138141
volume.OnBakeCompleted();
142+
143+
// cleanup buffers
144+
var handle = new ProbeVolumeHandle(this, index);
145+
volume.CleanupBuffers();
146+
ProbeVolumeDynamicGI.instance.CleanupPropagation(handle);
139147
}
140148

141149
if (volumesSelected.Count > 0)

0 commit comments

Comments
 (0)