@Override
    public void simpleInitApp() {
        setPauseOnLostFocus(false);
        flyCam.setMoveSpeed(20);
        viewPort.setBackgroundColor(new ColorRGBA().setAsSrgb(0.2f, 0.2f, 0.2f, 1.0f));
        probeNode = (Node) assetManager.loadModel("Scenes/defaultProbe.j3o");
        rootNode.attachChild(probeNode);

        probeNode.addLight(new AmbientLight(ColorRGBA.Gray));
        light = new DirectionalLight(new Vector3f(-1, -1, -1), ColorRGBA.White);
        rootNode.addLight(light);

        modelTxt = new BitmapText(guiFont);
        modelTxt.setSize(guiFont.getCharSet().getRenderedSize());
        modelTxt.setLocalTranslation(0, 700, 0);
        guiNode.attachChild(modelTxt);

        materialTxt = new BitmapText(guiFont);
        materialTxt.setSize(guiFont.getCharSet().getRenderedSize());
        materialTxt.setLocalTranslation(300, 700, 0);
        guiNode.attachChild(materialTxt);
    }
This test cycles through a model exported in different formats and with different materials with tangents
generated in different ways. The normal map should look correct in all cases. Refer to
https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/NormalTangentMirrorTest for details on
the correct result and debugging.
jme3-examples/src/main/java/jme3test/material/TestNormalMappingConsistency.java