views:

1039

answers:

3

When I light my human model in OpenGL using face normals it is very apparent where each face is on the model. The lighting becomes considerably smoother using vertex normals but still noticeable. Is there any technique available to smooth organic models without adding additional vertices (ex. subdivisions)?

+2  A: 

If you've got access to a higher resolution model/mesh or perhaps a decent 3d modeling tool that can create a highres model via subdivisions or other fancy methods...

GLSL per-pixel-lighting + normal maps

UPDATE:

http://www.blender.org/development/release-logs/blender-246/render-baking/

basszero
I'm using Blender. I keep my model low-poly for performance reasons. Phong shading seems promising but its not supported by OpenGL and the advantage wouldn't warrant the performance hit.
Kai
If this isn't an OpenGL ES 1.1 question (e.g. iPhone) your hardware probably supports shaders and you can write a shader that implements phong shading + normal mapping.
Maurice Gilden
Right, you create a highres model in Blender and use it to generate a normal map. The create a lower res version and use the normal map + shaders to create the missing vertex detail in the final rendered product
basszero
A: 

Yes there are many different techniques. One is to first calculate a normal for each face (which you probably are using for the vertices in the face) and use these normals to calculate new normals for each vertex.

Here's one where you calculate the average of five adjacent triangles.

Cheers !

Magnus Skog
+3  A: 

If you are seeing single faces with per vertex normals you might have forgotten to enable smooth facing:

glShadeModel(GL_SMOOTH);

If that's not helping make sure all vertices with the same position also have the same normal. This should be done by blender automatically however. It's also possible that your model has just too few polygons. If that's the case you either have to use more polygons or do what basszero said. Create a normal map and use that together with a GLSL shader.

Maurice Gilden