RGB-массив загнать в Direct3DTexture8

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: RGB-массив загнать в Direct3DTexture8

Сообщение Mikle » 04.04.2021 (Вс) 12:09

Шейдер - это просто замена FFP, позволяющая более тонко управлять текстурированием, считать свет, туман и т. п. Это не инструмент доступа к текстуре, рендер в текстуру делается с одинаковым успехом и шейдерами, и FFP. Единственное, чем шейдер превосходит FFP в плане твоих задач - это VTF (vertex texture fetch) - это возможность читать текстуру в вертексном шейдере, то есть возможно использование текстуры в качестве массива данных вертексов. Я это использовал в игре Школа пилотов для реализации бесконечного ландшафта, то есть у меня там вообще нет меша с сеткой ландшафта, вместо этого используется фрагмент затайленной текстуры. Но это доступно только начиная с SM_3_0.

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: RGB-массив загнать в Direct3DTexture8

Сообщение Old_Maple » 04.04.2021 (Вс) 13:09

Mikle писал(а):...вместо этого используется фрагмент затайленной текстуры.

Но, как я понимаю, сам фрагмент был создан изначально и потом подгружался...
VB6 хороший инструмент для проверок самих идей. Понимаю, что для быстрой реализации необходимы другие инструменты. Для меня сейчас важно понять, как можно это реализовать в DirectX посредством VB6. Ну а дальше встраивать процедуры, где требуется колосальный объем вычислений и рекурсий, использующие мощность графического процессора. Ну и конечно, чтобы данные не гонять туда-сюда из оперативной памяти в память графической карты.
Veritas est aeterna!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: RGB-массив загнать в Direct3DTexture8

Сообщение Mikle » 04.04.2021 (Вс) 13:22

Old_Maple писал(а):сам фрагмент был создан изначально и потом подгружался

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

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: RGB-массив загнать в Direct3DTexture8

Сообщение Old_Maple » 04.04.2021 (Вс) 13:40

Mikle писал(а):Сам фрагмент, точнее не фрагмент, а вся текстура, генерируется при старте новой игры и сохраняется в PNG файл, чтобы можно было продолжить старую игру и не ждать каждый раз перегенерации.

Понял.
Но интереснее, все-таки, чтобы все создавалось "на лету". Ландшафт, лес, реки... Причем, тот же самый ландшафт.
Кстати, Mikle, а не пробовал реализовать алгоритм постройки ландшафта на шейдерах? Причем, бесконечный... Но, чтобы вернувшись в любую точку, где был ранее, ландшафт был в точности такой же? И, разумеется, без сохранений на жестком диске.
Veritas est aeterna!

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: RGB-массив загнать в Direct3DTexture8

Сообщение The trick » 04.04.2021 (Вс) 15:39

Mikle писал(а):Шейдер - это просто замена FFP, позволяющая более тонко управлять текстурированием, считать свет, туман и т. п. Это не инструмент доступа к текстуре, рендер в текстуру делается с одинаковым успехом и шейдерами, и FFP. Единственное, чем шейдер превосходит FFP в плане твоих задач - это VTF (vertex texture fetch) - это возможность читать текстуру в вертексном шейдере, то есть возможно использование текстуры в качестве массива данных вертексов. Я это использовал в игре Школа пилотов для реализации бесконечного ландшафта, то есть у меня там вообще нет меша с сеткой ландшафта, вместо этого используется фрагмент затайленной текстуры. Но это доступно только начиная с SM_3_0.

Майкл, а разве в шейдере нельзя сгенерировать текстуру? У меня есть пример Raymarching'а на пиксельном шейдере генерируется изображения. Тут просто вывод на экран можно изменить на вывод в текстуру, а эту текстуру уже потом использовать.
UA6527P

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: RGB-массив загнать в Direct3DTexture8

Сообщение Mikle » 04.04.2021 (Вс) 17:12

The trick писал(а):Майкл, а разве в шейдере нельзя сгенерировать текстуру?

Можно. Я писал, что шейдеры не дадут какого-то нового доступа к текстурам. Получим прирост скорости, да, но в плане реализации алгоритмов получим больше головной боли.
Нужно рассматривать более конкретные примеры, чтобы решить, на чём удобнее генерировать. Например, анимировать водную поверхность лучше на шёйдере, а вот генерацию практически всех примеров из TFScript на шейдер будет очень сложно перенести.

Old_Maple писал(а):не пробовал реализовать алгоритм постройки ландшафта на шейдерах? Причем, бесконечный... Но, чтобы вернувшись в любую точку, где был ранее, ландшафт был в точности такой же?

Это не сложно, но только для случая простого ландшафта, без эрозии и т. п. эффектов.

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: RGB-массив загнать в Direct3DTexture8

Сообщение Old_Maple » 04.04.2021 (Вс) 19:38

Mikle писал(а):а вот генерацию практически всех примеров из TFScript на шейдер будет очень сложно перенести.

Насколько я понимаю, генерация шума и прочие фильтры, которые применяются в TFScript наоборот будет проще реализовывать в вертексном шейдере, поочередные проходы. Избавишься от множества вложенных циклов. Внутренний цикл можно реализовать посредством ядер GPU, как было сделано на Nvidia CUDA в реализации "Diamond-Square". Вертексные шейдеры, думаю, используют те же ядра. Или нет?
Veritas est aeterna!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: RGB-массив загнать в Direct3DTexture8

Сообщение Mikle » 04.04.2021 (Вс) 19:55

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

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

Old_Maple
Обычный пользователь
Обычный пользователь
 
Сообщения: 54
Зарегистрирован: 25.10.2016 (Вт) 12:03

Re: RGB-массив загнать в Direct3DTexture8

Сообщение Old_Maple » 05.04.2021 (Пн) 13:42

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

К моему глубочайшему сожалению, Mikle, мне абсолютно нечем тебе возразить, ибо работу шейдеров я понимаю весьма поверхностно. Но, надеюсь, я когда-нибудь разберусь с этим. А сейчас пока внимаю твоим словам.
Veritas est aeterna!

Пред.

Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 34

    TopList