Войти
OpenGL communityФорум

Реализация ESM (exponential shadow maps) (комментарии) (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
23:40, 30 июня 2011

The Andreyp
Все такий вы меня уговорили, пошел я переделывать заметку :)


#31
0:08, 1 июля 2011

)) интчресно что повлияло.. ок .. буду ждать как че ---- ))

када сможешь доделать?

#32
19:23, 1 июля 2011

Ну вот я и обновил статью, сделал построение ESM от линейной глубины, добавил исходники и программу с реализацией.
В студии собрать не получилось, лень было разбираться, но GCC отлично собирает все исходники :)

#33
22:15, 1 июля 2011

пасип те... будем курить...

)

#34
22:51, 1 июля 2011

прокурил... возник вопрос... все же формулы непонятные..
в шадер ХЗ наскока я помню там в лайтпассе было чтото

shadow = тра татата (occluder - reciever)

то есть разность какаято... а у тя чета другая формула.. смотрю

#35
2:11, 2 июля 2011

The Andreyp
> shadow = тра татата (occluder - reciever)
Не, не так, должно быть exp(occluder) * exp(-receiver) в итоге, что вобщем-то и происходит :)

#36
10:33, 2 июля 2011

))  а вот еще вопросы (я наверно сейчас в пик жары особо тупой - не обессутьтеФ)


1) я так понял если пропустить проход блюра то мягкого ниче не буит
2) ты ща пишешь глюбину в простарнстве лайта как я понял...
если же я делаю есм для кубемапов.. я дожен передавать в лайтпассе 6матриц с которыми рендерился кубемап и вычислять в зависимости от того где находится сравниваемый вфрагмент (в каком фейсе) -  дептх так же умножив его на 1из переданных 6 матриц...

ну вот что это дает

http://dl.dropbox.com/u/5862637/R.f.d000.jpg

чтото не так.. парезано по бокам видимо по fov=90

и у тебя выходит тоже самое

http://dl.dropbox.com/u/5862637/esm.JPG...

а если блин у меня лайт радиуса определенного... выходит тень будетрваться раньше аттенуации.. че делать?

3) у меня 2005 студия дает ексепшен тут если чо


GLint *locations = (GLint *)&locations;
  for (uint32_t i = 0; i < sizeof(locations_t) / sizeof(GLint); ++i)
    locations [ i ]  = -1;

4) можно ченить побыстрому закоментарить у тя чтобы посмареть как без блюра?

#37
11:04, 2 июля 2011

The Andreyp
> 1) я так понял если пропустить проход блюра то мягкого ниче не буит
Будет, только совсем уж простая, плюс "резанные" края тени, лучше дополнительно сгладить, в выложенном примере совсем простой фильтр и специально сцена без текстур, с нормальными текстурами артефакты не так в глаза бросаются.

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

> 3) у меня 2005 студия дает ексепшен тут если чо
Ну в 2008 совсем другая проблема была у меня, до этого куска даже не доходило. Впринципе там дальше при линковке все локейшоны все равно перезаписываются, наверное можно и убрать, я проверю.

> 4) можно ченить побыстрому закоментарить у тя чтобы посмареть как без блюра?
Можно, там нужно такие исправления внести:

static void renderScene(const program_t &program, const camera_t &camera)
{
  program.setup();
  distTexture.setup(TEXTURE_DISTANCE); // используем нефильтрованную текстуру
  camera.setup(program, mainScene.modelMat);
  mainLight.setup(program, lightCamera.getViewMat(), lightCamera.projection);
  mainScene.render(program);
}

void renderAll()
{
  static bool firstTime = true;

  if (firstTime)
  {
    render::viewport(0, 0, WINDOW_WIDTH * 2, WINDOW_HEIGHT * 2);

    depthFBO.setup(GL_FRAMEBUFFER);
    render::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    renderScene(depthProgram, lightCamera);
/* пропускаем blur pass
    render::viewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);

    blurFBO.setup(GL_FRAMEBUFFER);
    blurFBO.attach(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, blurhTexture);
    blurhProgram.setup();
    squad.render(distTexture);
    blurFBO.attach(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, blurvTexture);
    blurvProgram.setup();
    squad.render(blurhTexture);
*/
    defaultFBO.setup(GL_FRAMEBUFFER);

    firstTime = false;
  }

  render::viewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
  render::clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  renderScene(renderProgram, mainCamera);

  GL_CHECK_FOR_ERRORS();
}

Выглядит на представленной сцене фигово, на сцене из шейдерс арт выглядело лучше, даже без сглаживания :)

ЗЫ. Нефильтрованная текстура звучит как пиво блин :)

#38
11:07, 2 июля 2011

Пока ипсал свое - ты уже отписал ))
Обновлю вопрос

...
ну вот что это дает

http://dl.dropbox.com/u/5862637/R.f.d000.jpg

парезано по бокам

хотя и у тебя выходит тоже самое

http://dl.dropbox.com/u/5862637/esm.JPG...

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

спасиб

#39
11:41, 2 июля 2011

The Andreyp
> какой смысл в есм када можнео просто записать линрасстояние и также разюлюрить
Попробуй разблюрить обычную шадовмапу, посмотришь на что будет похожа тень :)
ЗЫ. Ну вобщем-то в ESM надо еще с параметрами играться, что я могу сказать - экспериментируй.

> хотя и у тебя выходит тоже самое
Что это фигуры так переколбасило О_о

Вобщем видимо надо мне сделать тень от поинт лайта, что-то явно ты там не то вытворяешь что надо бы.

#40
12:09, 2 июля 2011

>Что это фигуры так переколбасило О
это я мир проскалил
)

>ты там не то вытворяешь что надо бы
ну я сделал как у тя

пишу pos.z который в пространсвте лайта

а потом в лайтпасе сначала определяю

у входящей сцены фрагмент в какой грани кубемапа а потом этот фрагмент трансформю в простарнство лайта и сверяю глуюбну

> лайт пасс

ВШ

gl_TexCoord[0].xyz = gl_Vertex.xyz-lightPos ; 

ПШ

float faceID=textureCube(Shadow, gl_TexCoord[0].xyz).x;
float _occluder = textureCube(Shadow,gl_TexCoord[0].xyz).y;

vec4 ipos=gl_ProjectionMatrix *lightMatricesParam[(int)faceID ]* vec4(gl_TexCoord[2].xyz,1) ;
float _receiver = exp(esm_bias - esm_factor * (ipos.z ));
 
float shadow  = clamp(_occluder * _receiver, 0.3, 1.0);

gl_FragColor =shadow  ;

Не так разве?

#41
19:01, 2 июля 2011

Пока вот что имеем:
Изображение

OpenGL ESM omni light demo

#42
19:14, 2 июля 2011

И кстати, демка без сглаживания, мне уже слишком лениво прикручивать сглаживание к кубемапе :)

#43
21:08, 2 июля 2011

00))) блин я такой даун - мне стыдно

спасибо....

просто я не понял... почему ты кубмап пассе пишешь вертекс после MVP
а в лайтпасе сравниваешь с вертекс на MV

#44
21:12, 2 июля 2011

The Andreyp
> 00))) блин я такой даун - мне стыдно
Неужто FOV 90 не поставил?

Страницы: 1 2 3 4 5 Следующая »
OpenGL communityФорум

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