Volume Light Direct3D 9

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

Модератор: Mikle

Dakovalev1
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 23.02.2010 (Вт) 14:16

Volume Light Direct3D 9

Сообщение Dakovalev1 » 16.02.2011 (Ср) 20:01

Нужно сделать эффект volume light на шейдерах HLSL не превышая 3.0(оно и понятно) как здесь.
Из всего алгоритма я понял, что надо на все объекты в сцене нужно проективно наложить луч света.
Не понятно, как правильно расчитать есть ли луч или нет. Короче не понимаю я алгоритм создания этого эффекта.
Объясните пожалуйста этот алгоритм. Я в принципе не совсем идиот, пожет и без кода пойму.
В интернете я ничего дельного не нашёл.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Re: Volume Light Direct3D 9

Сообщение DirectXManiac » 17.02.2011 (Чт) 13:22

Первое что приходит в голову:
1) Рендер сцену в карту глубины
2) Рендер сцены в текстуру
3) Проверка перекрытия лучей объектов:
если да, то накладываем текстуру луча(домножаем цвет основной текстуры на текстуру луча, думаю понятно), если нет пропускаем

4) Рисуем результирующую текстуру в виде квада на весь экран.
Алгоритм примерно такой...
#define ROFL 0xDDDD

Dakovalev1
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 23.02.2010 (Вт) 14:16

Re: Volume Light Direct3D 9

Сообщение Dakovalev1 » 17.02.2011 (Чт) 15:05

Это мне в голову уже пришло.
Во первых нафиг сцену в текстуру рендерить. Можно просто при отрисовке накладывать луч.
Во вторых именно 3 пункт не понятен. Как понять перекрывает ли луч объект или нет?

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

Re: Volume Light Direct3D 9

Сообщение Mikle » 17.02.2011 (Чт) 15:41

Два варианта:
1. Есть стенсильные тени - когда динамически строится теневой объём, как обычный меш, никаких рендеров в текстуру. Потом рендерим этот теневой меш в стенсил буфер, потом рендерим сцену с проверкой стенсила.
2. Рендер сцены в текстуру с позиции источника света, желательно использовать 16-битный одноцветный режим, кажется D3DFMT_R16F, точно не помню, какой дружит с RenderTarget, SDK нет под рукой. Рендер идёт без текстур, в Target записываем глубину.
Потом рендерим сцену, а в пиксельном шейдере рассчитываем расстояние от текущего пикселя до источника света, сравниваем с значением в RenderTarget текстуре, если меньше - освещено.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Re: Volume Light Direct3D 9

Сообщение DirectXManiac » 17.02.2011 (Чт) 16:41

Dakovalev1
В одной из статей по этому эффекту написано подобное, но там HDR лучи...
Mikle
Я про глубину это и имел ввиду, только не расписал :wink:
#define ROFL 0xDDDD

Dakovalev1
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 23.02.2010 (Вт) 14:16

Re: Volume Light Direct3D 9

Сообщение Dakovalev1 » 17.02.2011 (Чт) 16:59

Mikle.
Я как делать shadow mapping знаю. Ты сам мне рассказывал.(2-е я так понял типо и есть shadow mapping)
Блин люди вы меня не поняли. Мне не нужны тени. Их я и сам умею делать мне нужны лучи света(ОБЪЁМНОЕ освещение)
Посмотрите вот это. Вот что мне нужно. На первой и на последней картинке лучи. ОНИ то есть лучи мне нужны.

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

Правильно ли я придумал или нет?

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Re: Volume Light Direct3D 9

Сообщение DirectXManiac » 18.02.2011 (Пт) 11:25

Техника применяемая для теней подходит и для лучей света, в данном случае это одно и тоже, просто не затенять пиксель а осветлять :)
Все верно ты подумал, вперед!
#define ROFL 0xDDDD


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron