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 1 commit
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
Prev Previous commit
Next Next commit
Moving draw gizmo away and remove all reference of authoring from baking
  • Loading branch information
FrancescoC-unity committed Sep 1, 2021
commit 809f5609532da37cb45c300d7439418e9aab9fb3
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ partial class ProbeGIBaking
{
static bool m_IsInit = false;
static BakingBatch m_BakingBatch;
static ProbeReferenceVolumeAuthoring m_BakingReferenceVolumeAuthoring = null;
static ProbeReferenceVolumeProfile m_BakingProfile = null;
static ProbeVolumeBakingProcessSettings m_BakingSettings;

Expand Down Expand Up @@ -664,12 +663,18 @@ public static void RunPlacement()
ApplySubdivisionResults(result, newRefToWS);
}

public static ProbeSubdivisionContext PrepareProbeSubdivisionContext(ProbeReferenceVolumeAuthoring refVolume)
public static ProbeSubdivisionContext PrepareProbeSubdivisionContext()
{
ProbeSubdivisionContext ctx = new ProbeSubdivisionContext();

// Prepare all the information in the scene for baking GI.
Vector3 refVolOrigin = Vector3.zero; // TODO: This will need to be center of the world bounds.
if (m_BakingProfile == null)
{
var perSceneDataList = GameObject.FindObjectsOfType<ProbeVolumePerSceneData>();
if (perSceneDataList.Length == 0) return ctx;
SetBakingContext(perSceneDataList);
}
ctx.Initialize(m_BakingProfile, refVolOrigin);

return ctx;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,12 @@ static void UpdateRealtimeSubdivisionDebug()

if (Time.realtimeSinceStartupAsDouble - s_LastSubdivisionTime > debugDisplay.subdivisionDelayInSeconds)
{
var probeVolumeAuthoring = FindObjectOfType<ProbeReferenceVolumeAuthoring>();
if (probeVolumeAuthoring == null || !probeVolumeAuthoring.isActiveAndEnabled)
var probeVolume = 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)
Expand All @@ -55,8 +59,8 @@ static void UpdateRealtimeSubdivisionDebug()
// 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));
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())
Expand All @@ -69,12 +73,12 @@ static void UpdateRealtimeSubdivisionDebug()

IEnumerator Subdivide()
{
var ctx = ProbeGIBaking.PrepareProbeSubdivisionContext(probeVolumeAuthoring);
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 probeVolumeAuthoring.ShouldCullCell(c.position);
return probeVolume.ShouldCullCell(c.position);
});

Camera activeCamera = Camera.current ?? SceneView.lastActiveSceneView.camera;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,6 @@ internal static ProbeReferenceVolumeProfile CreateReferenceVolumeProfile(Scene s
[SerializeField]
float m_VirtualOffsetBiasOutOfGeometry = 0.01f;


MeshGizmo brickGizmos;
MeshGizmo cellGizmo;

// In some cases Unity will magically popuplate this private field with a correct value even though it should not be serialized.
// The [NonSerialized] attribute allows to force the asset to be null in case a domain reload happens.
[NonSerialized]
Expand Down Expand Up @@ -155,11 +151,6 @@ internal void QueueAssetRemoval()
return;

#if UNITY_EDITOR
brickGizmos?.Dispose();
brickGizmos = null;
cellGizmo?.Dispose();
cellGizmo = null;

m_PrevAsset = null;
#endif
}
Expand Down Expand Up @@ -210,135 +201,6 @@ void OnDestroy()
QueueAssetRemoval();
}

internal bool ShouldCullCell(Vector3 cellPosition, Vector3 originWS = default(Vector3))
{
if (m_Profile == null)
return true;

var cameraTransform = SceneView.lastActiveSceneView.camera.transform;

Vector3 cellCenterWS = cellPosition * m_Profile.cellSizeInMeters + originWS + Vector3.one * (m_Profile.cellSizeInMeters / 2.0f);

// Round down to cell size distance
float roundedDownDist = Mathf.Floor(Vector3.Distance(cameraTransform.position, cellCenterWS) / m_Profile.cellSizeInMeters) * m_Profile.cellSizeInMeters;

if (roundedDownDist > ProbeReferenceVolume.instance.debugDisplay.subdivisionViewCullingDistance)
return true;

var frustumPlanes = GeometryUtility.CalculateFrustumPlanes(SceneView.lastActiveSceneView.camera);
var volumeAABB = new Bounds(cellCenterWS, m_Profile.cellSizeInMeters * Vector3.one);

return !GeometryUtility.TestPlanesAABB(frustumPlanes, volumeAABB);
}

// TODO: We need to get rid of Handles.DrawWireCube to be able to have those at runtime as well.
void OnDrawGizmos()
{
if (!enabled || !gameObject.activeSelf || !ProbeReferenceVolume.instance.isInitialized)
return;

var debugDisplay = ProbeReferenceVolume.instance.debugDisplay;

if (debugDisplay.drawBricks)
{
var subdivColors = ProbeReferenceVolume.instance.subdivisionDebugColors;

IEnumerable<ProbeBrickIndex.Brick> GetVisibleBricks()
{
if (debugDisplay.realtimeSubdivision)
{
// realtime subdiv cells are already culled
foreach (var kp in ProbeReferenceVolume.instance.realtimeSubdivisionInfo)
{
var cellVolume = kp.Key;

foreach (var brick in kp.Value)
{
yield return brick;
}
}
}
else
{
foreach (var cell in ProbeReferenceVolume.instance.cells.Values)
{
if (ShouldCullCell(cell.position, ProbeReferenceVolume.instance.GetTransform().posWS))
continue;

if (cell.bricks == null)
continue;

foreach (var brick in cell.bricks)
yield return brick;
}
}
}

if (brickGizmos == null)
brickGizmos = new MeshGizmo((int)(Mathf.Pow(3, ProbeBrickIndex.kMaxSubdivisionLevels) * MeshGizmo.vertexCountPerCube));

brickGizmos.Clear();
foreach (var brick in GetVisibleBricks())
{
if (brick.subdivisionLevel < 0)
continue;

Vector3 scaledSize = Vector3.one * Mathf.Pow(3, brick.subdivisionLevel);
Vector3 scaledPos = brick.position + scaledSize / 2;
brickGizmos.AddWireCube(scaledPos, scaledSize, subdivColors[brick.subdivisionLevel]);
}

brickGizmos.RenderWireframe(ProbeReferenceVolume.instance.GetRefSpaceToWS(), gizmoName: "Brick Gizmo Rendering");
}

if (debugDisplay.drawCells)
{
IEnumerable<Vector3> GetVisibleCellCenters()
{
if (debugDisplay.realtimeSubdivision)
{
foreach (var kp in ProbeReferenceVolume.instance.realtimeSubdivisionInfo)
{
kp.Key.CalculateCenterAndSize(out var center, out var _);
yield return center;
}
}
else
{
foreach (var cell in ProbeReferenceVolume.instance.cells.Values)
{
if (ShouldCullCell(cell.position, ProbeReferenceVolume.instance.GetTransform().posWS))
continue;

var positionF = new Vector3(cell.position.x, cell.position.y, cell.position.z);
var center = positionF * m_Profile.cellSizeInMeters + m_Profile.cellSizeInMeters * 0.5f * Vector3.one;
yield return center;
}
}
}

Matrix4x4 trs = Matrix4x4.TRS(ProbeReferenceVolume.instance.GetTransform().posWS, ProbeReferenceVolume.instance.GetTransform().rot, Vector3.one);

// For realtime subdivision, the matrix from ProbeReferenceVolume.instance can be wrong if the profile changed since the last bake
if (debugDisplay.realtimeSubdivision)
trs = Matrix4x4.TRS(transform.position, Quaternion.identity, Vector3.one);

// Fetching this from components instead of from the reference volume allows the user to
// preview how cells will look before they commit to a bake.
Gizmos.color = new Color(0, 1, 0.5f, 0.2f);
Gizmos.matrix = trs;
if (cellGizmo == null)
cellGizmo = new MeshGizmo();
cellGizmo.Clear();
foreach (var center in GetVisibleCellCenters())
{
Gizmos.DrawCube(center, Vector3.one * m_Profile.cellSizeInMeters);
cellGizmo.AddWireCube(center, Vector3.one * m_Profile.cellSizeInMeters, new Color(0, 1, 0.5f, 1));
}
cellGizmo.RenderWireframe(Gizmos.matrix, gizmoName: "Brick Gizmo Rendering");
}
}

// IMPORTANT TODO: This is to be deleted when we have the proper setting panel.
private void Update()
{
Expand Down
Loading