Skip to content

[HDRP][Path Tracing] Fixes bug introduced by previous sky-while-recording change #4906

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 14, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,13 @@ internal void ResetPathTracing()
m_SubFrameManager.Reset();
}

internal void ResetPathTracing(int camID, CameraData camData)
internal CameraData ResetPathTracing(int camID, CameraData camData)
{
m_RenderSky = true;
camData.ResetIteration();
m_SubFrameManager.SetCameraData(camID, camData);

return camData;
}

private Vector4 ComputeDoFConstants(HDCamera hdCamera, PathTracing settings)
Expand Down Expand Up @@ -160,64 +162,60 @@ private void OnSceneGui(SceneView sv)

#endif // UNITY_EDITOR

private void CheckDirtiness(HDCamera hdCamera, int camID, CameraData camData)
private CameraData CheckDirtiness(HDCamera hdCamera, int camID, CameraData camData)
{
// Check camera resolution dirtiness
if (hdCamera.actualWidth != camData.width || hdCamera.actualHeight != camData.height)
{
camData.width = (uint)hdCamera.actualWidth;
camData.height = (uint)hdCamera.actualHeight;
ResetPathTracing(camID, camData);
return;
return ResetPathTracing(camID, camData);
}

// Check camera sky dirtiness
bool enabled = (hdCamera.clearColorMode == HDAdditionalCameraData.ClearColorMode.Sky);
if (enabled != camData.skyEnabled)
{
camData.skyEnabled = enabled;
ResetPathTracing(camID, camData);
return;
return ResetPathTracing(camID, camData);
}

// Check camera fog dirtiness
enabled = Fog.IsFogEnabled(hdCamera);
if (enabled != camData.fogEnabled)
{
camData.fogEnabled = enabled;
ResetPathTracing(camID, camData);
return;
return ResetPathTracing(camID, camData);
}

// Check camera matrix dirtiness
if (hdCamera.mainViewConstants.nonJitteredViewProjMatrix != (hdCamera.mainViewConstants.prevViewProjMatrix))
{
ResetPathTracing(camID, camData);
return;
return ResetPathTracing(camID, camData);
}

// Check materials dirtiness
if (m_MaterialsDirty)
{
m_MaterialsDirty = false;
ResetPathTracing();
return;
return camData;
}

// Check light or geometry transforms dirtiness
if (m_TransformDirty)
{
m_TransformDirty = false;
ResetPathTracing();
return;
return camData;
}

// Check lights dirtiness
if (m_CacheLightCount != m_RayTracingLights.lightCount)
{
m_CacheLightCount = (uint)m_RayTracingLights.lightCount;
ResetPathTracing();
return;
return camData;
}

// Check geometry dirtiness
Expand All @@ -234,6 +232,8 @@ private void CheckDirtiness(HDCamera hdCamera, int camID, CameraData camData)
m_RenderSky = true;
m_CameraID = camID;
}

return camData;
}

static RTHandle PathTracingHistoryBufferAllocatorFunction(string viewName, int frameIndex, RTHandleSystem rtHandleSystem)
Expand Down Expand Up @@ -363,7 +363,8 @@ TextureHandle RenderPathTracing(RenderGraph renderGraph, HDCamera hdCamera, Text

if (!m_SubFrameManager.isRecording)
{
CheckDirtiness(hdCamera, camID, camData);
// Check if things have changed and if we need to restart the accumulation
camData = CheckDirtiness(hdCamera, camID, camData);

// If we are recording, the max iteration is set/overridden by the subframe manager, otherwise we read it from the path tracing volume
m_SubFrameManager.subFrameCount = (uint)m_PathTracingSettings.maximumSamples.value;
Expand Down