@Override
    public void simpleInitApp() {
        
        cam.setLocation(new Vector3f(10, 10, 10));
        flyCam.setMoveSpeed(20);

        Material mat = new Material(assetManager,"Common/MatDefs/Light/Lighting.j3md");
        mat.setFloat("Shininess", 15f);
        mat.setBoolean("UseMaterialColors", true);
        mat.setColor("Ambient", ColorRGBA.Yellow.mult(0.2f));
        mat.setColor("Diffuse", ColorRGBA.Yellow.mult(0.2f));
        mat.setColor("Specular", ColorRGBA.Yellow.mult(0.8f));

        Material matSoil = new Material(assetManager,"Common/MatDefs/Light/Lighting.j3md");
        matSoil.setFloat("Shininess", 15f);
        matSoil.setBoolean("UseMaterialColors", true);
        matSoil.setColor("Ambient", ColorRGBA.Gray);
        matSoil.setColor("Diffuse", ColorRGBA.Gray);
        matSoil.setColor("Specular", ColorRGBA.Gray);

        Spatial teapot = assetManager.loadModel("Models/Teapot/Teapot.obj");
        teapot.setLocalTranslation(0,0,10);

        teapot.setMaterial(mat);
        teapot.setShadowMode(ShadowMode.CastAndReceive);
        teapot.setLocalScale(10.0f);
        rootNode.attachChild(teapot);

        Geometry soil = new Geometry("soil", new Box(800, 10, 700));
        soil.setLocalTranslation(0, -13, 550);
        soil.setMaterial(matSoil);
        soil.setShadowMode(ShadowMode.CastAndReceive);
        rootNode.attachChild(soil);
        
        tankMat = new Material(assetManager, "Common/MatDefs/Light/PBRLighting.j3md");
        tankMat.setTexture("BaseColorMap", assetManager.loadTexture(new TextureKey("Models/HoverTank/tank_diffuse.jpg", !true)));
        tankMat.setTexture("SpecularMap", assetManager.loadTexture(new TextureKey("Models/HoverTank/tank_specular.jpg", !true)));
        tankMat.setTexture("NormalMap", assetManager.loadTexture(new TextureKey("Models/HoverTank/tank_normals.png", !true)));
        tankMat.setTexture("EmissiveMap", assetManager.loadTexture(new TextureKey("Models/HoverTank/tank_glow_map.jpg", !true)));
        tankMat.setFloat("EmissivePower", emissionPower);
        tankMat.setFloat("EmissiveIntensity", 50);
        tankMat.setFloat("Metallic", .5f);
        Spatial tank = assetManager.loadModel("Models/HoverTank/Tank2.mesh.xml");
        tank.setLocalTranslation(-10, 5, -10);
        tank.setMaterial(tankMat);
        rootNode.attachChild(tank);

        DirectionalLight light=new DirectionalLight();
        light.setDirection(new Vector3f(-1, -1, -1).normalizeLocal());
        light.setColor(ColorRGBA.White);
        //rootNode.addLight(light);
        
        PointLight pl = new PointLight();
        pl.setPosition(new Vector3f(5, 5, 5));
        pl.setRadius(1000);
        pl.setColor(ColorRGBA.White);
        rootNode.addLight(pl);

        // load sky
        Spatial sky = SkyFactory.createSky(assetManager, 
                "Textures/Sky/Bright/FullskiesBlueClear03.dds", 
                EnvMapType.CubeMap);
        sky.setCullHint(Spatial.CullHint.Never);
        rootNode.attachChild(sky);
        EnvironmentProbeControl.tagGlobal(sky);
        
        rootNode.addControl(new EnvironmentProbeControl(assetManager, 256));
        
        FilterPostProcessor fpp = new FilterPostProcessor(assetManager);
        bloom = new SoftBloomFilter();
        fpp.addFilter(bloom);
        viewPort.addProcessor(fpp);
        
        int textY = context.getSettings().getHeight()-5;
        float xRow1 = 10, xRow2 = 250;
        guiFont = assetManager.loadFont("Interface/Fonts/Default.fnt");
        passes = createText("", xRow1, textY);
        createText("[ R / F ]", xRow2, textY);
        factor = createText("", xRow1, textY-25);
        createText("[ T / G ]", xRow2, textY-25);
        bilinear = createText("", xRow1, textY-25*2);
        createText("[ space ]", xRow2, textY-25*2);
        power = createText("", xRow1, textY-25*3);
        createText("[ Y / H ]", xRow2, textY-25*3);
        intensity = createText("", xRow1, textY-25*4);
        createText("[ U / J ]", xRow2, textY-25*4);
        updateHud();
        
        inputManager.addMapping("incr-passes", new KeyTrigger(KeyInput.KEY_R));
        inputManager.addMapping("decr-passes", new KeyTrigger(KeyInput.KEY_F));
        inputManager.addMapping("incr-factor", new KeyTrigger(KeyInput.KEY_T));
        inputManager.addMapping("decr-factor", new KeyTrigger(KeyInput.KEY_G));
        inputManager.addMapping("toggle-bilinear", new KeyTrigger(KeyInput.KEY_SPACE));
        inputManager.addMapping("incr-power", new KeyTrigger(KeyInput.KEY_Y));
        inputManager.addMapping("decr-power", new KeyTrigger(KeyInput.KEY_H));
        inputManager.addMapping("incr-intensity", new KeyTrigger(KeyInput.KEY_U));
        inputManager.addMapping("decr-intensity", new KeyTrigger(KeyInput.KEY_J));
        inputManager.addListener(this, "incr-passes", "decr-passes", "incr-factor", "decr-factor",
                "toggle-bilinear", "incr-power", "decr-power", "incr-intensity", "decr-intensity");
        
    }
Tests {@link SoftBloomFilter} with HDR.
<p>
Note: the camera is pointed directly at the ground, which is completely
black for some reason.

@author codex
jme3-examples/src/main/java/jme3test/post/TestSoftBloom.java