Home » Community » Forums » DirectX and XNA » Parallax mapping
  Intel sponsors gamedev.net search:   
[Control Panel] [Register] [Bookmarks] [Who's Online] [Active Topics] [Stats] [FAQ] [Search]

Add Forum to Favorites |  Send Topic To a Friend | View Forum FAQ | Track this topic


 Last Thread Next Thread 
 Parallax mapping
Post New Topic  Post Reply 
I dont really know if this topic fits into the DirectX forum but I hope so since it's about shaders. I just wonder, what is parallax mapping? I know how to make bump mapping and some displacement mapping (to actual change the geometry) but what is parallax mapping? Anyone who has a good link where it's explained cause I couldnt find one



 User Rating: 1015   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Here

That gives a brief description of what parallax mapping is.


 User Rating: 1048   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Also, in case you are interested in an actual implementation, a Parallax Mapping sample has been recently added to the SDK samples. Grab the April '06 SDK to give it a go.

Hope this helps. :)

 User Rating: 1716   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

thank you. Is there any tutorials available somewhere? I've only seen short descriptions when trying to google :(

 User Rating: 1015   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Don't know about a tutorial, but if you google "parallax mapping site:ati.com" you should find a couple of docs. ATI's March SDK contains an article about this.

 User Rating: 1449   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Its quite simple, actually. It only requires a heightmap texture for the shader pass.

float3 vEye = -TBNViewDir;
float fBumpScale = 0.05f;
float2 vCoord = texCoord;

	float fDepth = tex2D(sHeightMapSampler, vCoord).w;
	float2 vHalfOffset = normalize(vEye).xy * (fDepth) * fBumpScale;

	fDepth = (fDepth + tex2D(sHeightMapSampler, vCoord + vHalfOffset).x) * 0.5;
	vHalfOffset = normalize(vEye).xy * (fDepth) * fBumpScale;

	fDepth = (fDepth + tex2D(sHeightMapSampler, vCoord + vHalfOffset).x) * 0.5;
	vHalfOffset = normalize(vEye).xy * (fDepth) * fBumpScale;
	
	return vCoord + vHalfOffset;


Then, sample the diffuse texture and the normal texture using the returned coordinates.

Basically, it samples the height map at the texture coordinate, and offsets the texture coordinates in the direction away from the viewer. I do 3 iterations to get good results. If you only do one, the effect is negligible.

In these 2 screenshots, I have doubled the parallax amount to make the difference clearly visible.


No parallax mapping


Parallax mapping

 User Rating: 1214   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Ah cool, I didn't think about multiple samples/calculations. Does that increase accuracy or create a larger offset?

 User Rating: 1200   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Cadef, in the second screenshot if seems like your parallax mapping goes off to the left. Maybe a projection problem?



 User Rating: 1653   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Multiple samples increase accuracy. If you take 1 sample, it will look wrong.

It is supposed to go off to the left, that is parallax mapping. It might seem a bit wrong, because I exaggerated the parallax scale to make the effect prominent.

 User Rating: 1214   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

So parallax mapping is just about the texture coordinates? Would be great with a little more detailed explanation :)

and does anyone know any links where I can find a simple texture and a nice parallax map to work with :)

[Edited by - whathappened on April 16, 2006 7:25:58 AM]

 User Rating: 1015   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Quote:
and does anyone know any links where I can find a simple texture and a nice parallax map to work with :)


The aforementioned SDK sample...

 User Rating: 1449   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

www.ultimategameprogramming.com has a tutorial about parallelax mapping

 User Rating: 1069   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

where on that page, the article list seems empty to me

 User Rating: 1015   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Yeah, that's one site I'm never going to visit again.

 User Rating: 1449   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

Yes, parallax mapping is just about pushing texture coordinates away from the camera. How far it is pushed, depends on EyeVector * ParallaxMappingScale

 User Rating: 1214   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

thanks :)

 User Rating: 1015   |  Rate This User  Send Private MessageView Profile Report this Post to a Moderator | Link

All times are ET (US)

Post Reply
 Last Thread Next Thread 
Forum Rules:
You may not post new threads
You may post replies
You may not edit your posts
You may not use HTML in your posts
Jump To:
Administrative Options: