Формат текстур

Материал из BestWay wiki
Перейти к: навигация, поиск

Размеры


Поскольку рендер каждого кадра в игре производится аппаратно, нужно использовать все доступные возможности для ускорения этого процесса. Видеопамять организована таким образом, что быстрее всего происходит доступ к данным, расположенным по быстро вычислимым адресам. Такие адреса получаются операцией сдвига и соответствуют степеням двойки (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048.......). Исходя их этого, оптимально расположатся в памяти текстуры с размером стороны, равным степени двойки. При этом текстура не обязательно должна быть квадратной. Возможно использование и текстур других размеров, но при этом, если текстура не объединяется с другими при загрузке в игре, будет нерационально расходоваться видеопамять за счет дополнения текстуры до размеров степени 2 (и в этом случае память будет расходоваться бесконтрольно!).

Нужно привести текстуру в любое возможное соответствие с размерами сторон 2n. В крайнем случае, можно немного пожертвовать пропорциями текстуры и учесть это при наложении на модель (например, 256x280 лучше превратить в 256x256, чем доращивать до 256x512). Или же оставить по краям небольшие пустые места (если текстура «не дотягивает» до нужных размеров) – возможно, они даже понадобятся в дальнейшем.

Небольшое исключение можно сделать для текстур, сжимаемых в формат DXT# (см. следующий пункт) – для этих текстур важно, чтобы размер сторон был кратен 4 (соответствует размеру кванта сжатия). Но все равно рекомендуется использовать только размеры степени 2.

Важно: текстуры с размером стороны, равным 1, нежелательно создавать, поскольку возникнут проблемы с фильтрацией при рендере. Минимальный размер стороны текстуры равен 2. Максимальный размер всей текстуры, для большей совместимости с различными видеокартами, не рекомендуется делать больше 2048х2048 (такой размер тоже нужно использовать только в крайнем случае).



Сжатие


Скорость рендера в игре и загрузки моделей (как при загрузке карты, так и при разрушении объектов) зависит от объема текстур на моделях. Поскольку графический движок игры работает с DirectX, нужно использовать специальные форматы кодирования цвета, позволяющие значительно сократить объем текстур в памяти. Такой формат текстуры поддерживается файловым форматом .dds. Нужно использовать везде, где можно, компрессию DXT1, DXT3, DXT5. Исключение составляют специальные текстуры (типа bump или градиентных текстур). Выбирайте формат следующим образом:

  1. Если текстура не содержит альфы вообще – это практически 100% кандидат на формат DXT1 (+ no alpha)
  2. Если текстура с однобитной альфой (важно только состояние прозрачен-непрозрачен), то стоит попробовать DXT1 (+ alpha) и только при неудовлетворительном качестве рендера в игре (черные пиксели по краям при удалении объекта от камеры) используем формат DXT3
  3. Если альфа содержит некоторые градации, и модель должна быть полупрозрачной – нужен формат DXT3. Важно помнить, что в DXT3 всего 16 градаций альфа-канала
  4. Если нужно передать очень плавную альфу (различные градиенты прозрачности и т.п.), нужно использовать DXT5, поддерживающий 256 градаций альфа-канала
  5. Если ни один из сжатых форматов не дал удовлетворительного результата (это может быть на текстурах с хорошо просматриваемым градиентом), тогда оставляем формат A8R8G8B8 (не перепутайте с A8B8G8R8, иначе цвета получатся не те). Не выбирайте формат R8G8B8 (даже если альфа не нужна) – его все равно придется конвертировать при загрузке, поскольку далеко не всякий акселератор поддерживает такой формат. Для таких текстур лучше залить альфу сплошным белым, чтобы избежать возможной невидимости текстуры в игре

Если вы выберете формат, который не поддерживается напрямую игрой, скорее всего такая текстура загрузится, но будет выдано предупреждение о неверном формате цвета (например при использовании R8G8B8).

Важно: обращайте внимание на предупреждения насчет файлов текстур с одинаковыми именами, но разными расширениями!!! Таких ситуаций возникать не должно, иначе игра загружает первую попавшуюся текстуру (из всех поддерживаемых первой окажется .bmp). Все текстуры, относящиеся к моделям, штампам и эффектам, должны быть преобразованы в формат dds!