@@ -424,6 +424,21 @@ public void ProcessRenderer(int i)
424
424
overridenComponents |= InstanceComponentGroup . Lightmap ;
425
425
}
426
426
427
+ // Scan all materials once to retrieve whether this renderer is indirect-compatible or not (and store it in the RangeKey).
428
+ var supportsIndirect = true ;
429
+ for ( int matIndex = 0 ; matIndex < materialsCount ; ++ matIndex )
430
+ {
431
+ if ( matIndex >= submeshCount )
432
+ {
433
+ Debug . LogWarning ( "Material count in the shared material list is higher than sub mesh count for the mesh. Object may be corrupted." ) ;
434
+ continue ;
435
+ }
436
+
437
+ var materialIndex = rendererData . materialIndex [ materialsOffset + matIndex ] ;
438
+ var packedMaterialData = rendererData . packedMaterialData [ materialIndex ] ;
439
+ supportsIndirect &= packedMaterialData . isIndirectSupported ;
440
+ }
441
+
427
442
var rangeKey = new RangeKey
428
443
{
429
444
layer = ( byte ) gameObjectLayer ,
@@ -432,7 +447,7 @@ public void ProcessRenderer(int i)
432
447
shadowCastingMode = packedRendererData . shadowCastingMode ,
433
448
staticShadowCaster = packedRendererData . staticShadowCaster ,
434
449
rendererPriority = rendererPriority ,
435
- supportsIndirect = packedRendererData . supportsIndirect ,
450
+ supportsIndirect = supportsIndirect
436
451
} ;
437
452
438
453
ref DrawRange drawRange = ref EditDrawRange ( rangeKey ) ;
@@ -447,8 +462,7 @@ public void ProcessRenderer(int i)
447
462
448
463
var materialIndex = rendererData . materialIndex [ materialsOffset + matIndex ] ;
449
464
var materialID = rendererData . materialID [ materialIndex ] ;
450
- var isTransparent = rendererData . isTransparent [ materialIndex ] ;
451
- var isMotionVectorsPassEnabled = rendererData . isMotionVectorsPassEnabled [ materialIndex ] ;
465
+ var packedMaterialData = rendererData . packedMaterialData [ materialIndex ] ;
452
466
453
467
if ( rendererToMaterialMap . TryGetValue ( new LightmapManager . RendererSubmeshPair ( rendererGroupID , matIndex ) , out var cachedMaterialID ) )
454
468
materialID = cachedMaterialID ;
@@ -467,10 +481,10 @@ public void ProcessRenderer(int i)
467
481
468
482
// assume that a custom motion vectors pass contains deformation motion, so should always output motion vectors
469
483
// (otherwise this flag is set dynamically during culling only when the transform is changing)
470
- if ( isMotionVectorsPassEnabled )
484
+ if ( packedMaterialData . isMotionVectorsPassEnabled )
471
485
flags |= BatchDrawCommandFlags . HasMotion ;
472
486
473
- if ( isTransparent )
487
+ if ( packedMaterialData . isTransparent )
474
488
flags |= BatchDrawCommandFlags . HasSortingPosition ;
475
489
476
490
// Let the engine know if we've opted out of lightmap texture arrays
@@ -487,7 +501,7 @@ public void ProcessRenderer(int i)
487
501
meshID = batchMeshID ,
488
502
submeshIndex = submeshIndex ,
489
503
flags = flags ,
490
- transparentInstanceId = isTransparent ? rendererGroupID : 0 ,
504
+ transparentInstanceId = packedMaterialData . isTransparent ? rendererGroupID : 0 ,
491
505
range = rangeKey ,
492
506
overridenComponents = ( uint ) overridenComponents ,
493
507
// When we've opted out of lightmap texture arrays, we
0 commit comments