Производительность OpenGL при рендеринге "виртуальной галереи" (текстуры) - PullRequest
3 голосов
/ 10 июня 2010

У меня есть значительное (120-240) количество изображений 640x480, которые будут отображаться как текстурированные плоские поверхности (4 вершинных многоугольника) в трехмерной среде. Около 30-50% из них будут видны в данном кадре. Для них это возможно кроссовером. Ничто другое не будет присутствовать в окружающей среде.

Вопрос в том, справится ли с этим современный и / или многолетний (скажем, Radeon 9550) графический процессор, и какую частоту кадров можно ожидать? Я стремлюсь к 20FPS, но 30-40 было бы неплохо. Будет ли изменение разрешения на 320x240 более вероятным?

У меня нет опыта работы с 3D-графикой на современных графических процессорах, и, к сожалению, я должен сделать выбор в пользу дизайна. Я не хочу тратить время на то, что не сработало: -)

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Если у вас есть текстуры RGB, то это будет 640 * 480 * 3 * 120 байт = 105 МБ как минимум текстурных данных, которые должны помещаться в VRAM более новых видеокарт без замены, так что это не будет проблемой.Тем не менее, поиск текстур может быть немного проблематичным, но об этом сложно судить без попыток.Учитывая, что вам нужно всего лишь обработать 50% из 105 МБ, то есть около 50 МБ (очень приблизительная оценка), а целевое значение 20 FPS означает 20 * 50 МБ / с = около 1 ГБ / с.Это должно быть возможным для пропускной способности даже на старом оборудовании.

При чтении спецификаций старого Radeon 9600 XT указывается пиковая скорость заполнения 2000Mpixels / sec, и если я не ошибаюсь, вам требуется намного меньше 100Mpixels/ сек.Пиковая ч / б память указана с 9,6 ГБ / с, в то время как вам потребуется около 1 ГБ / с (как объяснено выше).

Можно утверждать, что это возможно, если все сделано правильно - esp.текущее оборудование не должно иметь никаких проблем.

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

0 голосов
/ 10 июня 2010

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

С этогоВы можете создавать MIP-карты оригинала, которые являются просто версиями оригинала, уменьшенными до двух степеней, поэтому, если вы начали с 512x256, вы затем создадите версии в 256x128, 128x64, 64x32, 32x16, 16x8, 8x4, 4x2, 2x1 и 1x1.Когда вы это сделаете, OpenGL сможет / выберет «правильный» размер, в котором он будет отображаться на последнем экране.Как правило, это уменьшает работу (и улучшает качество) при масштабировании текстуры до желаемого размера.

Очевидным препятствием для этого является исчерпание памяти текстур.Если память будет работать, то на 9550 таймфрейме вы, вероятно, ожидаете 256 МБ встроенной памяти, что будет достаточно, но вполне вероятно, что некоторые текстур будут находиться в системной памяти.Это переполнение, вероятно, будет довольно небольшим, поэтому, вероятно, будет не очень сложно поддерживать тот тип частоты кадров, на который вы надеетесь.Однако, если вы добавите намного больше текстур, это в конечном итоге станет проблемой.В этом случае уменьшение исходного размера на 2 в каждом измерении (например) уменьшит ваши требования к памяти в 4 раза, что облегчит встраивание их в память много .

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