When normals are set automatically by the modeling program, it averages the normals at each vertex so the shading is smooth from one face to the next, but this is not happening because the vertices are not connected.
I don’t know how to do it in Blender, but looks like you need to manually set the normals at the seam where the two meshes meet.
Blender exports the normals correctly - I’m afraid the change you are seeing there would have to be caused by the egg-optchar program. However, I’ld try not using egg-optchar and having a look at the hierarchy - if they have different textures Chicken exports the parts of the model with different node names anyway, and this will probably be preserved on import. If not then I have no idea. (See the manual for the naming scheme.)
Firstly, egg-optchar should work - I don’t know why its doing what its doing. As for naming, I can’t remember off the top of my head - its in the manual as I said, but it will be something like modelname_materailindex_materialname - that way you can search children of the modelname node with either the material index (Which is always two digits, starting at 00) or the material name. Just do a ls() and have a look to find out.
OK, so the above file I uploaded… the model consists of 2 pieces (not joined), so I can access the eye object with
eyes = character.find("**/eye")
But in this case I get that rendering effect. Sorry if there was a confusion.
But if I will merge the eye object with the body object, and try to access the eye with
eyes = character.find("**/Material1_00_Tex2")
and try changing the texture I will get an nodepath_is_empty error.