Quest3D - Русскоязычное сообщество

Quest3D => Контент => Тема начата: dfx от 18 Мая 2011, 20:04:04



Название: Как запечь RAWReflection в текстуру?
Отправлено: dfx от 18 Мая 2011, 20:04:04
Всем привет.
 
Нужны глосси-отражения, в условиях статичной сцены и освещения.
Достаточно в GrayScale и приличным размытием. Я так понимаю, что можно обойтись двумя RGBA текстурами, но запечь отражения в тектуру vray не может, т.к. просто не существует такого рендер-элемента для RTT.

Делать материалы полностью отражающими - не выход, т.к. они примамают тени. А сделать так, что бы объект не приниал тени если виден в камеру, но принимал, если в отражении нельзя.)

Есть у кого какие-нибудь идеи?


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Ruslan от 18 Мая 2011, 20:19:44
Привет!
не совсем понял о чем речь, особенно про тени
может стоит сделать дополнительную нормалку (шумовую), делать из нее выборку вектора, умножать на коэффициент и учитывать дополнительно этот вектор при выборке из кубмапы, возможно, что таким образом можно будет добиться эффекта глосси


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Sqwer от 18 Мая 2011, 20:20:29
Юзай имэйдж спэйс  рефлекены

и вокруг детерминированной точки делай   гаус выборку.


естественно  у тебя должен быть полный G-буффер.



Если реалистичность не нужна , то вполне подойдёт дедовский способ   - сблюренная кубамапа.Хорошо умеет блюрить кубамапы    старая  тулся  от ATI по кубамапам (точного названия не помню).


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: dfx от 18 Мая 2011, 21:01:11
Ruslan
Цитировать
возможно, стоит сделать нормалку шумовую, подстроить коэффициент, тогда отражения с кубмапы будут выбираться с небольшим отклонением, возможно, что таким образом можно будет добиться эффекта глосси
Для блура кубамапы в реалтайм я делал выборки по скринспэйс нормалке, т.к. локальная работала совсем не так - при включенном мипмапинге весь шум терялся и разблуренность пропадала. При отключенном - жуткая каша пикселей. Но реалтайм-блур алгоритм очень тяжелый, использовался только потому, что нужны были размытия для анизотропных материалов.
Кроме всего некий шум таки остается. Чем больше пассов, тем глаже, но тормознее. :(

Кстати, видел ролик, где чел демонстривал такие размытия, но у него они были очень гладенькие и работало все шутро. Если в курсе его магии, намекни, кде копать. ;)

Кубамапу я не хочу применять в силу отсутствия локализации отражающихся элементов и отсутствия самоотражения.

Sqwer

Цитировать
Юзай имэйдж спэйс  рефлекены
При том, что я в эффектах далеко не начинающий, после такой фразы так и хочется сказать: "Вот ты сейчас с кем разговаривал?" ;D
Можно ссылочку? Если есть что то, что считает отражение на криволинейных поверхностях в реалтайме, то я первый в очереди! :)

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

Пока есть мысль хранить 2-3 предпросчитанных текстур с отражением. Т.е. 8-12 каналов для полусферы в тангентспэйс и интерполировать их взависимости от вектора камеры. Это, конечно, не сферические функции, но типа того. Другое дело, что нарендерить это в врей нельзя. Я хотел подменять нормали для каждого канала, но тогда и в отражениях они будут тоже изменены, а значит не корректно освещенный объект в своем отражении. Видимо, поможет, либо смена технологии, либо врей-сдк. :(

Спасибо Вам, за помощь.


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Ruslan от 18 Мая 2011, 21:16:12
на мой взгляд, запечение глосси лишено смысла, так как они зависят от вектора взгляда, то-есть, я вообще сомневаюсь, что их можно запечь.
по поводу IBR, о которых говорил Sqwer, можно посмотреть здесь:
http://www.gamedev.ru/code/forum/?id=147202&page=36
там Che@ter и Chaos_Optima их реализовали в своих демках.


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Sqwer от 18 Мая 2011, 21:23:14
Цитировать
При том, что я в эффектах далеко не начинающий, после такой фразы так и хочется сказать: "Вот ты сейчас с кем разговаривал?"
Тогда тем более слова: имэйдж, спэйс, рефлекшнс  должны в крови сидеть!

да и  сочетания  (имэйдж спэйс и  скрин спэйс   в пост эффектах означают одно и то же)

Цитировать
Можно ссылочку?
Пжста.  
http://www.gamedev.ru/code/forum/?id=147202&page=26

пэйперов не встречал, но  код и так не хитрый. Там трассеры  нужно делать в 1ом направлении. как узнать направление - не беда  если есть Г буффер с нормалями.

постепенно трассируя лучами мы приближемся к исходной точки отражания.
на этом можно и остановиться , если нужны чёткие отражения, но если нужно именно глосс отражения, то рядом  с этой  искомой точкой можно сделать выборки  и блюрить по гаусу.
Чем дальше  точка обработки от целевой точки  отражения   - тем больше радиус выборок блюра.

Поскольку это всё таки  скрин спэйс, то проблема перекрытых (за кадровых)   объектов  остаётся.


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Sqwer от 18 Мая 2011, 21:25:02
Цитировать
Пока есть мысль хранить 2-3 предпросчитанных текстур с отражением. Т.е. 8-12 каналов для полусферы в тангентспэйс и интерполировать их взависимости от вектора камеры. Это, конечно, не сферические функции, но типа того. Другое дело, что нарендерить это в врей нельзя.

Мы эксперементировали  с примерно подобным алгоритмом,   получилось примерно как в клипе:
http://www.youtube.com/watch?v=CuMjeiDSCOY&feature=BFa&list=PLDA11CB4D56624B23


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: dfx от 18 Мая 2011, 21:42:21
Sqwer
Цитировать
Мы эксперементировали  с примерно подобным алгоритмом,   получилось примерно как в клипе
;D Да, у меня тоже подобное было с тремя коэффициентами в тангентспейс. Вы сколько коэффициентов использовали? Если больше 16 на полусферу, то придется отказаться, наверное. - дороговато будет по ресурсам и по выборкам.
Теоритически, с 8-12 должно быть намного лучше. Я видел PRT глосси отражения, вертексные. Непомню, сколько они коэффициентов использовали, но смотрелось более или менее. Кроме того, в таких алгоритмах используется полная сфера в ворлдспейс. Непонравилось только то, что сетка все же прослеживалась по отражениям.
 
За ссылку на ветку спасибо! Смутило требование дх11. Попробую в алгоритм вникнуть. Но 45 фпс на дх11 картах..  ::)


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Ruslan от 18 Мая 2011, 21:47:45
dx11 для этого алгоритма не обязателен, на dx9 реализуется


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Sqwer от 18 Мая 2011, 21:55:29
dfx
раз ты в теме   OpenCL  , не мог бы подсказать,  как долго биндинг 1024*1024  текстуры    из ОЗУшки в  текстуру ДХ   и обратно  идёт?

и можно ли прям  с видяхи минуя ОЗУ это сделать.


Есть идеи как сделать не фэйковый  ГИ, но нужны выч шейдеры или GPUориентированная реализация  для трассировки лучей.


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Corpic от 18 Мая 2011, 22:45:34
Встретилась ссылочка http://www.clockworkcoders.com/oglsl/rt/gpurt1.htm,  может подойдет?


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Sqwer от 18 Мая 2011, 22:56:32
Цитировать
может подойдет?
нет ,это вьюв  спэйс реализация.

Суть ГИ -  это моделирование отскока. прямой  ортогональный  световой поток  сделать простоЮ но после встречи с препятствием (например чайник)   лучи  света   хаотично распространяются во всех направлениях.  Вью спэйс - это одно направление. Хоть и можно сделать конечное число однопиксельных рендеров вью спейса по направлению лучей отскока, но вот на DIP ах  вся производительность загнётся.


Вторая причина: -  в примере  разберается простейший случай 1 объект.  а если их 20  и каждый перекрывает друг друга, а соответсвенно затирает Z.

Обычный рендер не приемлем.


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: dfx от 19 Мая 2011, 00:16:42
Sqwer
Цитировать
раз ты в теме   OpenCL  , не мог бы подсказать,  как долго биндинг 1024*1024  текстуры    из ОЗУшки в  текстуру ДХ   и обратно  идёт 
К сожалению, я не настолько в теме, что бы ответить.

Оффлан рендеры сильно отличаются от реалтайм. То, что они теперь могут использовать гпу, не значит, что они работают полностью на гпу. ЦПУ выступает неким менеджером, который формирует задачи и отправляет их гпу. Т.е. гпу уже получает все необходимые данные для того, что бы сделать вычисления и после возвращает результат. При построении одного кадра таких задач, формируется, огромное количество.
 
В теории,если на дх10 картах, можно копировать, создавать и удалять геометрию, то ничего не мешает в цикле проводить махинации с позициями вершин в геометрическом жейдере и можно посчитать ГИ на уровне одного объекта только в шейдере за один вызов. Только всеравно это будет дорогим удовольствием.

Во вьюспейс полноценный ГИ сделать проблематично. Рендер несколько слоев вьюспейс тоже не поможет, а только займет ресурсы. Как ты верно заметил, надо делать множество вызовов геометрии что превратит реалтайм рендер в офлайн, с реалтайм подходом) Можно сделать некий встроенный предпросчет в 3д текстуры при загрузке, а в процессе делать выборки из нее. Но в этом случае динамики не получится.

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

Правда, из-за такого хаотичного гуляния луча могут быть частые кеш-промахи.

Я бы сам не против реализовать ГИ, используя один Г-буфер.
 Пока ничего не придумал. :-[


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Sqwer от 19 Мая 2011, 00:27:29
Цитировать
В теории,если на дх10 картах, можно копировать, создавать и удалять геометрию, то ничего не мешает в цикле проводить махинации с позициями вершин в геометрическом жейдере и можно посчитать ГИ на уровне одного объекта только в шейдере за один вызов. Только всеравно это будет дорогим удовольствием.

можно , но на уровне примитивов.  т.е.  склить меши там никак не получится.

Цитировать
Если принимать во внимание то, что для ГИ не нужно высокого разрешения, то можно считать кубомапу - G-буфер в небольшом разрешении и таскать данные еще и из нее. Конечно, добавится еще один проход, но все зависит от цели. Информацию за перекрытыми объетами так не получить, но отскоки в зоне сферы камеры посчитать уже можно.
делали такое (кубамаповый G-buffer),  появляется информация   о объектах  которые  оружают  вью спэйс, что помогает решать проблемы  ореола по контуру  скрина, но не более.


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: dfx от 19 Мая 2011, 01:02:20
Цитировать
делали такое (кубамаповый G-buffer),  появляется информация   о объектах  которые  оружают  вью спэйс, что помогает решать проблемы  ореола по контуру  скрина, но не более.

Дороговато делать проход, что бы убрать этот артифакт) Проще кропить картинку, наверное...
Народ в ветке, куда вы ссылку дали, юзают такую кубамапу для скринспейс рефлектов. Так, что не только, что бы убарть ореол она может пригодиться.
Значит пробовали считать ГИ с кубомапой? Чем результат не устроил? А то вот меня заинтриговали, хотел попробовать реализовать. Теперь сомневаюсь.


Название: Re: Как запечь RAWReflection в текстуру?
Отправлено: Sqwer от 19 Мая 2011, 23:42:50
Не решает всех проблем.
особенно в случаях, если одна комнота была  одного цвета , а другая -  контрастного по отношению к вервой.

Сам переход с комныты в другую  очень палился. Поэтому техника не пригодна и нужно задуматься о гибридных методах  GPU.