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

URP Forward+ #4500

Merged
merged 53 commits into from
May 12, 2021
Merged
Changes from 1 commit
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
ea272de
Create local test project
pbbastian Mar 22, 2021
6df1a49
Update mathematics version, and add burst
pbbastian Mar 22, 2021
7907881
Min max Z job
pbbastian Mar 24, 2021
f555ec6
Add constructor for min max Z job
pbbastian Mar 24, 2021
c50a2ec
Z-sort job prototype (untested)
pbbastian Mar 24, 2021
aa45dbd
Working radix sort using mean Z
pbbastian Mar 25, 2021
63f941a
Added re-ordering job and profiling marker
pbbastian Mar 25, 2021
fd50871
1-level tiling
pbbastian Apr 8, 2021
ec98618
TilingJob -> FineTilingJob
pbbastian Apr 8, 2021
2601fe6
Work on groups of 32 lights at a time
pbbastian Apr 9, 2021
f9a51d8
Minor optimizations
pbbastian Apr 9, 2021
a63f532
rename
pbbastian Apr 9, 2021
9d8aaa7
Move some data into one struct
pbbastian Apr 9, 2021
73eeee1
Hierarchical tiling
pbbastian Apr 13, 2021
4b849d6
Perf improvements for hierarchical tiling
pbbastian Apr 13, 2021
0327b30
Aperture Z-distribution
pbbastian Apr 13, 2021
0622504
Represent tile cone as SDF instead
pbbastian Apr 16, 2021
b9e6cc7
Separate tiling into X & Y + better debug view
pbbastian Apr 19, 2021
7eb1d35
Extract light data for slice culling
pbbastian Apr 19, 2021
0ac14c4
First pass of integration into URP lighting
pbbastian Apr 22, 2021
caa3c0a
Add clustering lighting UI option
pbbastian Apr 22, 2021
869871f
Overlap culling with setup
pbbastian Apr 23, 2021
d2fa370
Get rid of last Shader.SetGlobal
pbbastian Apr 23, 2021
00dd979
Clean up buffers in ForwardLights
pbbastian Apr 23, 2021
991bca9
Fix support for shadows
pbbastian Apr 27, 2021
40e470d
Support for directional lights
pbbastian Apr 28, 2021
f4c8de5
Remove unused code
pbbastian Apr 28, 2021
0d1af65
Use more general shader keyword, move setting to UniversalRenderer, e…
pbbastian Apr 28, 2021
ccdd86e
Handle ZBin factor better and reduce max Zbins to 4096
pbbastian Apr 29, 2021
f59ad71
Add clustered keyword to SM4.5 shaders
pbbastian Apr 29, 2021
bd01746
Make work on Android, fix shadows being stripped, strip clustered var…
pbbastian May 6, 2021
be4e371
Change back to UBOs
pbbastian May 7, 2021
dc699b8
Combine slices into tile structure
pbbastian May 7, 2021
449d2fe
Add clustered keyword to remaining shaders, and remove CPU part from …
pbbastian May 7, 2021
c2e7106
Merge branch 'master' into universal/forward-plus
pbbastian May 10, 2021
daebed7
Re-integrate Lighting.hlsl changes after merge with refactor in master
pbbastian May 10, 2021
7fcb671
Hide UI behind flag, do some minor clean up and fixing
pbbastian May 10, 2021
0741e45
Update UI text to reflect experimental
pbbastian May 10, 2021
2dfd7aa
Remove local test project
pbbastian May 10, 2021
072c8ea
Remove screenshots
pbbastian May 10, 2021
59adaa3
Revert a change
pbbastian May 10, 2021
3380c4f
Undo some unintentional changes and make new API points internal
pbbastian May 10, 2021
12d5433
Remove unused var
pbbastian May 10, 2021
1541413
Remove some more public API
pbbastian May 10, 2021
6af5e1e
Clarify some magic numbers
pbbastian May 11, 2021
b59c4da
Add keyword to Shader Graph targets
pbbastian May 11, 2021
1de6cab
Fix for crashes
pbbastian May 11, 2021
6a548ae
Fix assertion failure
pbbastian May 12, 2021
a529b5f
Merge branch 'master' into universal/forward-plus
pbbastian May 12, 2021
fdfc756
fix for merge
pbbastian May 12, 2021
32ad2e7
Workaround memory allocation assert bug
pbbastian May 12, 2021
e115daf
Fix GPU crash
pbbastian May 12, 2021
3a1bd42
Remove workaround for preview cameras
pbbastian May 12, 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
Change back to UBOs
  • Loading branch information
pbbastian committed May 7, 2021
commit be4e371abdb5b06f50ef25720f6a2154f7dfcf1c
46 changes: 18 additions & 28 deletions com.unity.render-pipelines.universal/Runtime/ForwardLights.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ static class LightConstantBuffer
NativeArray<uint> m_HorizontalLightMasks;
NativeArray<uint> m_VerticalLightMasks;

Vector4[] m_ZBinBuffer;
Vector4[] m_HorizontalBuffer;
Vector4[] m_VerticalBuffer;
ComputeBuffer m_ZBinBuffer;
ComputeBuffer m_HorizontalBuffer;
ComputeBuffer m_VerticalBuffer;

public ForwardLights(bool clusteredRendering, int tileSize)
{
Expand Down Expand Up @@ -91,9 +91,9 @@ public ForwardLights(bool clusteredRendering, int tileSize)

if (m_UseClusteredRendering)
{
m_ZBinBuffer = new Vector4[UniversalRenderPipeline.maxZBins / 4];
m_HorizontalBuffer = new Vector4[UniversalRenderPipeline.maxVisibilityVec4s];
m_VerticalBuffer = new Vector4[UniversalRenderPipeline.maxVisibilityVec4s];
m_ZBinBuffer = new ComputeBuffer(UniversalRenderPipeline.maxZBins / 4, UnsafeUtility.SizeOf<float4>(), ComputeBufferType.Constant);
m_HorizontalBuffer = new ComputeBuffer(UniversalRenderPipeline.maxVisibilityVec4s, UnsafeUtility.SizeOf<float4>(), ComputeBufferType.Constant);
m_VerticalBuffer = new ComputeBuffer(UniversalRenderPipeline.maxVisibilityVec4s, UnsafeUtility.SizeOf<float4>(), ComputeBufferType.Constant);
m_RequestedTileWidth = tileSize;
}
}
Expand Down Expand Up @@ -283,28 +283,18 @@ public void Setup(ScriptableRenderContext context, ref RenderingData renderingDa
{
m_CullingHandle.Complete();

unsafe
{
fixed(Vector4* zBinPtr = m_ZBinBuffer, horizontalPtr = m_HorizontalBuffer, verticalPtr = m_VerticalBuffer)
{
UnsafeUtility.MemCpy(zBinPtr, m_ZBins.GetUnsafeReadOnlyPtr(), m_ZBins.Length * sizeof(ZBin));
UnsafeUtility.MemCpy(horizontalPtr, m_HorizontalLightMasks.GetUnsafeReadOnlyPtr(), m_HorizontalLightMasks.Length * sizeof(uint));
UnsafeUtility.MemCpy(verticalPtr, m_VerticalLightMasks.GetUnsafeReadOnlyPtr(), m_VerticalLightMasks.Length * sizeof(uint));
}
}

// NativeArray<Vector4>.Copy(m_ZBins.Reinterpret<Vector4>(UnsafeUtility.SizeOf<ZBin>()), m_ZBinBuffer, m_ZBins.Length / 4);
// NativeArray<Vector4>.Copy(m_HorizontalLightMasks.Reinterpret<Vector4>(UnsafeUtility.SizeOf<uint>()), m_HorizontalBuffer, m_HorizontalLightMasks.Length / 4);
// NativeArray<Vector4>.Copy(m_VerticalLightMasks.Reinterpret<Vector4>(UnsafeUtility.SizeOf<uint>()), m_VerticalBuffer, m_VerticalLightMasks.Length / 4);
m_ZBinBuffer.SetData(m_ZBins.Reinterpret<float4>(UnsafeUtility.SizeOf<ZBin>()), 0, 0, m_ZBins.Length / 4);
m_HorizontalBuffer.SetData(m_HorizontalLightMasks.Reinterpret<float4>(UnsafeUtility.SizeOf<uint>()), 0, 0, m_HorizontalLightMasks.Length / 4);
m_VerticalBuffer.SetData(m_VerticalLightMasks.Reinterpret<float4>(UnsafeUtility.SizeOf<uint>()), 0, 0, m_VerticalLightMasks.Length / 4);

cmd.SetGlobalInteger("_AdditionalLightsDirectionalCount", m_DirectionalLightCount);
cmd.SetGlobalInteger("_AdditionalLightsZBinOffset", m_ZBinOffset);
cmd.SetGlobalFloat("_AdditionalLightsZBinScale", m_ZBinFactor);
cmd.SetGlobalVector("_AdditionalLightsTileScale", renderingData.cameraData.pixelRect.size / (float)m_ActualTileWidth);

cmd.SetGlobalVectorArray("_AdditionalLightsZBins", m_ZBinBuffer);
cmd.SetGlobalVectorArray("_AdditionalLightsHorizontalVisibility", m_HorizontalBuffer);
cmd.SetGlobalVectorArray("_AdditionalLightsVerticalVisibility", m_VerticalBuffer);
cmd.SetGlobalConstantBuffer(m_ZBinBuffer, "AdditionalLightsZBins", 0, UniversalRenderPipeline.maxZBins);
cmd.SetGlobalConstantBuffer(m_HorizontalBuffer, "AdditionalLightsHorizontalVisibility", 0, UniversalRenderPipeline.maxVisibilityVec4s);
cmd.SetGlobalConstantBuffer(m_VerticalBuffer, "AdditionalLightsVerticalVisibility", 0, UniversalRenderPipeline.maxVisibilityVec4s);

m_ZBins.Dispose();
m_HorizontalLightMasks.Dispose();
Expand Down Expand Up @@ -333,12 +323,12 @@ public void Setup(ScriptableRenderContext context, ref RenderingData renderingDa

public void Dispose()
{
// if (m_UseClusteredRendering)
// {
// m_ZBinBuffer.Dispose();
// m_HorizontalBuffer.Dispose();
// m_VerticalBuffer.Dispose();
// }
if (m_UseClusteredRendering)
{
m_ZBinBuffer.Dispose();
m_HorizontalBuffer.Dispose();
m_VerticalBuffer.Dispose();
}
}

void InitializeLightConstants(NativeArray<VisibleLight> lights, int lightIndex, out Vector4 lightPos, out Vector4 lightColor, out Vector4 lightAttenuation, out Vector4 lightSpotDir, out Vector4 lightOcclusionProbeChannel)
Expand Down