OpenGL communityФорумУроки по OpenGL

Урок 6 - Тени от объектов (комментарии) (2 стр)

Страницы: 1 2
#15
19:15, 7 мая 2011

Pixar

Значить, так... Сперва отрисовываем сцену с позиции источника света и сохраняем нарисованное в текстуру. А потом полученную текстуру со стороны источника света пытаемся как бы "натянуть" на объекты сцены. Т.е. генерируем новые текстурные координаты. Можно, кстати, с такими координатами и такой текстурой отрисовать сцену. Получится стильная чёрно-белая картинка, всё что на свету абсолютно белое, всё что в тени абсолютно чёрное.

#16
22:13, 7 мая 2011

Executor
> Что значит снова?
Ну, вот в первый раз вершина (пусть будет v0) проходит стадии преобразования в шейдере depth.vs:

// переводим координаты вершины в однородные
gl_Position = transform.modelViewProjection * vec4(position, 1.0);

Во второй раз всё та же вершина v0 проходит СНОВА те же стадии преобразования уже в шейдере shadowmap.vs вот так:

Vert.smcoord  = transform.light * vertex;

Выходит, что с позиции источника света каждая вершина рендерится ДВА раза.

Кроме этого, ещё ТРЕТИЙ раз эта же вершина v0 рендерится уже для камеры. В шейдере shadowmap.vs это вот так:

gl_Position = transform.viewProjection * vertex;

Значит, для рендера полноценной сцены каждая вершина претерпевает всего ТРИ преобразования modelViewProjection.

.Scotina
> Т.е. генерируем новые текстурные координаты.
То есть повторно рендерим сцену со стороны источника освещения, только в этот раз мы передаём все вершины, которые видит камера, а не источник света (возможно источник видит что-то ещё, но ему не дают отрендерить эти вершины; вернее преобразования modelViewProjection источника освещения во второй раз выполняются для всех вершин, но потом те вершины, которые не видны со стороны камеры, отбрасываются). И в этот раз вершины, которые находятся ближе к источнику освещения, не затирают z координату той вершины, которую мы рендерим, потому что полученная проекция не сохраняется в z-buffer, а используется напрямую, чтобы быть сравнённой с z координатой, хранящейся в shadowmap. То есть, например, если есть прямоугольник, нормаль которого перпендикулярна направлению источника освещения, то, при обычном рендеринге, задние по отношению к источнику вершины затрутся в z буффере и останутся только ближние вершины. А при втором рендеринге этого же прямоугольника, не смотря на то, что он рендерится все той же матрицей источника освещения, мы будем знать z координаты всех четырёх вершин прямоугольника, а не только ближайших двух. Под этим я имел в виду, что во второй раз z координаты не затираются.

Возможно, это для вас настолько банально и просто, что даже не понятно, но я описываю именно те моменты, которые были не понятны мне =)

#17
14:25, 8 мая 2011

Pixar
Бррр, я чот ничо не понял, что у тебя за преобразования такие. :)
Помоему у тебя какая-то каша в голове. Рендерится два раза! Ничего нигде НЕ затирается.
Есть же моя статья, я там надеюсь доступно объяснил что и куда множится и зачем:
http://www.gamedev.ru/code/articles/ShadowMapGLSL

#18
20:56, 30 авг 2011

Как рассчитывать параметры для проекции (l,r,t,b, near, far) для произвольной сцены?. Я правильно понимаю что надо стараться минимизировать объём который попадает в SM?

#19
16:32, 31 авг 2011

us
> Как рассчитывать параметры для проекции (l,r,t,b, near, far) для произвольной
> сцены?. Я правильно понимаю что надо стараться минимизировать объём который
> попадает в SM?

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

#20
19:16, 31 авг 2011

>Одним из полезных свойств построения теневой карты является то, что ее построение не зависит от сложности геометрии на сцене,

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

Т.к. от геометрии все же зависит тормоза или нет.

#21
10:37, 1 сен 2011

fzr125
> Т.к. от геометрии все же зависит тормоза или нет.

Ох, следует отличать рендер сцены и получение данных для расчета теней, мы говорим о теневой карте. Есть техники которые требуют например построения силуэта геометрии, вот там надо обсчитывать всю геометрию на сцене дополнительно, с теневыми картами же все проще - никаких дополнительных расчетов - следовательно техника не зависит от сложности геометрии. Так понятно? :)

Страницы: 1 2
OpenGL communityФорумУроки по OpenGL

Тема в архиве.