Full HD 2D текстурная память OpenGL - PullRequest
6 голосов
/ 07 сентября 2011

Я нахожусь в процессе написания 2D-движка с поддержкой Full HD для компании художников, которая, будем надеяться, будет кроссплатформенной и написана на OpenGL и C ++.

Основная проблема, с которой я столкнулся, заключается в том, как бороться со всеми этими спрайтами HD.Художники нарисовали графику со скоростью 24 кадра в секунду, и они экспортируются в виде PNG-последовательностей.Я преобразовал их в DDS (не идеально, потому что для загрузки требуется заголовок DirectX) DXT5, который значительно уменьшает размер файла.Некоторые сцены в игре могут иметь 5 или 6 анимированных спрайтов одновременно, и они могут состоять из 200+ кадров каждая .В настоящее время я загружаю спрайты в массив указателей, но загрузка занимает слишком много времени, даже со сжатыми текстурами, и использует довольно много памяти (около 500 МБ для полной сцены).

Так что мой вопросЕсть ли у вас какие-либо идеи или советы о том, как обрабатывать такие большие объемы кадров?Я подумал о нескольких идеях:

  • Использование формата swf для хранения кадров из Flash
  • Реализация системы скелетной анимации 2D, замена последовательностей png(У меня есть опасения, что суставы видны, хотя)

Как такие игры, как Castle Crashers, загружаются так быстро с великолепной графикой HD?

Ответы [ 2 ]

4 голосов
/ 07 сентября 2011

Ну, первое, что нужно иметь в виду, это то, что не все платформы поддерживают DXT5 (в частности, мобильные телефоны).

Кроме того, вы рассматривали возможность использования чего-то вроде zlib для сжатия текстур?Текстуры, вероятно, будут иметь достаточную степень самоподобия, что будет означать, что они будут сильно сжиматься.В наше время декомпрессия обходится дешево из-за скорости процессоров, и время, сэкономленное на извлечении данных с диска, может быть гораздо более полезным, чем время, потраченное на декомпрессию.

Я бы начал там, если бы ябыли вы.

2 голосов
/ 07 сентября 2011

24 кадров в секунду рисованной анимации? Рассматривали ли вы снижение частоты кадров? Даже анимация кинематографического качества редко показывается на полной скорости 24 кадра в секунду. Даже снижение скорости до 18 кадров в секунду избавит от 25% ваших данных.

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

Если это проблема с загрузкой диска, тогда ваш единственный реальный выбор - сжать данные текстуры на диске и распаковать их в память. Сжатие в стиле S3TC не такое сжатое; он предназначен для использования в качестве метода сжатия для текстурирования оборудования. Обычно вы можете уменьшить его, используя стандартную библиотеку сжатия, такую ​​как zlib, bzip2 или 7z. Конечно, это означает необходимость распаковки, но процессоры работают быстрее, чем жесткие диски, так что обычно это общая победа.

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

Не отклоняйте 2D скелетную анимацию так быстро. Такие игры, как Odin Sphere, способны улучшить анимацию 2D-скелетов, имея несколько версий каждой позиции руки. То, что рисуется, - это то, которое соответствует ближайшей к той части тела, к которой оно прикреплено. Они также используют умное искусство, чтобы скрыть любые дефекты, такие как расклешенная одежда и т. Д.

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