nesrak1 / AssetsTools.NET

Read and write unity assets/bundle files, based on https://github.com/SeriousCache/UABE
MIT License
541 stars 101 forks source link

Incorrectly decoding textures #135

Open KirillAldashkin opened 5 months ago

KirillAldashkin commented 5 months ago

Hello! I'm trying to export some textures from an AssetBundle file using AssetsTools.NET.Texture and SixLabors.ImageSharp, but it produces incorrect texture (I also got the correct one using random asset browser program).

Code (minimal reproduction):

using AssetsTools.NET.Extra;
using AssetsTools.NET.Texture;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var manager = new AssetsManager("commonassets.ab");
var bundle = manager.LoadBundleFile(path);
var assetFile = manager.LoadAssetsFileFromBundle(bundle, "CAB-580061e156ea5e60815bbe6b768da65c");
var asset = assetFile.file.GetAssetInfo(-9143244479974055439);

var field = manager.GetBaseField(assetFile, asset);
var texture = TextureFile.ReadTextureFile(field);
var bgraRaw = texture.GetTextureData(null, bundle.file);

var image = Image.LoadPixelData<Bgra32>(bgraRaw, texture.m_Width, texture.m_Height);
image.SaveAsPng($"texture.png");

Assets bundle file

commonassets.zip

What this program produces:

What this program produces

Actual texture:

Actual texture

nesrak1 commented 5 months ago

That method seems broken and probably never worked. I'll remove it next update. You should be passing it just the assets file: texture.GetTextureData(assetsFile);