![]() |
OGRE 2.3.1
Object-Oriented Graphics Rendering Engine
|
This class manages multiple cascades of Voxels and each cascade can be composed of VctImageVoxelizer. More...
#include <OgreVctCascadedVoxelizer.h>
Inheritance diagram for Ogre::VctCascadedVoxelizer:Public Member Functions | |
| VctCascadedVoxelizer () | |
| virtual | ~VctCascadedVoxelizer () |
| void | addAllItems (SceneManager *sceneManager, const uint32 visibilityFlags, const bool bStatic) |
| Adds all items in SceneManager that match visibilityFlags. More... | |
| void | addCascade (const VctCascadeSetting &cascadeSetting) |
| Adds a new cascade. More... | |
| void | addItem (Item *item) |
| Adds the given item to the voxelizer in all cascades. More... | |
| virtual void | allWorkspacesBeforeBeginUpdate (void) |
| CompositorWorkspaceListener override. More... | |
| virtual void | allWorkspacesBeginUpdate (void) |
| Called from CompositorManager2 (not CompositorWorkspace) when we're about to update all the workspaces (it's safe to update your own workspaces without calling _beginUpdate and _endUpdate) Warning: Don't add/remove listeners to CompositorManager2 inside this function. More... | |
| void | autoCalculateStepSizes (const Vector3 stepSize) |
| Alters each cascade's step size. More... | |
| const Vector3 & | getCameraPosition (void) const |
| VctCascadeSetting & | getCascade (size_t idx) |
| bool | getConsistentCascadeSteps (void) const |
| VoxelizedMeshCache * | getMeshCache (void) |
| Returns the mesh cache (shared by all cascades) in case you want to add a mesh manually with custom settings. More... | |
| uint32 | getNumBounces (void) const |
| Returns number of bounces for cascade 0. More... | |
| size_t | getNumCascades (void) const |
| VctLighting * | getVctLighting (size_t idx) |
| void | init (RenderSystem *renderSystem, HlmsManager *hlmsManager, uint32 numBounces, bool bAnisotropic) |
| Call this function after adding all cascades. More... | |
| bool | isAnisotropic (void) const |
| Returns if we're using anisotropic VCT. More... | |
| virtual void | passEarlyPreExecute (CompositorPass *pass) |
| Called early on in pass' execution. More... | |
| virtual void | passPosExecute (CompositorPass *pass) |
| Called after a pass has been executed. More... | |
| virtual void | passPreExecute (CompositorPass *pass) |
| Called when each pass is about to be executed. More... | |
| virtual void | passSceneAfterFrustumCulling (CompositorPassScene *pass) |
| Called after a pass scene has performed frustum caulling but has yet to prepare and execute rendering commands. More... | |
| virtual void | passSceneAfterShadowMaps (CompositorPassScene *pass) |
| Called after a pass scene has rendered shadow casting (it gets called even if there is no shadow node). More... | |
| void | popCascade () |
| Destroys the last created cascade. More... | |
| void | removeAllItems () |
| Removes all items from all cascades. More... | |
| void | removeItem (Item *item) |
| Removes the given item to the voxelizer in all cascades. More... | |
| void | reserveNumCascades (size_t numCascades) |
| Tells beforehand how many cascades there will be. More... | |
| void | setAutoUpdate (CompositorManager2 *compositorManager, SceneManager *sceneManager) |
| Register against the CompositorManager to call VctCascadedVoxelizer::update automatically when the CompositorManager is about to render (recommended) More... | |
| void | setCameraPosition (const Vector3 &cameraPosition) |
| void | setConsistentCascadeSteps (bool bConsistentCascadeSteps) |
| Selects how we determine when we need to (partially) rebuild the voxels based on camera movement. More... | |
| void | setNewSettings (uint32 numBounces, bool bAnisotropic) |
| Sets new settings after having called init. More... | |
| void | update (SceneManager *sceneManager) |
| You can call this directly with sceneManager, but we assume all objects are already updated (i.e. More... | |
| virtual void | workspacePosUpdate (CompositorWorkspace *workspace) |
| Called after all nodes has been updated. More... | |
| virtual void | workspacePreUpdate (CompositorWorkspace *workspace) |
| Called before all nodes are going to be updated. More... | |
This class manages multiple cascades of Voxels and each cascade can be composed of VctImageVoxelizer.
| Ogre::VctCascadedVoxelizer::VctCascadedVoxelizer | ( | ) |
|
virtual |
| void Ogre::VctCascadedVoxelizer::addAllItems | ( | SceneManager * | sceneManager, |
| const uint32 | visibilityFlags, | ||
| const bool | bStatic | ||
| ) |
Adds all items in SceneManager that match visibilityFlags.
| sceneManager | SceneManager ptr |
| visibilityFlags | Visibility Mask to exclude Items |
| bStatic | True to add only static Items False to add only dynamic Items |
| void Ogre::VctCascadedVoxelizer::addCascade | ( | const VctCascadeSetting & | cascadeSetting | ) |
Adds a new cascade.
VctCascadeSetting::voxelizer must be nullptr Cannot be called after VctCascadedVoxelizer::init
| void Ogre::VctCascadedVoxelizer::addItem | ( | Item * | item | ) |
Adds the given item to the voxelizer in all cascades.
|
virtual |
CompositorWorkspaceListener override.
Reimplemented from Ogre::CompositorWorkspaceListener.
|
inlinevirtualinherited |
Called from CompositorManager2 (not CompositorWorkspace) when we're about to update all the workspaces (it's safe to update your own workspaces without calling _beginUpdate and _endUpdate) Warning: Don't add/remove listeners to CompositorManager2 inside this function.
Reimplemented in Ogre::ParallaxCorrectedCubemap, and Ogre::ParallaxCorrectedCubemapAuto.
| void Ogre::VctCascadedVoxelizer::autoCalculateStepSizes | ( | const Vector3 | stepSize | ) |
Alters each cascade's step size.
The last cascade is set to stepSize.
The rest of the cascades are set to step sizes that are >= stepSize automatically
|
inline |
|
inline |
|
inline |
|
inline |
Returns the mesh cache (shared by all cascades) in case you want to add a mesh manually with custom settings.
|
inline |
Returns number of bounces for cascade 0.
The others are calculated automatically See VctCascadedVoxelizer::init
|
inline |
References Ogre::FastArray< T >::size().
|
inline |
| void Ogre::VctCascadedVoxelizer::init | ( | RenderSystem * | renderSystem, |
| HlmsManager * | hlmsManager, | ||
| uint32 | numBounces, | ||
| bool | bAnisotropic | ||
| ) |
Call this function after adding all cascades.
You can no longer add cascades after this
| numBounces | Number of bounces for cascade 0. The rest of the cascades are autocalculated to maintain even brightness levels. |
Range is [0; inf) but a value of 0 is strongly discouraged if you have more than 1 cascade as you can end up with very uneven brightness levels between cascades
| bAnisotropic | Whether we should use anisotropic VCT |
|
inline |
Returns if we're using anisotropic VCT.
|
inlinevirtualinherited |
Called early on in pass' execution.
Happens before passPreExecute, before the pass has set anything. Warning: calling pass->execute can result in recursive calls.
|
inlinevirtualinherited |
Called after a pass has been executed.
Warning: calling pass->execute can result in recursive calls.
|
inlinevirtualinherited |
Called when each pass is about to be executed.
Warning: calling pass->execute can result in recursive calls.
Reimplemented in Ogre::ParallaxCorrectedCubemap, Ogre::ParallaxCorrectedCubemapAuto, and Ogre::ParallaxCorrectedCubemapBase.
|
inlinevirtualinherited |
Called after a pass scene has performed frustum caulling but has yet to prepare and execute rendering commands.
Gets called after passSceneAfterFrustumCulling and before passPosExecute
Warning: calling pass->execute can result in recursive calls.
|
inlinevirtualinherited |
Called after a pass scene has rendered shadow casting (it gets called even if there is no shadow node).
Gets called after passPreExecute and before passSceneAfterFrustumCulling
Warning: calling pass->execute can result in recursive calls.
| void Ogre::VctCascadedVoxelizer::popCascade | ( | ) |
Destroys the last created cascade.
VctCascadeSetting::voxelizer must be nullptr Cannot be called after VctCascadedVoxelizer::init
| void Ogre::VctCascadedVoxelizer::removeAllItems | ( | ) |
Removes all items from all cascades.
| void Ogre::VctCascadedVoxelizer::removeItem | ( | Item * | item | ) |
Removes the given item to the voxelizer in all cascades.
| void Ogre::VctCascadedVoxelizer::reserveNumCascades | ( | size_t | numCascades | ) |
Tells beforehand how many cascades there will be.
It's not necessary to call this, but recommended
| void Ogre::VctCascadedVoxelizer::setAutoUpdate | ( | CompositorManager2 * | compositorManager, |
| SceneManager * | sceneManager | ||
| ) |
Register against the CompositorManager to call VctCascadedVoxelizer::update automatically when the CompositorManager is about to render (recommended)
You still must call setCameraPosition every frame though (or whenever the camera changes)
Set to nullptr to disable auto update
| void Ogre::VctCascadedVoxelizer::setCameraPosition | ( | const Vector3 & | cameraPosition | ) |
| void Ogre::VctCascadedVoxelizer::setConsistentCascadeSteps | ( | bool | bConsistentCascadeSteps | ) |
Selects how we determine when we need to (partially) rebuild the voxels based on camera movement.
This value can be changed at any point and switch back and forth
| bConsistentCascadeSteps | True: Results can feel very determnistic because it is predictable. |
Camera position is quantized in voxelCellSize * cascade.cameraStepSize. This means the camera position is in a 'cell' or 'grid'.
When the camera position moves onto another grid, we partially revoxelize results.
Advantage: A camera at pos XYZ will always have the same results
Disadvantage: if the camera jumps back and forth between voxels, revoxelizations will trigger frequently causing obvious frequent jumps in brightness
False: Revoxelization happens after the camera has travelled cascade.cameraStepSize cells away from the last point of voxelization.
Advantage: Infrequent revoxelizations. If camera movement is restricted around the last voxelization point, we will never revoxelize.
Disadvantage: Taking a picture at pos XYZ, then going away, and taking another picture at same pos XYZ may not result in the same brightness / image; which can make it feel unpredictable or non-deterministic. This can be workarounded by temporarily setting setConsistentCascadeSteps( true ) then back false after taking the picture
| void Ogre::VctCascadedVoxelizer::setNewSettings | ( | uint32 | numBounces, |
| bool | bAnisotropic | ||
| ) |
Sets new settings after having called init.
| void Ogre::VctCascadedVoxelizer::update | ( | SceneManager * | sceneManager | ) |
You can call this directly with sceneManager, but we assume all objects are already updated (i.e.
SceneManager::updateSceneGraph already called)
|
inlinevirtualinherited |
Called after all nodes has been updated.
|
inlinevirtualinherited |
Called before all nodes are going to be updated.
Use this place to update your own, manually updated Workspaces without having to call @CompositorWorkspace::_beginUpdate( forceBeginFrame=true )