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

Depth peeling в webgl

#0
12:41, 8 ноя 2015

Всем привет. Реализовал depth peeling в webgl на основе демки nvidia. В примерах ниже число слоев=4
Реализация через DrawBuffer
Все хорошо, только вот она сильно кушает FPS.
Так как я не использовал запись глубины в текстуру от opengl es(не использовал- gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.TEXTURE_2D...  ), мне пришлось записывать глубину в текстуру через шейдер( gl_FragData[1]=vec4(depth*0.5+0.5,0,0,1))

Вот в этой демке происходит запись глубины в текстуру средствами стандартного opengl es, как в демке нв:

...
gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.TEXTURE_2D,m_frontDepthTexId[i],0);
...
gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.TEXTURE_2D,m_frontDepthTexId[0],0);

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

Демки работают в chrome

#1
15:56, 8 ноя 2015

Проблема решилась простым добавлением небольшого числа при создании слоев( второй шейдер).

if(z.z<=frontDepth+0.0001){discard;}

Кройте тему

#2
16:04, 8 ноя 2015

Прости, я честно попробовал почитать исходники, но там так все навалено.....
А bias от z-файтинга спасал всегда.

#3
16:09, 8 ноя 2015

Kashey
И на том спасибо

#4
17:52, 8 ноя 2015

И на правах аргументированного оффтопа.
У интела в шейдере операция сравнения >= работает как >

Будьте осторожны

#5
18:34, 8 ноя 2015

Для сдвига глубины есть специальная функция : https://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml Она сама добавляет добавляет необходимую константу, вроде бы зависящую от точности вычислений видеокарты.

#6
18:38, 8 ноя 2015

Deamon
> У интела в шейдере операция сравнения >=
А сравнение на равенство FP вообще неблагодарное занятие.

#7
20:02, 8 ноя 2015

Blew_zc
> А сравнение на равенство FP вообще неблагодарное занятие.
это почему?

#8
20:33, 8 ноя 2015

Mahagam
Ну, например, поэтому
https://ideone.com/RLWs8m

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

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