@@ -90,9 +90,9 @@ public static int GetDataSHL2Stride()
9090 return 9 * 3 - GetDataSHL0Stride();
9191 } */
9292
93- public static bool IsNull ( ref MaskVolumePayload payload )
93+ public static bool IsEmpty ( ref MaskVolumePayload payload )
9494 {
95- return payload . dataSHL0 == null ;
95+ return payload . dataSHL0 == null || payload . dataSHL0 . Length == 0 ;
9696 }
9797
9898 public static int GetLength ( ref MaskVolumePayload payload )
@@ -766,6 +766,8 @@ internal void CreateAsset()
766766 int numMasks = parameters . resolutionX * parameters . resolutionY * parameters . resolutionZ ;
767767 MaskVolumePayload . Allocate ( ref maskVolumeAsset . payload , numMasks ) ;
768768
769+ UnityEditor . EditorUtility . SetDirty ( maskVolumeAsset ) ;
770+
769771 dataUpdated = true ;
770772 }
771773
@@ -779,36 +781,40 @@ internal void ResampleAsset()
779781 int numMasks = parameters . resolutionX * parameters . resolutionY * parameters . resolutionZ ;
780782 MaskVolumePayload newPayload = default ;
781783 MaskVolumePayload . Allocate ( ref newPayload , numMasks ) ;
782-
783- for ( int z = 0 ; z < parameters . resolutionZ ; z ++ )
784+
785+ if ( oldResolutionX > 0 && oldResolutionY > 0 && oldResolutionZ > 0 && ! MaskVolumePayload . IsEmpty ( ref oldPayload ) )
784786 {
785- CalculateResamplingWeights ( oldResolutionZ , parameters . resolutionZ , z , out int oldZLow , out int oldZHigh , out float oldZLowWeight , out float oldZHighWeight ) ;
786-
787- for ( int y = 0 ; y < parameters . resolutionY ; y ++ )
787+ for ( int z = 0 ; z < parameters . resolutionZ ; z ++ )
788788 {
789- CalculateResamplingWeights ( oldResolutionY , parameters . resolutionY , y , out int oldYLow , out int oldYHigh , out float oldYLowWeight , out float oldYHighWeight ) ;
790-
791- for ( int x = 0 ; x < parameters . resolutionX ; x ++ )
789+ CalculateResamplingWeights ( oldResolutionZ , parameters . resolutionZ , z , out int oldZLow , out int oldZHigh , out float oldZLowWeight , out float oldZHighWeight ) ;
790+
791+ for ( int y = 0 ; y < parameters . resolutionY ; y ++ )
792792 {
793- CalculateResamplingWeights ( oldResolutionX , parameters . resolutionX , x , out int oldXLow , out int oldXHigh , out float oldXLowWeight , out float oldXHighWeight ) ;
794-
795- MaskVolumePayload . Resample ( ref oldPayload ,
796- PayloadIndex ( oldResolutionX , oldResolutionY , oldXLow , oldYLow , oldZLow ) , oldXLowWeight * oldYLowWeight * oldZLowWeight ,
797- PayloadIndex ( oldResolutionX , oldResolutionY , oldXHigh , oldYLow , oldZLow ) , oldXHighWeight * oldYLowWeight * oldZLowWeight ,
798- PayloadIndex ( oldResolutionX , oldResolutionY , oldXLow , oldYHigh , oldZLow ) , oldXLowWeight * oldYHighWeight * oldZLowWeight ,
799- PayloadIndex ( oldResolutionX , oldResolutionY , oldXHigh , oldYHigh , oldZLow ) , oldXHighWeight * oldYHighWeight * oldZLowWeight ,
800- PayloadIndex ( oldResolutionX , oldResolutionY , oldXLow , oldYLow , oldZHigh ) , oldXLowWeight * oldYLowWeight * oldZHighWeight ,
801- PayloadIndex ( oldResolutionX , oldResolutionY , oldXHigh , oldYLow , oldZHigh ) , oldXHighWeight * oldYLowWeight * oldZHighWeight ,
802- PayloadIndex ( oldResolutionX , oldResolutionY , oldXLow , oldYHigh , oldZHigh ) , oldXLowWeight * oldYHighWeight * oldZHighWeight ,
803- PayloadIndex ( oldResolutionX , oldResolutionY , oldXHigh , oldYHigh , oldZHigh ) , oldXHighWeight * oldYHighWeight * oldZHighWeight ,
804- ref newPayload ,
805- PayloadIndex ( parameters . resolutionX , parameters . resolutionY , x , y , z ) ) ;
793+ CalculateResamplingWeights ( oldResolutionY , parameters . resolutionY , y , out int oldYLow , out int oldYHigh , out float oldYLowWeight , out float oldYHighWeight ) ;
794+
795+ for ( int x = 0 ; x < parameters . resolutionX ; x ++ )
796+ {
797+ CalculateResamplingWeights ( oldResolutionX , parameters . resolutionX , x , out int oldXLow , out int oldXHigh , out float oldXLowWeight , out float oldXHighWeight ) ;
798+
799+ MaskVolumePayload . Resample ( ref oldPayload ,
800+ PayloadIndex ( oldResolutionX , oldResolutionY , oldXLow , oldYLow , oldZLow ) , oldXLowWeight * oldYLowWeight * oldZLowWeight ,
801+ PayloadIndex ( oldResolutionX , oldResolutionY , oldXHigh , oldYLow , oldZLow ) , oldXHighWeight * oldYLowWeight * oldZLowWeight ,
802+ PayloadIndex ( oldResolutionX , oldResolutionY , oldXLow , oldYHigh , oldZLow ) , oldXLowWeight * oldYHighWeight * oldZLowWeight ,
803+ PayloadIndex ( oldResolutionX , oldResolutionY , oldXHigh , oldYHigh , oldZLow ) , oldXHighWeight * oldYHighWeight * oldZLowWeight ,
804+ PayloadIndex ( oldResolutionX , oldResolutionY , oldXLow , oldYLow , oldZHigh ) , oldXLowWeight * oldYLowWeight * oldZHighWeight ,
805+ PayloadIndex ( oldResolutionX , oldResolutionY , oldXHigh , oldYLow , oldZHigh ) , oldXHighWeight * oldYLowWeight * oldZHighWeight ,
806+ PayloadIndex ( oldResolutionX , oldResolutionY , oldXLow , oldYHigh , oldZHigh ) , oldXLowWeight * oldYHighWeight * oldZHighWeight ,
807+ PayloadIndex ( oldResolutionX , oldResolutionY , oldXHigh , oldYHigh , oldZHigh ) , oldXHighWeight * oldYHighWeight * oldZHighWeight ,
808+ ref newPayload ,
809+ PayloadIndex ( parameters . resolutionX , parameters . resolutionY , x , y , z ) ) ;
810+ }
806811 }
807812 }
813+
814+ ReleaseFromAtlas ( this ) ;
808815 }
809-
810- ReleaseFromAtlas ( this ) ;
811816
817+ maskVolumeAsset . instanceID = GetID ( ) ;
812818 maskVolumeAsset . resolutionX = parameters . resolutionX ;
813819 maskVolumeAsset . resolutionY = parameters . resolutionY ;
814820 maskVolumeAsset . resolutionZ = parameters . resolutionZ ;
0 commit comments