Search in sources :

Example 31 with Filter

use of com.jme3.post.Filter in project jmonkeyengine by jMonkeyEngine.

the class TestPssmShadow method onAction.

public void onAction(String name, boolean keyPressed, float tpf) {
    if (name.equals("toggle") && keyPressed) {
        renderModeIndex += 1;
        renderModeIndex %= 3;
        switch(renderModeIndex) {
            case 0:
                viewPort.addProcessor(pssmRenderer);
                break;
            case 1:
                viewPort.removeProcessor(pssmRenderer);
                pssmFilter.setEnabled(true);
                break;
            case 2:
                pssmFilter.setEnabled(false);
                break;
        }
    } else if (name.equals("toggleHW") && keyPressed) {
        hardwareShadows = !hardwareShadows;
        pssmRenderer.setCompareMode(hardwareShadows ? CompareMode.Hardware : CompareMode.Software);
        pssmFilter.setCompareMode(hardwareShadows ? CompareMode.Hardware : CompareMode.Software);
        System.out.println("HW Shadows: " + hardwareShadows);
    }
    if (name.equals("changeFiltering") && keyPressed) {
        filteringIndex = (filteringIndex + 1) % FilterMode.values().length;
        FilterMode m = FilterMode.values()[filteringIndex];
        pssmRenderer.setFilterMode(m);
        pssmFilter.setFilterMode(m);
        print("Filter mode : " + m.toString());
    }
    if (name.equals("lambdaUp") && keyPressed) {
        pssmRenderer.setLambda(pssmRenderer.getLambda() + 0.01f);
        pssmFilter.setLambda(pssmRenderer.getLambda() + 0.01f);
        System.out.println("Lambda : " + pssmRenderer.getLambda());
    } else if (name.equals("lambdaDown") && keyPressed) {
        pssmRenderer.setLambda(pssmRenderer.getLambda() - 0.01f);
        pssmFilter.setLambda(pssmRenderer.getLambda() - 0.01f);
        System.out.println("Lambda : " + pssmRenderer.getLambda());
    }
    if (name.equals("ShadowUp") && keyPressed) {
        pssmRenderer.setShadowIntensity(pssmRenderer.getShadowIntensity() + 0.1f);
        pssmFilter.setShadowIntensity(pssmRenderer.getShadowIntensity() + 0.1f);
        System.out.println("Shadow intensity : " + pssmRenderer.getShadowIntensity());
    }
    if (name.equals("ShadowDown") && keyPressed) {
        pssmRenderer.setShadowIntensity(pssmRenderer.getShadowIntensity() - 0.1f);
        pssmFilter.setShadowIntensity(pssmRenderer.getShadowIntensity() - 0.1f);
        System.out.println("Shadow intensity : " + pssmRenderer.getShadowIntensity());
    }
    if (name.equals("ThicknessUp") && keyPressed) {
        pssmRenderer.setEdgesThickness(pssmRenderer.getEdgesThickness() + 1);
        pssmFilter.setEdgesThickness(pssmRenderer.getEdgesThickness() + 1);
        System.out.println("Shadow thickness : " + pssmRenderer.getEdgesThickness());
    }
    if (name.equals("ThicknessDown") && keyPressed) {
        pssmRenderer.setEdgesThickness(pssmRenderer.getEdgesThickness() - 1);
        pssmFilter.setEdgesThickness(pssmRenderer.getEdgesThickness() - 1);
        System.out.println("Shadow thickness : " + pssmRenderer.getEdgesThickness());
    }
    if (name.equals("switchGroundMat") && keyPressed) {
        if (ground.getMaterial() == matGroundL) {
            ground.setMaterial(matGroundU);
        } else {
            ground.setMaterial(matGroundL);
        }
    }
    if (name.equals("up")) {
        up = keyPressed;
    }
    if (name.equals("down")) {
        down = keyPressed;
    }
    if (name.equals("right")) {
        right = keyPressed;
    }
    if (name.equals("left")) {
        left = keyPressed;
    }
    if (name.equals("fwd")) {
        fwd = keyPressed;
    }
    if (name.equals("back")) {
        back = keyPressed;
    }
}
Also used : FilterMode(com.jme3.shadow.PssmShadowRenderer.FilterMode)

Example 32 with Filter

use of com.jme3.post.Filter in project jmonkeyengine by jMonkeyEngine.

the class ShadowTestUIManager method onAction.

public void onAction(String name, boolean keyPressed, float tpf) {
    if (name.equals("toggle") && keyPressed) {
        renderModeIndex += 1;
        renderModeIndex %= 3;
        switch(renderModeIndex) {
            case 0:
                viewPort.addProcessor(plsr);
                shadowTypeText.setText(TYPE_TEXT + "Processor");
                break;
            case 1:
                viewPort.removeProcessor(plsr);
                plsf.setEnabled(true);
                shadowTypeText.setText(TYPE_TEXT + "Filter");
                break;
            case 2:
                plsf.setEnabled(false);
                shadowTypeText.setText(TYPE_TEXT + "None");
                break;
        }
    } else if (name.equals("toggleHW") && keyPressed) {
        hardwareShadows = !hardwareShadows;
        plsr.setShadowCompareMode(hardwareShadows ? CompareMode.Hardware : CompareMode.Software);
        plsf.setShadowCompareMode(hardwareShadows ? CompareMode.Hardware : CompareMode.Software);
        shadowCompareText.setText(COMPARE_TEXT + (hardwareShadows ? "Hardware" : "Software"));
    }
    if (name.equals("changeFiltering") && keyPressed) {
        filteringIndex = plsr.getEdgeFilteringMode().ordinal();
        filteringIndex = (filteringIndex + 1) % EdgeFilteringMode.values().length;
        EdgeFilteringMode m = EdgeFilteringMode.values()[filteringIndex];
        plsr.setEdgeFilteringMode(m);
        plsf.setEdgeFilteringMode(m);
        shadowFilterText.setText(FILTERING_TEXT + m.toString());
    }
    if (name.equals("ShadowUp") && keyPressed) {
        plsr.setShadowIntensity(plsr.getShadowIntensity() + 0.1f);
        plsf.setShadowIntensity(plsf.getShadowIntensity() + 0.1f);
        shadowIntensityText.setText(INTENSITY_TEXT + plsr.getShadowIntensity());
    }
    if (name.equals("ShadowDown") && keyPressed) {
        plsr.setShadowIntensity(plsr.getShadowIntensity() - 0.1f);
        plsf.setShadowIntensity(plsf.getShadowIntensity() - 0.1f);
        shadowIntensityText.setText(INTENSITY_TEXT + plsr.getShadowIntensity());
    }
    if (name.equals("ThicknessUp") && keyPressed) {
        plsr.setEdgesThickness(plsr.getEdgesThickness() + 1);
        plsf.setEdgesThickness(plsf.getEdgesThickness() + 1);
        System.out.println("Shadow thickness : " + plsr.getEdgesThickness());
    }
    if (name.equals("ThicknessDown") && keyPressed) {
        plsr.setEdgesThickness(plsr.getEdgesThickness() - 1);
        plsf.setEdgesThickness(plsf.getEdgesThickness() - 1);
        System.out.println("Shadow thickness : " + plsr.getEdgesThickness());
    }
}
Also used : EdgeFilteringMode(com.jme3.shadow.EdgeFilteringMode)

Example 33 with Filter

use of com.jme3.post.Filter in project jmonkeyengine by jMonkeyEngine.

the class TestPostWater method simpleInitApp.

@Override
public void simpleInitApp() {
    setDisplayFps(false);
    setDisplayStatView(false);
    Node mainScene = new Node("Main Scene");
    rootNode.attachChild(mainScene);
    createTerrain(mainScene);
    DirectionalLight sun = new DirectionalLight();
    sun.setDirection(lightDir);
    sun.setColor(ColorRGBA.White.clone().multLocal(1f));
    mainScene.addLight(sun);
    AmbientLight al = new AmbientLight();
    al.setColor(new ColorRGBA(0.1f, 0.1f, 0.1f, 1.0f));
    mainScene.addLight(al);
    flyCam.setMoveSpeed(50);
    //cam.setLocation(new Vector3f(-700, 100, 300));
    //cam.setRotation(new Quaternion().fromAngleAxis(0.5f, Vector3f.UNIT_Z));
    //        cam.setLocation(new Vector3f(-327.21957f, 61.6459f, 126.884346f));
    //        cam.setRotation(new Quaternion(0.052168474f, 0.9443102f, -0.18395276f, 0.2678024f));
    cam.setLocation(new Vector3f(-370.31592f, 182.04016f, 196.81192f));
    cam.setRotation(new Quaternion(0.015302252f, 0.9304095f, -0.039101653f, 0.3641086f));
    Spatial sky = SkyFactory.createSky(assetManager, "Scenes/Beach/FullskiesSunset0068.dds", false);
    sky.setLocalScale(350);
    mainScene.attachChild(sky);
    cam.setFrustumFar(4000);
    //Water Filter
    water = new WaterFilter(rootNode, lightDir);
    water.setWaterColor(new ColorRGBA().setAsSrgb(0.0078f, 0.3176f, 0.5f, 1.0f));
    water.setDeepWaterColor(new ColorRGBA().setAsSrgb(0.0039f, 0.00196f, 0.145f, 1.0f));
    water.setUnderWaterFogDistance(80);
    water.setWaterTransparency(0.12f);
    water.setFoamIntensity(0.4f);
    water.setFoamHardness(0.3f);
    water.setFoamExistence(new Vector3f(0.8f, 8f, 1f));
    water.setReflectionDisplace(50);
    water.setRefractionConstant(0.25f);
    water.setColorExtinction(new Vector3f(30, 50, 70));
    water.setCausticsIntensity(0.4f);
    water.setWaveScale(0.003f);
    water.setMaxAmplitude(2f);
    water.setFoamTexture((Texture2D) assetManager.loadTexture("Common/MatDefs/Water/Textures/foam2.jpg"));
    water.setRefractionStrength(0.2f);
    water.setWaterHeight(initialWaterHeight);
    //Bloom Filter
    BloomFilter bloom = new BloomFilter();
    bloom.setExposurePower(55);
    bloom.setBloomIntensity(1.0f);
    //Light Scattering Filter
    LightScatteringFilter lsf = new LightScatteringFilter(lightDir.mult(-300));
    lsf.setLightDensity(0.5f);
    //Depth of field Filter
    DepthOfFieldFilter dof = new DepthOfFieldFilter();
    dof.setFocusDistance(0);
    dof.setFocusRange(100);
    FilterPostProcessor fpp = new FilterPostProcessor(assetManager);
    fpp.addFilter(water);
    fpp.addFilter(bloom);
    fpp.addFilter(dof);
    fpp.addFilter(lsf);
    fpp.addFilter(new FXAAFilter());
    //      fpp.addFilter(new TranslucentBucketFilter());
    int numSamples = getContext().getSettings().getSamples();
    if (numSamples > 0) {
        fpp.setNumSamples(numSamples);
    }
    uw = cam.getLocation().y < waterHeight;
    waves = new AudioNode(assetManager, "Sound/Environment/Ocean Waves.ogg", false);
    waves.setLooping(true);
    waves.setReverbEnabled(true);
    if (uw) {
        waves.setDryFilter(new LowPassFilter(0.5f, 0.1f));
    } else {
        waves.setDryFilter(aboveWaterAudioFilter);
    }
    audioRenderer.playSource(waves);
    //  
    viewPort.addProcessor(fpp);
    inputManager.addListener(new ActionListener() {

        public void onAction(String name, boolean isPressed, float tpf) {
            if (isPressed) {
                if (name.equals("foam1")) {
                    water.setFoamTexture((Texture2D) assetManager.loadTexture("Common/MatDefs/Water/Textures/foam.jpg"));
                }
                if (name.equals("foam2")) {
                    water.setFoamTexture((Texture2D) assetManager.loadTexture("Common/MatDefs/Water/Textures/foam2.jpg"));
                }
                if (name.equals("foam3")) {
                    water.setFoamTexture((Texture2D) assetManager.loadTexture("Common/MatDefs/Water/Textures/foam3.jpg"));
                }
                if (name.equals("upRM")) {
                    water.setReflectionMapSize(Math.min(water.getReflectionMapSize() * 2, 4096));
                    System.out.println("Reflection map size : " + water.getReflectionMapSize());
                }
                if (name.equals("downRM")) {
                    water.setReflectionMapSize(Math.max(water.getReflectionMapSize() / 2, 32));
                    System.out.println("Reflection map size : " + water.getReflectionMapSize());
                }
            }
        }
    }, "foam1", "foam2", "foam3", "upRM", "downRM");
    inputManager.addMapping("foam1", new KeyTrigger(KeyInput.KEY_1));
    inputManager.addMapping("foam2", new KeyTrigger(KeyInput.KEY_2));
    inputManager.addMapping("foam3", new KeyTrigger(KeyInput.KEY_3));
    inputManager.addMapping("upRM", new KeyTrigger(KeyInput.KEY_PGUP));
    inputManager.addMapping("downRM", new KeyTrigger(KeyInput.KEY_PGDN));
//        createBox();
//        createFire();
}
Also used : FXAAFilter(com.jme3.post.filters.FXAAFilter) Texture2D(com.jme3.texture.Texture2D) LightScatteringFilter(com.jme3.post.filters.LightScatteringFilter) LowPassFilter(com.jme3.audio.LowPassFilter) Quaternion(com.jme3.math.Quaternion) AudioNode(com.jme3.audio.AudioNode) Node(com.jme3.scene.Node) KeyTrigger(com.jme3.input.controls.KeyTrigger) FilterPostProcessor(com.jme3.post.FilterPostProcessor) BloomFilter(com.jme3.post.filters.BloomFilter) DepthOfFieldFilter(com.jme3.post.filters.DepthOfFieldFilter) ColorRGBA(com.jme3.math.ColorRGBA) ActionListener(com.jme3.input.controls.ActionListener) Spatial(com.jme3.scene.Spatial) WaterFilter(com.jme3.water.WaterFilter) DirectionalLight(com.jme3.light.DirectionalLight) Vector3f(com.jme3.math.Vector3f) AmbientLight(com.jme3.light.AmbientLight) AudioNode(com.jme3.audio.AudioNode)

Example 34 with Filter

use of com.jme3.post.Filter in project jmonkeyengine by jMonkeyEngine.

the class VRViewManagerOSVR method syncScreenProcessing.

/**
     * Sets the two views to use the list of {@link SceneProcessor processors}.
     * @param sourceViewport the {@link ViewPort viewport} that contains the processors to use.
     */
public void syncScreenProcessing(ViewPort sourceViewport) {
    if (rightViewport == null) {
        return;
    }
    if (environment != null) {
        if (environment.getApplication() != null) {
            // setup post processing filters
            if (rightPostProcessor == null) {
                rightPostProcessor = new FilterPostProcessor(environment.getApplication().getAssetManager());
                leftPostProcessor = new FilterPostProcessor(environment.getApplication().getAssetManager());
            }
            // clear out all filters & processors, to start from scratch
            rightPostProcessor.removeAllFilters();
            leftPostProcessor.removeAllFilters();
            leftViewport.clearProcessors();
            rightViewport.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
            leftViewport.addProcessor(leftPostProcessor);
            rightViewport.addProcessor(rightPostProcessor);
            // add them to the left viewport processor & 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 {
                            leftPostProcessor.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 {
                                // dof, bloom, lightscattering etc.
                                f2 = f;
                            }
                            rightPostProcessor.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());
                    rightViewport.getProcessors().add(0, dlsrRight);
                    leftViewport.getProcessors().add(0, sceneProcessor);
                }
            }
            // make sure each has a translucent filter renderer
            leftPostProcessor.addFilter(new TranslucentBucketFilter());
            rightPostProcessor.addFilter(new TranslucentBucketFilter());
        } else {
            throw new IllegalStateException("This VR environment is not attached to any application.");
        }
    } else {
        throw new IllegalStateException("This VR view manager is not attached to any VR environment.");
    }
}
Also used : SSAOFilter(com.jme3.post.ssao.SSAOFilter) TranslucentBucketFilter(com.jme3.post.filters.TranslucentBucketFilter) VRDirectionalLightShadowRenderer(com.jme3.shadow.VRDirectionalLightShadowRenderer) DirectionalLightShadowFilter(com.jme3.shadow.DirectionalLightShadowFilter) Filter(com.jme3.post.Filter) SSAOFilter(com.jme3.post.ssao.SSAOFilter) FogFilter(com.jme3.post.filters.FogFilter) TranslucentBucketFilter(com.jme3.post.filters.TranslucentBucketFilter) FilterPostProcessor(com.jme3.post.FilterPostProcessor) DirectionalLightShadowFilter(com.jme3.shadow.DirectionalLightShadowFilter) FogFilter(com.jme3.post.filters.FogFilter) SceneProcessor(com.jme3.post.SceneProcessor) CartoonSSAO(com.jme3.post.CartoonSSAO)

Example 35 with Filter

use of com.jme3.post.Filter in project jmonkeyengine by jMonkeyEngine.

the class FilterUtil method cloneSSAOFilter.

public static SSAOFilter cloneSSAOFilter(SSAOFilter filter) {
    SSAOFilter clone = new SSAOFilter();
    clone.setSampleRadius(filter.getSampleRadius());
    clone.setIntensity(filter.getIntensity());
    clone.setScale(filter.getScale());
    clone.setBias(filter.getBias());
    return clone;
}
Also used : SSAOFilter(com.jme3.post.ssao.SSAOFilter)

Aggregations

Node (com.jme3.scene.Node)10 Vector3f (com.jme3.math.Vector3f)7 FilterPostProcessor (com.jme3.post.FilterPostProcessor)7 Spatial (com.jme3.scene.Spatial)7 Texture2D (com.jme3.texture.Texture2D)6 HashMap (java.util.HashMap)6 Map (java.util.Map)6 SSAOFilter (com.jme3.post.ssao.SSAOFilter)5 DirectionalLight (com.jme3.light.DirectionalLight)4 Material (com.jme3.material.Material)4 Quaternion (com.jme3.math.Quaternion)4 Filter (com.jme3.post.Filter)4 AudioNode (com.jme3.audio.AudioNode)3 KeyTrigger (com.jme3.input.controls.KeyTrigger)3 ColorRGBA (com.jme3.math.ColorRGBA)3 FogFilter (com.jme3.post.filters.FogFilter)3 DirectionalLightShadowFilter (com.jme3.shadow.DirectionalLightShadowFilter)3 Texture (com.jme3.texture.Texture)3 TextureKey (com.jme3.asset.TextureKey)2 LowPassFilter (com.jme3.audio.LowPassFilter)2