Как работает Megatexture?

21

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

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

Подводя итог, как это работает, почему это здорово и как я могу сделать что-то подобное.

Daemoniorum
источник

Ответы:

15

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

Я рекомендую просмотреть материал на этой странице для получения более подробной информации об одном подходе: http://silverspaceship.com/src/svt/

Flawe
источник
4

Проверьте картирование клипов для уже существующей аппаратной реализации SGI.

Совсем недавно Megatexture использовалась в качестве имени для разреженного виртуального текстурирования (SVT).

SVT отображает изображение с небольшого разрешения, отмечая, какая текстура и mipmap понадобятся. Затем подпрограмма ЦП выполняет загрузку в дисковую систему для переноса этих фрагментов текстуры / mip в память (если не в память), а затем загруженный фрагмент текстуры помещается в раздел большого текстурного атласа (обычно в кусках, скажем, 128x128).

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

DeanoC
источник
Это объясняет совсем немного. Мне было интересно, если бы происходило только потоковое вещание, как им удавалось передавать потоковые фрагменты этой массивной текстуры на жесткий диск или диск, достаточно быстрый, чтобы быть полезным, промежуточный атлас отвечает довольно хорошо. Также теперь я понимаю, почему это более эффективно, чем традиционные методы. Я посмотрю вокруг для получения более подробной информации о SVT (ссылка Flawe выглядит хорошей отправной точкой для этого)
Daemoniorum
1

Вы можете думать о Megatexture как о «потоковой» текстуре. Необходимо отобразить одно массивное, полностью детализированное текстурное изображение (проще говоря), которое читается как его разделы. Я уверен, что в этом есть намного больше, чем это, например, такие как LOD / mipmapping, загрузка и управление ресурсами среди очевидных вещей.

В Википедии есть статья об этом.

Ник Бедфорд
источник
2
Я читал статью раньше, но она немного освещает детали. Немного сложно получить реальные подробности об этой технике. Я хотел бы, чтобы И.Д. сделал бумагу об этом ...
Daemoniorum