VaDiM
2026-06-19 20:58:31 +03:00
parent 4260bfc7e6
commit 071afb5e7e
2 changed files with 30 additions and 2 deletions
+26
View File
@@ -120,6 +120,7 @@ namespace AssetStudio
{
image.Mutate(x => x.Flip(FlipMode.Vertical));
}
return true;
}
finally
@@ -334,6 +335,13 @@ namespace AssetStudio
BigArrayPool<byte>.Shared.Return(buff, clearArray: true);
}
//src: https://github.com/AssetRipper/AssetRipper/blob/master/Source/AssetRipper.Export.Modules.Textures/TextureConverter.cs
// despite the name, this packing works for different formats
if (m_Texture2D.m_LightmapFormat == 3) //NormalmapDXT5nm
{
UnpackNormal(destSpan);
}
return flag;
}
@@ -844,5 +852,23 @@ namespace AssetStudio
}
return !result.IsEmpty;
}
private void UnpackNormal(Span<byte> bgraImageData)
{
for (var i = 0; i < outputDataSize; i += 4)
{
(bgraImageData[i + 2], bgraImageData[i + 3]) = (bgraImageData[i + 3], bgraImageData[i + 2]); //Alpha and red are swapped
var g = bgraImageData[i + 1];
var r = bgraImageData[i + 2];
//Blue needs calculated
const double magnitudeSqr = 255 * 255;
var vr = r * 2.0 - 255.0;
var vg = g * 2.0 - 255.0;
var hypotenuseSqr = Math.Min(vr * vr + vg * vg, magnitudeSqr);
var b = (Math.Sqrt(magnitudeSqr - hypotenuseSqr) + 255.0) / 2.0;
bgraImageData[i] = (byte)b;
}
}
}
}