Visual RegistrationOSGART support visual registration in Augmented Reality. The visual registration in AR is related to the photometric disparity between the real content (i.e. the video background) and the virtual content (3D objects, etc). Three main components are discriminant in this registration:
- Occlusion: the relative positioning of the object and the
presence of a real-object in front/behind a virtual object need to be
restitute (or otherwise the object looks "see-through"). Generally
simple techniques like "Phantom" object offer already a simple solution.
- Shadow: the occlusion of a real object/virtual object under the
presence of lighting (spot light, projector light) can create the
apparition of virtual shadows on the objects. Different solutions have
been proposed in the litterature to resolve this problem. The problem
can be easily modeled with a a simple table of the different
Relighting: need to modify real texture/video image
NEED TO BE COMPUTE
Virtual Lighting: Need to have representation of real object for creating the shadow
NEED TO BE COMPUTE
Intrisically Supported by OpenSceneGraph
- Real Lighting condition: the rendering of the virtual object need
to take account of the real lighting condition (indoor, light position,
sun lighting, etc) to avoid discriminant difference between the
real/virtual. Some solutions in the litterature have been proposed like
the usage of light probes, HDRL, etc.
At this stage, we have been implemented a shadow renderer dedicated to tabletop AR solution, named PlaneARShadowRenderer. In this scenario, virtual objects generally lay on a planar surface where lighting condition need to be applied. The renderer compute the lighting of Virtual->Virtual and use a semi-transparent plane for the Virtual->Real case.The renderer is actually limited to one light by object and use depth shadow rendering with shaders implementation. The renderer is use like a decorator, and user just create an instance of the object parameterize by the shadowed scene and the light position (a transform node).
//create renderer with object transformation, light transformation, size of virtual plane
renderer =new osgART::PlaneARShadowRenderer(objectTrans,lightTrans,plane_size,0);
Applying the shadow on david model
We hope in the next months to integrate the solutions we developped for the two other main issues.