Jump to content


Normal Maps from Subdivision


  • You cannot reply to this topic
9 replies to this topic

#1 anubis

    Senior Member

  • Members
  • PipPipPipPip
  • 2225 posts

Posted 30 July 2007 - 08: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 ?
If Prolog is the answer, what is the question ?

#2 TheNut

    Senior Member

  • Moderators
  • 1473 posts
  • LocationThornhill, ON

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?
http://www.nutty.ca - Being a nut has its advantages.

#3 geon

    Senior Member

  • Members
  • PipPipPipPip
  • 893 posts

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.

#4 Kenneth Gorking

    Senior Member

  • Members
  • PipPipPipPip
  • 911 posts

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.

...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 anubis

    Senior Member

  • Members
  • PipPipPipPip
  • 2225 posts

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 Nils Pipenbrinck

    Senior Member

  • Members
  • PipPipPipPip
  • 597 posts

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
My music: http://myspace.com/planetarchh <-- my music

My stuff: torus.untergrund.net <-- some diy electronic stuff and more.

#7 rouncer

    Senior Member

  • Members
  • PipPipPipPip
  • 2336 posts

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.

#8 anubis

    Senior Member

  • Members
  • PipPipPipPip
  • 2225 posts

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 :)
If Prolog is the answer, what is the question ?

#9 yakul

    Member

  • Members
  • PipPip
  • 55 posts

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.

#10 anubis

    Senior Member

  • Members
  • PipPipPipPip
  • 2225 posts

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