@@ -584,6 +584,7 @@ public void UpdateMaterials(bool fast, LTCGI_Screen screen = null)
584584 adapter . UpdateProxy ( ) ;
585585 #pragma warning restore 618
586586 adapter . _Renderers = cachedMeshRenderers . Where ( cm => ! IsEditorOnly ( cm . gameObject ) ) . ToArray ( ) ;
587+ adapter . _LTCGI_DefaultLightmap = DefaultLightmap ;
587588 adapter . _LTCGI_Lightmaps = cachedMeshRenderers
588589 . Select ( r => {
589590 if ( _LTCGI_Lightmaps == null ) return DefaultLightmap ;
@@ -607,7 +608,8 @@ public void UpdateMaterials(bool fast, LTCGI_Screen screen = null)
607608 Enumerable . Range ( 0 , adapter . _Renderers . Length )
608609 . SelectMany ( i => mask2d [ i ] )
609610 . ToArray ( ) ;
610- var avatarMask = screens . Select ( x => x . AffectAvatars ? 1.0f : 0.0f ) ;
611+ // mask is reversed! 1 = not visible, 0 = visible
612+ var avatarMask = screens . Select ( x => x . AffectAvatars ? 0.0f : 1.0f ) ;
611613 adapter . _LTCGI_MaskAvatars = avatarMask . ToArray ( ) ;
612614 adapter . _Screens = screens . Select ( x => x ? . gameObject ) . ToArray ( ) ;
613615 adapter . _LTCGI_LODs = new Texture [ 4 ] ;
@@ -640,50 +642,14 @@ public void UpdateMaterials(bool fast, LTCGI_Screen screen = null)
640642 adapter . _LTCGI_static_uniforms = staticUniformTex ;
641643 adapter . _LTCGI_ScreenCount = screens . Length ;
642644 adapter . _LTCGI_ScreenCountDynamic = screenCountDynamic ;
645+ // masked counts must include all masked screens up to the last non-masked one!
643646 adapter . _LTCGI_ScreenCountMasked =
644647 mask2d . Select ( mask =>
645648 Math . Max ( adapter . _LTCGI_ScreenCountDynamic ,
646649 Array . FindLastIndex ( mask , m => m == 0.0f ) + 1 ) ) . ToArray ( ) ;
647- adapter . _LTCGI_ScreenCountMaskedAvatars = screens . Count ( x => x . AffectAvatars ) ;
650+ adapter . _LTCGI_ScreenCountMaskedAvatars = Array . FindLastIndex ( screens , x => x . AffectAvatars ) + 1 ;
648651 adapter . BlurCRTInput = LOD1s ;
649652
650- // calculate which renderers can use the shared material update method
651- var dynr = DynamicRenderers . ToList ( ) ;
652- var mats = new Dictionary < Material , ( int , float [ ] , Renderer ) > ( ) ;
653- for ( int i = 0 ; i < cachedMeshRenderers . Length ; i ++ )
654- {
655- var r = cachedMeshRenderers [ i ] ;
656- if ( IsEditorOnly ( r . gameObject ) ) continue ;
657- foreach ( var m in r . sharedMaterials )
658- {
659- if ( m == null ) continue ;
660- var data = ( adapter . _LTCGI_ScreenCountMasked [ i ] , mask2d [ i ] , r ) ;
661- if ( mats . ContainsKey ( m ) )
662- {
663- var prev = mats [ m ] ;
664- if ( prev . Item1 != data . Item1 || ! prev . Item2 . SequenceEqual ( data . Item2 ) )
665- {
666- // two renderers share material, but have different masks,
667- // so at least one of them needs to use a MPB
668- // Debug.Log($"Cannot use shared material update for {m.name} on {r.name} and {prev.Item3.name} because " +
669- // $"this({data.Item1} # {data.Item2.Aggregate("", (p, x) => p + (p == "" ? "" : ", ") + x.ToString())}) != " +
670- // $"prev({prev.Item1} # {prev.Item2.Aggregate("", (p, x) => p + (p == "" ? "" : ", ") + x.ToString())})");
671- dynr . Add ( r ) ;
672- if ( ! dynr . Contains ( prev . Item3 ) )
673- {
674- dynr . Add ( prev . Item3 ) ;
675- }
676- break ;
677- }
678- }
679- else
680- {
681- mats . Add ( m , data ) ;
682- }
683- }
684- }
685- adapter . _DynamicRenderers = dynr . ToArray ( ) ;
686-
687653 #pragma warning disable 618
688654 adapter . ApplyProxyModifications ( ) ;
689655 #pragma warning restore 618
0 commit comments