# schneckerstein

Member

1

0 Neutral

• Rank
Newbie

• Interests
Art
Audio
Design
Production
Programming

## Social

schneckerstein
1. ## DX11 Need help implementing NDF-Filtering + LEAN mapping

Hello, I manged so far to implement NVIDIA's NDF-Filtering at a basic level (the paper can be found here). Here is my code so far: //... // project the half vector on the normal (?) float3 hppWS = halfVector / dot(halfVector, geometricNormal) float2 hpp = float2(dot(hppWS, wTangent), dot(hppWS, wBitangent)); // compute the pixel footprint float2x2 dhduv = float2x2(ddx(hpp), ddy(hpp)); // compute the rectangular area of the pixel footprint float2 rectFp = min((abs(dhduv[0]) + abs(dhduv[1])) * 0.5, 0.3); // map the area to ggx roughness float2 covMx = rectFp * rectFp * 2; roughness = sqrt(roughness * roughness + covMx); //... Now I want combine this with LEAN mapping as state in Chapter 5.5 of the NDF paper. But I struggle to understand what theses sections actually means in Code: I suppose the first-order moments are the B coefficent of the LEAN map, however things like float3 hppWS = halfVector / dot(halfVector, float3(lean_B, 0)); doesn't bring up anything usefull. Next theres: This simply means: // M and B are the coefficents from the LEAN map float2x2 sigma_mat = float2x2( M.x - B.x * B.x, M.z - B.x * B.y, M.z - B.x * B.y, M.y - B.y * B.y); does it? Finally: This is the part confuses me the most: how am I suppose to convolute two matrices? I know the concept of convolution in terms of functions, not matrices. Should I multiple them? That didn't make any usefully output. I hope someone can help with this maybe too specific question, I'm really despaired to make this work and i've spend too many hours of trial & error... Cheers, Julian