Skip to content

Commit acf697b

Browse files
pema99Evergreen
authored andcommitted
Split direct lightmap integrator into light ray and BRDF ray part
1 parent f6b4a1f commit acf697b

File tree

11 files changed

+554
-169
lines changed

11 files changed

+554
-169
lines changed

Packages/com.unity.render-pipelines.core/Editor/PathTracing/LightBakerStrangler.cs

Lines changed: 146 additions & 63 deletions
Large diffs are not rendered by default.

Packages/com.unity.render-pipelines.core/Runtime/PathTracing/BakeLightmap.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,12 @@ internal class LightmapDesc
130130
internal enum IntegratedOutputType
131131
{
132132
Direct,
133+
DirectBRDF,
133134
Indirect,
134135
AO,
135136
Validity,
136137
DirectionalityDirect,
138+
DirectionalityDirectBRDF,
137139
DirectionalityIndirect,
138140
ShadowMask
139141
}
@@ -142,6 +144,7 @@ internal class LightmapIntegratorContext : IDisposable
142144
{
143145
internal UVFallbackBufferBuilder UVFallbackBufferBuilder;
144146
internal LightmapDirectIntegrator LightmapDirectIntegrator;
147+
internal LightmapDirectBRDFIntegrator LightmapDirectBRDFIntegrator;
145148
internal LightmapIndirectIntegrator LightmapIndirectIntegrator;
146149
internal LightmapAOIntegrator LightmapAOIntegrator;
147150
internal LightmapValidityIntegrator LightmapValidityIntegrator;
@@ -171,6 +174,8 @@ public void Dispose()
171174
UVFallbackBufferBuilder = null;
172175
LightmapDirectIntegrator?.Dispose();
173176
LightmapDirectIntegrator = null;
177+
LightmapDirectBRDFIntegrator?.Dispose();
178+
LightmapDirectBRDFIntegrator = null;
174179
LightmapIndirectIntegrator?.Dispose();
175180
LightmapIndirectIntegrator = null;
176181
LightmapAOIntegrator?.Dispose();
@@ -200,6 +205,8 @@ internal void Initialize(SamplingResources samplingResources, LightmapResourceLi
200205
UVFallbackBufferBuilder.Prepare(lightmapResourceLib.UVFallbackBufferGenerationMaterial);
201206
LightmapDirectIntegrator = new LightmapDirectIntegrator();
202207
LightmapDirectIntegrator.Prepare(lightmapResourceLib.DirectAccumulationShader, lightmapResourceLib.NormalizationShader, lightmapResourceLib.ExpansionHelpers, SamplingResources, _emptyExposureTexture);
208+
LightmapDirectBRDFIntegrator = new LightmapDirectBRDFIntegrator();
209+
LightmapDirectBRDFIntegrator.Prepare(lightmapResourceLib.DirectBRDFAccumulationShader, lightmapResourceLib.NormalizationShader, lightmapResourceLib.ExpansionHelpers, SamplingResources, _emptyExposureTexture);
203210
LightmapIndirectIntegrator = new LightmapIndirectIntegrator();
204211
LightmapIndirectIntegrator.Prepare(lightmapResourceLib.IndirectAccumulationShader, lightmapResourceLib.NormalizationShader, lightmapResourceLib.ExpansionHelpers, SamplingResources, _emptyExposureTexture);
205212
LightmapAOIntegrator = new LightmapAOIntegrator();
@@ -236,6 +243,7 @@ internal class LightmapResourceLibrary
236243
internal IRayTracingShader GBufferShader;
237244
internal ComputeShader NormalizationShader;
238245
internal IRayTracingShader DirectAccumulationShader;
246+
internal IRayTracingShader DirectBRDFAccumulationShader;
239247
internal IRayTracingShader AOAccumulationShader;
240248
internal IRayTracingShader ValidityAccumulationShader;
241249
internal IRayTracingShader IndirectAccumulationShader;
@@ -261,6 +269,7 @@ public void Load(RayTracingContext context)
261269

262270
NormalizationShader = AssetDatabase.LoadAssetAtPath<ComputeShader>(packageFolder + "Shaders/ResolveAccumulation.compute");
263271
DirectAccumulationShader = context.LoadRayTracingShader(packageFolder + "Shaders/LightmapDirectIntegration.urtshader");
272+
DirectBRDFAccumulationShader = context.LoadRayTracingShader(packageFolder + "Shaders/LightmapDirectBRDFIntegration.urtshader");
264273
AOAccumulationShader = context.LoadRayTracingShader(packageFolder + "Shaders/LightmapAOIntegration.urtshader");
265274
ValidityAccumulationShader = context.LoadRayTracingShader(packageFolder + "Shaders/LightmapValidityIntegration.urtshader");
266275
IndirectAccumulationShader = context.LoadRayTracingShader(packageFolder + "Shaders/LightmapIndirectIntegration.urtshader");

Packages/com.unity.render-pipelines.core/Runtime/PathTracing/BakeLightmapDriver.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public class LightmapBakeSettings
6161
{
6262
public uint AOSampleCount = 32;
6363
public uint DirectSampleCount = 32;
64+
public uint DirectBRDFSampleCount = 32;
6465
public uint IndirectSampleCount = 512;
6566
public uint ValiditySampleCount = 512;
6667

@@ -87,7 +88,9 @@ public uint GetSampleCount(IntegratedOutputType integratedOutputType)
8788
{
8889
case IntegratedOutputType.AO: return AOSampleCount;
8990
case IntegratedOutputType.Direct: return DirectSampleCount;
91+
case IntegratedOutputType.DirectBRDF: return DirectBRDFSampleCount;
9092
case IntegratedOutputType.DirectionalityDirect: return DirectSampleCount;
93+
case IntegratedOutputType.DirectionalityDirectBRDF: return DirectBRDFSampleCount;
9194
case IntegratedOutputType.Indirect: return IndirectSampleCount;
9295
case IntegratedOutputType.DirectionalityIndirect: return IndirectSampleCount;
9396
case IntegratedOutputType.Validity: return ValiditySampleCount;
@@ -104,7 +107,9 @@ public AntiAliasingType GetAntiAliasingType(IntegratedOutputType integratedOutpu
104107
{
105108
case IntegratedOutputType.AO: return AOAntiAliasingType;
106109
case IntegratedOutputType.Direct: return DirectAntiAliasingType;
110+
case IntegratedOutputType.DirectBRDF: return DirectAntiAliasingType;
107111
case IntegratedOutputType.DirectionalityDirect: return DirectAntiAliasingType;
112+
case IntegratedOutputType.DirectionalityDirectBRDF: return DirectAntiAliasingType;
108113
case IntegratedOutputType.Indirect: return IndirectAntiAliasingType;
109114
case IntegratedOutputType.DirectionalityIndirect: return IndirectAntiAliasingType;
110115
case IntegratedOutputType.Validity: return ValidityAntiAliasingType;
@@ -345,6 +350,33 @@ internal static uint AccumulateLightmapInstance(
345350
);
346351
break;
347352
}
353+
case IntegratedOutputType.DirectBRDF:
354+
case IntegratedOutputType.DirectionalityDirectBRDF:
355+
{
356+
lightmappingContext.IntegratorContext.LightmapDirectBRDFIntegrator.Accumulate(
357+
cmd,
358+
passSampleCount,
359+
bakeState.SampleIndex,
360+
instance.LocalToWorldMatrix,
361+
instance.LocalToWorldMatrixNormals,
362+
instanceGeometryIndex,
363+
instance.TexelSize,
364+
chunkOffset,
365+
lightmappingContext.World.PathTracingWorld,
366+
traceScratchBuffer,
367+
lightmappingContext.GBuffer,
368+
expandedSampleWidth,
369+
lightmappingContext.ExpandedOutput,
370+
expandedDirectional,
371+
lightmappingContext.CompactedTexelIndices,
372+
lightmappingContext.IntegratorContext.CompactedGBufferLength,
373+
instance.ReceiveShadows,
374+
lightmapBakeSettings.PushOff,
375+
lightmapBakeSettings.DirectRISCandidateCount,
376+
newChunkStarted
377+
);
378+
break;
379+
}
348380
case IntegratedOutputType.Indirect:
349381
case IntegratedOutputType.DirectionalityIndirect:
350382
{

Packages/com.unity.render-pipelines.core/Runtime/PathTracing/LightmapExpansion.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ internal static class ExpansionShaderIDs
3939

4040
internal static class ExpansionHelpers
4141
{
42-
static internal int PopulateAccumulationIndirectDispatch(CommandBuffer cmd, IRayTracingShader accumulationShader, ComputeShader populateShader, int populateKernel, uint expandedSampleWidth, GraphicsBuffer compactedGbufferLength, GraphicsBuffer accumulationDispatchBuffer)
42+
static internal int PopulateAccumulationIndirectDispatch(CommandBuffer cmd, ComputeShader populateShader, int populateKernel, uint expandedSampleWidth, GraphicsBuffer compactedGbufferLength, GraphicsBuffer accumulationDispatchBuffer)
4343
{
4444
cmd.SetComputeIntParam(populateShader, ExpansionShaderIDs.ExpandedTexelSampleWidth, (int)expandedSampleWidth);
4545
cmd.SetComputeBufferParam(populateShader, populateKernel, ExpansionShaderIDs.CompactedGBufferLength, compactedGbufferLength);

0 commit comments

Comments
 (0)