28 пост апдейт...
Executor
по моему автор правильно сделал что не использовал DXT сжатие, иначе трудно было бы резать текстуру на несколько кусков-файлов и опять пережимать их заново... проще сразу в препроцессинге создавать кучу текстур в DXT сжатом виде из одного исходного файла.
craft
Кстати, очень заметно тормозит при заливке текстур в видеопамять, заведи дополнительный поток для их загрузки...
Nikola Tesla
>по моему автор правильно сделал что не использовал DXT сжатие, иначе трудно
>было бы резать текстуру на несколько кусков-файлов и опять пережимать их
>заново...
Пережимать? Не понял тебя...
Сейчас у него куча файлов в tga формате, а то было бы в формате в котором всё лежит в видеопамяти...
craft
Как ты определяешь момент когда надо переключить лоды? Вижу камерой можно летать до определённого момента, потом переступая какуюто грань лоды меняются... Как это определяется?
Executor
Про статью весьма интересно. Что для этого нужно?
Чтобы обеспечить быструю подгрузку, нужно поместить все файлы, что у меня сейчас лежат в textures/mega-8192 в один файл, тогда можно будет открыть его только один раз на старте и потом грузить нужные участки, которые могут быть посжаты кстати. Тут большое поле деятельности для оптимизации.
Лоды меняются по такому алгоритмы: вогрук камеры есть некий радиус для лода 0, радиус в два раза больше - это для лода 1 и т.д. Вот какие куски цепляет радиус, те и оказываются в данном лоде.
Nikola Tesla
Рывки из-за неоптимального механизма подгрузки с диска, а не из-за проблем с закачкой в видео память.
craft
>Про статью весьма интересно. Что для этого нужно?
Executor
Да, статья на русском языке по Megatexture нужна...
>Пережимать? Не понял тебя...
вот если бы был 1 большой dds в DXT формате а не 1 тарга, как тогда ее разбить на части... в случае с таргой это сделать намного проще... и вобще, проще заранее иметь кучу уже подготовленных dds-ок...
craft
ясно, а что мешает делать подгрузку в отдельном потоке?
Executor
т.к. размер кусков имеет некое дискретное значение, 128 в данном случае, то небольшое движение камеры может не привести на перегенерации лода, это как математическое округление:
0.1 округлится в ноль и 0.2 тоже и т.д., а вот 0.5 округлится уже в 1
Nikola Tesla
подгрузка это большое поле деятельности для оптимизации, полностью согласен
Nikola Tesla
>вот если бы был 1 большой dds в DXT формате а не 1 тарга, как тогда ее разбить
>на части... в случае с таргой это сделать намного проще... и вобще, проще
>заранее иметь кучу уже подготовленных dds-ок...
Я говорю про сжатый не первоначальный большой файл, а про кучу мелких... Ведь загрузка будет проще... Чтото вроде: (можно тут оптимизировать грузя в структуру, но это не важно, суть главное)
Stream.Read(TexWidth, SizeOf( Integer)); Stream.Read( TexHeight, SizeOf( Integer)); Stream.Read( TexInternalFormat, SizeOf( Integer)); Stream.Read( TexImageSize, SizeOf( Integer)); GetMem( P, TexImageSize); Stream.Read( P^, TexImageSize); glGenTextures( 1, @TexID); glBindTexture( GL_TEXTURE_2D, TexID); glCompressedTexImage2D( GL_TEXTURE_2D, 0, TexInternalFormat, TexWidth, TexHeight, 0, TexImageSize, P); glBindTexture( GL_TEXTURE_2D, 0); FreeMem( P);
Думаю код загрузки tga приводить ненужно, он намного больше, при этом в несжатом виде, а потом будешь загружать в видеопамять и видеокарта ещё будет тратить время на сжатие и так при каждой загрузке...
во время компиляции прога должна что-нить рисовать?
VileDog(ck.UA)
>во время компиляции прога должна что-нить рисовать?
Если я верно понял автора, то компиляция это просто разбивка текстуры на сектора и лоды, не более того... Такую процедуру можно сделать руками в фотошопе например...
Executor
Да, только нужно учесть, что сам по себе кусок - это только часть финальной текстуры, которая уходит в GPU, т.е. при загрузке куска не создается текстура.
VileDog(ck.UA)
Нет не должна, она создает файлы в textures/mega-8192, их появление говорит и шелест диска говорит о нормальной компиляции. Если не компилит, значит исходный формат не верен, например tga посжат.
Executor
Да, ты понял правильно, можно сделать и самому, только наверное это долго (там 5461 файл) да и сохранить нужно все в определенном формате :) несжатый tga 24 бит.
Executor
согласен на счет мелких - они д.б. в DXT формате и заранее предрассчитаны...
craft
>Да, только нужно учесть, что сам по себе кусок - это только часть финальной
>текстуры, которая уходит в GPU, т.е. при загрузке куска не создается текстура.
Чтото не догнал... Можно поподробнее? Загрузил я изображение определённого сектора, и текстура не создаётся? А старые текстуры не выгружаются? А как тогда?
>можно сделать и самому, только наверное это долго (там 5461 файл) да и
>сохранить нужно все в определенном формате :) несжатый tga 24 бит
Я резал скриптом Фотошоповским и лоды также делал... :) Я растровую карту города делал подобным образом, правда там было 2Д вид сверху и не было плавного зума, а просто переключение между лодами, файлы были в гифах и всё рисовалось без хардварной аксереации... Не думал, что это некая мегатекстура у меня была... :)))
Executor
>Чтото не догнал... Можно поподробнее? Загрузил я изображение определённого сектора, и текстура не создаётся? А старые текстуры не
>выгружаются? А как тогда?
Видимо на место старых текстурных данны пишутся новые... в этом вроде и преимущество техники.
Тема в архиве.