Problem with lighting, globalAmbient and materials

First, I am still in the dark ages using JME 1.0 but not by choice it is our project managers decisions to not upgrade yet.

Second, I have two different applications one that is just for viewing models the other is the game itself.



I am having a problem with the lighting. I have a Direction Light set up as sun light with a global ambient set to gray.

The light is coming from above but the global ambient is causing the model to be too dark.



I want the global ambient because it gives a shading to give the appearance where the light is coming from.



I have tried adding a point light to the object itself. In the model viewer the model looks good but too much light and so the global ambient is covered up. In the game the body is too bright and the hands and face are still black.





I tried changing the global ambient to white which helps the appearance on the body but not the hands and face.



The hands and face to have a material ambient of black where as the rest of the model the meshes are (0.2, 0.2, 0.2, 1.0). However, I have no control over this. It comes from the model itself.



Here is the code for the lights:



light = new DirectionalLight();

light.setDiffuse(ColorRGBA.white); //new ColorRGBA(0.9f, 0.9f, 0.9f, 1.0f));

light.setSpecular(ColorRGBA.white); //new ColorRGBA(0.3f, 0.3f, 0.3f, 0.5f));

//light.setAmbient(new ColorRGBA(0.8f, 0.8f, 0.8f, 0.4f));

light.setAmbient(ColorRGBA.white); //new ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f));

light.setShadowCaster(true);

light.setDirection(new Vector3f(0.0f, -25.0f, 0.0f));

//light.setDirection(new Vector3f(0.633319203f, -0.773890682f, 0.0f));

//light.setConstant(1.0f);

light.setEnabled(true);

                                                       

lightState = display.getRenderer().createLightState();

lightState.setGlobalAmbient(ColorRGBA.gray);

lightState.setEnabled(true);

lightState.attach(light);



and the code for the materials

if (hasMaterial()) {

MaterialState ms = renderer.createMaterialState();

ms.setEnabled(true);

ms.setAmbient(faceMaterial.getAmbient());

ms.setDiffuse(faceMaterial.getDiffuse());

ms.setEmissive(faceMaterial.getEmissive());

ms.setSpecular(faceMaterial.getSpecular());

ms.setShininess(faceMaterial.getShininess());

ms.setMaterialFace(MaterialState.MF_FRONT_AND_BACK);

if(hasMaterial() & !isLit()){

ms.setColorMaterial(MaterialState.CM_AMBIENT_AND_DIFFUSE);

}

mesh.setRenderState(ms);

mesh.updateRenderState();



if(faceMaterial.getAlpha() < 1.0f){

AlphaState as = renderer.createAlphaState();

as.setEnabled(true);

as.setTestEnabled(true);

as.setBlendEnabled(true);

as.setTestFunction(AlphaState.TF_GREATER);

//as.setReference(0.5f);

as.setSrcFunction(AlphaState.SB_SRC_ALPHA);

as.setDstFunction(AlphaState.DB_ONE_MINUS_SRC_ALPHA);

mesh.setRenderQueueMode(Renderer.QUEUE_TRANSPARENT);

mesh.setRenderState(as);

mesh.updateRenderState();

}

}



Any suggestions as to how I can fix this.