Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Prompt en 24 de Junio de 2009, 10:46:07 AM

Título: Problema de culling? Deferred Shading
Publicado por: Prompt en 24 de Junio de 2009, 10:46:07 AM
Hola a todos. Rapidamente...

Estoy implementando el Geometry Stage de la tecnica donde se renderiza una geometría y de ella se extrae información en diferentes buffers. En mi caso (y en el de la mayoria) 4:

(http://img31.imageshack.us/img31/5214/drawp.th.png) (http://img31.imageshack.us/my.php?image=drawp.png)

Se renderiza bien, pero cuando observo que hay en los buffers parece como si funcionara mal el culling, he probado varias cosas como invertir el CCW, CW desactivarlo etc... pero parece que le gusta solo renderizar la parte de atrás... no lo entiendo:

(http://img8.imageshack.us/img8/3774/buffers.th.png) (http://img8.imageshack.us/my.php?image=buffers.png)

Codigo del draw (imagen 1)

//*///-----------------------------------------------------------------------------------------
void DeferredShader::drawMaterial( )
{
glViewport( 0, 0, m_width, m_height);

GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_COLOR_ATTACHMENT3_EXT/*, GL_DEPTH_ATTACHMENT_EXT*/ };
glDrawBuffers( 4, buffers );
checkFBO( );

glClearColor( 0.0, 0.0, 0.0, 0.0);
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glEnable(GL_DEPTH);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glDepthRange(0.0, 1.0); // The default z mapping
glStencilMask(GL_FALSE);

glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
glDisable(GL_TEXTURE_GEN_Q);

glCullFace(GL_BACK);

//glShadeModel(GL_SMOOTH);
//glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_NORMALIZE);
glEnable(GL_TEXTURE_2D);

glEnable(GL_ALPHA_TEST);
glDepthMask(GL_TRUE);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);

glPushMatrix( );
// draw raw scene geometry
m_pMRTShader->setUp( m_pMRTShader->getConfiguration( ) );
m_pMRTShader->beginTextures( );

m_pMRTShader->begin( );

// Formato para el shader
static Entity3D xForm;
const Matrix4 mEffectFormat = xForm.getWorldMatrix( ).transpose( );

glMultiTexCoord4fv(GL_TEXTURE1, mEffectFormat[0]);
glMultiTexCoord4fv(GL_TEXTURE2, mEffectFormat[1]);
glMultiTexCoord4fv(GL_TEXTURE3, mEffectFormat[2]);
glutSolidTeapot( 2000.0f );

m_pMRTShader->endTextures( );
m_pMRTShader->end( );
glPopMatrix( );
}



Codigo del test:

       //*///-----------------------------------------------------------------------------------------
void DeferredShader::showTest( )
{
//glColor3f(1.0f, 1.0f, 1.0f);
//glCullFace(GL_FRONT);

//glEnable(GL_TEXTURE_2D);
//glDisable(GL_DEPTH_TEST);

glViewport(0, 0, m_width, m_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glOrtho(0.0, 1.0, 1.0, 0.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

m_pFBOTestShader->begin( );
m_pFBOTestShader->setUniform1i("FBO", 0);
glActiveTexture(GL_TEXTURE0);

glBindTexture(GL_TEXTURE_2D, m_mrtTexture[0]);
glBegin(GL_QUADS);
glTexCoord2i(0, 1); glVertex2f(0.0f, 0.0f);
glTexCoord2i(1, 1); glVertex2f(0.5f, 0.0f);
glTexCoord2i(1, 0); glVertex2f(0.5f, 0.5f);
glTexCoord2i(0, 0); glVertex2f(0.0f, 0.5f);
glEnd( );

glBindTexture(GL_TEXTURE_2D, m_mrtTexture[1]);
glBegin(GL_QUADS);
glTexCoord2i(0, 1); glVertex2f(0.5f, 0.0f);
glTexCoord2i(1, 1); glVertex2f(1.0f, 0.0f);
glTexCoord2i(1, 0); glVertex2f(1.0f, 0.5f);
glTexCoord2i(0, 0); glVertex2f(0.5f, 0.5f);
glEnd( );

glBindTexture(GL_TEXTURE_2D, m_mrtTexture[2]);
glBegin(GL_QUADS);
glTexCoord2i(0, 1); glVertex2f(0.0f, 0.5f);
glTexCoord2i(1, 1); glVertex2f(0.5f, 0.5f);
glTexCoord2i(1, 0); glVertex2f(0.5f, 1.0f);
glTexCoord2i(0, 0); glVertex2f(0.0f, 1.0f);
glEnd( );

glBindTexture(GL_TEXTURE_2D, m_mrtTexture[3]);
glBegin(GL_QUADS);
glTexCoord2i(0, 1); glVertex2f(0.5f, 0.5f);
glTexCoord2i(1, 1); glVertex2f(1.0f, 0.5f);
glTexCoord2i(1, 0); glVertex2f(1.0f, 1.0f);
glTexCoord2i(0, 0); glVertex2f(0.5f, 1.0f);
glEnd( );

m_pFBOTestShader->end( );
}


Alguna experiencia con algo similar? RENDER -> FBO
Título: Re: Problema de culling? Deferred Shading
Publicado por: Prompt en 24 de Junio de 2009, 01:05:02 PM
Bueno este problema ya está solucionado, he acabado por activar el DEPTH ATTACHMENT en vez usar una textura.
Título: Re: Problema de culling? Deferred Shading
Publicado por: Prompt en 24 de Junio de 2009, 02:25:34 PM

Hilo en OpenGL.org donde me contesto yo solo:
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=259493#Post259493

Resultado feliz:
(http://img3.imageshack.us/img3/3370/depthsolved.th.png) (http://img3.imageshack.us/img3/3370/depthsolved.png)

No hace falta renderizar la ultima textura, en DX9 si hace falta ese paso, pero con una extension muy básica en OGL nos podemos ahorrar memoria, aunque bueno, por si acaso ahi tengo la textura, ya veremos mas adelante si me hace falta.

Acabo de terminar por tanto, el Geometry Stage de mi Deferred Rendering | Illumination :O yuju!
Título: Re: Problema de culling? Deferred Shading
Publicado por: tamat en 24 de Junio de 2009, 07:49:44 PM
y no necesitaras el Depth en textura para alguno de tus calculos cuando hagas el lighting pass?
Título: Re: Problema de culling? Deferred Shading
Publicado por: Prompt en 25 de Junio de 2009, 01:49:31 PM
Si tamat, no necesito realmente la textura pero la estoy generando ahí encodeada para verla. El Geometry Stage está ya solventado, ahora toca la iluminación :)
Título: Re: Problema de culling? Deferred Shading
Publicado por: tamat en 25 de Junio de 2009, 02:09:13 PM
por curiosidad, puedes decir cuantos y como estan organizdos tus buffers?
Título: Re: Problema de culling? Deferred Shading
Publicado por: Ruben en 25 de Junio de 2009, 02:15:05 PM
Hi,
por si necesitais mas info sobre deferred shading o por si quereis añadir mas info, hay un articulo en la wiki de codepixel con recursos: http://wiki.codepixel.com/index.php/Deferred_Shading (http://wiki.codepixel.com/index.php/Deferred_Shading).

A ver si os sirve de ayuda!  :D

Un saludo,
Ruben
Título: Re: Problema de culling? Deferred Shading
Publicado por: Prompt en 25 de Junio de 2009, 02:33:02 PM
Cita de: Ruben en 25 de Junio de 2009, 02:15:05 PM
Hi,
por si necesitais mas info sobre deferred shading o por si quereis añadir mas info, hay un articulo en la wiki de codepixel con recursos: http://wiki.codepixel.com/index.php/Deferred_Shading (http://wiki.codepixel.com/index.php/Deferred_Shading).

A ver si os sirve de ayuda!  :D

Un saludo,
Ruben

Estoy siguiendo el paper marcado en negrita como el mejor: http://www710.univ-lyon1.fr/~jciehl/Public/educ/GAMA/2007/Deferred_Shading_Tutorial_SBGAMES2005.pdf

Ciertamente si este paper es de lo mejor, que lo es, el mundo necesita un nuevo paper sin lugar a dudas... Llorens (IL-Engine) está haciendose el Deferred, de hablar con él me piqué y me puse yo. Ya he hablado con el para ver si despues nos hacemos uno mucho más completo y actualizado, porque ciertamente hay agujeros negros en todo lo que leo y veo en código.

Cita de: tamat en 25 de Junio de 2009, 02:09:13 PM
por curiosidad, puedes decir cuantos y como estan organizdos tus buffers?

Con respecto a esto:

RGBA16FcolorAlbedo RAlbedo GAlbedo BAlbedo A
RGBA16FnormalNormal RNormal GNormal BNormal A
RGBA16FtestRGBA
DEPTH24_STENCIL8depthEncoded Depth REncoded Depth GEncoded Depth BStencil

En OpenGL con la extension NV_RENDER_DEPTH_TEXTURE (OpenGL 1.1) no es necesario tener una textura con la informacion del DEPTH y el STENCIL (ver como disponer de ello en posts anteriores). No obstante yo lo pongo para probar la otra forma, como estudio, practica, curiosidad... hay que estudiarlo bien :)
En DX9 hay que gastar una textura para almacenar esa información. En DX10 no es necesario.

Como se ve... aun no estoy usando el G-Buffer para frikear a tope, cuando llegue a la parte de post-proceso empezará la fiesta. Como encodear en un RGBA8 el HDR o quitar cosas innecesarias como el Alpha.
Título: Re: Problema de culling? Deferred Shading
Publicado por: Ruben en 25 de Junio de 2009, 03:29:14 PM
CitarEstoy siguiendo el paper marcado en negrita como el mejor: http://www710.univ-lyon1.fr/~jciehl/Public/educ/GAMA/2007/Deferred_Shading_Tutorial_SBGAMES2005.pdf

Ciertamente si este paper es de lo mejor, que lo es, el mundo necesita un nuevo paper sin lugar a dudas... Llorens (IL-Engine) está haciendose el Deferred, de hablar con él me piqué y me puse yo. Ya he hablado con el para ver si despues nos hacemos uno mucho más completo y actualizado, porque ciertamente hay agujeros negros en todo lo que leo y veo en código.

Genial. Si lo haceis no se os olvide actualizar el articulo de la wiki y asi le echamos un ojo :)
Título: Re: Problema de culling? Deferred Shading
Publicado por: tamat en 25 de Junio de 2009, 03:46:21 PM
la normal con cuatro componentes? hay trucos para encodearla en 2.
Título: Re: Problema de culling? Deferred Shading
Publicado por: Prompt en 25 de Junio de 2009, 03:51:48 PM
Cita de: tamat en 25 de Junio de 2009, 03:46:21 PM
la normal con cuatro componentes? hay trucos para encodearla en 2.

Lo se, lo se :), bueno 4... en realidad es solo RGB, pero en vez de poner Empty he puesto Normal A. Ya me llegará el momento de los truquitos. Lo que no se, es porque nadie mete la tangente y la binormal. Que tambien se pueden calcular en GPU pero oye... si sobra! :P

El caso es que en cuanto llegue al paso de post-procesos seguro que se me acaban y empiezo a encodear y demás. Hay que darse cuenta que el consumo de memoria es notable, no obstante esperemos que haya un gran cambio y que veamos pronto graficas con 4GB 6...16.. xD (halaa! cachondeo!)

tamat que pasa? andas trasteando con un deferred también o q?
Título: Re: Problema de culling? Deferred Shading
Publicado por: tamat en 25 de Junio de 2009, 05:49:23 PM
lo tengo pendiente pero he leido bastante sobre el tema. Por el tema de tener muchas luces, de hecho este año llevaré el PFC de un compañero de curro que portará el motor del departamento en el que curro de forward rendering a deferred.

Mantenme al corriente de tus progresos, siempre es bueno conocer la problematica.
Título: Re: Problema de culling? Deferred Shading
Publicado por: Prompt en 25 de Junio de 2009, 07:34:25 PM
Cita de: tamat en 25 de Junio de 2009, 05:49:23 PM
lo tengo pendiente pero he leido bastante sobre el tema. Por el tema de tener muchas luces, de hecho este año llevaré el PFC de un compañero de curro que portará el motor del departamento en el que curro de forward rendering a deferred.

Mantenme al corriente de tus progresos, siempre es bueno conocer la problematica.

La gente divirtiendose en sus empresas y yo aqui aburrido... necesito un curro nuevo que me motive mentalmente :)
Malditos salarios!!
Título: Re: Problema de culling? Deferred Shading
Publicado por: Shaitan en 15 de Julio de 2009, 09:00:55 AM
Después de revolver bastante, he encontrado una página bastante interesante para los que esteis con el tema de deferred, eso si, es en XNA (pero ahi estan los shaders): http://www.catalinzima.com/?page_id=14 (http://www.catalinzima.com/?page_id=14)
Ahh y un ejemplo basado en esto para hacer el deferred con sombras: http://www.gameprojects.com/project/?id=3778c45da4 (http://www.gameprojects.com/project/?id=3778c45da4)
De todas formas, creo que una aproximación más interesante al tema de deferred es la utilizada por Wolfgang Engel con su 'light prepass' :
http://diaryofagraphicsprogrammer.blogspot.com/ (http://diaryofagraphicsprogrammer.blogspot.com/) (ahi unos cuantos posts sobre el tema ahí, además esta su articulo en el shader X 7).

Ya dirás que resultados vas obteniendo!

:-D
Título: Re: Problema de culling? Deferred Shading
Publicado por: Prompt en 16 de Julio de 2009, 03:29:16 PM
Esa aproximación te crea otros problemas adicionales. No obstante una vez tenga la tecnica base, lo estudiaré pero no termino de ver que sea la mejor opción.
Título: Re: Problema de culling? Deferred Shading
Publicado por: Prompt en 16 de Julio de 2009, 03:42:31 PM
Tengo que sacar tiempo y probar la parte de pasarle por las coordenadas de textura el far clip plane. He leido ya de todo y nadie da una solucion limpia.

En la web 1ª se pone un G-Buffer de 32 bits... ahi cabe de todo xD luego si te da algunas claves para "comprimir". Pero bueno ahí estoy.
Título: Re: Problema de culling? Deferred Shading
Publicado por: tamat en 17 de Julio de 2009, 12:08:25 PM
para qué?
Título: Re: Problema de culling? Deferred Shading
Publicado por: Prompt en 17 de Julio de 2009, 07:53:37 PM
Cita de: tamat en 17 de Julio de 2009, 12:08:25 PM
para qué?

El que?
Título: Re: Problema de culling? Deferred Shading
Publicado por: tamat en 20 de Julio de 2009, 12:33:24 PM
para qué quieres compactar el far clip? hablas del volumen de un foco o el far de la camara?
Título: Re: Problema de culling? Deferred Shading
Publicado por: Prompt en 24 de Julio de 2009, 02:42:14 PM
De la camara :)

Atentos al post nuevo que voy a poner! :P