OpenGL: размер текстуры и видеопамять - PullRequest
0 голосов
/ 07 августа 2011

Я создаю растровую игру в стиле червей в стиле Worms, используя OpenGL. Я хотел бы знать, где ограничения в отношении видеопамяти для размера миров.

В настоящее время я использую блоки из 512 * 512 текстур RGBA для ландшафта.

  • Сколько памяти, очень грубо, можно ожидать, что такая текстура RGBA 512 * 512 займет?
  • Есть ли какое-либо внутреннее автоматическое сжатие?
  • Какой объем видеопамяти можно ожидать на большинстве компьютеров пользователя?

Ответы [ 4 ]

2 голосов
/ 08 августа 2011

Сколько памяти, очень грубо, можно ожидать, что такая текстура RGBA 512 * 512 займет?

Недостаточно информации. Вы должны всегда использовать размерные форматы изображений OpenGL (GL_RGBA 8 , GL_RGBA 16 ).

GL_RGBA8 занимает 32 бита на пиксель, что составляет 4 байта. Следовательно, 512 * 512 * 4 = 1 МБ.

Существует ли какое-либо внутреннее автоматическое сжатие?

Номер * * тысяча двадцать-одна

Какой объем видеопамяти можно ожидать на большинстве компьютеров пользователя?

Сколько вы сейчас используете?

OpenGL будет публиковать и выводить данные изображения в соответствии с доступным пространством. Если у вас заканчивается память GPU, OpenGL с радостью выделит системную память и загрузит изображения по мере необходимости.

Но, честно говоря, ваша маленькая игра Worms не будет стоить ничего с точки зрения объема памяти. Может быть, 64 МБ, когда вы закончите, топы. Вам не о чем беспокоиться.

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

Я бы не очень беспокоился об этом.Даже с миром 8192 * 2048 (4 экрана в ширину и 2 экрана в высоту, что очень много для игры в стиле Worms), вам потребуется всего 8 * 2 * 4 = 64 МБ (добавьте mipmaps, другие текстуры, фреймбуфер), которые вы должны уместить в 128 МБграницы.Насколько я знаю, даже более старые графические процессоры имеют такую ​​память (мы не говорим о картах GeForce4, верно?).

Старые графические процессоры могут иметь ограничения на размер каждой текстуры, но, поскольку вы ужеразделите ваш мир на куски 512x512, это не будет проблемой.

Если возникнет проблема с видеопамятью, вы можете позволить пользователям использовать текстуры половинного размера (т.е. уменьшить размер мира до 4096 * 1024 и 256x256 каналов) иизвлекать новые / отменять неиспользуемые регионы по запросу.

0 голосов
/ 07 мая 2013

Опять же, это зависит от вашего двигателя, но на вашем месте я бы сделал это:

Поскольку ваша текстура ландшафта, вероятно, будет повторно использовать некоторые текстуры, похожие на мозаику, и вам необходимо знать, присутствует ли пиксель или уничтожен, тогда, если вы используете текстуры мозаики размером не более 256x256, вам определенно не помешает GL_RG16. внутренний формат (где каждый компонент будет текстурной координатой, которую вам нужно будет отобразить в [0, 255] -> [0.0, 1.0], и вы зарезервируете какое-то специальное значение, чтобы указать, что местность уничтожена) для вашей текстуры местности, каждый блок 512x512 занимает 0,5 МБ. Хотя можно добавить дополнительный байт для обозначения присутствия на местности, но 3-байтовый формат не слишком хорошо кеширует

0 голосов
/ 07 августа 2011

С 32 битами на секунду (4 байта) вы получаете 4 * 512 * 512 = 1 МБ

См. Это относительно сжатия текстур: http://www.oldunreal.com/editing/s3tc/ARB_texture_compression.pdf

...