Package com.jme3.shadow
Class DirectionalLightShadowRendererVR
java.lang.Object
com.jme3.shadow.AbstractShadowRendererVR
com.jme3.shadow.DirectionalLightShadowRendererVR
- All Implemented Interfaces:
Savable
,SceneProcessor
DirectionalLightShadowRenderer renderer use Parallel Split Shadow Mapping
technique (pssm)
It splits the view frustum in several parts and compute a shadow map for each one.
splits are distributed so that the closer they are from the camera, the smaller they are to maximize the resolution used of the shadow map.
This results in a better quality shadow than standard shadow mapping.
for more information on this read http://http.developer.nvidia.com/GPUGems3/gpugems3_ch10.html
It splits the view frustum in several parts and compute a shadow map for each one.
splits are distributed so that the closer they are from the camera, the smaller they are to maximize the resolution used of the shadow map.
This results in a better quality shadow than standard shadow mapping.
for more information on this read http://http.developer.nvidia.com/GPUGems3/gpugems3_ch10.html
-
Field Summary
Modifier and TypeFieldDescriptionprotected float
protected DirectionalLight
protected Vector3f[]
protected Camera
protected ColorRGBA
protected float[]
Fields inherited from class com.jme3.shadow.AbstractShadowRendererVR
assetManager, debug, dispPic, dummyTex, edgeFilteringMode, edgesThickness, fadeInfo, fadeLength, forcedRenderState, frustumCam, lightReceivers, lightViewProjectionsMatrices, matCache, nbShadowMaps, needsfallBackMaterial, postshadowMat, postTechniqueName, preshadowMat, profiler, renderBackFacesShadows, renderManager, shadowCompareMode, shadowFB, shadowIntensity, shadowMapOccluders, shadowMaps, shadowMapSize, skipPostPass, viewPort, zFarOverride
-
Constructor Summary
ConstructorDescriptionUsed for serialization use DirectionalLightShadowRenderer#DirectionalLightShadowRenderer(AssetManager assetManager, int shadowMapSize, int nbSplits)DirectionalLightShadowRendererVR
(AssetManager assetManager, int shadowMapSize, int nbSplits) Creates a DirectionalLight shadow renderer. -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
checkCulling
(Camera viewCam) Directional light is always in the view frustumprotected void
clearMaterialParameters
(Material material) This method is called once per frame and is responsible for clearing any material parameters that subclasses may need to clear on the post material.protected void
doDisplayFrustumDebug
(int shadowMapIndex) responsible for displaying the frustum of the shadow cam for debug purposefloat
returns the lambda parameter see #setLambda(float lambda)getLight()
return the light used to cast shadowsprotected GeometryList
getOccludersToRender
(int shadowMapIndex, GeometryList shadowMapOccluders) Returns a subclass-specific geometryList containing the occluders to be rendered in the shadow mapprotected void
getReceivers
(GeometryList lightReceivers) protected Camera
getShadowCam
(int shadowMapIndex) return the shadow camera to use for rendering the shadow map according the given indexprotected void
delegates the initialization of the frustum cam to child renderersboolean
Check if the stabilization is enabled.void
read
(JmeImporter im) De-serialize this instance, for example when loading from a J3O file.void
setEnabledStabilization
(boolean stabilize) Enables the stabilization of the shadow's edges.void
setLambda
(float lambda) Adjusts the partition of the shadow extend into shadow maps.void
setLight
(DirectionalLight light) Sets the light to use to cast shadowsprotected void
setMaterialParameters
(Material material) This method is called once per frame and is responsible for setting any material parameters that subclasses may need to set on the post material.protected void
updateShadowCams
(Camera viewCam) Invoked once per frame to update the shadow cams according to the light view.void
write
(JmeExporter ex) Serialize this instance, for example when saving to a J3O file.Methods inherited from class com.jme3.shadow.AbstractShadowRendererVR
cleanup, createFrustum, displayDebug, displayFrustum, displayShadowMap, getEdgeFilteringMode, getEdgesThickness, getPreShadowForcedRenderState, getShadowCompareMode, getShadowIntensity, getShadowZExtend, getShadowZFadeLength, initForcedRenderState, initialize, isFlushQueues, isInitialized, isRenderBackFacesShadows, postFrame, postQueue, preFrame, renderShadowMap, reshape, setEdgeFilteringMode, setEdgesThickness, setPostShadowMaterial, setPostShadowParams, setProfiler, setRenderBackFacesShadows, setShadowCompareMode, setShadowIntensity, setShadowZExtend, setShadowZFadeLength
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.jme3.post.SceneProcessor
rescale
-
Field Details
-
lambda
protected float lambda -
shadowCam
-
splits
-
splitsArray
protected float[] splitsArray -
light
-
points
-
-
Constructor Details
-
DirectionalLightShadowRendererVR
public DirectionalLightShadowRendererVR()Used for serialization use DirectionalLightShadowRenderer#DirectionalLightShadowRenderer(AssetManager assetManager, int shadowMapSize, int nbSplits) -
DirectionalLightShadowRendererVR
Creates a DirectionalLight shadow renderer. More info on the technique at http://http.developer.nvidia.com/GPUGems3/gpugems3_ch10.html- Parameters:
assetManager
- the application's asset managershadowMapSize
- the size of the rendered shadowmaps (512, 1024, 2048, etcetera)nbSplits
- the number of shadow maps rendered (More shadow maps yield better quality, fewer fps.)
-
-
Method Details
-
initFrustumCam
protected void initFrustumCam()Description copied from class:AbstractShadowRendererVR
delegates the initialization of the frustum cam to child renderers- Specified by:
initFrustumCam
in classAbstractShadowRendererVR
-
getLight
return the light used to cast shadows- Returns:
- the DirectionalLight
-
setLight
Sets the light to use to cast shadows- Parameters:
light
- a DirectionalLight
-
updateShadowCams
Description copied from class:AbstractShadowRendererVR
Invoked once per frame to update the shadow cams according to the light view.- Specified by:
updateShadowCams
in classAbstractShadowRendererVR
- Parameters:
viewCam
- the scene cam
-
getOccludersToRender
Description copied from class:AbstractShadowRendererVR
Returns a subclass-specific geometryList containing the occluders to be rendered in the shadow map- Specified by:
getOccludersToRender
in classAbstractShadowRendererVR
- Parameters:
shadowMapIndex
- the index of the shadow map being renderedshadowMapOccluders
- the list of occluders- Returns:
- a list of occluders
-
getReceivers
- Specified by:
getReceivers
in classAbstractShadowRendererVR
-
getShadowCam
Description copied from class:AbstractShadowRendererVR
return the shadow camera to use for rendering the shadow map according the given index- Specified by:
getShadowCam
in classAbstractShadowRendererVR
- Parameters:
shadowMapIndex
- the index of the shadow map being rendered- Returns:
- the shadowCam
-
doDisplayFrustumDebug
protected void doDisplayFrustumDebug(int shadowMapIndex) Description copied from class:AbstractShadowRendererVR
responsible for displaying the frustum of the shadow cam for debug purpose- Overrides:
doDisplayFrustumDebug
in classAbstractShadowRendererVR
-
setMaterialParameters
Description copied from class:AbstractShadowRendererVR
This method is called once per frame and is responsible for setting any material parameters that subclasses may need to set on the post material.- Specified by:
setMaterialParameters
in classAbstractShadowRendererVR
- Parameters:
material
- the material to use for the post shadow pass
-
clearMaterialParameters
Description copied from class:AbstractShadowRendererVR
This method is called once per frame and is responsible for clearing any material parameters that subclasses may need to clear on the post material.- Specified by:
clearMaterialParameters
in classAbstractShadowRendererVR
- Parameters:
material
- the material that was used for the post shadow pass
-
getLambda
public float getLambda()returns the lambda parameter see #setLambda(float lambda)- Returns:
- lambda
-
setLambda
public void setLambda(float lambda) Adjusts the partition of the shadow extend into shadow maps. Lambda is usually between 0 and 1. A low value gives a more linear partition, resulting in consistent shadow quality over the extend, but near shadows could look very jagged. A high value gives a more logarithmic partition, resulting in high quality for near shadows, but quality decreases rapidly with distance. The default value is 0.65 (the theoretical optimum).- Parameters:
lambda
- the lambda value.
-
isEnabledStabilization
public boolean isEnabledStabilization()Check if the stabilization is enabled.- Returns:
true
if stabilization is enabled andfalse
otherwise.
-
setEnabledStabilization
public void setEnabledStabilization(boolean stabilize) Enables the stabilization of the shadow's edges. (default is true) This prevents shadow edges from flickering when the camera moves. However, it can lead to some loss of shadow quality in particular scenes.- Parameters:
stabilize
-true
if stabilization has to be enabled andfalse
otherwise.
-
read
Description copied from class:AbstractShadowRendererVR
De-serialize this instance, for example when loading from a J3O file.- Specified by:
read
in interfaceSavable
- Overrides:
read
in classAbstractShadowRendererVR
- Parameters:
im
- importer (not null)- Throws:
IOException
-
write
Description copied from class:AbstractShadowRendererVR
Serialize this instance, for example when saving to a J3O file.- Specified by:
write
in interfaceSavable
- Overrides:
write
in classAbstractShadowRendererVR
- Parameters:
ex
- exporter (not null)- Throws:
IOException
-
checkCulling
Directional light is always in the view frustum- Specified by:
checkCulling
in classAbstractShadowRendererVR
- Parameters:
viewCam
-- Returns:
- true
-