Sign in to follow this  
MARS_999

Bumpmapping 2D Texture images

Recommended Posts

http://archive.gamedev.net/archive/reference/articles/article327.html

 

I am trying to figure out, is this a method for making a texture of e.g. stone that is on a 2D game tileset look bumpmapped?

 

I would like to make my 2D game images look like they are normalmapped and was wondering is this approach better suited for 2D games vs. just using a RGB normalmap on a 2D texture that never moves?

 

THanks!

Share this post


Link to post
Share on other sites

Normal Mapping is the only kind of bump mapping, that would make any sense. Every other kind of bump mapping could be baked into the texture itself. But normal mapping only makes sense, if you have actual lights and you want to illuminate the texture with the light. If that's the case, you simply use a BRDF like for example Blinn-Phong and use the direction of the light and the normal from the normal map. Since you would deal with 3-dimensional normals, you might also want to place the light in 3 dimensions. Z=0 would work, but probably looks pretty ugly.

Share this post


Link to post
Share on other sites

Z = 0 does look pretty ugly. But with correct spotlight cone math, shadows and such you can actually do some pretty cool things even with 2D graphics. I'd use the chance to toot my own horn and link you to the game in my signature. 

Share this post


Link to post
Share on other sites

Z = 0 does look pretty ugly. But with correct spotlight cone math, shadows and such you can actually do some pretty cool things even with 2D graphics. I'd use the chance to toot my own horn and link you to the game in my signature. 

Hey those SS looks good! Care to elaborate more on how you are lighting those 2D textures? They are normalmapped?

 

Thanks

Share this post


Link to post
Share on other sites

Yes, the sprites are normal mapped. It is basically just a Deferred Renderer, but being restricted to pure 2D graphics gives you quite some freedom to fool around with the data.

 

The renderer does:

 

- one pass to render out diffuse 

- one pass to render out screen-space normals

- one pass to render out "extra" data: R height, G shadow density, B monochrom specular intensity

- two passes to calculate ambient occlusion from the per-pixel heights

- one pass per light to render out the per-pixel heights (downscaled 1:4)

- four passes per light to calculate the per-pixel shadow heights (downscaled as well)

- one pass to accumulate the lighting from all lights - default procedure with dot3 against screen-space normal while comparing the per-pixel height with the light's shadow height to determine if the pixel is in shadow or not

- one fullscreen pass to add ambient light modulated with the ambient occlusion, gamma-correct the resulting per-pixel light and multiply the result with the diffuse and add the specular texture

- additional pass to render self-illumimated graphics

- send everything though post processing, which is currently just a vignette and some colour grading

 

So it's actually just a simple dot3 normal mapping, but gamma correction, ambient occlusion and doing the lighting calculations with real 3D coordinates (Z coming from per-pixel height) goes a long way for achieving believable lighting. Don't underestimate the effect of a proper per-pixel height in all of your graphics! It might seem unimportant because it's invisible under an orthogonal projection, but aside from the shadows it also helps a lot in lighting calculations. Especially narrow spot lights profit a lot from correct 3D positioning of the pixels to be lit. It looks great when the player glances around with his spotlight and furniture in front of him lights up that otherwise would stay dark.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this