Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
f83cc9c
Fixed mesh changes not propagating correctly when using GRD and GPU O…
lorin-atzberger-unity May 27, 2025
553198b
[Port] [6000.0] [UUM-105392] Fix hdr encoding and postprocess resolve…
kennytann May 27, 2025
718fbd8
[Port] [6000.0] Fix shadow culling for Intermediate renderers
svc-reach-platform-support May 27, 2025
26a6449
[Port] [6000.0] DOCG-7151 Improve journey to API docs of core graphic…
svc-reach-platform-support May 27, 2025
8e81cb7
[Port] [6000.0] [UUM-104830] Add checks for FullScreenRendererFeature…
kennytann May 29, 2025
fdfb5ca
[Port] [6000.0] [HDRP] Fixed Water clamping the screenspace position …
svc-reach-platform-support May 29, 2025
34020ee
6000.0: Fix unclear warnings when user creates more lights than the l…
vrethinachalam Jun 1, 2025
f6869a0
[Port] [6000.0] Fix DRS + CustomPass AfterPostprocess and camera depth
svc-reach-platform-support Jun 3, 2025
fd63622
[Port] [6000.0] [UUM-104352][URP 2D] Fix normal maps account for spri…
kennytann Jun 3, 2025
0bd78a0
[Port] [6000.0] [UUM-18392] 2D Soft Shadows Fix
svc-reach-platform-support Jun 3, 2025
98d182e
[6000.0][VFX][Fix] Account for Custom Pass cullng results in VFX comm…
ludovic-theobald Jun 3, 2025
af936a2
[Port] [6000.0] docg-7131: Add link to HDRP Water system Advanced Pro…
svc-reach-platform-support Jun 5, 2025
ce3f9e6
[6000.0][URP 2D] Port reference image changes for test builds
kennytann Jun 5, 2025
f8e043c
[Port] [6000.0] Accessibility tables update for Adaptive Probe Volume…
svc-reach-platform-support Jun 6, 2025
2f83816
[Port] [6000.0] DOCG-7173 Combine VFX Graph Trigger Event Blocks docs
svc-reach-platform-support Jun 7, 2025
e7c8904
[Port] [6000.0] unity_RendererBounds_Min/max available in URP with BR…
svc-reach-platform-support Jun 7, 2025
81a4270
[ShaderGraph][6000.0] fix a bunch of docs/visual bugs
Jun 10, 2025
e4f69d3
[6.0/srp] added casts ot int of CubeMapFaceID where needed
alexey-unity Jun 10, 2025
b44131b
[Port] [6000.0] [HDRP] UUM-98939: Removed DLSS Sharpness slider as it…
svc-reach-platform-support Jun 10, 2025
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 @@ -10,7 +10,7 @@ There is a global state per user that stores if Unity displays **advanced proper
Not every component or Volume Override includes advanced properties.
If one does, it has a contextual menu to the right of each property section header that includes additional properties. To expose advanced properties for that section, open the contextual menu and click **Advanced Properties**.

For an example, see the **Water Surface** component in [High Definition Render Pipeline (HDRP)](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@latest).
For an example, refer to the **Water Surface** component in [High Definition Render Pipeline (HDRP)](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@latest?subfolder=/manual/settings-and-properties-related-to-the-water-system.html).

By default only standard properties are shown.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
uid: srp-core-api-index
---

# Scriptable Render Pipeline Core scripting API

This is the documentation for the scripting APIs of the Scriptable Render Pipeline (SRP) Core package.

**Note**: URP and HDRP are built on the Scriptable Render Pipeline (SRP) Core package, but have their own class types. For more information, refer to the following:

- [Universal Render Pipeline (URP) Scripting API](https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@17.0/api/index.html)
- [High Definition Render Pipeline (HDRP) Scripting API](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@17.0/api/index.html)
Original file line number Diff line number Diff line change
Expand Up @@ -597,8 +597,8 @@ private void PostPostLateUpdate()
ProcessRenderers(rendererData, unsupportedRenderers.AsArray());
Profiler.EndSample();

Profiler.BeginSample("GPUResidentDrawer.ProcessRendererMaterialChanges");
ProcessRendererMaterialChanges(rendererData.changedID, supportedChangedMaterials.AsArray(), supportedChangedPackedMaterialDatas.AsArray());
Profiler.BeginSample("GPUResidentDrawer.ProcessRendererMaterialAndMeshChanges");
ProcessRendererMaterialAndMeshChanges(rendererData.changedID, supportedChangedMaterials.AsArray(), supportedChangedPackedMaterialDatas.AsArray(), meshDataSorted.changedID);
Profiler.EndSample();

lodGroupTransformData.Dispose();
Expand Down Expand Up @@ -655,9 +655,9 @@ private void ProcessLODGroups(NativeArray<int> changedID, NativeArray<int> destr
m_BatchersContext.TransformLODGroups(transformedID);
}

private void ProcessRendererMaterialChanges(NativeArray<int> excludedRenderers, NativeArray<int> changedMaterials, NativeArray<GPUDrivenPackedMaterialData> changedPackedMaterialDatas)
private void ProcessRendererMaterialAndMeshChanges(NativeArray<int> excludedRenderers, NativeArray<int> changedMaterials, NativeArray<GPUDrivenPackedMaterialData> changedPackedMaterialDatas, NativeArray<int> changedMeshes)
{
if (changedMaterials.Length == 0)
if (changedMaterials.Length == 0 && changedMeshes.Length == 0)
return;

Profiler.BeginSample("GPUResidentDrawer.GetMaterialsWithChangedPackedMaterial");
Expand All @@ -669,7 +669,7 @@ private void ProcessRendererMaterialChanges(NativeArray<int> excludedRenderers,

Profiler.EndSample();

if (filteredMaterials.Count == 0)
if (filteredMaterials.Count == 0 && changedMeshes.Length == 0)
{
filteredMaterials.Dispose();
updatePackedMaterialCacheJob.Complete();
Expand All @@ -679,37 +679,51 @@ private void ProcessRendererMaterialChanges(NativeArray<int> excludedRenderers,
var sortedExcludedRenderers = new NativeArray<int>(excludedRenderers, Allocator.TempJob);
if (sortedExcludedRenderers.Length > 0)
{
Profiler.BeginSample("ProcessRendererMaterialChanges.Sort");
Profiler.BeginSample("ProcessRendererMaterialAndMeshChanges.Sort");
sortedExcludedRenderers.ParallelSort().Complete();
Profiler.EndSample();
}

Profiler.BeginSample("GPUResidentDrawer.FindRenderersFromMaterials");
Profiler.BeginSample("GPUResidentDrawer.FindRenderersFromMaterialsOrMeshes");

NativeList<int> renderersWithChangedMaterials = FindRenderersFromMaterials(sortedExcludedRenderers, filteredMaterials, Allocator.TempJob);
var (renderersWithChangedMaterials, renderersWithChangedMeshes) = FindRenderersFromMaterialsOrMeshes(sortedExcludedRenderers, filteredMaterials, changedMeshes, Allocator.TempJob);
filteredMaterials.Dispose();

Profiler.EndSample();

sortedExcludedRenderers.Dispose();
updatePackedMaterialCacheJob.Complete();

if (renderersWithChangedMaterials.Length == 0)
if (renderersWithChangedMaterials.Length == 0 && renderersWithChangedMeshes.Length == 0)
{
renderersWithChangedMaterials.Dispose();
renderersWithChangedMeshes.Dispose();
return;
}

Profiler.BeginSample("GPUResidentDrawer.UpdateRenderers");
{
var materialChangedInstances = new NativeArray<InstanceHandle>(renderersWithChangedMaterials.Length, Allocator.TempJob, NativeArrayOptions.UninitializedMemory);
ScheduleQueryRendererGroupInstancesJob(renderersWithChangedMaterials.AsArray(), materialChangedInstances).Complete();
var changedMaterialsCount = renderersWithChangedMaterials.Length;
var changedMeshesCount = renderersWithChangedMeshes.Length;
var totalCount = changedMaterialsCount + changedMeshesCount;

m_Batcher.DestroyDrawInstances(materialChangedInstances);
materialChangedInstances.Dispose();

var changedInstances = new NativeArray<InstanceHandle>(totalCount, Allocator.TempJob, NativeArrayOptions.UninitializedMemory);
var changedRenderers = new NativeArray<int>(totalCount, Allocator.TempJob, NativeArrayOptions.UninitializedMemory);

NativeArray<int>.Copy(renderersWithChangedMaterials.AsArray(), changedRenderers, changedMaterialsCount);
NativeArray<int>.Copy(renderersWithChangedMeshes.AsArray(), changedRenderers.GetSubArray(changedMaterialsCount, changedMeshesCount), changedMeshesCount);

ScheduleQueryRendererGroupInstancesJob(changedRenderers, changedInstances).Complete();

m_Batcher.DestroyDrawInstances(changedInstances);
m_Batcher.UpdateRenderers(renderersWithChangedMaterials.AsArray(), true);
m_Batcher.UpdateRenderers(renderersWithChangedMeshes.AsArray(), false);

changedInstances.Dispose();
changedRenderers.Dispose();
renderersWithChangedMaterials.Dispose();
renderersWithChangedMeshes.Dispose();
}
Profiler.EndSample();
}
Expand Down Expand Up @@ -858,22 +872,26 @@ private NativeHashSet<int> GetMaterialsWithChangedPackedMaterial(NativeArray<int
return filteredMaterials;
}

private NativeList<int> FindRenderersFromMaterials(NativeArray<int> sortedExcludeRenderers, NativeHashSet<int> materials, Allocator rendererListAllocator)
private (NativeList<int> renderersWithMaterials, NativeList<int> renderersWithMeshes) FindRenderersFromMaterialsOrMeshes(NativeArray<int> sortedExcludeRenderers, NativeHashSet<int> materials, NativeArray<int> meshes, Allocator rendererListAllocator)
{
var sharedInstanceData = m_BatchersContext.sharedInstanceData;
NativeList<int> renderers = new NativeList<int>(sharedInstanceData.rendererGroupIDs.Length, rendererListAllocator);
NativeList<int> renderersWithMaterials = new NativeList<int>(sharedInstanceData.rendererGroupIDs.Length, rendererListAllocator);
NativeList<int> renderersWithMeshes = new NativeList<int>(sharedInstanceData.rendererGroupIDs.Length, rendererListAllocator);

var jobHandle = new FindRenderersFromMaterialJob
var jobHandle = new FindRenderersFromMaterialOrMeshJob
{
materialIDs = materials.AsReadOnly(),
materialIDArrays = sharedInstanceData.materialIDArrays,
meshIDs = meshes.AsReadOnly(),
meshIDArray = sharedInstanceData.meshIDs,
rendererGroupIDs = sharedInstanceData.rendererGroupIDs,
sortedExcludeRendererIDs = sortedExcludeRenderers.AsReadOnly(),
selectedRenderGroups = renderers.AsParallelWriter(),
}.ScheduleBatch(sharedInstanceData.rendererGroupIDs.Length, FindRenderersFromMaterialJob.k_BatchSize);
selectedRenderGroupsForMaterials = renderersWithMaterials.AsParallelWriter(),
selectedRenderGroupsForMeshes = renderersWithMeshes.AsParallelWriter()
}.ScheduleBatch(sharedInstanceData.rendererGroupIDs.Length, FindRenderersFromMaterialOrMeshJob.k_BatchSize);
jobHandle.Complete();

return renderers;
return (renderersWithMaterials, renderersWithMeshes);
}

[BurstCompile(DisableSafetyChecks = true, OptimizeFor = OptimizeFor.Performance)]
Expand Down Expand Up @@ -950,22 +968,29 @@ public unsafe void Execute()
}

[BurstCompile(DisableSafetyChecks = true, OptimizeFor = OptimizeFor.Performance)]
private unsafe struct FindRenderersFromMaterialJob : IJobParallelForBatch
private unsafe struct FindRenderersFromMaterialOrMeshJob : IJobParallelForBatch
{
public const int k_BatchSize = 128;

[ReadOnly] public NativeHashSet<int>.ReadOnly materialIDs;
[ReadOnly] public NativeArray<SmallIntegerArray>.ReadOnly materialIDArrays;
[ReadOnly] public NativeArray<int>.ReadOnly meshIDs;
[ReadOnly] public NativeArray<int>.ReadOnly meshIDArray;
[ReadOnly] public NativeArray<int>.ReadOnly rendererGroupIDs;
[ReadOnly] public NativeArray<int>.ReadOnly sortedExcludeRendererIDs;

[WriteOnly] public NativeList<int>.ParallelWriter selectedRenderGroups;

[WriteOnly] public NativeList<int>.ParallelWriter selectedRenderGroupsForMaterials;
[WriteOnly] public NativeList<int>.ParallelWriter selectedRenderGroupsForMeshes;

public void Execute(int startIndex, int count)
{
int* renderersToAddPtr = stackalloc int[k_BatchSize];
var renderersToAdd = new UnsafeList<int>(renderersToAddPtr, k_BatchSize);
renderersToAdd.Length = 0;
int* renderersToAddForMaterialsPtr = stackalloc int[k_BatchSize];
var renderersToAddForMaterials = new UnsafeList<int>(renderersToAddForMaterialsPtr, k_BatchSize);
renderersToAddForMaterials.Length = 0;

int* renderersToAddForMeshesPtr = stackalloc int[k_BatchSize];
var renderersToAddForMeshes = new UnsafeList<int>(renderersToAddForMeshesPtr, k_BatchSize);
renderersToAddForMeshes.Length = 0;

for (int index = 0; index < count; index++)
{
Expand All @@ -976,20 +1001,33 @@ public void Execute(int startIndex, int count)
if (sortedExcludeRendererIDs.BinarySearch(rendererID) >= 0)
continue;

var rendererMaterials = materialIDArrays[rendererIndex];

for (int materialIndex = 0; materialIndex < rendererMaterials.Length; materialIndex++)
{
var materialID = rendererMaterials[materialIndex];
if (materialIDs.Contains(materialID))
var meshID = meshIDArray[rendererIndex];
if (meshIDs.Contains(meshID))
{
renderersToAdd.AddNoResize(rendererID);
break;
renderersToAddForMeshes.AddNoResize(rendererID);
// We can skip the material check if we found a mesh match since at this point
// the renderer is already added and will be processed by the mesh branch
continue;
}
}
{
var rendererMaterials = materialIDArrays[rendererIndex];

for (int materialIndex = 0; materialIndex < rendererMaterials.Length; materialIndex++)
{
var materialID = rendererMaterials[materialIndex];
if (materialIDs.Contains(materialID))
{
renderersToAddForMaterials.AddNoResize(rendererID);
break;
}
}
}
}

selectedRenderGroups.AddRangeNoResize(renderersToAddPtr, renderersToAdd.Length);
selectedRenderGroupsForMaterials.AddRangeNoResize(renderersToAddForMaterialsPtr, renderersToAddForMaterials.Length);
selectedRenderGroupsForMeshes.AddRangeNoResize(renderersToAddForMeshesPtr, renderersToAddForMeshes.Length);
}
}

Expand Down
Loading