Skip to content

Commit a92311e

Browse files
AndrewSaraevUnitypastasfuture
authored andcommitted
Fixed the case when a Mask Volume asset is saved to a file empty. The "Resample Asset" button can process an empty asset and fill it with valid data now. (#23)
1 parent b9e773c commit a92311e

File tree

3 files changed

+34
-30
lines changed

3 files changed

+34
-30
lines changed

com.unity.render-pipelines.high-definition/Runtime/Material/MaskVolume/MaskVolume.cs

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

com.unity.render-pipelines.high-definition/Runtime/Material/MaskVolume/MaskVolumeAsset.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ internal enum AssetVersion
3131

3232
internal bool IsDataAssigned()
3333
{
34-
return !MaskVolumePayload.IsNull(ref payload) && (MaskVolumePayload.GetLength(ref payload) > 0);
34+
return !MaskVolumePayload.IsEmpty(ref payload);
3535
}
3636

3737
#if UNITY_EDITOR
@@ -76,12 +76,10 @@ internal static string GetFileName(int id = -1)
7676

7777
internal static MaskVolumeAsset CreateAsset(int id = -1)
7878
{
79-
MaskVolumeAsset asset = ScriptableObject.CreateInstance<MaskVolumeAsset>();
79+
MaskVolumeAsset asset = CreateInstance<MaskVolumeAsset>();
8080
string assetFileName = GetFileName(id);
8181

8282
UnityEditor.AssetDatabase.CreateAsset(asset, assetFileName);
83-
UnityEditor.AssetDatabase.SaveAssets();
84-
UnityEditor.AssetDatabase.Refresh();
8583

8684
return asset;
8785
}

com.unity.render-pipelines.high-definition/Runtime/Material/MaskVolume/MaskVolumeRendering.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ internal bool EnsureMaskVolumeInAtlas(ScriptableRenderContext renderContext, Com
261261
{
262262
MaskVolumePayload payload = volume.GetPayload();
263263

264-
if (MaskVolumePayload.IsNull(ref payload))
264+
if (MaskVolumePayload.IsEmpty(ref payload))
265265
{
266266
ReleaseMaskVolumeFromAtlas(volume);
267267
return false;

0 commit comments

Comments
 (0)