[osg-users] 32bit DEPTH for RTT
Trajce Nikolov NICK
trajce.nikolov.nick at gmail.com
Fri Oct 21 06:54:27 PDT 2016
Hi readers to this thread ;-),
I am close to resolve this but the math involved is a bit tricky for me to
understand it right. And suddenly I can not send screenshots or videos
publicly - maybe on private email to those willing to help.
The story now is this:
The environment is ECEF terrain, and I have light source. I am rendering to
texture from this light source position/direction into a depth texture. The
light matrix is computed now in view space, and is used against the view
vertex in pixel shader, where the shadow projection is done. It gives
non-flickering results, which is very good however the texture coords are
wrong, and the missing part for me is the coorect texture coords
computation from lightmatrix and vertex in view space.
Any help is very appreciated !!!
And thanks
Nick
On Thu, Oct 20, 2016 at 7:13 PM, Trajce Nikolov NICK <
trajce.nikolov.nick at gmail.com> wrote:
> almost there .. the flickering is gone, just the shadow texture lookup
> coordinates are messed up when used view space matrix and vertex.
>
> This is the code for constructing the final matrix:
>
> osg::Matrixf lmvpm =
> lightMatrixInViewSpace * osg::Matrixf(camera->getProjectionMatrix()) *
> osg::Matrixf::translate(1, 1, 1) * osg::Matrixf::scale(0.5, 0.5,
> 0.5);
>
> and the GLSL:
>
> vec4 projShadow = light.lmvpMatrix * vVertexView;
>
> vec4 uvzw;
> uvzw.xyw = projShadow.xyz;
> uvzw.z = light.occlusionLayer-1;
> float factor = texture( lightOcclusionTextureArray, uvzw );
>
> fDiffuseColor *= factor;
>
> if you spot anything ...
>
> Thanks so much Glenn!
>
>
> On Thu, Oct 20, 2016 at 6:52 PM, Glenn Waldron <gwaldron at gmail.com> wrote:
>
>> Up vector doesn't really matter, so just pick one like:
>>
>> side = cross(view_vec, (0,0,1));
>> up = cross(side, view_vec);
>>
>>
>>
>> Glenn Waldron
>>
>> On Thu, Oct 20, 2016 at 12:00 PM, Trajce Nikolov NICK <
>> trajce.nikolov.nick at gmail.com> wrote:
>>
>>> Just last question .. What the 'up' vector would be now for making the
>>> light matrix in view space?
>>>
>>> On Thu, Oct 20, 2016 at 5:39 PM, Trajce Nikolov NICK <
>>> trajce.nikolov.nick at gmail.com> wrote:
>>>
>>>> Glenn,
>>>>
>>>> this worked ... :-) ... Thanks for the hint ...
>>>>
>>>> On Thu, Oct 20, 2016 at 5:02 PM, Trajce Nikolov NICK <
>>>> trajce.nikolov.nick at gmail.com> wrote:
>>>>
>>>>> wops ..
>>>>>
>>>>> mx.makeLookAt(lightPosInViewSpace,lightPosInViewSpace+lightD
>>>>> irInViewSpace,up)
>>>>>
>>>>> On Thu, Oct 20, 2016 at 5:00 PM, Trajce Nikolov NICK <
>>>>> trajce.nikolov.nick at gmail.com> wrote:
>>>>>
>>>>>> Thanks Glenn,
>>>>>>
>>>>>> actually I was expecting this. I have the math to get the light
>>>>>> direction in view space, just the construction of the light matrix in view
>>>>>> space hurts my head a bit ( I missed that part of the class :-) )
>>>>>>
>>>>>> vec3 lightDirInViewSpace;
>>>>>> vec3 lightPosInViewSpace;
>>>>>> mx.makeLookAt(lightPosInViewSpace,lightPosInViewSpace+lightP
>>>>>> osInViewSpace,up)
>>>>>>
>>>>>> Something like this?
>>>>>>
>>>>>> On Thu, Oct 20, 2016 at 4:04 PM, Glenn Waldron <gwaldron at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> There's your precision loss, you can't do that with ECEF coordinates
>>>>>>> or they will be truncated.
>>>>>>>
>>>>>>> Better idea: build your light matrix in view space on the CPU
>>>>>>> (instead of world space), and then use it on the view-space vertex in the
>>>>>>> shader. (You'll have to update it every time the camera moves, of course.)
>>>>>>>
>>>>>>>
>>>>>>> Glenn Waldron
>>>>>>>
>>>>>>> On Thu, Oct 20, 2016 at 10:00 AM, Trajce Nikolov NICK <
>>>>>>> trajce.nikolov.nick at gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi Glenn,
>>>>>>>>
>>>>>>>> vec3 vVertex = vec3(gl_ModelViewMatrix * VertexMODEL);
>>>>>>>> worldSpaceVertex = osg_ViewMatrixInverse * vec4( vVertex, 1.0 );
>>>>>>>>
>>>>>>>> Part of VP
>>>>>>>>
>>>>>>>> On Thu, Oct 20, 2016 at 3:52 PM, Glenn Waldron <gwaldron at gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Nick, how did you calculate "worldSpaceVertex"?
>>>>>>>>>
>>>>>>>>> Glenn Waldron
>>>>>>>>>
>>>>>>>>> On Thu, Oct 20, 2016 at 9:13 AM, Trajce Nikolov NICK <
>>>>>>>>> trajce.nikolov.nick at gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> hehe .. ok :-) .. Maybe you give me a hint.
>>>>>>>>>>
>>>>>>>>>> I have F+ lighting (written by a friend of mine) and I have
>>>>>>>>>> extended it so local lights cast shadows (a bit of complex code -
>>>>>>>>>> relatively actually, but for me it is ;-) ). Works well for flat terrains
>>>>>>>>>> with reasonable sizes. I am trying to make it work with ECEF terrain (for
>>>>>>>>>> testing I use osgearth). The debug code works just fine, I am seeing the
>>>>>>>>>> renderings from the local lights are correct, so the light view matrix
>>>>>>>>>> passed to the shader is correct, but getting z-fights with
>>>>>>>>>> setInternalFormat(GL_DEPTH_COMPONENT); only. Here is my setup
>>>>>>>>>> for the RTT (it is texturearray):
>>>>>>>>>>
>>>>>>>>>> http://pastebin.com/Nnc2iA1F
>>>>>>>>>>
>>>>>>>>>> With DEPTH32bit (really naive approach, I "was" thinking fast the
>>>>>>>>>> increase of the DEPTH precision will solve this issue, just recently
>>>>>>>>>> started with reading papers and I must admit I am not a "shadowing expert").
>>>>>>>>>>
>>>>>>>>>> Further, I am calculating the Light View Matrix and passing it to
>>>>>>>>>> the shader - this one is correct as well, since I am seeing the light in
>>>>>>>>>> the scene with the z artifacts as I mentioned .... and this is my GLSL
>>>>>>>>>> snippet:
>>>>>>>>>>
>>>>>>>>>> http://pastebin.com/r2W0gh0L
>>>>>>>>>>
>>>>>>>>>> I am trying to get it done as simple as is ... meanwhile found
>>>>>>>>>> this:
>>>>>>>>>>
>>>>>>>>>> http://developer.download.nvidia.com/SDK/10/direct3d/Source/
>>>>>>>>>> VarianceShadowMapping/Doc/VarianceShadowMapping.pdf
>>>>>>>>>>
>>>>>>>>>> that looks promising and apparently should help with the Z issues.
>>>>>>>>>>
>>>>>>>>>> This is my story for now, any hints are highly appreciated !!!!!
>>>>>>>>>>
>>>>>>>>>> And thanks a bunch for so far!
>>>>>>>>>>
>>>>>>>>>> Cheers,
>>>>>>>>>>
>>>>>>>>>> On Thu, Oct 20, 2016 at 2:56 PM, Voerman, L. <l.voerman at rug.nl>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> yes?
>>>>>>>>>>> we use a variation on OpenSceneGraph\src\osgShadow\P
>>>>>>>>>>> arallelSplitShadowMap.cpp
>>>>>>>>>>> regards, Laurens.
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Oct 20, 2016 at 2:35 PM, Trajce Nikolov NICK <
>>>>>>>>>>> trajce.nikolov.nick at gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi Laurens,
>>>>>>>>>>>>
>>>>>>>>>>>> do you have experience with DEPTH32bit and shadowcomparation
>>>>>>>>>>>> set to true - for shadow mapping?
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Oct 20, 2016 at 12:08 PM, Trajce Nikolov NICK <
>>>>>>>>>>>> trajce.nikolov.nick at gmail.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Voerman,
>>>>>>>>>>>>>
>>>>>>>>>>>>> Yes, GL_DEPTH_COMPONENT32 was what I was missing ... Thanks a
>>>>>>>>>>>>> lot!
>>>>>>>>>>>>>
>>>>>>>>>>>>> Trajce
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Thu, Oct 20, 2016 at 9:25 AM, Voerman, L. <l.voerman at rug.nl
>>>>>>>>>>>>> > wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi Trajce,
>>>>>>>>>>>>>> maybe this sniplet helps?
>>>>>>>>>>>>>> _textureDepthBuffer = new osg::Texture2D;
>>>>>>>>>>>>>> _textureDepthBuffer->setTextureSize(_width+2.0f*_width*_guardBandPercentage,
>>>>>>>>>>>>>> _height+2.0f*_height*_guardBandPercentage);
>>>>>>>>>>>>>> _textureDepthBuffer->setSourceFormat(GL_DEPTH_COMPONENT);
>>>>>>>>>>>>>> _textureDepthBuffer->setInternalFormat(GL_DEPTH_COMPONENT32)
>>>>>>>>>>>>>> ;
>>>>>>>>>>>>>> _textureDepthBuffer->setFilter(osg::Texture2D::MIN_FILTER,os
>>>>>>>>>>>>>> g::Texture2D::NEAREST);
>>>>>>>>>>>>>> _textureDepthBuffer->setFilter(osg::Texture2D::MAG_FILTER,os
>>>>>>>>>>>>>> g::Texture2D::NEAREST);
>>>>>>>>>>>>>> _textureDepthBuffer->setShadowComparison(false);
>>>>>>>>>>>>>> _textureDepthBuffer->setWrap(osg::Texture::WRAP_R,osg::Textu
>>>>>>>>>>>>>> re::CLAMP_TO_EDGE);
>>>>>>>>>>>>>> _textureDepthBuffer->setWrap(osg::Texture::WRAP_S,osg::Textu
>>>>>>>>>>>>>> re::CLAMP_TO_EDGE);
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> // camera
>>>>>>>>>>>>>> _colorDepthCamera = new osg::Camera;
>>>>>>>>>>>>>> _colorDepthCamera->setStats(new osg::Stats("Camera"));
>>>>>>>>>>>>>> _colorDepthCamera->setName("colorDepth");
>>>>>>>>>>>>>> _colorDepthCamera->setClearMask(GL_COLOR_BUFFER_BIT |
>>>>>>>>>>>>>> GL_DEPTH_BUFFER_BIT);
>>>>>>>>>>>>>> _colorDepthCamera->setReferenceFrame(osg::Transform::RELATIV
>>>>>>>>>>>>>> E_RF);
>>>>>>>>>>>>>> // set viewport
>>>>>>>>>>>>>> _colorDepthCamera->setViewport(0,0,_width+2.0f*_width*_guard
>>>>>>>>>>>>>> BandPercentage,_height+2.0f*_height*_guardBandPercentage);
>>>>>>>>>>>>>> _colorDepthCamera->setRenderOrder(osg::Camera::PRE_RENDER,0);
>>>>>>>>>>>>>> _colorDepthCamera->setRenderTargetImplementation(osg::Camera
>>>>>>>>>>>>>> ::FRAME_BUFFER_OBJECT);
>>>>>>>>>>>>>> _colorDepthCamera->attach(osg::Camera::DEPTH_BUFFER,
>>>>>>>>>>>>>> _textureDepthBuffer.get(),0,0,false,0,0); // depth
>>>>>>>>>>>>>> _colorDepthCamera->attach(osg::Camera::COLOR_BUFFER,
>>>>>>>>>>>>>> _textureColorBuffer.get(),0,0,false,_msaa,_msaa); // color
>>>>>>>>>>>>>> regards, Laurens.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Oct 19, 2016 at 11:15 PM, Trajce Nikolov NICK <
>>>>>>>>>>>>>> trajce.nikolov.nick at gmail.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi Community,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> anyone with clue how to set RTT osg::Texture with 32bit
>>>>>>>>>>>>>>> DEPTH?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks a bunch as always!
>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>> Nick
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> trajce nikolov nick
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>> osg-users mailing list
>>>>>>>>>>>>>>> osg-users at lists.openscenegraph.org
>>>>>>>>>>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens
>>>>>>>>>>>>>>> cenegraph.org
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> osg-users mailing list
>>>>>>>>>>>>>> osg-users at lists.openscenegraph.org
>>>>>>>>>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens
>>>>>>>>>>>>>> cenegraph.org
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> trajce nikolov nick
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> trajce nikolov nick
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> osg-users mailing list
>>>>>>>>>>>> osg-users at lists.openscenegraph.org
>>>>>>>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens
>>>>>>>>>>>> cenegraph.org
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> osg-users mailing list
>>>>>>>>>>> osg-users at lists.openscenegraph.org
>>>>>>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens
>>>>>>>>>>> cenegraph.org
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> trajce nikolov nick
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> osg-users mailing list
>>>>>>>>>> osg-users at lists.openscenegraph.org
>>>>>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens
>>>>>>>>>> cenegraph.org
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> osg-users mailing list
>>>>>>>>> osg-users at lists.openscenegraph.org
>>>>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens
>>>>>>>>> cenegraph.org
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> trajce nikolov nick
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> osg-users mailing list
>>>>>>>> osg-users at lists.openscenegraph.org
>>>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens
>>>>>>>> cenegraph.org
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> osg-users mailing list
>>>>>>> osg-users at lists.openscenegraph.org
>>>>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens
>>>>>>> cenegraph.org
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> trajce nikolov nick
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> trajce nikolov nick
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> trajce nikolov nick
>>>>
>>>
>>>
>>>
>>> --
>>> trajce nikolov nick
>>>
>>> _______________________________________________
>>> osg-users mailing list
>>> osg-users at lists.openscenegraph.org
>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens
>>> cenegraph.org
>>>
>>>
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users at lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
>
>
> --
> trajce nikolov nick
>
--
trajce nikolov nick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20161021/e743ff16/attachment-0003.htm>
More information about the osg-users
mailing list