Почему Texture2D.PackTextures() создает столько пустого пространства в атласе?

Я создаю текстурный атлас по сценарию. Я использую 6 изображений для этого, и код выглядит так:

    atlasTextures = new Texture2D[6] {frontTexture, topTexture, backTexture, bottomTexture, leftTexture, rightTexture };

    Texture2D atlas = new Texture2D(1024, 1024);
    Rect[] UVs = atlas.PackTextures(atlasTextures, 2, 1024);

    GetComponent<Renderer>().material.mainTexture = atlas;

Результат упаковки выглядит так:

текстура

Вопрос в том, почему этот код производит столько пустого пространства? Поскольку я всегда буду использовать только 6 текстур, возможно ли сделать атлас немного меньше?

1 ответ

Решение

Графическому оборудованию нравится обрабатывать текстуры, имеющие степень двух измерений, например 128x1024 (2^7 x 2^10). Они могут обрабатывать и другие размеры текстур, но это менее эффективно. Вот почему движки обычно пытаются импортировать или генерировать текстуры с размером степени два, даже если некоторое пространство текстур не используется. Разработчик должен решить, когда переопределить это.

Другие вопросы по тегам