public void syncScreenProcessing(ViewPort sourceViewport) {
        if (environment != null){
            if(  getRightViewPort() == null ){
                return;
            }

            if (environment.getApplication() != null){
                // set up post-processing filters
                if( getRightPostProcessor() == null ) {
                    rightPostProcessor = new FilterPostProcessor(environment.getApplication().getAssetManager());
                    leftPostProcessor =  new FilterPostProcessor(environment.getApplication().getAssetManager());
                }
                // clear out all filters & processors, to start from scratch
                getRightPostProcessor().removeAllFilters();
                getLeftPostProcessor().removeAllFilters();
                getLeftViewPort().clearProcessors();
                getRightViewPort().clearProcessors();
                // if we have no processors to sync, don't add the FilterPostProcessor
                if( sourceViewport.getProcessors().isEmpty() ) return;
                // add post processors we just made, which are empty
                getLeftViewPort().addProcessor(getLeftPostProcessor());
                getRightViewPort().addProcessor(getRightPostProcessor());
                // Go through all of the filters in the processors list,
                // add them to the left viewport processor, and clone them to the right.
                for(SceneProcessor sceneProcessor : sourceViewport.getProcessors()) {
                    if (sceneProcessor instanceof FilterPostProcessor) {
                        for(Filter f : ((FilterPostProcessor)sceneProcessor).getFilterList() ) {
                            if( f instanceof TranslucentBucketFilter ) {
                                // just remove this filter, we will add it at the end manually
                                ((FilterPostProcessor)sceneProcessor).removeFilter(f);
                            } else {
                                getLeftPostProcessor().addFilter(f);
                                // clone to the right
                                Filter f2;
                                if(f instanceof FogFilter){
                                    f2 = FilterUtil.cloneFogFilter((FogFilter)f);
                                } else if (f instanceof CartoonSSAO ) {
                                    f2 = new CartoonSSAO((CartoonSSAO)f);
                                } else if (f instanceof SSAOFilter){
                                    f2 = FilterUtil.cloneSSAOFilter((SSAOFilter)f);
                                } else if (f instanceof DirectionalLightShadowFilter){
                                    f2 = FilterUtil.cloneDirectionalLightShadowFilter(environment.getApplication().getAssetManager(), (DirectionalLightShadowFilter)f);
                                } else {
                                    f2 = f; // dof, bloom, light scattering etc.
                                }
                                getRightPostProcessor().addFilter(f2);
                            }
                        }
                    } else if (sceneProcessor instanceof VRDirectionalLightShadowRenderer) {
                        // shadow processing
                        // TODO: make right shadow processor use same left shadow maps for performance
                        VRDirectionalLightShadowRenderer dlsr = (VRDirectionalLightShadowRenderer) sceneProcessor;
                        VRDirectionalLightShadowRenderer dlsrRight = dlsr.clone();
                        dlsrRight.setLight(dlsr.getLight());
                        getRightViewPort().getProcessors().add(0, dlsrRight);
                        getLeftViewPort().getProcessors().add(0, sceneProcessor);
                    }
                }
                // make sure each has a translucent filter renderer
                getLeftPostProcessor().addFilter(new TranslucentBucketFilter());
                getRightPostProcessor().addFilter(new TranslucentBucketFilter());
            } else {
                throw new IllegalStateException("The VR environment is not attached to any application.");
            }

        } else {
            throw new IllegalStateException("This VR view manager is not attached to any VR environment.");
        }
    }
Sets the two views to use the list of {@link SceneProcessor processors}.
@param sourceViewport the {@link ViewPort viewport} that contains the processors to use.
jme3-vr/src/main/java/com/jme3/input/vr/AbstractVRViewManager.java