I'm pondering if I should try to write my own 3ds loader. I noticed that Loader.load3DS currently uses Object3D.addTriangle to build the mesh, so I would assume that distinct vertices would be merged anyway. Instead I would rather use the Object3D constructor that allows to specify vertices and faces explicitly, create one Object3D for each used material and merge them afterwards with Object3D.mergeAll - provided that mergeAll doesn't do vertex sharing again. I might then calculate the normals from the vertex/face relation information available in the IVertexController. This would of course mean that you always get sharp edges between different materials, but I think that's ok.
By the way, does Object3D.mergeAll mean that normals are re-created, even if they have been generated before on all objects?
Regards,
Uwe