OGRE-Next  2.3
Object-Oriented Graphics Rendering Engine
Ogre::IrradianceFieldRaster Class Reference

Implements IrradianceField, but generating results via cubemap rasterization. More...

#include <OgreIrradianceFieldRaster.h>

+ Inheritance diagram for Ogre::IrradianceFieldRaster:

Public Member Functions

 IrradianceFieldRaster (IrradianceField *creator)
 
virtual ~IrradianceFieldRaster ()
 
void createWorkspace ()
 
void destroyWorkspace ()
 
void operator delete (void *ptr)
 
void operator delete (void *ptr, const char *, int, const char *)
 
void operator delete (void *ptr, void *)
 
void operator delete[] (void *ptr)
 
void operator delete[] (void *ptr, const char *, int, const char *)
 
void * operator new (size_t sz)
 
void * operator new (size_t sz, const char *file, int line, const char *func)
 operator new, with debug line info More...
 
void * operator new (size_t sz, void *ptr)
 placement operator new More...
 
void * operator new[] (size_t sz)
 
void * operator new[] (size_t sz, const char *file, int line, const char *func)
 array operator new, with debug line info More...
 
void renderProbes (uint32 probesPerFrame)
 

Detailed Description

Implements IrradianceField, but generating results via cubemap rasterization.

GPUs are normally slow for rasterization at row resolution thus not well suited (hence raytracing or voxelization are better suited) but currently voxelization either requires a lot of memory or a slow pre-build process, hence a raster-based approach is less invasive and in many cases more practical.

Remarks
Q: Why can't we reuse the cubemaps from PCC? (Parallax Corrected Cubemaps)

A: Because:

1. We require to convert the depth buffer of each side into a cubemap.
   We could reuse the depth compression though. It's not accurate information
   but it may be good enough
2. Resolution needs to be low (e.g. 16x16 or so). Workaroundeable if
   we sample higher mips.
3. PCC provides no guarantees the cubemaps are aligned in a perfect 3D grid.
   PccPerPixelGridPlacement generates the cubemaps in a grid alignment, but
   the camera are not guaranteed to be at the center of each probe

In short, it may be possible, but there are several issues to workaround, hence it is just easier to render the information we need

Constructor & Destructor Documentation

◆ IrradianceFieldRaster()

Ogre::IrradianceFieldRaster::IrradianceFieldRaster ( IrradianceField creator)

◆ ~IrradianceFieldRaster()

virtual Ogre::IrradianceFieldRaster::~IrradianceFieldRaster ( )
virtual

Member Function Documentation

◆ createWorkspace()

void Ogre::IrradianceFieldRaster::createWorkspace ( )

◆ destroyWorkspace()

void Ogre::IrradianceFieldRaster::destroyWorkspace ( )

◆ operator delete() [1/3]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr)
inlineinherited

◆ operator delete() [2/3]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
const char *  ,
int  ,
const char *   
)
inlineinherited

◆ operator delete() [3/3]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
void *   
)
inlineinherited

◆ operator delete[]() [1/2]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr)
inlineinherited

◆ operator delete[]() [2/2]

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr,
const char *  ,
int  ,
const char *   
)
inlineinherited

◆ operator new() [1/3]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz)
inlineinherited

◆ operator new() [2/3]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
const char *  file,
int  line,
const char *  func 
)
inlineinherited

operator new, with debug line info

◆ operator new() [3/3]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
void *  ptr 
)
inlineinherited

placement operator new

◆ operator new[]() [1/2]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz)
inlineinherited

◆ operator new[]() [2/2]

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz,
const char *  file,
int  line,
const char *  func 
)
inlineinherited

array operator new, with debug line info

◆ renderProbes()

void Ogre::IrradianceFieldRaster::renderProbes ( uint32  probesPerFrame)

The documentation for this class was generated from the following file: