Почему изображения для текстур на iPhone должны иметь степень двух измерений? - PullRequest
10 голосов
/ 18 октября 2008

Я пытаюсь решить эту проблему мерцания на iphone (игра с открытыми глазами). У меня есть несколько изображений, которые не имеют размеры pow-of-2. Я собираюсь заменить их изображениями с соответствующими размерами ... но почему размеры должны быть степенью двойки?

Ответы [ 6 ]

28 голосов
/ 18 октября 2008

Причина, по которой большинству систем (даже многих современных видеокарт) требуются текстуры степени 2, - это отображение.

Что такое mipmapping?

Меньшие версии изображения будут созданы для того, чтобы вещь выглядела правильно при очень маленьком размере. Изображение делится на 2 снова и снова для создания новых изображений.

Итак, представьте изображение 256x128. Это будет иметь меньшие версии, созданные размером 128х64, 64х32, 32х16, 16х8, 8х4, 4х2, 2х1 и 1х1.

Если бы это изображение было размером 256x192, оно будет работать нормально, пока вы не уменьшите размер до 4x3. Следующее меньшее изображение будет 2x1,5, что, очевидно, не является допустимым размером. Некоторое графическое оборудование может справиться с этим, но многие типы не могут.

Некоторым аппаратным средствам также требуется квадратное изображение, но это уже не так часто.

Зачем вам нужно mipmapping?

Представьте, что у вас есть ОЧЕНЬ далекое изображение, размером всего 4 пикселя. Теперь, когда каждый пиксель нарисован, в качестве цвета для этого пикселя будет выбрана позиция на изображении. Таким образом, вы получите 4 пикселя, которые могут быть не совсем представительными для изображения в целом.

Теперь представьте, что картина движется. Каждый раз, когда рисуется новый кадр, выбирается новый пиксель. Поскольку изображение НАСТОЛЬКО далеко, вы, скорее всего, увидите очень разные цвета для небольших изменений в движении. Это приводит к очень уродливому миганию.

Отсутствие mipmapping вызывает проблемы для любого размера, который меньше, чем размер текстуры, но это наиболее заметно, когда изображение отрисовывается до очень небольшого количества пикселей.

При использовании mipmaps аппаратное обеспечение будет иметь доступ к версии текстуры 2x2, поэтому каждый пиксель будет иметь средний цвет этого квадранта изображения. Это устраняет нечетное мигание цвета.

http://en.wikipedia.org/wiki/Mipmap

Править людям, которые говорят, что это больше не правда: Это правда, что многие современные графические процессоры могут поддерживать текстуры не-степени двух, но также верно, что многие не могут.

Фактически, только на прошлой неделе в приложении XNA, над которым я работал, была текстура 1024x768, и это вызывало сбой при загрузке игры на ноутбуке, которому было всего около года. Это работало хорошо на большинстве машин все же. Можно с уверенностью сказать, что графический процессор iPhone намного проще, чем полноценный графический процессор для ПК.

2 голосов
/ 17 января 2012
  1. Информацию о поддержке OpenGL ES для устройств Apple Ipod / Iphone можно найти здесь: Поддержка Apple OpenES
  2. OpenGL ES 2.0 определяется как равный OpenGL 2.0
  3. Ограничение размера текстур исчезло только в версии 2.0 Так что если вы используете OpenGL ES с версией ниже 2.0 - это нормальная ситуация.
2 голосов
/ 18 октября 2008

Как правило, графическое оборудование изначально работает с текстурами в степени 2. Я не уверен в деталях реализации / конструкции, которые приводят к такому случаю, но обычно это так, как везде.

РЕДАКТИРОВАТЬ: после небольшого исследования выясняется, что мои знания немного устарели - многие современные видеокарты теперь могут обрабатывать текстуры любого размера. Я бы предположил, что из-за ограниченного пространства графического процессора телефона им, вероятно, нужно было бы опустить все, что потребовало бы дополнительного кремния, подобного этому.

1 голос
/ 19 августа 2011

Используете ли вы сжатие PVRTC? Это требует степени 2 и квадратных изображений.

1 голос
/ 18 октября 2008

Я полагаю, что это довольно неплохая оптимизация в графическом оборудовании, позволяющая использовать текстуры степени 2. Я купил новый ноутбук с новейшим графическим оборудованием для ноутбуков, и если текстуры в Maya не являются мощью 2, рендеринг все испортил.

0 голосов
/ 18 октября 2008

Попробуйте реализовать наложение текстур в программном обеспечении, и вы быстро поймете, почему желательны размеры степени 2.

Короче говоря, вы обнаружите, что если вы можете принять измерения степени 2, то многие целочисленные умножения и деления превращаются в битовые сдвиги.

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

Редактировать: Ответ "из-за mipmapping" является неправильным. Mipmapped, текстуры не в двух степенях - общая черта современных графических процессоров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...