public void renderScene(Spatial scene, ViewPort vp) {
        // reset of the camera plane state for proper culling
        // (must be 0 for the first note of the scene to be rendered)
        vp.getCamera().setPlaneState(0);
        // queue the scene for rendering
        renderSubScene(scene, vp);
    }
Flattens the given scene graph into the ViewPort's RenderQueue,
checking for culling as the call goes down the graph recursively.

<p>First, the scene is checked for culling based on the <code>Spatial</code>s
{@link Spatial#setCullHint(com.jme3.scene.Spatial.CullHint) cull hint},
if the camera frustum contains the scene, then this method is recursively
called on its children.

<p>When the scene's leaves or {@link Geometry geometries} are reached,
they are each enqueued into the
{@link ViewPort#getQueue() ViewPort's render queue}.

<p>In addition to enqueuing the visible geometries, this method
also scenes which cast or receive shadows, by putting them into the
RenderQueue's
{@link RenderQueue#addToQueue(com.jme3.scene.Geometry, com.jme3.renderer.queue.RenderQueue.Bucket)
shadow queue}. Each Spatial which has its
{@link Spatial#setShadowMode(com.jme3.renderer.queue.RenderQueue.ShadowMode) shadow mode}
set to not off, will be put into the appropriate shadow queue, note that
this process does not check for frustum culling on any
{@link ShadowMode#Cast shadow casters}, as they don't have to be
in the eye camera frustum to cast shadows on objects that are inside it.

@param scene The scene to flatten into the queue
@param vp The ViewPort provides the {@link ViewPort#getCamera() camera}
    used for culling and the {@link ViewPort#getQueue() queue} used to
    contain the flattened scene graph.
jme3-core/src/main/java/com/jme3/renderer/RenderManager.java