Skip to content
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

[APV] Cell streaming system #5731

Merged
merged 108 commits into from
Oct 20, 2021
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
75c954a
Updated MeshGizmo to handle both traingles and lines.
JulienIgnace-Unity Aug 5, 2021
570493f
Fixed cell and brick debug scale
JulienIgnace-Unity Aug 5, 2021
1bfc541
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Aug 11, 2021
53f4f3f
With a null ref exception when applying virtual offset on unloaded sc…
JulienIgnace-Unity Aug 13, 2021
70a3d3d
Fixed an issue causing failure of the bake when multiple scenes are l…
JulienIgnace-Unity Aug 13, 2021
d381f78
Faster new version of debug probes with compute buffers instead of co…
JulienIgnace-Unity Aug 17, 2021
00a460e
Fixed debug probes after domain relaod when using L1
JulienIgnace-Unity Aug 17, 2021
e128c24
Fixed compute buffer probe debug
JulienIgnace-Unity Aug 17, 2021
51eac63
Matched cell debug culling with cell culling used for probe debug.
JulienIgnace-Unity Aug 17, 2021
c3160d6
Revert "Matched cell debug culling with cell culling used for probe d…
JulienIgnace-Unity Aug 17, 2021
31180f1
Fixed per probe culling.
JulienIgnace-Unity Aug 17, 2021
0a7730f
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Aug 18, 2021
78596c7
Revert "Fixed compute buffer probe debug"
JulienIgnace-Unity Aug 18, 2021
72a75b4
Revert "Faster new version of debug probes with compute buffers inste…
JulienIgnace-Unity Aug 18, 2021
1cbd0b5
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Aug 19, 2021
b44cde7
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Aug 19, 2021
f762552
Merge branch 'hd/apv-msic-fixes' of https://github.com/Unity-Technolo…
JulienIgnace-Unity Aug 19, 2021
4c7f031
Cleaning in preparation for streaming
JulienIgnace-Unity Aug 19, 2021
f0d5e5c
More cleanup + Fix debug upon load/unload of cells
JulienIgnace-Unity Aug 19, 2021
4fdb748
Fix GCAlloc
JulienIgnace-Unity Aug 23, 2021
efa24b7
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Aug 24, 2021
e89c332
Add missing update function
JulienIgnace-Unity Aug 25, 2021
8a8b47d
Proper error handling on apv texture allocation failure
JulienIgnace-Unity Aug 25, 2021
c580086
Handle APV index allocation failure
JulienIgnace-Unity Aug 25, 2021
7a7e08e
Small cleanup
JulienIgnace-Unity Aug 25, 2021
a584b9b
Create hidden per scene data
FrancescoC-unity Aug 27, 2021
87fed75
Start using new mode in baking workflow (Need to fix the tmp send data)
FrancescoC-unity Aug 27, 2021
922f827
Remove loading/removal from authoring
FrancescoC-unity Aug 30, 2021
49da9e8
Need to switch branch, move profile data to asset
FrancescoC-unity Aug 31, 2021
7e86ae5
Almost completely get rid of baking reference volume
FrancescoC-unity Aug 31, 2021
a92bf42
remove baking ref from realtime subdiv (but not working :p)
FrancescoC-unity Aug 31, 2021
5221d9b
Precomputed chunk budget for indices and sh pool
JulienIgnace-Unity Aug 31, 2021
fb26eaf
Revert "remove baking ref from realtime subdiv (but not working :p)"
FrancescoC-unity Aug 31, 2021
17fd32e
Remove all probe ref volume authroing from baking, yay!
FrancescoC-unity Aug 31, 2021
809f560
Moving draw gizmo away and remove all reference of authoring from baking
FrancescoC-unity Sep 1, 2021
332ec81
Make sure baking profile is available if required during non baking
FrancescoC-unity Sep 1, 2021
e628d77
Load profile info from the asset
FrancescoC-unity Sep 1, 2021
802547a
Fix dilation refresh
FrancescoC-unity Sep 1, 2021
a59557d
Moved probe pool chunk size constant to ProbeBrickPool
JulienIgnace-Unity Sep 1, 2021
afaf065
Moved internal array to its own class
JulienIgnace-Unity Sep 1, 2021
24fee3a
Removed empty update for now
JulienIgnace-Unity Sep 1, 2021
26328aa
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Sep 1, 2021
ab018ad
Post merge fix
JulienIgnace-Unity Sep 1, 2021
4559ebc
remove some other things
FrancescoC-unity Sep 1, 2021
22d13cf
remove asset
FrancescoC-unity Sep 2, 2021
8f88873
Small rename
FrancescoC-unity Sep 2, 2021
b7c8fc4
Merge branch 'HDRP/new-apv-workflow-backend' of https://github.com/Un…
JulienIgnace-Unity Sep 2, 2021
eb52367
Move field inside EDITOR tags
FrancescoC-unity Sep 2, 2021
520c27c
Post merge fix
JulienIgnace-Unity Sep 2, 2021
1c765d8
Fix issue when no profile is ever loaded (i.e. first time a project i…
FrancescoC-unity Sep 2, 2021
793a308
guards
FrancescoC-unity Sep 2, 2021
a65116c
Merge branch 'HDRP/new-apv-workflow-backend' of https://github.com/Un…
JulienIgnace-Unity Sep 2, 2021
5552a6f
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Sep 3, 2021
e6c7d64
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Sep 6, 2021
6375a26
Streaming V1 (non functional)
JulienIgnace-Unity Sep 8, 2021
1f8526b
Fixed adding the same cells multiple times to the system.
JulienIgnace-Unity Sep 9, 2021
59df65c
Fixed cell sorting
JulienIgnace-Unity Sep 9, 2021
2268168
Fixed wrong unload of unloaded cells.
JulienIgnace-Unity Sep 10, 2021
e2f8bd1
Fixed a mistake in chunk estimation calculation.
JulienIgnace-Unity Sep 10, 2021
50295ab
Moved cell streaing stuff to its own file
JulienIgnace-Unity Sep 13, 2021
467874d
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Sep 13, 2021
7a04814
Merge branch 'hd/apv-cell-streaming' of https://github.com/Unity-Tech…
JulienIgnace-Unity Sep 13, 2021
02e4621
Fixed cell camera distance computation
JulienIgnace-Unity Sep 13, 2021
cdacf4f
GCAlloc hunt 1
JulienIgnace-Unity Sep 14, 2021
771022c
Pool a lot of internal objects to avoid gcallocs
JulienIgnace-Unity Sep 14, 2021
74fd909
Preallocated temporary Color arrays for updating SH textures
JulienIgnace-Unity Sep 14, 2021
933c678
Added various API and tests to DynamicArray
JulienIgnace-Unity Sep 15, 2021
534d049
Quicksort WIP
JulienIgnace-Unity Sep 15, 2021
4b4fcc2
Implemented quicksort
JulienIgnace-Unity Sep 16, 2021
e65b6e6
Reverted wrong change
JulienIgnace-Unity Sep 16, 2021
8fa4822
Moved QuickSort to a class extension and completed doc
JulienIgnace-Unity Sep 16, 2021
c4dfa09
Small improvement to AddRange
JulienIgnace-Unity Sep 16, 2021
be6493f
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Sep 16, 2021
5dd31b7
Post merge fix
JulienIgnace-Unity Sep 16, 2021
d77069c
Update Changelog
JulienIgnace-Unity Sep 16, 2021
9aa5b44
Merge branch 'hd/apv-cell-streaming' of https://github.com/Unity-Tech…
JulienIgnace-Unity Sep 16, 2021
5d2f8df
Merge branch 'hd/dynamic-array-improvements' of https://github.com/Un…
JulienIgnace-Unity Sep 16, 2021
9d56479
Moved internal array to DynamicArray
JulienIgnace-Unity Sep 17, 2021
d162005
Pooled CellInfo to avoid allocation
JulienIgnace-Unity Sep 17, 2021
3cc6639
Split Update of SH texture in several chunks to avoid allocations.
JulienIgnace-Unity Sep 20, 2021
8022bbf
Fixed chunk copy
JulienIgnace-Unity Sep 20, 2021
8f275a6
Fixed Temporary DataLoc lifetime.
JulienIgnace-Unity Sep 20, 2021
c2b8ba4
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Sep 20, 2021
08d6d59
Relax some condition on RemoveRange in DynamicArray
JulienIgnace-Unity Sep 20, 2021
ba00940
Revert MeshGizmo modifications
JulienIgnace-Unity Sep 20, 2021
be16a6a
Restored changed/hidden gizmo when Cells aren't loaded.
JulienIgnace-Unity Sep 20, 2021
287d3fd
Reverted a bit of temp test code.
JulienIgnace-Unity Sep 20, 2021
5e1e4b3
Small Clean
JulienIgnace-Unity Sep 20, 2021
b0197d4
Added a way to disable streaming of cells.
JulienIgnace-Unity Sep 21, 2021
087a401
Fixed hideFlags for pool textures
JulienIgnace-Unity Sep 21, 2021
c81c29d
partial index buffer update to improve performance.
JulienIgnace-Unity Sep 21, 2021
736bfcb
Fixed an issue where cells would stay in internal structures even aft…
JulienIgnace-Unity Sep 21, 2021
7b832eb
Added names to texture allocated for APV
JulienIgnace-Unity Sep 22, 2021
c9f95a3
Removed useless comment
JulienIgnace-Unity Sep 22, 2021
baa9da3
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Sep 22, 2021
adcaa62
Fixed wrong bound for loop
JulienIgnace-Unity Sep 24, 2021
393bc55
Addressed most PR review feedback
JulienIgnace-Unity Sep 24, 2021
6c51d0a
Filled incoming chunks left over space with black.
JulienIgnace-Unity Sep 24, 2021
d30a196
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Sep 27, 2021
9cfac88
Handled the case where not every cell fit in memory when performing d…
JulienIgnace-Unity Oct 7, 2021
0119f3d
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Oct 7, 2021
a532ab5
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Oct 8, 2021
c93e747
Reworked baking to avoid using runtime structure to fill baked assets
JulienIgnace-Unity Oct 8, 2021
8b96607
Moved reference counting into CellInfo
JulienIgnace-Unity Oct 8, 2021
0b2abad
Moved the APV cell streaming options to the HDRP asset.
JulienIgnace-Unity Oct 12, 2021
d70b848
Fixed cleanup of loaded data
JulienIgnace-Unity Oct 12, 2021
18f7ae8
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Oct 18, 2021
a307b05
Merge branch 'master' of https://github.com/Unity-Technologies/Graphi…
JulienIgnace-Unity Oct 20, 2021
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

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ public static List<Brick> SubdivideCell(ProbeReferenceVolume.Volume cellVolume,
// In case there is at least one brick in the sub-cell, we need to spawn the parent brick.
if (brickCount != brickSet.Count)
{
float minBrickSize = subdivisionCtx.refVolume.profile.minBrickSize;
float minBrickSize = subdivisionCtx.profile.minBrickSize;
Vector3 cellID = (cellAABB.center - cellAABB.extents) / minBrickSize;
float parentSubdivLevel = 3.0f;
for (int i = k_MaxSubdivisionInSubCell; i < ctx.maxSubdivisionLevel; i++)
Expand Down Expand Up @@ -350,7 +350,7 @@ static void SubdivideSubCell(ProbeReferenceVolume.Volume cellVolume, ProbeSubdiv
List<(Terrain terrain, ProbeReferenceVolume.Volume volume)> terrains, HashSet<Brick> brickSet)
{
var cellAABB = cellVolume.CalculateAABB();
float minBrickSize = subdivisionCtx.refVolume.profile.minBrickSize;
float minBrickSize = subdivisionCtx.profile.minBrickSize;

cellVolume.CalculateCenterAndSize(out var center, out var _);
var cmd = CommandBufferPool.Get($"Subdivide (Sub)Cell {center}");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,132 +12,18 @@ namespace UnityEngine.Experimental.Rendering
[CustomEditor(typeof(ProbeReferenceVolumeAuthoring))]
internal class ProbeReferenceVolumeAuthoringEditor : Editor
{
[InitializeOnLoad]
class RealtimeProbeSubdivisionDebug
{
static double s_LastSubdivisionTime;
static double s_LastRefreshTime;
static IEnumerator s_CurrentSubdivision;

static RealtimeProbeSubdivisionDebug()
{
EditorApplication.update -= UpdateRealtimeSubdivisionDebug;
EditorApplication.update += UpdateRealtimeSubdivisionDebug;
}

static void UpdateRealtimeSubdivisionDebug()
{
var debugDisplay = ProbeReferenceVolume.instance.debugDisplay;
if (!debugDisplay.realtimeSubdivision)
return;

// Avoid killing the GPU when Unity is in background and runInBackground is disabled
if (!Application.runInBackground && !UnityEditorInternal.InternalEditorUtility.isApplicationActive)
return;

// update is called 200 times per second so we bring down the update rate to 60hz to avoid overloading the GPU
if (Time.realtimeSinceStartupAsDouble - s_LastRefreshTime < 1.0f / 60.0f)
return;
s_LastRefreshTime = Time.realtimeSinceStartupAsDouble;

if (Time.realtimeSinceStartupAsDouble - s_LastSubdivisionTime > debugDisplay.subdivisionDelayInSeconds)
{
var probeVolumeAuthoring = FindObjectOfType<ProbeReferenceVolumeAuthoring>();
if (probeVolumeAuthoring == null || !probeVolumeAuthoring.isActiveAndEnabled)
return;

if (s_CurrentSubdivision == null)
{
// Start a new Subdivision
s_CurrentSubdivision = Subdivide();
}

// Step the subdivision with the amount of cell per frame in debug menu
int updatePerFrame = debugDisplay.subdivisionCellUpdatePerFrame;
// From simplification level 5 and higher, the cost of calculating one cell is very high, so we adjust that number.
if (probeVolumeAuthoring.profile.simplificationLevels > 4)
updatePerFrame = (int)Mathf.Max(1, updatePerFrame / Mathf.Pow(9, probeVolumeAuthoring.profile.simplificationLevels - 4));
for (int i = 0; i < debugDisplay.subdivisionCellUpdatePerFrame; i++)
{
if (!s_CurrentSubdivision.MoveNext())
{
s_LastSubdivisionTime = Time.realtimeSinceStartupAsDouble;
s_CurrentSubdivision = null;
break;
}
}

IEnumerator Subdivide()
{
var ctx = ProbeGIBaking.PrepareProbeSubdivisionContext(probeVolumeAuthoring);

// Cull all the cells that are not visible (we don't need them for realtime debug)
ctx.cells.RemoveAll(c =>
{
return probeVolumeAuthoring.ShouldCullCell(c.position);
});

Camera activeCamera = Camera.current ?? SceneView.lastActiveSceneView.camera;

// Sort cells by camera distance to compute the closest cells first
if (activeCamera != null)
{
var cameraPos = activeCamera.transform.position;
ctx.cells.Sort((c1, c2) =>
{
c1.volume.CalculateCenterAndSize(out var c1Center, out var _);
float c1Distance = Vector3.Distance(cameraPos, c1Center);

c2.volume.CalculateCenterAndSize(out var c2Center, out var _);
float c2Distance = Vector3.Distance(cameraPos, c2Center);

return c1Distance.CompareTo(c2Distance);
});
}

// Progressively update cells:
var cells = ctx.cells.ToList();

// Remove all the cells that was not updated to prevent ghosting
foreach (var cellVolume in ctx.refVolume.realtimeSubdivisionInfo.Keys.ToList())
{
if (!cells.Any(c => c.volume.Equals(cellVolume)))
ctx.refVolume.realtimeSubdivisionInfo.Remove(cellVolume);
}

// Subdivide visible cells
foreach (var cell in cells)
{
// Override the cell list to only compute one cell
ctx.cells.Clear();
ctx.cells.Add(cell);

var result = ProbeGIBaking.BakeBricks(ctx);
ctx.refVolume.realtimeSubdivisionInfo[cell.volume] = result.bricksPerCells[cell.position];

yield return null;
}

yield break;
}
}
}
}

private SerializedProperty m_Dilate;
private SerializedProperty m_MaxDilationSampleDistance;
private SerializedProperty m_DilationValidityThreshold;
private SerializedProperty m_DilationIterations;
private SerializedProperty m_DilationInvSquaredWeight;
private SerializedProperty m_VolumeAsset;

private SerializedProperty m_EnableVirtualOffset;
private SerializedProperty m_VirtualOffsetGeometrySearchMultiplier;
private SerializedProperty m_VirtualOffsetBiasOutOfGeometry;

private SerializedProperty m_Profile;

internal static readonly GUIContent s_DataAssetLabel = new GUIContent("Data asset", "The asset which serializes all probe related data in this volume.");
internal static readonly GUIContent s_ProfileAssetLabel = new GUIContent("Profile", "The asset which determines the characteristics of the probe reference volume.");

private static bool DilationGroupEnabled;
Expand All @@ -155,7 +41,6 @@ private void OnEnable()
m_DilationInvSquaredWeight = serializedObject.FindProperty("m_DilationInvSquaredWeight");
m_MaxDilationSampleDistance = serializedObject.FindProperty("m_MaxDilationSampleDistance");
m_DilationValidityThreshold = serializedObject.FindProperty("m_DilationValidityThreshold");
m_VolumeAsset = serializedObject.FindProperty("volumeAsset");
m_EnableVirtualOffset = serializedObject.FindProperty("m_EnableVirtualOffset");
m_VirtualOffsetGeometrySearchMultiplier = serializedObject.FindProperty("m_VirtualOffsetGeometrySearchMultiplier");
m_VirtualOffsetBiasOutOfGeometry = serializedObject.FindProperty("m_VirtualOffsetBiasOutOfGeometry");
Expand Down Expand Up @@ -231,8 +116,6 @@ public override void OnInspectorGUI()
m_Profile.objectReferenceValue = asset;
}

m_VolumeAsset.objectReferenceValue = EditorGUILayout.ObjectField(s_DataAssetLabel, m_VolumeAsset.objectReferenceValue, typeof(ProbeVolumeAsset), false);

DilationGroupEnabled = EditorGUILayout.BeginFoldoutHeaderGroup(DilationGroupEnabled, "Dilation");
if (DilationGroupEnabled)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using Unity.Collections;
using System;
using System.Collections;
using System.Linq;
using UnityEditor;

Expand All @@ -12,16 +13,132 @@ namespace UnityEngine.Experimental.Rendering
{
class ProbeSubdivisionContext
{
[InitializeOnLoad]
class RealtimeProbeSubdivisionDebug
{
static double s_LastSubdivisionTime;
static double s_LastRefreshTime;
static IEnumerator s_CurrentSubdivision;

static RealtimeProbeSubdivisionDebug()
{
EditorApplication.update -= UpdateRealtimeSubdivisionDebug;
EditorApplication.update += UpdateRealtimeSubdivisionDebug;
}

static void UpdateRealtimeSubdivisionDebug()
{
var debugDisplay = ProbeReferenceVolume.instance.debugDisplay;
if (!debugDisplay.realtimeSubdivision)
return;

// Avoid killing the GPU when Unity is in background and runInBackground is disabled
if (!Application.runInBackground && !UnityEditorInternal.InternalEditorUtility.isApplicationActive)
return;

// update is called 200 times per second so we bring down the update rate to 60hz to avoid overloading the GPU
if (Time.realtimeSinceStartupAsDouble - s_LastRefreshTime < 1.0f / 60.0f)
return;
s_LastRefreshTime = Time.realtimeSinceStartupAsDouble;

if (Time.realtimeSinceStartupAsDouble - s_LastSubdivisionTime > debugDisplay.subdivisionDelayInSeconds)
{
var probeVolume = GameObject.FindObjectOfType<ProbeVolume>();
if (probeVolume == null || !probeVolume.isActiveAndEnabled || ProbeReferenceVolume.instance.sceneData == null)
return;

var profile = ProbeReferenceVolume.instance.sceneData.GetProfileForScene(probeVolume.gameObject.scene);
if (profile == null)
return;

if (s_CurrentSubdivision == null)
{
// Start a new Subdivision
s_CurrentSubdivision = Subdivide();
}

// Step the subdivision with the amount of cell per frame in debug menu
int updatePerFrame = debugDisplay.subdivisionCellUpdatePerFrame;
// From simplification level 5 and higher, the cost of calculating one cell is very high, so we adjust that number.
if (profile.simplificationLevels > 4)
updatePerFrame = (int)Mathf.Max(1, updatePerFrame / Mathf.Pow(9, profile.simplificationLevels - 4));
for (int i = 0; i < debugDisplay.subdivisionCellUpdatePerFrame; i++)
{
if (!s_CurrentSubdivision.MoveNext())
{
s_LastSubdivisionTime = Time.realtimeSinceStartupAsDouble;
s_CurrentSubdivision = null;
break;
}
}

IEnumerator Subdivide()
{
var ctx = ProbeGIBaking.PrepareProbeSubdivisionContext();

// Cull all the cells that are not visible (we don't need them for realtime debug)
ctx.cells.RemoveAll(c =>
{
return probeVolume.ShouldCullCell(c.position);
});

Camera activeCamera = Camera.current ?? SceneView.lastActiveSceneView.camera;

// Sort cells by camera distance to compute the closest cells first
if (activeCamera != null)
{
var cameraPos = activeCamera.transform.position;
ctx.cells.Sort((c1, c2) =>
{
c1.volume.CalculateCenterAndSize(out var c1Center, out var _);
float c1Distance = Vector3.Distance(cameraPos, c1Center);

c2.volume.CalculateCenterAndSize(out var c2Center, out var _);
float c2Distance = Vector3.Distance(cameraPos, c2Center);

return c1Distance.CompareTo(c2Distance);
});
}

// Progressively update cells:
var cells = ctx.cells.ToList();

// Remove all the cells that was not updated to prevent ghosting
foreach (var cellVolume in ProbeReferenceVolume.instance.realtimeSubdivisionInfo.Keys.ToList())
{
if (!cells.Any(c => c.volume.Equals(cellVolume)))
ProbeReferenceVolume.instance.realtimeSubdivisionInfo.Remove(cellVolume);
}

// Subdivide visible cells
foreach (var cell in cells)
{
// Override the cell list to only compute one cell
ctx.cells.Clear();
ctx.cells.Add(cell);

var result = ProbeGIBaking.BakeBricks(ctx);
ProbeReferenceVolume.instance.realtimeSubdivisionInfo[cell.volume] = result.bricksPerCells[cell.position];

yield return null;
}

yield break;
}
}
}
}

public List<(ProbeVolume component, ProbeReferenceVolume.Volume volume)> probeVolumes = new List<(ProbeVolume, ProbeReferenceVolume.Volume)>();
public List<(Renderer component, ProbeReferenceVolume.Volume volume)> renderers = new List<(Renderer, ProbeReferenceVolume.Volume)>();
public List<(Vector3Int position, ProbeReferenceVolume.Volume volume)> cells = new List<(Vector3Int, ProbeReferenceVolume.Volume)>();
public List<(Terrain, ProbeReferenceVolume.Volume volume)> terrains = new List<(Terrain, ProbeReferenceVolume.Volume)>();
public ProbeReferenceVolumeAuthoring refVolume;
public ProbeReferenceVolumeProfile profile;

public void Initialize(ProbeReferenceVolumeAuthoring refVolume, Vector3 refVolOrigin)
public void Initialize(ProbeReferenceVolumeProfile profile, Vector3 refVolOrigin)
{
this.refVolume = refVolume;
float cellSize = refVolume.cellSizeInMeters;
this.profile = profile;
float cellSize = profile.cellSizeInMeters;

foreach (var pv in UnityEngine.Object.FindObjectsOfType<ProbeVolume>())
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ class CellInstancedDebugProbes

internal float dilationValidtyThreshold = 0.25f; // We ned to store this here to access it

// Field used for the realtime subdivision preview
internal Dictionary<ProbeReferenceVolume.Volume, List<ProbeBrickIndex.Brick>> realtimeSubdivisionInfo = new Dictionary<ProbeReferenceVolume.Volume, List<ProbeBrickIndex.Brick>>();

/// <summary>
/// Render Probe Volume related debug
Expand Down Expand Up @@ -238,6 +240,7 @@ void DrawProbeDebug(Camera camera)
void ClearDebugData()
{
m_CellDebugData.Clear();
realtimeSubdivisionInfo.Clear();
}

void CreateInstancedProbes()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ public struct ProbeVolumeSystemParameters
/// </summary>
public Shader probeDebugShader;

public ProbeVolumeSceneBounds sceneBounds;
public ProbeVolumeSceneData sceneData;
public ProbeVolumeSHBands shBands;
}

Expand Down Expand Up @@ -514,7 +514,7 @@ public override bool Equals(object obj)

internal Dictionary<int, CellInfo> cells = new Dictionary<int, CellInfo>();

internal ProbeVolumeSceneBounds sceneBounds;
internal ProbeVolumeSceneData sceneData;


/// <summary>
Expand Down Expand Up @@ -618,11 +618,11 @@ public void Initialize(in ProbeVolumeSystemParameters parameters)
InitProbeReferenceVolume(m_MemoryBudget, m_SHBands);
m_IsInitialized = true;
m_NeedsIndexRebuild = true;
sceneBounds = parameters.sceneBounds;
sceneData = parameters.sceneData;
#if UNITY_EDITOR
if (sceneBounds != null)
if (sceneData != null)
{
UnityEditor.SceneManagement.EditorSceneManager.sceneSaved += sceneBounds.UpdateSceneBounds;
UnityEditor.SceneManagement.EditorSceneManager.sceneSaved += sceneData.OnSceneSaved;
}
#endif
}
Expand Down Expand Up @@ -822,6 +822,11 @@ void LoadAsset(ProbeVolumeAsset asset)

var path = asset.GetSerializedFullPath();

// Load info coming originally from profile
SetTRS(Vector3.zero, Quaternion.identity, asset.minBrickSize);
SetMaxSubdivision(asset.maxSubdivision);


for (int i = 0; i < asset.cells.Count; ++i)
{
var cell = asset.cells[i];
Expand Down
Loading