Skip to content

Commit dac8552

Browse files
Revert "[HDRP] Implement conservative voxelization for APV (#6473)"
This reverts commit 1fe51a8. # Conflicts: # com.unity.render-pipelines.high-definition/CHANGELOG.md
1 parent 1aaf279 commit dac8552

File tree

11 files changed

+38
-121
lines changed

11 files changed

+38
-121
lines changed

com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.cs

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -732,28 +732,14 @@ public static ProbeSubdivisionResult BakeBricks(ProbeSubdivisionContext ctx)
732732
{
733733
var go = renderer.component.gameObject;
734734
int rendererLayerMask = 1 << go.layer;
735-
renderer.volume.CalculateCenterAndSize(out _, out var rendererBoundsSize);
736-
float rendererBoundsVolume = rendererBoundsSize.x * rendererBoundsSize.y * rendererBoundsSize.z;
737735

738736
foreach (var probeVolume in overlappingProbeVolumes)
739737
{
740-
// Skip renderers that have a smaller volume than the min volume size from the profile or probe volume component
741-
float minRendererBoundingBoxSize = ctx.profile.minRendererVolumeSize;
742-
if (probeVolume.component.overrideRendererFilters)
743-
minRendererBoundingBoxSize = probeVolume.component.minRendererVolumeSize;
744-
if (rendererBoundsVolume < minRendererBoundingBoxSize)
745-
continue;
746-
747738
if (ProbeVolumePositioning.OBBIntersect(renderer.volume, probeVolume.volume)
748739
&& ProbeVolumePositioning.OBBIntersect(renderer.volume, cell.volume))
749740
{
750-
var layerMask = ctx.profile.renderersLayerMask;
751-
752-
if (probeVolume.component.overrideRendererFilters)
753-
layerMask = probeVolume.component.objectLayerMask;
754-
755741
// Check if the renderer has a matching layer with probe volume
756-
if ((layerMask & rendererLayerMask) != 0)
742+
if ((probeVolume.component.objectLayerMask & rendererLayerMask) != 0)
757743
{
758744
validRenderers.Add(renderer);
759745
scenesInCell.Add(go.scene);

com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbePlacement.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ struct GPUProbeVolumeOBB
3232
public int minControllerSubdivLevel;
3333
public int maxControllerSubdivLevel;
3434
public int maxSubdivLevelInsideVolume;
35+
public float geometryDistanceOffset;
3536
}
3637

3738
public class GPUSubdivisionContext : IDisposable
@@ -620,6 +621,7 @@ static void VoxelizeProbeVolumeData(CommandBuffer cmd, Bounds cellAABB,
620621
minControllerSubdivLevel = minSubdiv,
621622
maxControllerSubdivLevel = maxSubdiv,
622623
maxSubdivLevelInsideVolume = subdivLevel,
624+
geometryDistanceOffset = kp.component.geometryDistanceOffset,
623625
});
624626
}
625627

com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbePlacement.cs.hlsl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ struct GPUProbeVolumeOBB
1515
int minControllerSubdivLevel;
1616
int maxControllerSubdivLevel;
1717
int maxSubdivLevelInsideVolume;
18+
float geometryDistanceOffset;
1819
};
1920

2021

com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeBakingWindow.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,10 +419,10 @@ void DelayCreateAsset()
419419
if (m_ProbeVolumeProfileEditor.target != set.profile)
420420
Editor.CreateCachedEditor(set.profile, m_ProbeVolumeProfileEditor.GetType(), ref m_ProbeVolumeProfileEditor);
421421

422-
EditorGUILayout.LabelField("Probe Volume Profile", EditorStyles.boldLabel);
423-
EditorGUI.indentLevel++;
422+
EditorGUILayout.LabelField("Probe Volume Profile", EditorStyles.largeLabel);
424423
m_ProbeVolumeProfileEditor.OnInspectorGUI();
425-
EditorGUI.indentLevel--;
424+
425+
EditorGUILayout.Space();
426426

427427
var serializedSets = m_ProbeSceneData.FindPropertyRelative("serializedBakingSets");
428428
var serializedSet = serializedSets.GetArrayElementAtIndex(m_BakingSets.index);

com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeSubdivide.compute

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ bool PointInsideOBB(GPUProbeVolumeOBB obbA, GPUProbeVolumeOBB obbB)
200200
void VoxelizeProbeVolumeData(uint3 id : SV_DispatchThreadID)
201201
{
202202
float2 subdivisionLimits = float2(0, 0);
203+
float maxGeometryDistance = -1e20;
203204
float maxSubdivLevelInsideVolume = 0;
204205

205206
if (any(id >= uint3(_MaxBrickSize.xyz)))
@@ -221,11 +222,12 @@ void VoxelizeProbeVolumeData(uint3 id : SV_DispatchThreadID)
221222

222223
subdivisionLimits.x = max(subdivisionLimits.x, obb.minControllerSubdivLevel);
223224
subdivisionLimits.y = max(subdivisionLimits.y, obb.maxControllerSubdivLevel);
225+
maxGeometryDistance = max(maxGeometryDistance, obb.geometryDistanceOffset);
224226
maxSubdivLevelInsideVolume = max(maxSubdivLevelInsideVolume, obb.maxSubdivLevelInsideVolume);
225227
}
226228
}
227229

228-
_Output[id] = float4(subdivisionLimits, 0, maxSubdivLevelInsideVolume);
230+
_Output[id] = float4(subdivisionLimits, maxGeometryDistance, maxSubdivLevelInsideVolume);
229231
}
230232

231233
[numthreads(8, 8, 1)]
@@ -246,6 +248,7 @@ void Subdivide(uint3 id : SV_DispatchThreadID)
246248
if (_SubdivisionLevel < maxControllerSubdivLevel || _SubdivisionLevel > maxSubdivLevelInsideVolume)
247249
return;
248250

251+
249252
uint3 sdfId = floor(position01 * _SDFSize.xyz);
250253

251254
float dist = _Input[sdfId].r;
@@ -256,6 +259,9 @@ void Subdivide(uint3 id : SV_DispatchThreadID)
256259

257260
int minControllerSubdivLevel = _MaxSubdivisionLevel - subdivisionLevelData.x - 1;
258261

262+
// Add a small offset to control how the subdivision looks from the probe volume
263+
voxelDetectionDistance += subdivisionLevelData.z * rcp(_MaxBrickSize.x);
264+
259265
if (dist <= voxelDetectionDistance || _SubdivisionLevel > minControllerSubdivLevel)
260266
{
261267
// transform id to world position

com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeUI.Drawer.cs

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -187,12 +187,9 @@ static void Drawer_VolumeContent(SerializedProbeVolume serialized, Editor owner)
187187
if (serialized.highestSubdivisionLevelOverride.intValue < 0)
188188
serialized.highestSubdivisionLevelOverride.intValue = maxSubdiv;
189189

190-
using (new EditorGUI.IndentLevelScope())
191-
{
192-
serialized.highestSubdivisionLevelOverride.intValue = Mathf.Min(maxSubdiv, EditorGUILayout.IntSlider(Styles.s_HighestSubdivLevel, serialized.highestSubdivisionLevelOverride.intValue, 0, maxSubdiv));
193-
serialized.lowestSubdivisionLevelOverride.intValue = Mathf.Min(maxSubdiv, EditorGUILayout.IntSlider(Styles.s_LowestSubdivLevel, serialized.lowestSubdivisionLevelOverride.intValue, 0, maxSubdiv));
194-
serialized.lowestSubdivisionLevelOverride.intValue = Mathf.Min(serialized.lowestSubdivisionLevelOverride.intValue, serialized.highestSubdivisionLevelOverride.intValue);
195-
}
190+
serialized.highestSubdivisionLevelOverride.intValue = Mathf.Min(maxSubdiv, EditorGUILayout.IntSlider(Styles.s_HighestSubdivLevel, serialized.highestSubdivisionLevelOverride.intValue, 0, maxSubdiv));
191+
serialized.lowestSubdivisionLevelOverride.intValue = Mathf.Min(maxSubdiv, EditorGUILayout.IntSlider(Styles.s_LowestSubdivLevel, serialized.lowestSubdivisionLevelOverride.intValue, 0, maxSubdiv));
192+
serialized.lowestSubdivisionLevelOverride.intValue = Mathf.Min(serialized.lowestSubdivisionLevelOverride.intValue, serialized.highestSubdivisionLevelOverride.intValue);
196193
EditorGUI.EndProperty();
197194
EditorGUI.EndProperty();
198195

@@ -217,14 +214,10 @@ static void Drawer_VolumeContent(SerializedProbeVolume serialized, Editor owner)
217214

218215
EditorGUILayout.LabelField("Geometry Settings", EditorStyles.boldLabel);
219216

220-
EditorGUILayout.PropertyField(serialized.overrideRendererFilters, Styles.s_OverrideRendererFilters);
221-
if (serialized.overrideRendererFilters.boolValue)
222-
{
223-
EditorGUI.indentLevel++;
224-
EditorGUILayout.PropertyField(serialized.objectLayerMask, Styles.s_ObjectLayerMask);
225-
EditorGUILayout.PropertyField(serialized.minRendererVolumeSize, Styles.s_MinRendererVolumeSize);
226-
EditorGUI.indentLevel--;
227-
}
217+
EditorGUI.indentLevel++;
218+
EditorGUILayout.PropertyField(serialized.objectLayerMask, Styles.s_ObjectLayerMask);
219+
EditorGUILayout.PropertyField(serialized.geometryDistanceOffset, Styles.s_GeometryDistanceOffset);
220+
EditorGUI.indentLevel--;
228221
}
229222
}
230223
}

com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeUI.Skin.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ internal static class Styles
1212
internal static readonly GUIContent s_HighestSubdivLevel = new GUIContent("Highest Subdivision Level", "Overrides the highest subdivision level used by the system. This determines how finely a probe volume is subdivided, lower values means larger minimum distance between probes.");
1313
internal static readonly GUIContent s_LowestSubdivLevel = new GUIContent("Lowest Subdivision Level", "Overrides the lowest subdivision level used by the system. This determines how coarsely a probe volume is allowed to be subdivided, higher values means smaller maximum distance between probes.");
1414
internal static readonly GUIContent s_ObjectLayerMask = new GUIContent("Layer Mask", "Control which layers will be used to select the meshes for the probe placement algorithm.");
15-
internal static readonly GUIContent s_MinRendererVolumeSize = new GUIContent("Min Volume Size", "Specifies the minimum bounding box volume of renderers to consider placing probes around.");
16-
internal static readonly GUIContent s_OverrideRendererFilters = new GUIContent("Override Renderer Filters", "Overrides the filters used to select renderers for the probe placement.");
15+
internal static readonly GUIContent s_GeometryDistanceOffset = new GUIContent("Probe Placement Distance Offset", "Affects the minimum distance at which the subdivision system will attempts to place probes near the geometry. This value can be useful in situations where the generated probes don't fully cover an object.");
1716
internal static readonly string s_ProbeVolumeChangedMessage = "The probe volume has changed since last baking or the data was never baked.\nPlease bake lighting in the lighting panel to update the lighting data.";
1817

1918
internal static readonly Color k_GizmoColorBase = new Color32(137, 222, 144, 255);

com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/SerializedProbeVolume.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ internal class SerializedProbeVolume
1010
internal SerializedProperty highestSubdivisionLevelOverride;
1111
internal SerializedProperty lowestSubdivisionLevelOverride;
1212
internal SerializedProperty objectLayerMask;
13-
internal SerializedProperty minRendererVolumeSize;
14-
internal SerializedProperty overrideRendererFilters;
13+
internal SerializedProperty geometryDistanceOffset;
1514

1615
internal SerializedObject serializedObject;
1716

@@ -22,8 +21,7 @@ internal SerializedProbeVolume(SerializedObject obj)
2221
globalVolume = serializedObject.FindProperty("globalVolume");
2322
size = serializedObject.FindProperty("size");
2423
objectLayerMask = serializedObject.FindProperty("objectLayerMask");
25-
minRendererVolumeSize = serializedObject.FindProperty("minRendererVolumeSize");
26-
overrideRendererFilters = serializedObject.FindProperty("overrideRendererFilters");
24+
geometryDistanceOffset = serializedObject.FindProperty("geometryDistanceOffset");
2725
highestSubdivisionLevelOverride = serializedObject.FindProperty("highestSubdivLevelOverride");
2826
lowestSubdivisionLevelOverride = serializedObject.FindProperty("lowestSubdivLevelOverride");
2927
overridesSubdivision = serializedObject.FindProperty("overridesSubdivLevels");

com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/VoxelizeScene.shader

Lines changed: 4 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@ Shader "Hidden/ProbeVolume/VoxelizeScene"
1717
ColorMask 0
1818
ZWrite Off
1919
ZClip Off
20-
Conservative True
2120

2221
HLSLPROGRAM
2322
#pragma vertex vert
24-
#pragma geometry geom
2523
#pragma fragment frag
2624
#pragma target 4.5
2725
// #pragma enable_d3d11_debug_symbols
@@ -35,24 +33,15 @@ Shader "Hidden/ProbeVolume/VoxelizeScene"
3533
float3 _VolumeSize;
3634
uint _AxisSwizzle;
3735

38-
struct VertexToGeometry
39-
{
40-
float4 vertex : SV_POSITION;
41-
float3 cellPos01 : TEXCOORD0;
42-
};
43-
44-
struct GeometryToFragment
36+
struct VertexToFragment
4537
{
4638
float4 vertex : SV_POSITION;
4739
float3 cellPos01 : TEXCOORD0;
48-
nointerpolation float2 minMaxX : TEXCOORD1;
49-
nointerpolation float2 minMaxY : TEXCOORD2;
50-
nointerpolation float2 minMaxZ : TEXCOORD3;
5140
};
5241

53-
VertexToGeometry vert(float4 vertex : POSITION)
42+
VertexToFragment vert(float4 vertex : POSITION)
5443
{
55-
VertexToGeometry o;
44+
VertexToFragment o;
5645

5746
float3 cellPos = mul(unity_ObjectToWorld, vertex).xyz;
5847
cellPos -= _VolumeWorldOffset;
@@ -81,33 +70,8 @@ Shader "Hidden/ProbeVolume/VoxelizeScene"
8170
return o;
8271
}
8372

84-
[maxvertexcount(3)]
85-
void geom(triangle VertexToGeometry inputVertex[3], inout TriangleStream<GeometryToFragment> triangleStream)
86-
{
87-
float3 minPos = min(min(inputVertex[0].cellPos01, inputVertex[1].cellPos01), inputVertex[2].cellPos01) - rcp(_OutputSize.x);
88-
float3 maxPos = max(max(inputVertex[0].cellPos01, inputVertex[1].cellPos01), inputVertex[2].cellPos01) + rcp(_OutputSize.x);
89-
90-
for (int i = 0; i < 3; i++)
91-
{
92-
GeometryToFragment o;
93-
o.vertex = inputVertex[i].vertex;
94-
o.cellPos01 = inputVertex[i].cellPos01;
95-
o.minMaxX = float2(minPos.x, maxPos.x);
96-
o.minMaxY = float2(minPos.y, maxPos.y);
97-
o.minMaxZ = float2(minPos.z, maxPos.z);
98-
triangleStream.Append(o);
99-
}
100-
}
101-
102-
float4 frag(GeometryToFragment i) : COLOR
73+
float4 frag(VertexToFragment i) : COLOR
10374
{
104-
if (i.cellPos01.x < i.minMaxX.x || i.cellPos01.x > i.minMaxX.y)
105-
return 0;
106-
if (i.cellPos01.y < i.minMaxY.x || i.cellPos01.y > i.minMaxY.y)
107-
return 0;
108-
if (i.cellPos01.z < i.minMaxZ.x || i.cellPos01.z > i.minMaxZ.y)
109-
return 0;
110-
11175
if (any(i.cellPos01 < -EPSILON) || any(i.cellPos01 >= 1 + EPSILON))
11276
return 0;
11377

com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeReferenceVolumeProfile.cs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,6 @@ internal enum Version
5050
/// </summary>
5151
public float cellSizeInMeters => (float)cellSizeInBricks * minBrickSize;
5252

53-
/// <summary>
54-
/// Layer mask filter for all renderers.
55-
/// </summary>
56-
public LayerMask renderersLayerMask = -1;
57-
58-
/// <summary>
59-
/// Specifies the minimum bounding box volume of renderers to consider placing probes around.
60-
/// </summary>
61-
[Min(0)]
62-
public float minRendererVolumeSize = 0.1f;
63-
6453
void OnEnable()
6554
{
6655
if (version != CoreUtils.GetLastEnumValue<Version>())
@@ -78,8 +67,7 @@ public bool IsEquivalent(ProbeReferenceVolumeProfile otherProfile)
7867
{
7968
return minDistanceBetweenProbes == otherProfile.minDistanceBetweenProbes &&
8069
cellSizeInMeters == otherProfile.cellSizeInMeters &&
81-
simplificationLevels == otherProfile.simplificationLevels &&
82-
renderersLayerMask == otherProfile.renderersLayerMask;
70+
simplificationLevels == otherProfile.simplificationLevels;
8371
}
8472
}
8573

@@ -91,8 +79,6 @@ internal class ProbeReferenceVolumeProfileEditor : Editor
9179
SerializedProperty m_CellSize;
9280
SerializedProperty m_MinDistanceBetweenProbes;
9381
SerializedProperty m_SimplificationLevels;
94-
SerializedProperty m_MinRendererVolumeSize;
95-
SerializedProperty m_RenderersLayerMask;
9682
ProbeReferenceVolumeProfile profile => target as ProbeReferenceVolumeProfile;
9783

9884
static class Styles
@@ -102,17 +88,13 @@ static class Styles
10288
public static readonly string simplificationLevelsHighWarning = "High simplification levels have a big memory overhead, they are not recommended except for testing purposes.";
10389
public static readonly GUIContent minDistanceBetweenProbes = new GUIContent("Min Distance Between Probes", "The minimal distance between two probes in meters.");
10490
public static readonly GUIContent indexDimensions = new GUIContent("Index Dimensions", "The dimensions of the index buffer.");
105-
public static readonly GUIContent minRendererVolumeSize = new GUIContent("Min Renderer Volume Size", "Specifies the minimum bounding box volume of renderers to consider placing probes around.");
106-
public static readonly GUIContent renderersLayerMask = new GUIContent("Layer Mask", "Specifies the layer mask for renderers when placing probes.");
10791
}
10892

10993
void OnEnable()
11094
{
11195
m_CellSize = serializedObject.FindProperty(nameof(ProbeReferenceVolumeProfile.cellSizeInBricks));
11296
m_MinDistanceBetweenProbes = serializedObject.FindProperty(nameof(ProbeReferenceVolumeProfile.minDistanceBetweenProbes));
11397
m_SimplificationLevels = serializedObject.FindProperty(nameof(ProbeReferenceVolumeProfile.simplificationLevels));
114-
m_MinRendererVolumeSize = serializedObject.FindProperty(nameof(ProbeReferenceVolumeProfile.minRendererVolumeSize));
115-
m_RenderersLayerMask = serializedObject.FindProperty(nameof(ProbeReferenceVolumeProfile.renderersLayerMask));
11698
}
11799

118100
public override void OnInspectorGUI()
@@ -128,12 +110,6 @@ public override void OnInspectorGUI()
128110
EditorGUILayout.PropertyField(m_MinDistanceBetweenProbes, Styles.minDistanceBetweenProbes);
129111
EditorGUILayout.HelpBox($"The distance between probes will fluctuate between : {profile.minDistanceBetweenProbes}m and {profile.cellSizeInMeters / 3.0f}m", MessageType.Info);
130112

131-
EditorGUILayout.LabelField("Renderers Filter Settings", EditorStyles.boldLabel);
132-
EditorGUI.indentLevel++;
133-
EditorGUILayout.PropertyField(m_RenderersLayerMask, Styles.renderersLayerMask);
134-
EditorGUILayout.PropertyField(m_MinRendererVolumeSize, Styles.minRendererVolumeSize);
135-
EditorGUI.indentLevel--;
136-
137113
if (EditorGUI.EndChangeCheck())
138114
serializedObject.ApplyModifiedProperties();
139115
}

0 commit comments

Comments
 (0)