PDA

View Full Version : Normal Maps from Subdivision


anubis
07-30-2007, 01:42 PM
I just had this idea going about in my head. Usually with normal mapping techniques, the maps are computed from complex models. Afterwards the complexity of the model is reduced and the normal map applied to it, in order to get the appearance of the complex model back.

My idea was to start out with a simple model and apply a subdivision process to it. But instead of actually subdividing the model, changes in the model's topology are stored in a normal map. The result would be a virtual subdivision surface of the model, with similar results than the usual normal mapping. Since subdivision schemes do alter the topology heavily, depending on the subdivision scheme and granularity of the initial model this approach likely has some limitations but might still work in a lot of cases (I think this approach will totally fail on models with very sharp edges, since most subdivision schemes deform the model pretty heavily if edges get too sharp. Also one might have to limit the possible subdivision schemes to those that are interpolating, rather than approximating).

Any comments on the idea or other suggestions ?

TheNut
07-30-2007, 08:01 PM
Subdivision is good at smoothing out results, but it requires an artist's touch to mold it into something meaningful. Take for example the human abdomen. Let's say he has a six pack. The high poly version would have smooth curvature between muscles whereas the low poly one would reduce that to a flat square. Subdividing that square (depending on the algo) would either turn it into a belly or just tessellate the square into a rounded rectangle.

Perhaps if someone would like to compress their normal map (ie: reduced resolution), they could apply a subdivision algorithm in the GPU to restore or even enhance the detail of the original version. Perhaps the benefits of using less texture memory and bandwidth might prove more beneficial at the expense of utilizing more of the already to powerful GPU ;)

What's your aim out of this?

geon
07-31-2007, 01:49 AM
http://www.gamasutra.com/features/20000908/lee_01.htm

You need to register to access this one, but it's free, and I've never received any spam from them.

Kenneth Gorking
07-31-2007, 06:58 AM
http://www.gamasutra.com/features/20000908/lee_01.htm

You need to register to access this one, but it's free, and I've never received any spam from them.

...or replace the _01 part with _pfv. I notified them about this 2 years ago, but they don't seem to care. :)

anubis
07-31-2007, 11:05 AM
What's your aim out of this?

Nothing really. I was just toying with an algorithm to do this in my head. I was hoping to discuss possible uses here :)

For one different subdivision steps could be stored in normal maps of different resolutions. Subdivision is actually quite efficient so in situations where you don't have small detail but rather smooth features on a model using subdivision to generate the normal maps might be faster. Subdivision is difficult to implement in an adaptive way because most subdivision schemes rely on a neighborhood around a vertex to alter it's position, so it might be a boon if you could get to a visual approximation of the subdivision surface without having to store or even compute the full subdivision mesh.

Nils Pipenbrinck
07-31-2007, 11:31 AM
Hi Anubis,

just a thought:

Generate your normal map-atlas for the lowres-model as usual. When filling the texels you usually just interpolate the normals over each triangle lineary, renormalize them and store them in the normal-map format of your choice (I think that's the usual way to do it, doesn't it? It's been a while since I've worked with them....).

You could improve on this and get a smoother appearance if you interpolate the normals using spherical linear interpolation. Barycentric coordinates as weights for the slerp would work very well. If you build your vertex normals taking smoothing groups into account that should give you a nice and round appearance without doing any subdivision steps at all.

This would again turn a six-pack into a titty-twisters daydream, but maybe you can missuse a vertex color alpha channel to blend the interpolated normals between ordinary normal-map and slerp-style normal map.

You can apply an existing normal map (maybe part of the diffuse texture) to perturb the final (baked) normal-map as well. That'll give your models a bit more roughness and detail.

Nils

rouncer
07-31-2007, 07:53 PM
subdivision with no averaging and storing that in a normal map - the model
comes out with defined edges, you can get a similar effect by just ringlooping
each triangle separately and you get nice rims that specular shines well off.
i made a cute little game using this, i combined it with a manually drawn bump
map and it looks nice for mechanical objects.

it sorta turns them into simple zbrush models.

anubis
08-15-2007, 02:56 AM
Sorry, for the late reply. I was busy looking for a new flat in Hamburg. Taking the train to Hamburg every other day really consumes ****loads of time right now. Anyhow...

@Nils

That sounds like a neat idea. I'll have to give that a moment of thought :)

yakul
08-15-2007, 03:27 AM
If I understand correctly what you are trying to do, there is a problem with that.
Usually the low poly model that is ment to be subdivided, is not the low poly model used in the actual game. The model before subdivision have exagerated shape, or vertices placement so the subdivision result will be appropriate.
That is why the low poly mesh before the subdivision is not used as the low poly mesh in the game itself, but rather the game mesh is generated from the high poly mesh by reducing it's polygons.

anubis
08-15-2007, 10:04 AM
I guess that would largely depend on the subdivision scheme used. Clearly you can't use the simple model if your subdivision scheme is non interpolating. However I understand what you mean and care has to be taken in that respect