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 ?
Normal Maps from Subdivision
Started by anubis, Jul 30 2007 08:42 PM
9 replies to this topic
#1
Posted 30 July 2007 - 08:42 PM
If Prolog is the answer, what is the question ?
#2
Posted 31 July 2007 - 03:01 AM
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?
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?
http://www.nutty.ca - Being a nut has its advantages.
#3
Posted 31 July 2007 - 08:49 AM
http://www.gamasutra...0908/lee_01.htm
You need to register to access this one, but it's free, and I've never received any spam from them.
You need to register to access this one, but it's free, and I've never received any spam from them.
#4
Posted 31 July 2007 - 01:58 PM
geon said:
http://www.gamasutra...0908/lee_01.htm
You need to register to access this one, but it's free, and I've never received any spam from them.
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. :)
"Stupid bug! You go squish now!!" - Homer Simpson
#5
Posted 31 July 2007 - 06:05 PM
Quote
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.
If Prolog is the answer, what is the question ?
#6
Posted 31 July 2007 - 06:31 PM
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
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
My music: http://myspace.com/planetarchh <-- my music
My stuff: torus.untergrund.net <-- some diy electronic stuff and more.
My stuff: torus.untergrund.net <-- some diy electronic stuff and more.
#7
Posted 01 August 2007 - 02:53 AM
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.
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.
#8
Posted 15 August 2007 - 09: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 :)
@Nils
That sounds like a neat idea. I'll have to give that a moment of thought :)
If Prolog is the answer, what is the question ?
#9
Posted 15 August 2007 - 10: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.
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.
#10
Posted 15 August 2007 - 05:04 PM
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
If Prolog is the answer, what is the question ?
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users












