Unity terrainDataのalphamapの解像度を下げる

  • 0
    いいね
  • 0
    コメント

    Unityのterrainを使って地形を作った場合、地形にどのようにテクスチャを貼り付けるかはalphamapという画像データに記録されています。
    このalphamapの解像度を下げたい場合に、インスペクターを使って解像度を下げるとデータが失われるようです。

    そこで、解像度を下げるスクリプトを書いてみました。

    //4096から1024へ下げる使い捨てスクリプト
    public class hogehoge : MonoBehaviour {
        public TerrainData terrainData;
        // Use this for initialization
        void Start () {
            //αマップを書き換え。
            float[,,] oldMap = terrainData.GetAlphamaps(0, 0, terrainData.alphamapWidth, terrainData.alphamapHeight);
            float[,,] newMap = new float[1024, 1024, 4];
            for(var x = 0; x < 1024; x++)
            {
                for(var y = 0; y < 1024; y++)
                {
                    var oldMapX = Mathf.Min(x * 4, terrainData.alphamapWidth-1);
                    var oldMapY = Mathf.Min(y * 4, terrainData.alphamapHeight - 1);
                    newMap[x,y,0] = oldMap[oldMapX,oldMapY,0];
                    newMap[x, y, 1] = oldMap[oldMapX, oldMapY, 1];
                    newMap[x, y, 2] = oldMap[oldMapX, oldMapY, 2];
                    newMap[x, y, 3] = oldMap[oldMapX, oldMapY, 3];
    
                }
            }
            //αマップを差し替える。
            terrainData.alphamapResolution = 1024;
            terrainData.SetAlphamaps(0, 0, newMap);
            terrainData.RefreshPrototypes();
        }
    }
    

    4096から1024への決め打ちで解像度を下げる使い捨てのコードですのでご注意ください。