Войти
ПрограммированиеФорумГрафика

Megatexture (2 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 3 434 Следующая »
#15
13:25, 1 ноя. 2007

Мда...Я такое уже делал на DX6:))
Делал террайн в брайсе,рендерил карту 2048х2048 -с цветом, тенями и прочим,
затем там же карту высот и в максе по ней-поверхность.
Я пока не вижу преимущества-грузить несколько карт-патчей 1024х1024 в пределах видимости
и несколько уменьшенных копий соседних патчей вокруг ,или такое...


#16
13:26, 1 ноя. 2007

craft
Ну дык ты объясни нам чо почём, хотя бы теорию, как всё у тебя работает...

#17
15:09, 1 ноя. 2007

Executor

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

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

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

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

Например, предположим 0-ой лод имеет разрешение 512 на 512 - это 1 Мб с 4 байтами на пиксель, тогда 1-ый лод будет покрывать площадь разрешения 1024 на 1024 от реально мега текстуры, но иметь разрешение (лода) опять 512 на 512, 2-ой лод будет покрывать  2048 на 2048 и опять иметь разрешение 512 на 512 и т.д.

Для визуализации мега текстуры разрешением 32768 на 32768 потребуется 7 лодов, т.е. 7 Мб видео памяти, но не все лоды будут нужны в каждый момент времени, поэтому реальный объем будет еще меньше.

А выводить это хозяйство можно вообще за один DrawIndexedPrimitive с использованием PS.

Ну вот такая теория, описал как смог. Вопросы?

#18
15:24, 1 ноя. 2007

Ilia
это чтобы не юзать пиксельный шейдер :) ну нет у меня на работе PS :) если я тебя правильно понял

#19
15:30, 1 ноя. 2007

craft
можно по подробнее? лоды мегатекстуры заранее предрассчитываются и размещаются в RAM? а затем по мере надобности подгружаются в VRAM, так?

#20
15:32, 1 ноя. 2007

Nikola Tesla
лоды собираются в рантайме из кусочков мегатекстуры нужной детализации

#21
15:33, 1 ноя. 2007

craft
выложи свою дему без текстуры, мы сами ее нарисуем, ато напряжно качать

#22
15:34, 1 ноя. 2007

VileDog(ck.UA)
смогу сделать это через часов 9 :) дабы тут нет доступа на нужный ftp

#23
15:55, 1 ноя. 2007

craft
а сюда на сайт че религия не позволяет?

#24
15:59, 1 ноя. 2007

craft
У тебя каждый кусок мегатекстуры лежит в отдельном файле? И еще, загрузка данных очередного лода текстуры в VRAM осуществляется в отдельном потоке?

#25
16:03, 1 ноя. 2007

VileDog(ck.UA)

Вот дема без текустуры (191 Kb):

http://www.gamedev.ru/download/?id=6257

В папку textures нужно положить файл mega-8192.tga - текстуру разрешения 8192 на 8192 форматы TGA 24 бит на пиксель без сжатия.

Программа находится в папке bin, в первый запуск программа будет компилить текстуру, это может занять несколько минут, не прерывайте программу, она будет создавать файлы в папке textures/mega-8192/ (и займет еще 260 Мб :) на винте). После того, как исходник текстуры откомпилится, его (textures/mega-8192.tga) можно будет удалить (если мешает :) ).

Nikola Tesla
Да в отдельном, посмотри textures/mega-8192/, там все куски для всех уровней детализации.

Прога однопотоковая.

#26
16:44, 1 ноя. 2007

В чём заключается "компилирование текстуры"? Что с ней происходит в это время? Что это за файлы ещё создадуться? Зачем они нужны?

#27
16:50, 1 ноя. 2007

Executor
Вся текустура режется на куски разрешением 128 на 128, потом создается уменьшенный лод всей текстуры (т.е. ее разрешение уменьшается в два раза по ширине и высоте, где каждый пиксель равен среднему от 4 соответствующих пикселей бОльшей текстуры) и все повторяется, пока не останется один кусок 128 на 128 (уменьшенная копия оригинальной текстуры).

Из этих кусков собирается в рантайме нужный участок нужной детализации нужного разрешения.

#28
16:52, 1 ноя. 2007

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

А не лучше ли хранить не в tga формате на диске, а в сжатом DXT формате уже? Будет помоему быстрее загрузка идти...

З.Ы. Не хочешь написать статью на гд.ру по этой теме? :)

#29
16:56, 1 ноя. 2007

Executor
да, файлы которые начинаются с mega-0 - это самый детализированный уровень, с mega-1 - это первый лод, с mega-2 - второй и т.д.

mega-6-128-0x0.tga - это вся оригинальная текстура, уменьшенная до разрешения 128 на 128 пикселей.

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

Страницы: 1 2 3 434 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.