I remembered this is posted somewhere else, but I am not sure what is the outcome or solution at the end of that thread. If there is already a solution, I apologize for double posting. Appreciate if someone can point me to the thread with solution.
Anyway, I noticed that the 3DS Loader in Irrlicht does not smooth the mesh normal as most 3D application like Milkshape.
Below is the screenshot for two similar mesh object saved in two different file formats.

As you can see, the .3DS mesh looks faceted while its .X counterpart looks smooth. I am not sure whether this is a bug in Irrlicht, as I notice that it does not only ignore the smoothing information in 3DS file, but also unweld its vertices as the mesh is loaded. The sphere has 89 unique vertices as shown in Milkshape model info. When I try to get the vertex count in Irrlicht, it contains 360 vertices = 120 triangles * 3 vertices per triangle. This seems perfectly logical initially. But on a second thought, it also implies that now the normal of each vertex of each triangle has the same direction where the triangle is facing (in fact, all normals of a triangle will have the same direction), and thus explains the faceted shading above. I know in most 3D engine, the normal of a vertex that is shared among triangles are usually averaged out to produce a smooth shading across triangles.
The following url contains the actual model that I used for testing this. Feel free to test it out.
http://www.objectiveworld.com/tmp/sphere.zip
I am not sure if there is any workaround on this? I tried using RecalculateNormals with smoothing on, it does not improve anything. On examining the implementation of RecalculateNormals, it does average the normals of every vertex. I think the main reason why it does not produce any effect is because 3DS loader in Irrlicht unweld the vertices as the mesh get loaded, and there won't be any shared vertices, i.e. if a vertex is shared by 3 triangles, it will unweld become 3 vertices of the same value by the loader, and thus the RecalculateNormals won't able to average out the normal with other triangles that shared the same vertex normal.
Any ideas how can I get around with this?