Войти
ПрограммированиеФорумГрафика

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

Страницы: 15 6 7 811 Следующая »
#75
20:43, 4 мая 2012

Честно говоря, мне показалось более рациональным вместо
OUT.position.x=OUT.position.x/(abs(OUT.position.x)+1.0f);
OUT.position.y=OUT.position.y/(abs(OUT.position.y)+1.0f);
Использовать необходимое сжатие, что бы только видимая камере геометрия попадала в карту глубины тени. Для этого необходимо подсчитать нужные коэффициенты и передать в шейдер.
График ф-и: График
Если нам известны позиции дальних объектов, видимых из камеры, то мы можем расчитать a и b такие, что все видимые объекты попадут в карту теней, а остальные не будут занимать необходимие пиксели. Для x и для y соотв-но по два таких коэффициента.

#76
20:50, 4 мая 2012

Лучше почитать http://www.cspaul.com/publications/Rosen.2012.I3D.pdf - Rectilinear Texture Warping for Fast Adaptive Shadow Mapping - в статье про него и сказано.

#77
21:33, 4 мая 2012

eagle
> Какой в этом смысл?
в том что ближняя геометрия тоже настраиваемая, и ее можно сделать крупнее.


Caostick
> Использовать необходимое сжатие, что бы только видимая камере геометрия
> попадала в карту глубины тени. Для этого необходимо подсчитать нужные
> коэффициенты и передать в шейдер.
это же и есть PSM/TSM техники, и их косяки тоже упомянуты в статье.

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

Caostick
> Если нам известны позиции дальних объектов, видимых из камеры
не все так просто, то что влазит в экран из геометрии - пофигу, нельзя под эту информацию оптимизировать SM, потому что геометрия может быть СЗАДИ за камерой, ее не видно, но она должно быть в шедоумапе, поскольку отбрасывает тень на то что в камеру попадает =)

вы уж извините, я от дискуссии отключусь на неделю... болею.

#78
21:44, 4 мая 2012

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

#79
19:01, 9 мая 2012

Техника хорошая!
Статья хорошая!

Немного отталкивает необходимость тесселирования объектов.

Аврелий, када выходит твоя игра с этим методом? =)

#80
0:56, 13 мая 2012

Пытаюсь прикрутить этот способ к своим теням, что-то не выходит. Тени оказываются далеко не на своем месте. Шадоу мапа вроде нормально строится, а вот с ее наложение проблемы. Грешу на матрицы.

Шейдер рендера шадоу мапа:

#version 120
uniform mat4 lightMatrix;
varying vec4 pos;

void main(void)
{
  pos = gl_ModelViewProjectionMatrix * gl_Vertex;  
  
  pos.x = pos.x / (abs(pos.x)+1.0);
  pos.y = pos.y / (abs(pos.y)+1.0);    
  
  gl_Position = pos;
}

#version 120
varying vec4 pos;

void main(void)
{
  gl_FragColor = vec4( pos.z  * 0.5 + 0.5 );
}

Наложение теней:

  vec4 vpos = gl_ModelViewMatrix * gl_Vertex;
  lpos = lightMatrix * vpos;
  
  lpos.x = lpos.x /(abs(lpos.x)+1.0);
  lpos.y = lpos.y /(abs(lpos.y)+1.0);
  
  smcd.xyz = lpos.xyw;
  smcd.w = lpos.z - 0.0007;
#81
1:39, 13 мая 2012

Кирюха
> smcd.xyz = lpos.xyw;
> smcd.w = lpos.z - 0.0007;
моя не понимать эти строки ))

#82
10:38, 13 мая 2012

fzr125
это смещение базиса по ходу

Кирюха
может где y и z местами поменялись
или тут:
>vec4 vpos = gl_ModelViewMatrix * gl_Vertex;
gl_ModelViewMatrix - это матрица объекта * матрица вида?
должна быть матрица объекта только, поскольку матрица лампочки на сколько я помню и есть Proj*View света

float4 posL=mul(mul(IN.position,matWorld),matLight);
///////////////////////////////////
  posL.x=posL.x/(abs(posL.x)+1.0f); // место "1.0f" должен быть тот же коэффициент что и в шейдере глубины.
  posL.y=posL.y/(abs(posL.y)+1.0f);
///////////////////////////////////
OUT.SMCD.xyz=posL.xyw; //SMCD - текстурные координаты наложения теневой карты на сцену.
OUT.SMCD.x*=0.5f;
OUT.SMCD.y=-OUT.SMCD.y*0.5f;
OUT.SMCD.w=posL.z-0.0007f; //базис...

куда дел эти строки? это как раз корректировка координат чтобы они попали куда надо сжать по X отразить и сжать по Y...
OUT.SMCD.x*=0.5f;
OUT.SMCD.y=-OUT.SMCD.y*0.5f;

#83
20:38, 13 мая 2012

Вернул на место  smcd.x*=0.5; smcd.y=-smcd.y*0.5; , не помогло.
Пробовал передавать матрицу модели в шейдре, т.е :

lpos = lightMatrix * (modelMatrix*gl_Vertex);

Результат тот же.

#84
21:20, 13 мая 2012

Кирюха
Ты бы обычные шадоумапы сначала сделал, а потом уже GPSM прикручивал.

#85
21:35, 13 мая 2012

Executor
Обычную  уже делал.

#86
22:42, 13 мая 2012

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

#87
1:33, 14 мая 2012

Executor, эту штуковину по второму варианту из твоей статьи прикрутить можно ? =) (без перерисовки глубины в квад)

#88
8:09, 14 мая 2012

ai-music
Я не пробовал текущую технику, поэтому не знаю насколько тот мой старый код теней к этому подойдёт.

#89
16:53, 20 мая 2012

Все еще пытаюсь сделать GPSM. Обычная шадоу мапа отлично работает, но как только добавляю все что связанно с этой техникой начинаются глюки.
Вопрос по матрицам, точнее как их считать:

matAll = LightOrthoMatrix * LightViewMatrix * ModelMatrix
matWorld = матрица модели
matLight = LightProjMatrix = LightOrthoMatrix* LightViewMatrix

Все верно?

Страницы: 15 6 7 811 Следующая »
ПрограммированиеФорумГрафика

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