рдкреЗрд░реНрд▓рд┐рди рдХреА рдлрдЬреА рджреБрдирд┐рдпрд╛ рд╢реЛрд░ рдХреА

рдЫрд╡рд┐

рдкреЗрд░рд▓рд┐рди рд╢реЛрд░ рдХреНрдпрд╛ рд╣реИ?


рдкреЗрд░рд▓рд┐рди рдХреЗ рд╢реЛрд░ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ 1983 рдореЗрдВ рдХреЗрди рдкреЗрд░рд▓рд┐рди (рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдЙрдкрд▓рдмреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдЕрдореЗрд░рд┐рдХрди рдПрдХреЗрдбрдореА рдСрдл рдореЛрд╢рди рдкрд┐рдХреНрдЪрд░ рдЖрд░реНрдЯреНрд╕ рдПрдВрдб рд╕рд╛рдЗрдВрд╕реЗрдЬ рд╕реЗ рдПрдХ рдкреБрд░рд╕реНрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдерд╛) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ, рдЙрди рджрд┐рдиреЛрдВ рд╣рд░ рдХреЛрдИ рдлреЛрдЯреЛрд░рд┐рдЕрд▓рд┐рдЬрд╝реНрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрдореА рдереАред рдХреЗрди рдкреЗрд░реНрд▓рд┐рди рдиреЗ 3 рдбреА рдореЙрдбрд▓реЛрдВ рдХреЗ рджрдпрдиреАрдп "рдХрдВрдкреНрдпреВрдЯрд░" рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╢реЛрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ред рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЗрдВ рд╢реЛрд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рд╣реИред рдпрд╣ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ, рдЕрд╕рдВрд░рдЪрд┐рдд рдкреИрдЯрд░реНрди рд╣реИ, рдФрд░ рдпрд╣ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ 1 рдХреА рдХрдореА рд╡рд╛рд▓реЗ рд╡рд┐рд╕реНрддреГрдд рднрд╛рдЧреЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд░реНрд▓рд┐рди рд╢реЛрд░ рдПрдХ рдмрд╣реБрдЖрдпрд╛рдореА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреАрдврд╝реА, рдмрдирд╛рд╡рдЯ, рдЗрд▓рд╛рдХреЗ рдХреА рдкреАрдврд╝реА, рдорд╛рдирдЪрд┐рддреНрд░ рдкреАрдврд╝реА, рд╕рддрд╣ рдкреАрдврд╝реА, рд╢реАрд░реНрд╖ рдкреАрдврд╝реА, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЖрдЧреЗ рдФрд░ рдЖрдЧреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд░реНрд▓рд┐рди рд╢реЛрд░ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рд╕реАрдорд╛ рджрд░реНрд╢рд╛рдИ рдЧрдИ рд╣реИ:

рдЖрдпрд╛рдореА рд╕реНрд╡рд░реВрдкрдХрдЪреНрдЪрд╛ рд╢реЛрд░ (рдЧреНрд░реЗрд╕реНрдХреЗрд▓)рдЖрд╡реЗрджрди
1

рд╣рд╛рде рд╕реЗ рдЦреАрдВрдЪреА рд╣реБрдИ рд╡реЗрдХреНрдЯрд░ рд╡рд╕реНрддреБрдПрдВ
2
рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдмрдирд╛рд╡рдЯ рдФрд░ рдЬреНрд╡рд╛рд▓рд╛ рдЬреИрд╕реА рд╡рд╕реНрддреБрдПрдВ
3
рдорд╛рдЗрдирдХреНрд░рд╛рдлреНрдЯ рд░рд╛рд╣рдд рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдкреЗрд░рд▓рд┐рди рд╢реЛрд░

рдкреЗрд░реНрд▓рд┐рди рдиреЗ рд╢реЛрд░ рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛ рджреА: рд╢реЛрд░ рд╢реНрд╡реЗрдд рд╢реЛрд░ рдХрд╛ рдПрдХ рд╕рдиреНрдирд┐рдХрдЯрди рд╣реИ, рдЬреЛ рдПрдХ рд╕рдкреНрддрдХ 3 рдХреА рд╕реАрдорд╛ рддрдХ рд╕реАрдорд┐рдд рд╣реИред рд╢реЛрд░ рдХреА рдФрдкрдЪрд╛рд░рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

fN(y1,y2, cdots,yn;x1,x2, cdots,xn)=P(N(x1),N(x2), cdots,N(xn))


рдЬрд╣рд╛рдБ рдПрди(рдПрдХреНрд╕)- рд╢реЛрд░ рд╕рдорд╛рд░реЛрд╣ред рдкреЗрд░рд▓рд┐рди рдХрд╛ рд╢реЛрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реЛрд░ рд╣реИред "рд╡рд┐рд╢реЗрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред" 4 рдпрд╣реА рд╣реИ, рдХреБрдЫ рдЙрддреНрдкрдиреНрди , рдФрд░ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╢реЛрд░ рдкреИрджрд╛ рдХрд░рдирд╛? рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реЛрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ , рдЕрд░реНрдерд╛рддреН рдХрдо рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИред рдпрд╣ рдЕрд╡рд░реНрдгрдиреАрдп рд╣реИ , рдЕрд░реНрдерд╛рдд рдЕрдкрд╛рдорд╛рд░реНрдЧ ред рдпрд╣ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рд╣реИ , рдЗрд╕реЗ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХрдИ рдЕрдиреНрдп рдлрд╛рдпрджреЗ рднреА рд╣реИрдВ рдЬреЛ рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ ... рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╣рдорд╛рд░рд╛ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ - рдХрд▓рд╛рдХрд╛рд░ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛? рдХрд▓ рдореИрдВрдиреЗ рдЖрдлреНрдЯрд░ рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдмрдирд╛рдпрд╛, рдЬреЛ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрд╕рдореЗрдВ рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рд╣рд┐рддреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦрд╛, рдХреЗрд╡рд▓ рдореЗрд░реЗ рдЕрд╣рдВрдХрд╛рд░ рдХреЗ рд╣рд┐рддреЛрдВ рдХрд╛, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рд╕рдмрдХ рдХреЛ рд╕рдордЭрд╛: рдХрд▓рд╛рдХрд╛рд░ рдХреА рд╕реЗрд╡рд╛ рдХрд░реЛ, рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдирд╣реАрдВред

рдкреЗрд░рд▓рд┐рди рд╕реЗ рдкрд╣рд▓реЗ, рдЭрдВрдЭрд░реА рдХреЗ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХрд╛ рд╢реЛрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд╡реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рдХреНрд╖реЗрдк рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдП рдереЗ, рдФрд░ рдкреЗрд░рд▓рд┐рди рд╢реЛрд░ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрдпреВрдмрд┐рдХ рдЬрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реНрдкрд▓рд╛рдЗрди рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред "рдПрдХ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдврд╛рд▓ рдЬрд╛рд▓реА рдмрд┐рдВрджреБ рд╕реЗ рд╣реИрд╢рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдврд╛рд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред" рдпреЗ рд╣реИрд╢ 12 рд╡реИрдХреНрдЯрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрдВрджреНрд░ рд╕реЗ рдХрд┐рдирд╛рд░реЛрдВ рддрдХ рдкрд╛рдВрдЪрд╡реЗрдВ рдбрд┐рдЧреНрд░реА рдХреЗ рдмрд╣реБрдкрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд╣реИ рдирд╛? рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛред рдореИрдВ рдЗрд╕реЗ рдЪрд┐рддреНрд░ 6 рдореЗрдВ рдФрд░ рдЫрджреНрдо рдХреЛрдб 7 рдореЗрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред


"" рдкрд╛рдВрдЪрд╡реАрдВ рдбрд┐рдЧреНрд░реА рдХреЗ рдмрд╣реБрдкрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдХрд┐рдирд╛рд░реЛрдВ рддрдХ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ "

рдФрд░ рдпрд╣рд╛рдБ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рдкреЗрд░реНрд▓рд┐рди рд╕реНрдпреВрдбреЛрдХреЛрдб рд╣реИ:

// Function to linearly interpolate between a0 and a1 // Weight w should be in the range [0.0, 1.0] float lerp(float a0, float a1, float w) { return (1.0 - w)*a0 + w*a1; // as an alternative, this slightly faster equivalent formula can be used: // return a0 + w*(a1 - a0); } // Computes the dot product of the distance and gradient vectors. float dotGridGradient(int ix, int iy, float x, float y) { // Precomputed (or otherwise) gradient vectors at each grid node extern float Gradient[IYMAX][IXMAX][2]; // Compute the distance vector float dx = x - (float)ix; float dy = y - (float)iy; // Compute the dot-product return (dx*Gradient[iy][ix][0] + dy*Gradient[iy][ix][1]); } // Compute Perlin noise at coordinates x, y float perlin(float x, float y) { // Determine grid cell coordinates int x0 = int(x); int x1 = x0 + 1; int y0 = int(y); int y1 = y0 + 1; // Determine interpolation weights // Could also use higher order polynomial/s-curve here float sx = x - (float)x0; float sy = y - (float)y0; // Interpolate between grid point gradients float n0, n1, ix0, ix1, value; n0 = dotGridGradient(x0, y0, x, y); n1 = dotGridGradient(x1, y0, x, y); ix0 = lerp(n0, n1, sx); n0 = dotGridGradient(x0, y1, x, y); n1 = dotGridGradient(x1, y1, x, y); ix1 = lerp(n0, n1, sx); value = lerp(ix0, ix1, sy); return value; } 

рдпрд╣ рднреА рдЬрд╛рдирдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ тАЬрдкрд░рд▓рд┐рди рд╢реЛрд░ рдФрд░ рджреБрд░реНрд▓рдн рдХрдирдлреНрд▓реВрдПрдВрд╕ рд╢реЛрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╕рднреА рд╢реЛрд░ рдХрд╛рд░реНрдп рд▓рдЧрднрдЧ рдкрдЯреНрдЯреА рдХреА рддрд░рд╣ рд╣реИрдВред рдкреЗрд░рд▓рд┐рди рдХрд╛ рд╢реЛрд░ рдХреЗрд╡рд▓ рдХрдордЬреЛрд░-рдмреИрдВрдб рд╣реИ, рдЬреЛ рд╡рд┐рдХреГрддрд┐ рдФрд░ рд╡рд┐рд╡рд░рдг рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред тАЭ 8 рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреЗрд░реНрд▓рд┐рди рд╢реЛрд░ рдХрд╛ рдХреЛрдИ рдЧреМрд╕рд┐рдпрди рдЖрдпрд╛рдо рд╡рд┐рддрд░рдг рдирд╣реАрдВ рд╣реИред рдпрд╣реА рд╣реИ, рдЧреЙрд╕рд┐рдпрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╢реЛрд░ рд╕реНрдкреЙрдЯ рдмрд┐рдЦрд░реЗ рд╣реБрдП рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдирд╣реАрдВ рдорд╛рдиреЗрдВрдЧреЗред рдРрд╕реА рдХрдИ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдкреЗрд░реНрд▓рд┐рди рдмрд╣реБрдд рд╕рд╣рдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╡рд╣ рдмрд╣реБрдд рдХрдордЬреЛрд░ рд╣реИред рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред



рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░рд▓рд┐рди рд╢реЛрд░: рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рддреЛ, рдЪрд▓реЛ GLSL рдкрд░ рдкреЗрд░рд▓рд┐рди рдХреЗ рд╢реЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдкрд░реНрд▓рд┐рди рд╢реЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдлреИрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдлреИрд▓рд╛рдирд╛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ, рдЯрд┐рдордЯрд┐рдорд╛рддреЗ рдкреНрд░рдХрд╛рд╢ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╛ рдмрдирд╛рд╡рдЯ рдкрд░ рдзрдмреНрдмреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд░рдВрдЧ рдХреА рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИ, рдореИрдВ рдПрдХ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд▓рд┐рдП рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ After Effects рдЬреЛ рдХрд┐ рдкреЗрд░рд▓рд┐рди рд╢реЛрд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдкреЗрд░рд▓рд┐рди рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╢реЛрд░ 10 рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 float rand(vec2 c){ return fract(sin(dot(c.xy ,vec2(12.9898,78.233))) * 43758.5453); } float noise(vec2 p, float freq ){ float unit = screenWidth/freq; vec2 ij = floor(p/unit); vec2 xy = mod(p,unit)/unit; //xy = 3.*xy*xy-2.*xy*xy*xy; xy = .5*(1.-cos(PI*xy)); float a = rand((ij+vec2(0.,0.))); float b = rand((ij+vec2(1.,0.))); float c = rand((ij+vec2(0.,1.))); float d = rand((ij+vec2(1.,1.))); float x1 = mix(a, b, xy.x); float x2 = mix(c, d, xy.x); return mix(x1, x2, xy.y); } float pNoise(vec2 p, int res){ float persistance = .5; float n = 0.; float normK = 0.; float f = 4.; float amp = 1.; int iCount = 0; for (int i = 0; i<50; i++){ n+=amp*noise(p, f); f*=2.; normK+=amp; amp*=persistance; if (iCount == res) break; iCount++; } float nf = n/normK; return nf*nf*nf*nf; } 


 #define M_PI 3.14159265358979323846 float rand(vec2 co){return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);} float rand (vec2 co, float l) {return rand(vec2(rand(co), l));} float rand (vec2 co, float l, float t) {return rand(vec2(rand(co, l), t));} float perlin(vec2 p, float dim, float time) { vec2 pos = floor(p * dim); vec2 posx = pos + vec2(1.0, 0.0); vec2 posy = pos + vec2(0.0, 1.0); vec2 posxy = pos + vec2(1.0); float c = rand(pos, dim, time); float cx = rand(posx, dim, time); float cy = rand(posy, dim, time); float cxy = rand(posxy, dim, time); vec2 d = fract(p * dim); d = -0.5 * cos(d * M_PI) + 0.5; float ccx = mix(c, cx, dx); float cycxy = mix(cy, cxy, dx); float center = mix(ccx, cycxy, dy); return center * 2.0 - 1.0; } // p must be normalized! float perlin(vec2 p, float dim) { /*vec2 pos = floor(p * dim); vec2 posx = pos + vec2(1.0, 0.0); vec2 posy = pos + vec2(0.0, 1.0); vec2 posxy = pos + vec2(1.0); // For exclusively black/white noise /*float c = step(rand(pos, dim), 0.5); float cx = step(rand(posx, dim), 0.5); float cy = step(rand(posy, dim), 0.5); float cxy = step(rand(posxy, dim), 0.5);*/ /*float c = rand(pos, dim); float cx = rand(posx, dim); float cy = rand(posy, dim); float cxy = rand(posxy, dim); vec2 d = fract(p * dim); d = -0.5 * cos(d * M_PI) + 0.5; float ccx = mix(c, cx, dx); float cycxy = mix(cy, cxy, dx); float center = mix(ccx, cycxy, dy); return center * 2.0 - 1.0;*/ return perlin(p, dim, 0.0); } 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкреЗрд░рд▓рд┐рди рдХреЗ рд╢реЛрд░ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬрд┐рд╕реЗ 2002 рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдВ рдХрд┐ рдкреЗрд░реНрд▓рд┐рди рдХрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рд╢реЛрд░ рдХреИрд╕рд╛ рд╣реИред

рдЦреИрд░, рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдПрдХ рдЫреЛрдЯреА рдкреЛрд╕реНрдЯ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдореВрд▓ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореИрдВрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рд░реЗрдВрдбрд░рд┐рдВрдЧ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИред рдпрд╣ рдкреБрд╕реНрддрдХ рд╕реАрдЦрдиреЗ рдФрд░ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рднрд░реА рд╣реИред рдореИрдВ рдЙрд╕рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБ!


рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рдореИрдВ рдПрдХ рдФрд░ рдХрд┐рддрд╛рдм рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ - рдлрдВрдбрд╛рдореЗрдВрдЯрд▓ рдСрдл рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ ред рдореИрдВ рдЗрдВрдкреНрд▓рд╛рдВрдЯ рдХрд░реНрд╡реНрд╕ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдереЛрдбрд╝рд╛ рдЕрдЯрдХ рдЧрдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдиреЗ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рд╕реЗ рдЧрдгрд┐рдд рдореЗрдВ рдкреАрдПрдЪрдбреА рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реВрдВрдЧрд╛ред


рд╕рдВрджрд░реНрдн рд╕рд╛рдордЧреНрд░реА


  • рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реЛрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг, рдХрдВрдкреНрдпреВрдЯрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдлреЛрд░рдо, рд╡реЙрд▓реНрдпреВрдо 29 (2010), рдирдВрдмрд░ 8, рдкреАрдкреА 2379-2600
  • рдХреБрд╢рд▓ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╢реЛрд░, рдЬрд░реНрдирд▓ рдСрдлрд╝ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЯреВрд▓реНрд╕ рд╡реЙрд▓реНрдпреВрдо 16, рдирд╣реАрдВред 2: 85-94

  1. рдП рд╕рд░реНрд╡реЗ, рдПрдЯ рдЕрд▓
  2. flafla2.imtqy.com/2014/08/09/perlinnoise.html
  3. рдПред рд▓рдЧреБрдП рдПрдЯ рдЕрд▓
  4. рдПред рд▓рдЧреИ, рдПрдЯ рдЕрд▓
  5. рдПред рд▓рдЧреИ, рдПрдЯ рдЕрд▓
  6. Flafla2.imtqy.com/2014/08/09/perlinnoise.html рд╕реЗ
  7. рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ
  8. рдПред рд▓рдЧреИ, рдПрдЯ рдЕрд▓
  9. рдПред рд▓рдЧреНрдЧреЗ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд, рдПрдЯ рдЕрд▓
  10. gist.github.com/patriciogonzalezvivo/670c22f3966e662d2f83

Source: https://habr.com/ru/post/hi441312/


All Articles