1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| float perlin_noise(float2 pos) { int2 p00 = floor(pos); int2 p01 = p00 + int2(0, 1); int2 p10 = p00 + int2(1, 0); int2 p11 = p00 + int2(1, 1);
float2 lerp_factor = pos - p00;
float2 gradient00 = compute_gradient(p00); float2 gradient01 = compute_gradient(p01); float2 gradient10 = compute_gradient(p10); float2 gradient11 = compute_gradient(p11);
float v00 = dot(pos - (float2)p00, gradient00); float v01 = dot(pos - (float2)p01, gradient01); float v10 = dot(pos - (float2)p10, gradient10); float v11 = dot(pos - (float2)p11, gradient11);
float v0 = lerp(v00, v01, lerp_factor.y); float v1 = lerp(v10, v11, lerp_factor.y); float v = lerp(v0, v1, lerp_factor.x);
return v; } |
评论