タグ・月別アーカイブ

AssetBundle の圧縮(2) 現状の計測

実験

データはUnityChanをベースに、ImageMagickでAlphaチャネルを削除しました。

$ convert portrait_kohaku_02.png -background black -alpha remove portrait_kohaku_02a.png
$ convert portrait_kohaku_01.png -background black -alpha remove portrait_kohaku_02b.png

画像サイズは2524x3189ですが、2048x2048, MipMap なしとして取り込みました。
PVRTC/ETC1の4bppを使用で、2048x2048x4/8が2枚で4MBとなります。

スクリプト

AssetBundle は以下の簡単なスクリプトで生成

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public static class AssetBundleCompressTest
{
    static string[] _assetNames = new string[2] {
        "Assets/AssetBundleTest/UnityChan/portrait_kohaku_01a.png",
        "Assets/AssetBundleTest/UnityChan/portrait_kohaku_02a.png",
    };

    static AssetBundleBuild[] CreateBuildMap (string mode, BuildTarget target)
    {
        AssetBundleBuild[] buildMap = new AssetBundleBuild[1];
        buildMap [0].assetBundleName = string.Format ("Test_{0}_{1}.unity3d", mode, target);
        buildMap [0].assetNames = _assetNames;
        return buildMap;
    }

    [MenuItem ("AssetBundlesCompress/RunTest")]
    static void BuildAssetBundles ()
    {
        var outputPath = "AssetBundles";

        System.IO.Directory.CreateDirectory (outputPath);

        //BuildTarget.Android,
        //BuildTarget.iOS,
        var target = EditorUserBuildSettings.activeBuildTarget;
        BuildPipeline.BuildAssetBundles (
            outputPath: outputPath,
            builds: CreateBuildMap ("RAW", target),
            assetBundleOptions: BuildAssetBundleOptions.UncompressedAssetBundle,
            targetPlatform: target);
        BuildPipeline.BuildAssetBundles (
            outputPath: outputPath,
            builds: CreateBuildMap ("LZ4", target),
            assetBundleOptions: BuildAssetBundleOptions.ChunkBasedCompression,
            targetPlatform: target);
        BuildPipeline.BuildAssetBundles (
            outputPath: outputPath,
            builds: CreateBuildMap ("LZMA", target),
            assetBundleOptions: BuildAssetBundleOptions.None,
            targetPlatform: target);
    }
}

結果

方法 サイズ
RAW 4198973
LZ4 876341
LZMA 609787

2x2048x2048x4/8は4194304なので、(4198973 - 4194304) = 4669byteがヘッダ等メタデータとなりますね。

アーカイブの中身を見た感じ、未圧縮の形式では、ファイルの前にかならず、(文字列長) + (ファイル名)が、
入るようなので、ここをファイルの区切りとして圧縮を試して見ます。

(3)へ続く。