Original Post
When I study parallax occlusion mapping from ATI's paper "Practical Parallax Occlusion Mapping For Highly Detailed Surface Rendering", i find the paper didn't provide a source code demo(you may tell me: you can find ATI's demo "ToyShop"). Unluckily, first i have a NVidia 8600GT Card(not a AMD-ATI Card), i cannot run the demo; second, that demo is just a demo(doesn't have any source code). However, there is a "Practical Parallax Occlusion Mapping sample" in D3D9 SDK, but i have some question about that sample, when it computes the softshadow effect: // vLightTS is the normalize light vector in tangent space float2 vLightRayTS = vLightTS.xy * g_fHeightMapScale; float sh0 = tex2Dgrad( tNormalHeightMap, texSampleBase, dx, dy ).a; float shA = (tex2Dgrad( tNormalHeightMap, texSampleBase + vLightRayTS * 0.88, dx, dy ).a - sh0 - 0.88 ) * 1 * g_fShadowSoftening; float sh9 = (tex2Dgrad( tNormalHeightMap, texSampleBase + vLightRayTS * 0.77, dx, dy ).a - sh0 - 0.77 ) * 2 * g_fShadowSoftening; float sh8 = (tex2Dgrad( tNormalHeightMap, texSampleBase + vLightRayTS * 0.66, dx, dy ).a - sh0 - 0.66 ) * 4 * g_fShadowSoftening; float sh7 = (tex2Dgrad( tNormalHeightMap, texSampleBase + vLightRayTS * 0.55, dx, dy ).a - sh0 - 0.55 ) * 6 * g_fShadowSoftening; float sh6 = (tex2Dgrad( tNormalHeightMap, texSampleBase + vLightRayTS * 0.44, dx, dy ).a - sh0 - 0.44 ) * 8 * g_fShadowSoftening; float sh5 = (tex2Dgrad( tNormalHeightMap, texSampleBase + vLightRayTS * 0.33, dx, dy ).a - sh0 - 0.33 ) * 10 * g_fShadowSoftening; float sh4 = (tex2Dgrad( tNormalHeightMap, texSampleBase + vLightRayTS * 0.22, dx, dy ).a - sh0 - 0.22 ) * 12 * g_fShadowSoftening; // Compute the actual shadow strength: fOcclusionShadow = 1 - max( max( max( max( max( max( shA, sh9 ), sh8 ), sh7 ), sh6 ), sh5 ), sh4 ); // The previous computation overbrightens the image, let's adjust for that: fOcclusionShadow = fOcclusionShadow * 0.6 + 0.4; who can help me?