thoughts on: bumpmap+geom. LOD

Started by
6 comments, last by yodaman 19 years, 6 months ago
I have in no way developed this, for I am not a graphics guru... with that outta the way: Has anyone attempted to use bumpmaps together with morphing geometry LOD? i was thinking, since nowadays bumpmaps CAN be mipmapped and filtered, and also its possible to create custom mipmaps, could we bring back the between-LOD-levels geometric morphing? should go something like this: create high-res model create max LOD mesh, obtain bumpmap projecting high-res model normals into this one create lower LOD mesh, obtain bumpmap from high-res model ... create minimum LOD mesh, obtain bumpmap from high-res model then use the minimum LOD bumpmap to create the rest of the mipmaps on rendering, interpolate geometry between LODs, and interpolate between the bumpmaps (each bumpmap is a hand-crafted mipmap). Would this work? would it look good? comments! ideas! anyone daring enough to try it?
Working on a fully self-funded project
Advertisement
i think I read something on b3d along these lines. It has been tried - but you can introduce noticeable visual artifacts into the final image.

The most obvious artifact is that the normals can cease to be unit vectors during the transition. However, this can be solved by renormalizing in the shader though.

There was something else about the way the geometry and texture changes granularity at different rates - so you effectively get incorrect normal mapping over a given LOD mesh.

There weren't any screenshots posted in the thing I read, so it may well be that these are minor points, but I would imagine it'd look a bit odd in places.

hth
Jack

<hr align="left" width="25%" />
Jack Hoxley <small>[</small><small> Forum FAQ | Revised FAQ | MVP Profile | Developer Journal ]</small>

Quote:create high-res model
create max LOD mesh, obtain bumpmap projecting high-res model normals into this one
create lower LOD mesh, obtain bumpmap from high-res model

This is effectively what I do in my terrain engine. I generate a single normal map for each terrain patch, from the max LOD mesh. I then use this normal map for all lower LOD mesh as well.

I found that using a single normal map for the all LOD levels reduces the affect of vertex popping between LOD transitions, and thats without geomorphing. As I read in some other thread a while ago, I think this is because the human eye is more sensitive to changes in light than it is to motion (same principal as camouflage I suppose).

The disadvantage of this approach is that the resolution of your normal map is limited by the resolution of you max LOD mesh. For my purposes this is wasn't really a problem, but for particularly large terrains, your going to have to generate more/larger normal maps which is obviously going to take more time.

I haven't implemented geomorphing so I don't know how difficult it is. Based on my limited experience, I would suggest to try normal/bump mapping and then see how noticeable the vertex popping is. If your unsatisfied then implement morphing as well.

Hope that helps in some way.
Quote:
I found that using a single normal map for the all LOD levels reduces the affect of vertex popping between LOD transitions, and thats without geomorphing. As I read in some other thread a while ago, I think this is because the human eye is more sensitive to changes in light than it is to motion (same principal as camouflage I suppose).


this sounds workable for a heightmap, i'd figure you gauge incoming light on the geometry with a plane normal and make it the same for the whole heightmap, and then render using the light calculated with the bumpmap. if the resolution of the mesh is the same of the bumpmap, this should be identical to vertex light.

On a model, by extension, you would only see popping on the silhouette, and if morphing no popping at all.

However, with a model you don't have the plane normal to get the overall angle. You could use some rounded primitives, but then you'd be forced to have only convex geometry.
While this is the case with most skeletal models (per limb), its still somewhat restrictive (hands... weapons..).


Quote:
There was something else about the way the geometry and texture changes granularity at different rates - so you effectively get incorrect normal mapping over a given LOD mesh.


oh you're probably right... a linear vs non-linear thing im sure.
Could one introduce this rate into the fragment shader? after all, its distance-based, not time-based.

Why would anyone want to do this? well the same reason for the original LOD work, to have a bunch of characters onscreen and have detail only when you need it.

btw im not implementing this (not myself at least =P maybe our gfx guy) but just felt like bouncing the idea. Thanks for the thoughts.
Working on a fully self-funded project
Yes, I exploited a similar idea for my terrain engine. It was all fractal. I could extrapolate any chunk of height map to any level. Thus max detail was in statically rendered bumped maps in texture space. I used intermediate levels of height map extrapolation for the geometry and higher level for the bump. All this with CLOD and geomorphing for geometry and hardware trilinear filtering for bumpmap 'morphing'.

So bump maps helped have a visual illusion of many more triangles. Note that there was also self shadowing in the bump maps, not only specular lighting.
"Coding math tricks in asm is more fun than Java"
Quote:Original post by Charles B
Yes, I exploited a similar idea for my terrain engine. It was all fractal. I could extrapolate any chunk of height map to any level. Thus max detail was in statically rendered bumped maps in texture space. I used intermediate levels of height map extrapolation for the geometry and higher level for the bump. All this with CLOD and geomorphing for geometry and hardware trilinear filtering for bumpmap 'morphing'.

So bump maps helped have a visual illusion of many more triangles. Note that there was also self shadowing in the bump maps, not only specular lighting.

I'd love to see a pictar, if there's one available :)

Did it 2 or 3 years ago.
"Coding math tricks in asm is more fun than Java"
I once mentioned the same idea. Instead of creating two models, a high res and a low res in order to get the bump map, simply create a high res and then apply a lod algo and voilet. That must have been about a year ago now.
www.jinx.com www.thebroken.org www.suprnova.org www.mozilla.org

This topic is closed to new replies.

Advertisement