Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / GPSM: Geometry Pitch Shadow Map (комментарии) (11 стр)

GPSM: Geometry Pitch Shadow Map (комментарии) (11 стр)

Страницы: 16 7 8 9 10 11
MrShoorУчастникwww16 ноя. 201314:12#150
С какой стати в w хранится глубина? В w всегда 1 находится на сколько мне известно, а за глубину отвечает z. Или я что-то путаю? Если путаю, то объясните пожалуйста что.
Если разберешься, как строятся матрицы проекции - таких вопросов задавать не будешь. После умножения на матрицу проекции в W как раз оказывается глубина.
MaxGucciПостоялецwww16 ноя. 201315:48#151
MrShoor
> Если разберешься, как строятся матрицы проекции - таких вопросов задавать не
> будешь.
Да, в том и дело, что из всех описаний как это делается следует, что в w всегда 1, а в z глубина.
И если я не правильно разобрался, прошу помочь разобраться правильно.

Вот возьмем пример (http://www.songho.ca/opengl/gl_projectionmatrix.html)
Допустим у нас ортогональная матрица проекции. Зададим для нее l = -r = width/2, b = -t = height/2, n = -f = depth/2. Получим матрицу

mOrtho
(2/width     0              0             0)
(0           2/height       0             0)
(0           0             -2/depth       0)
(0           0              0             1)

И пусть матрица ModelView единичная. Тогда умножая mOrtho на вектор (x, y, z, w) (где w всегда равно 1, так?) получаем

mOrtho
(2/width     0              0             0)   (x)   ( 2x/width )
(0           2/height       0             0) * (y) = ( 2y/height)
(0           0             -2/depth       0)   (z)   (-2z/depth )
(0           0              0             1)   (w)   ( w        )

Т.е. w координата полученного вектора равна 1, а информация о глубине хранится в z.

Ну и вообще проекционная матрица нужна для того, чтоб диапазон значений по x ужимать с (l, r) -> (-1, 1), по y (b, t) -> (-1, 1), по z (-f, -n) -> (-1, 1).
В каком месте в w может попасть глубина?

MaxGucciПостоялецwww16 ноя. 201318:06#152
Все понял. Здесь оказывается используется перспективная проекция.
АврелийУчастникwww17 ноя. 201313:48#153
MaxGucci
Код шейдера был написан на HLSL

float4 posL=mul(mul(IN.position,matWorld),matLight);

Тут и заливается w наверное =)
И на сколько я помню (давно не работал с hlsl) w хранит глубину иначе чем в z.

MrShoorУчастникwww17 ноя. 201315:34#154
Аврелий
В w сохраняется просто z координата пикселя. Так устроена матрица перспективной проекции. В z же записывается величина, которая после деления клипается в пределах [0;1], что соответствует области от Near до Far плоскости в DirectX. Для OGL все ровно то же самое, только величина в z после перспективного деления клипается по [-1;1].
EugeneУчастникwww14 авг. 20159:56#155
Реализовал у себя. Блин, безумно мозолит глаза дрожание теней при движении. Самый весомый аргумент в пользу CSM.
Из-за него GPSM дико алиасит на тонких предметах вдалеке, типа стволов деревьев. Из-за неустранимого дрожания это очень заметно.

АврелийУчастникwww2 мар. 201718:55#156
-Eugene-
> Реализовал у себя. Блин, безумно мозолит глаза дрожание теней при движении.
> Самый весомый аргумент в пользу CSM.
> Из-за него GPSM дико алиасит на тонких предметах вдалеке, типа стволов
> деревьев. Из-за неустранимого дрожания это очень заметно.

надо было ввести шаг на позицию камеры для ренера источника света... но прошло уже 2 года, так что наверное не актуально =(

EugeneУчастникwww2 мар. 201719:18#157
Аврелий
> надо было ввести шаг на позицию камеры для ренера источника света...
Да понятно, что если снаппить позицию к сетке, проблема уменьшается. Но все равно то костыль - и если скорость камеры в игре может меняться в широких диапазонах, этот костыль выставляет напоказ свою порочную природу.
Страницы: 16 7 8 9 10 11

/ Форум / Программирование игр / Графика

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

2001—2018 © GameDev.ru — Разработка игр