Не понимаю shadow mapping

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

Модератор: Mikle

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

Не понимаю shadow mapping

Сообщение Dakovalev1 » 29.03.2010 (Пн) 19:18

Не давно занялся шейдерами,стал искать информацию про создание теней,остановился на shadow mapping`е.Вроде я понял,как рендерить объект из положения источника света,но не понял,как потом получившуюся текстуру наложить поверх всех объектов в сцене.Если кто может,объясните весь процесс создания теней.
Заранее спасибо.

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

Re: Не понимаю shadow mapping

Сообщение Mikle » 31.03.2010 (Ср) 20:27

Полученную после рендера текстуру нужно накладывать проективно.
Я когда-то делал демку каустиков:
http://tuapse-mikle.narod.ru/Caust.rar
Это не совсем то, но текстура тоже накладывается проективно.

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

Re: Не понимаю shadow mapping

Сообщение Dakovalev1 » 01.04.2010 (Чт) 13:25

У меня ничего не работает.Я бэйсиком 6.0 не пользуюсь,да и dx8 у меня нету,а можно что нибудь под .net и directx 9-10?
И что значит накладывать проективно,как это сделать(иду в гугл).

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

Re: Не понимаю shadow mapping

Сообщение Mikle » 01.04.2010 (Чт) 14:28

Шейдер из той программы сработает и в ManagedDX.

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

Re: Не понимаю shadow mapping

Сообщение Dakovalev1 » 01.04.2010 (Чт) 14:31

Ясно попробую,но всё же,что такое проективное наложение текстур,я не нашёл.

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

Re: Не понимаю shadow mapping

Сообщение Mikle » 01.04.2010 (Чт) 17:10

Это значит, что текстура проецируется на объект, как будто работает видеопроектор, а текстура - это его картинка. В вертексный шейдер передаётся позиция этого проектора и вектор его направления. Текстурные координаты рассчитываются в зависимости от положения объекта в пространстве.

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

Re: Не понимаю shadow mapping

Сообщение Dakovalev1 » 01.04.2010 (Чт) 20:29

Блин,на каком языке этот шейдер написан.Чё-то не похож он на hlsl.
Как расчитать эту штучку,всмысле эти координаты,то есть получается я ставлю камеру на позицию лампочки aka источника света,Рендерю скажем на белом фоне чёрные объекты,ставлю плоскость внизу,
возвращаю камеру назад,расчитываю координаты и рендерю текстуру на плоскость,которую я сделал.получится жесткоко но вроде правильно.Меня интересует расчёт координат.Хотя бы алгоритм,поиск ничего не дал.

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

Re: Не понимаю shadow mapping

Сообщение Mikle » 04.04.2010 (Вс) 10:06

Как ты считаешь обычные координаты? Передаёшь в шейдер WorldViewProj матрицу и умножаешь на неё все позиции вертексов. А тут передаёшь в тот же шейдер ещё и такую же матрицу, где вместо камеры - источник света (View и Proj другие), а после умножения получаешь не обычные, а текстурные координаты.
А в пиксельном шейдере ставишь вместо texld - texldp, иначе получишь искажения перспективы вблизи.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Не понимаю shadow mapping

Сообщение Хакер » 05.04.2010 (Пн) 1:45

Dakovalev1, для тебя откровение, что после запятой, точки, точки с запятой, двоеточия, восклицательного или вопросительного знака ставится пробел? Я тебя уже предупреждал.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Не понимаю shadow mapping

Сообщение Dakovalev1 » 06.04.2010 (Вт) 11:57

Насколько я понял, tex2Dproj(s, t) вместо tex2D(s, t) вроде бы.
Ни texld, ни texldp я в HLSL не нашёл.
То есть надо в вершинном шейдере входные координаты вертексов (той модели, которая должна быть затенена, на которую тень рендерим) умножить на WORLDVIEWPROJ источника света, и получившийся вектор4 ввести в функцию tex2Dproj?
(Я плохо разбираюсь в матрицах).
З. Ы. Хакеру: Буду ставить пробелы. Только не помню, чтобы вы меня предупреждали, забыл наверно.

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

Re: Не понимаю shadow mapping

Сообщение Mikle » 06.04.2010 (Вт) 14:34

Всё, вроде, верно. По крайней мере если tex2Dproj соответствует texldp. Я HLSL не знаю, но по смыслу похоже.

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

Re: Не понимаю shadow mapping

Сообщение Dakovalev1 » 06.04.2010 (Вт) 15:43

Ну да, в википедии так и написано про функцию, что она для проективного наложения текстур, или как-то так.
А саму текстурку-то рендерить с помощью RenderToSurface?

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

Re: Не понимаю shadow mapping

Сообщение Mikle » 06.04.2010 (Вт) 18:46

Я создаю текстуру с флагом UsajeRenderTarget, потом делаю GetSurfaceLevel 0, и SetRenderTarget на этот Surface.

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

Re: Не понимаю shadow mapping

Сообщение Dakovalev1 » 06.04.2010 (Вт) 18:51

А если перевести на directx 9.0c, то получим
Dim surface as Surface = sometexture.getsurfacelevel(0) или как-то так, в прекрасной книженции Миллера отлично про это рассказывается.
Огромное спасибо!!!


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 3

    TopList