noises
play

Noises Jaanus Jaggo Noise Noise is a function: noise(coordinate) - PowerPoint PPT Presentation

Noises Jaanus Jaggo Noise Noise is a function: noise(coordinate) -> value Pseudo-random: gives the appearance of randomness Determinism: same input gives the same result every time White noise ? Dimensions ? Dimensions Better noise


  1. Noises Jaanus Jaggo

  2. Noise Noise is a function: noise(coordinate) -> value Pseudo-random: gives the appearance of randomness Determinism: same input gives the same result every time

  3. White noise ? Dimensions ? Dimensions

  4. Better noise

  5. Combination of noises http://www.blendswap.com/blends/view/80871

  6. Value noise

  7. Perlin noise ● Author: Ken Perlin ● Idea: 1-st Tron movie ● Complexity:

  8. Perlin Implementation 1. Define n-dimensional grid 2. Assign a gradient vector to each grid coordinate ○ Lookup table / texture / hash function 3. Find dot product between the gradient vector and distance vector (2D - 4 products, 3D - 8 products) 4. Interpolate between the dot product values A B C D

  9. Perlin Implementation yellow - positive blue - negative

  10. Pseudocode // Interpolate between grid point gradients float perlin(float x, float y) { float n0, n1, ix0, ix1, value; // Determine grid cell coordinates n0 = dotGridGradient(x0, y0, x, y); int x0 = int(x); n1 = dotGridGradient(x1, y0, x, y); int x1 = x0 + 1; ix0 = lerp(n0, n1, sx); int y0 = int(y); n0 = dotGridGradient(x0, y1, x, y); int y1 = y0 + 1; n1 = dotGridGradient(x1, y1, x, y); ix1 = lerp(n0, n1, sx); // Determine interpolation weights value = lerp(ix0, ix1, sy); // Could also use higher order polynomial/s-curve float sx = x - (float)x0; return value; float sy = y - (float)y0; } 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]); }

  11. Simplex noise ● Author: Ken Perlin ● Complexity: ○ Scales well on high dimensions. Uses simplicial grid ( triangles instead of squares, tetrahedron instead of cubes)

  12. Applications - textures

  13. Creating textures simplex(p) abs(simplex(p)) billow 1 - (abs(simplex(p))) ridged

  14. Creating textures + =

  15. Creating textures Another simplex noise for distortion -> Or use ridged noise instead

  16. Result

  17. Result

  18. Terrain

  19. Level

  20. Animations 3D animated noise: https://www.youtube.com/watch?v=4KOJiQ4jZhY 3D clouds: https://www.shadertoy.com/view/XslGRr Advanced noise optimization in Factorio: https://www.factorio.com/blog/post/fff-112

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend