Class AbstractShadowRenderer

java.lang.Object
com.jme3.shadow.AbstractShadowRenderer
All Implemented Interfaces:
Savable, SceneProcessor, JmeCloneable, Cloneable
Direct Known Subclasses:
DirectionalLightShadowRenderer, PointLightShadowRenderer, SpotLightShadowRenderer

public abstract class AbstractShadowRenderer extends Object implements SceneProcessor, Savable, JmeCloneable, Cloneable
abstract shadow renderer that holds commons feature to have for a shadow renderer
  • Field Details

    • logger

      protected static final Logger logger
    • nbShadowMaps

      protected int nbShadowMaps
    • shadowMapSize

      protected float shadowMapSize
    • shadowIntensity

      protected float shadowIntensity
    • renderManager

      protected RenderManager renderManager
    • viewPort

      protected ViewPort viewPort
    • shadowFB

      protected FrameBuffer[] shadowFB
    • shadowMaps

      protected Texture2D[] shadowMaps
    • dummyTex

      protected Texture2D dummyTex
    • preshadowMat

      protected Material preshadowMat
    • postshadowMat

      protected Material postshadowMat
    • lightViewProjectionsMatrices

      protected Matrix4f[] lightViewProjectionsMatrices
    • assetManager

      protected AssetManager assetManager
    • debug

      protected boolean debug
    • edgesThickness

      protected float edgesThickness
    • edgeFilteringMode

      protected EdgeFilteringMode edgeFilteringMode
    • shadowCompareMode

      protected CompareMode shadowCompareMode
    • dispPic

      protected Picture[] dispPic
    • forcedRenderState

      protected RenderState forcedRenderState
    • renderBackFacesShadows

      protected boolean renderBackFacesShadows
    • prof

      protected AppProfiler prof
    • needsfallBackMaterial

      protected boolean needsfallBackMaterial
      true if the fallback material should be used, otherwise false
    • postTechniqueName

      protected String postTechniqueName
      name of the post material technique
    • matCache

      protected List<Material> matCache
      list of materials for post shadow queue geometries
    • lightReceivers

      protected GeometryList lightReceivers
    • shadowMapOccluders

      protected GeometryList shadowMapOccluders
    • zFarOverride

      protected float zFarOverride
      fade shadows at distance
    • fadeInfo

      protected Vector2f fadeInfo
    • fadeLength

      protected float fadeLength
    • frustumCam

      protected Camera frustumCam
    • skipPostPass

      protected boolean skipPostPass
      true to skip the post pass when there are no shadow casters
  • Constructor Details

    • AbstractShadowRenderer

      protected AbstractShadowRenderer()
      used for serialization
    • AbstractShadowRenderer

      protected AbstractShadowRenderer(AssetManager assetManager, int shadowMapSize, int nbShadowMaps)
      Create an abstract shadow renderer. Subclasses invoke this constructor.
      Parameters:
      assetManager - the application asset manager
      shadowMapSize - the size of the rendered shadow maps (512,1024,2048, etc...)
      nbShadowMaps - the number of shadow maps rendered (the more shadow maps the more quality, the fewer fps).
  • Method Details

    • initForcedRenderState

      protected void initForcedRenderState()
    • setPostShadowMaterial

      protected final void setPostShadowMaterial(Material postShadowMat)
      set the post shadow material for this renderer
      Parameters:
      postShadowMat - the desired Material (alias created)
    • setEdgeFilteringMode

      public final void setEdgeFilteringMode(EdgeFilteringMode filterMode)
      Sets the filtering mode for shadow edges. See EdgeFilteringMode for more info.
      Parameters:
      filterMode - the desired filtering mode (not null)
    • getEdgeFilteringMode

      public EdgeFilteringMode getEdgeFilteringMode()
      returns the edge filtering mode
      Returns:
      the enum value
      See Also:
    • setShadowCompareMode

      public final void setShadowCompareMode(CompareMode compareMode)
      Sets the shadow compare mode. See CompareMode for more info.
      Parameters:
      compareMode - the desired compare mode (not null)
    • getShadowCompareMode

      public CompareMode getShadowCompareMode()
      returns the shadow compare mode
      Returns:
      the shadowCompareMode
      See Also:
    • createFrustum

      protected Geometry createFrustum(Vector3f[] pts, int i)
      debug function to create a visible frustum
      Parameters:
      pts - optional storage for vertex positions (may be null)
      i - the index of the desired wire color (default=White)
      Returns:
      a new Geometry
    • initialize

      public void initialize(RenderManager rm, ViewPort vp)
      Initialize this shadow renderer prior to its first update.
      Specified by:
      initialize in interface SceneProcessor
      Parameters:
      rm - the render manager
      vp - the viewport
    • initFrustumCam

      protected abstract void initFrustumCam()
      delegates the initialization of the frustum cam to child renderers
    • isInitialized

      public boolean isInitialized()
      Test whether this shadow renderer has been initialized.
      Specified by:
      isInitialized in interface SceneProcessor
      Returns:
      true if initialized, otherwise false
    • updateShadowCams

      protected abstract void updateShadowCams(Camera viewCam)
      Invoked once per frame to update the shadow cams according to the light view.
      Parameters:
      viewCam - the scene cam
    • getOccludersToRender

      protected abstract GeometryList getOccludersToRender(int shadowMapIndex, GeometryList shadowMapOccluders)
      Returns a subclass-specific geometryList containing the occluders to be rendered in the shadow map
      Parameters:
      shadowMapIndex - the index of the shadow map being rendered
      shadowMapOccluders - the list of occluders
      Returns:
      the geometryList
    • getShadowCam

      protected abstract Camera getShadowCam(int shadowMapIndex)
      return the shadow camera to use for rendering the shadow map according the given index
      Parameters:
      shadowMapIndex - the index of the shadow map being rendered
      Returns:
      the shadowCam
    • doDisplayFrustumDebug

      protected void doDisplayFrustumDebug(int shadowMapIndex)
      responsible for displaying the frustum of the shadow cam for debug purpose
      Parameters:
      shadowMapIndex - the index of the shadow map
    • postQueue

      public void postQueue(RenderQueue rq)
      Description copied from interface: SceneProcessor
      Called after the scene graph has been queued, but before it is flushed.
      Specified by:
      postQueue in interface SceneProcessor
      Parameters:
      rq - The render queue
    • renderShadowMap

      protected void renderShadowMap(int shadowMapIndex)
    • displayFrustum

      public void displayFrustum()
    • displayShadowMap

      protected void displayShadowMap(Renderer r)
      For debugging purposes, display depth shadow maps.
      Parameters:
      r - ignored
    • displayDebug

      public void displayDebug()
      For debugging purposes, "snapshot" the current frustum to the scene.
    • getReceivers

      protected abstract void getReceivers(GeometryList lightReceivers)
    • postFrame

      public void postFrame(FrameBuffer out)
      Description copied from interface: SceneProcessor
      Called after a frame has been rendered and the queue flushed.
      Specified by:
      postFrame in interface SceneProcessor
      Parameters:
      out - The FB to which the scene was rendered.
    • clearMaterialParameters

      protected abstract 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.
      Parameters:
      material - the material that was used for the post shadow pass
    • setMaterialParameters

      protected abstract 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.
      Parameters:
      material - the material to use for the post shadow pass
    • setPostShadowParams

      protected void setPostShadowParams()
      for internal use only
    • getShadowZExtend

      public float getShadowZExtend()
      How far the shadows are rendered in the view
      Returns:
      shadowZExtend
      See Also:
    • setShadowZExtend

      public void setShadowZExtend(float zFar)
      Set the distance from the eye where the shadows will be rendered default value is dynamically computed to the shadow casters/receivers union bound zFar, capped to view frustum far value.
      Parameters:
      zFar - the zFar values that override the computed one
    • setShadowZFadeLength

      public void setShadowZFadeLength(float length)
      Define the length over which the shadow will fade out when using a shadowZextend This is useful to make dynamic shadows fade into baked shadows in the distance.
      Parameters:
      length - the fade length in world units
    • getShadowZFadeLength

      public float getShadowZFadeLength()
      get the length over which the shadow will fade out when using a shadowZextend
      Returns:
      the fade length in world units
    • checkCulling

      protected abstract boolean checkCulling(Camera viewCam)
      Parameters:
      viewCam - a Camera to define the view frustum
      Returns:
      true if the light source bounding box is in the view frustum
    • preFrame

      public void preFrame(float tpf)
      Description copied from interface: SceneProcessor
      Called before a frame
      Specified by:
      preFrame in interface SceneProcessor
      Parameters:
      tpf - Time per frame
    • cleanup

      public void cleanup()
      Description copied from interface: SceneProcessor
      Called when the SP is removed from the RM.
      Specified by:
      cleanup in interface SceneProcessor
    • reshape

      public void reshape(ViewPort vp, int w, int h)
      Description copied from interface: SceneProcessor
      Called when the resolution of the viewport has been changed.
      Specified by:
      reshape in interface SceneProcessor
      Parameters:
      vp - the affected ViewPort
      w - the new width (in pixels)
      h - the new height (in pixels)
    • getShadowIntensity

      public float getShadowIntensity()
      Returns the shadow intensity.
      Returns:
      shadowIntensity
      See Also:
    • setShadowIntensity

      public final void setShadowIntensity(float shadowIntensity)
      Set the shadowIntensity. The value should be between 0 and 1. A 0 value gives a bright and invisible shadow, a 1 value gives a pitch black shadow. The default is 0.7
      Parameters:
      shadowIntensity - the darkness of the shadow
    • getEdgesThickness

      public int getEdgesThickness()
      returns the edges thickness
      Returns:
      edgesThickness
      See Also:
    • getNumShadowMaps

      public int getNumShadowMaps()
      Read the number of shadow maps rendered by this renderer.
      Returns:
      count
    • getShadowMapSize

      public int getShadowMapSize()
      Read the size of each shadow map rendered by this renderer.
      Returns:
      a map's height (which is also its width, in pixels)
    • setEdgesThickness

      public void setEdgesThickness(int edgesThickness)
      Sets the shadow edges thickness. Default is 10. Setting it to lower values can help reduce the jagged effect of shadow edges.
      Parameters:
      edgesThickness - the desired thickness (in tenths of a pixel, default=10)
    • isFlushQueues

      @Deprecated public boolean isFlushQueues()
      Deprecated.
      isFlushQueues does nothing now and is kept only for backward compatibility
      Returns:
      false
    • getPreShadowForcedRenderState

      public RenderState getPreShadowForcedRenderState()
      returns the pre shadows pass render state. use it to adjust the RenderState parameters of the pre shadow pass. Note that this will be overridden if the preShadow technique in the material has a ForcedRenderState
      Returns:
      the pre shadow render state.
    • setRenderBackFacesShadows

      public void setRenderBackFacesShadows(boolean renderBackFacesShadows)
      Set to true if you want back faces shadows on geometries. Note that back faces shadows will be blended over dark lighten areas and may produce overly dark lighting. Also note that setting this parameter will override this parameter for ALL materials in the scene. You can alternatively change this parameter on a single material using Material.setBoolean(String, boolean) This also will automatically adjust the faceCullMode and the PolyOffset of the pre shadow pass. You can modify them by using getPreShadowForcedRenderState()
      Parameters:
      renderBackFacesShadows - true or false.
    • isRenderBackFacesShadows

      public boolean isRenderBackFacesShadows()
      if this processor renders back faces shadows
      Returns:
      true if this processor renders back faces shadows
    • jmeClone

      public Object jmeClone()
      Description copied from interface: JmeCloneable
      Performs a regular shallow clone of the object. Some fields may also be cloned but generally only if they will never be shared with other objects. (For example, local Vector3fs and so on.)

      This method is separate from the regular clone() method so that objects might still maintain their own regular java clone() semantics (perhaps even using Cloner for those methods). However, because Java's clone() has specific features in the sense of Object's clone() implementation, it's usually best to have some path for subclasses to bypass the public clone() method that might be cloning fields and instead get at the superclass protected clone() methods. For example, through super.jmeClone() or another protected clone method that some base class eventually calls super.clone() in.

      Specified by:
      jmeClone in interface JmeCloneable
      Returns:
      a new instance
    • cloneFields

      public void cloneFields(Cloner cloner, Object original)
      Description copied from interface: JmeCloneable
      Implemented to perform deep cloning for this object, resolving local cloned references using the specified cloner. The object can call cloner.clone(fieldValue) to deep clone any of its fields.

      Note: during normal clone operations the original object will not be needed as the clone has already had all of the fields shallow copied.

      Specified by:
      cloneFields in interface JmeCloneable
      Parameters:
      cloner - The cloner that is performing the cloning operation. The cloneFields method can call back into the cloner to make clones of its subordinate fields.
      original - The original object from which this object was cloned. This is provided for the very rare case that this object needs to refer to its original for some reason. In general, all of the relevant values should have been transferred during the shallow clone, and this object need only clone what it wants.
    • setProfiler

      public void setProfiler(AppProfiler profiler)
      Description copied from interface: SceneProcessor
      Sets a profiler Instance for this processor.
      Specified by:
      setProfiler in interface SceneProcessor
      Parameters:
      profiler - the profiler instance.
    • read

      public void read(JmeImporter im) throws IOException
      De-serialize this instance, for example when loading from a J3O file.
      Specified by:
      read in interface Savable
      Parameters:
      im - importer (not null)
      Throws:
      IOException - from the importer
    • write

      public void write(JmeExporter ex) throws IOException
      Serialize this instance, for example when saving to a J3O file.
      Specified by:
      write in interface Savable
      Parameters:
      ex - exporter (not null)
      Throws:
      IOException - from the exporter