The Art of Procedural Noise

  Рет қаралды 46,826

Vojtěch Pröschl

Vojtěch Pröschl

Күн бұрын

Deep dive into the topic of procedural noise from a unique perspective. We explore its origins, properties, applications, and more!
Resources for further exploration:
- [1], [2] - Great starting point if you want to explore ideas of the frequency domain. Both monographs are focused on computer vision. However, those foundations apply to a wide range of fields. Besides notes, there are recorded lectures, and Professor Nayar is an excellent teacher!
- [3] - This entire book is dedicated to procedural generation and contains much information about noise, among other interesting topics. However, it's mathematics isn't "self-contained".
- [4] - This book also introduces the frequency domain in the context of computer graphics. It also contains the foundations of mathematics that you need to understand those concepts deeper. If you're comfortable with at least high-school math, this book is an excellent starting point.
- [5] - Formal introduction to procedural noise and ways we evaluate it - a bit tough read, though :)
[1] Image Processing I,
Shree K. Nayar,
Monograph FPCV-1-4, First Principles of Computer Vision,
Columbia University, New York, Mar. 2022
[2] Image Processing II,
Shree K. Nayar,
Monograph FPCV-1-5, First Principles of Computer Vision,
Columbia University, New York, Mar. 2022
[3] Texturing and Modeling: A Procedural Approach (3rd. ed.).
David S. Ebert, F. Kenton Musgrave, Darwyn Peachey, Ken Perlin, and Steven Worley. 2002. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA.
[4] Steve Marschner and Peter Shirley. 2016. Fundamentals of Computer Graphics, Fourth Edition (4th. ed.). A. K. Peters, Ltd., USA.
[5] Lagae, A., Lefebvre, S., Cook, R., DeRose, T., Drettakis, G., Ebert, D.S., Lewis, J.P., Perlin, K. and Zwicker, M. (2010), A Survey of Procedural Noise Functions. Computer Graphics Forum, 29: 2579-2600.
Links (amazon links are affiliate):
- [1], [2]: fpcv.cs.columbia.edu, ‪@firstprinciplesofcomputerv3258‬
- [3]: amzn.to/3BD001a
- [4]: amzn.to/44lXwju
- [5]: doi.org/10.1111/j.1467-8659.2...
Timestamps:
0:00 - Introduction
1:00 - Randomness
2:39 - Noise
3:54 - Obtaining Noise
5:01 - Coin Flip Noise
6:50 - Brownian Noise
8:28 - Terrain Noise
10:47 - Sinusoidal Waves
13:12 - Making Noise With Sinusoidal Waves
15:36 - Frequency Decomposition
16:53 - Utilising Frequency Domain
18:03 - White Noise
19:41 - Frequency Filtering
21:09 - Evaluating Our Noise
22:36 - Generating Random Numbers
24:17 - Hash Function
25:55 - Value Noise
28:31 - Fractal Noise
Special thanks to:
- Tobias Rittig
- ​⁠‪@waffleboytom‬
- Adam Piskala
- Kristian Kubenka
- Martmists
Besides being a passion project, this video is my take on the #SoME3 competition.
Soundtrack by Ben Elson - I've used tracks from his album Orthosie
- open.spotify.com/artist/1OuL8...
- www.epidemicsound.com/artists...
I've used some assets from digital libraries. Music, SFX comes from Epidemic Sound, and some real-life shots come from Envato Elements.
Epidemic Sound: share.epidemicsound.com/qaregt (affiliate)

Пікірлер: 105
@sycration
@sycration 11 ай бұрын
Wow, the animation is slick
@vojtechproschl
@vojtechproschl 11 ай бұрын
Thank you!
@walexaindre
@walexaindre 11 ай бұрын
Thank you so much for this content. I always been interested in 3d graphics and your work is like a dream for me at some step of my life!
@vojtechproschl
@vojtechproschl 11 ай бұрын
Thank you! That's delightful to hear!
@isle_of_violets
@isle_of_violets 10 ай бұрын
how does this have only 450 likes??? this is one of the highest production quality SoME3 entries i have ever seen!
@isle_of_violets
@isle_of_violets 10 ай бұрын
my only problem was that when you transferred from obtaining noise to procedural noise, you didn't actually mention what method you used for obtaining random numbers, or, for example, how you generated brownian noise
@vojtechproschl
@vojtechproschl 10 ай бұрын
Thank you! It's cheerful to hear that you think the production quality is that high. I've used a hash function to generate random numbers as described at 25:00. I wasn't concrete about implementation because I wanted to keep a reasonable length. You're right. I might have explained how to generate Brownian noise since it's a straightforward extension of the coinflip noise. Still, that part was intended to be more about observing nature than generating the noise itself.
@mitchellverhelle3986
@mitchellverhelle3986 10 ай бұрын
I'd love to see a follow-up video. For my functional programming final project, my team made a 3D fBm terrain generator using OCaml. It was super neat to watch this video, it would've helped us so much haha!
@vojtechproschl
@vojtechproschl 9 ай бұрын
Thank you! I hope you did well even without the video 😆
@marekrybakiewicz370
@marekrybakiewicz370 10 ай бұрын
I feel like every day i see something amazing pop up in the domain of CS/math and music, explained and animated so well. Fantastic video, completely made me change how I think about noise. Amazing amazing amazing
@vojtechproschl
@vojtechproschl 10 ай бұрын
Wow, thank you!
@kikivoorburg
@kikivoorburg 11 ай бұрын
Wonderful video, definitely deserving of more views! I would certainly like to see a follow-up!
@vojtechproschl
@vojtechproschl 11 ай бұрын
Thank you, I am glad you liked it!
@Dampy.69
@Dampy.69 10 ай бұрын
The same concept applies to physics, music theory, electrical engineering, computer graphics and procedural generation. Math is beautiful as the language to explain the universe around us.
@felixstrau7880
@felixstrau7880 11 ай бұрын
Very well explained! I would love to see another video on this topic :)
@vojtechproschl
@vojtechproschl 11 ай бұрын
Thank you! I will try to make it one of my following videos.
@DokterKaj
@DokterKaj 10 ай бұрын
So underrated, I hope this gets more attention
@vojtechproschl
@vojtechproschl 10 ай бұрын
Thank you!
@tfairfield42
@tfairfield42 9 ай бұрын
Amazing video into this topic. I remember looking into minecrafts procedural generation and perlin noise used to generate the terrains and caves. Wonderful systems at play together.
@4984christian
@4984christian 10 ай бұрын
Nice. Please do more! I love experimenting with conplex patterns!
@SellusionStar
@SellusionStar 10 ай бұрын
Very great didactic and order of the topics! Also the animations are so good! Well done :)
@vojtechproschl
@vojtechproschl 10 ай бұрын
Thank you very much!
@raresmircea
@raresmircea 10 ай бұрын
High quality production, great job
@MartynDerg
@MartynDerg 9 ай бұрын
This was an absolutely brilliant explanation! this whole time I have been wandering blind, changing values without actually understanding what I'm changing. Now I feel like I better understand the concepts behind generating noise, and finally understand what I'm actually doing when tweaking the parameters of fractal noise
@vojtechproschl
@vojtechproschl 9 ай бұрын
Thank you!
@teklife
@teklife 9 ай бұрын
the best mapgen i've ever seen is this one called 'Terrainbrot' and created by a minetest server owner and developer called Hume2. you can experience it and see a map of the world at 'spawn' on the server 'Tunneler's Abyss' using the free and open source Minetest client and going to the "join game" tab. it has tall realistic mountains, oceans and continents, archipelagos, deep oceans, and is just the most natural and realistic mapgen i've ever seen. by comparison, most other mapgens create bizarre artifacts like mountains cut in half, land tapering outwards as the elevation increases, and all sorts of goofy ugly bits all around like floating bits of land.
@spuds5379
@spuds5379 10 ай бұрын
new favorite video haha this is fascinating
@IshanBanerjee
@IshanBanerjee 11 ай бұрын
This was Amazing man ❤
@vojtechproschl
@vojtechproschl 11 ай бұрын
Thank you! ❤️
@LumpDigital
@LumpDigital 11 ай бұрын
👌👌👌👌 Realy great video ❤
@vojtechproschl
@vojtechproschl 11 ай бұрын
Thank you!
@waffleboytom
@waffleboytom 11 ай бұрын
Really interesting stuff, and the graphics are top-tier !
@vojtechproschl
@vojtechproschl 11 ай бұрын
Thank you!
@barberousse1149
@barberousse1149 10 ай бұрын
wow! thanks... you openned up some reflections in my mind in the way noise can be used. building a sine lookup table could help in being more efficient. ''All'' sines could be computed once, then its basically direct acces.
@mementomori7160
@mementomori7160 10 ай бұрын
That was a really good video, now to check all the others you made so far
@vojtechproschl
@vojtechproschl 10 ай бұрын
Thank you! I hope you will find them all useful 😁
@MrKohlenstoff
@MrKohlenstoff 2 ай бұрын
Really cool, very well done!
@vojtechproschl
@vojtechproschl 2 ай бұрын
Thank you!
@cyberianlilyum917
@cyberianlilyum917 10 ай бұрын
Mighty algorithm knows it so well, it suggests this just on the right time.
@hatless-cluncky-capsize
@hatless-cluncky-capsize 10 ай бұрын
Thank you for the video. great format. would love to see a follow on video.
@vojtechproschl
@vojtechproschl 10 ай бұрын
I am glad, that you've liked it! Thank you very much.
@griffinschreiber6867
@griffinschreiber6867 10 ай бұрын
This is the video I needed to have!
@vojtechproschl
@vojtechproschl 10 ай бұрын
Glad it found your way to you!
@griffinschreiber6867
@griffinschreiber6867 10 ай бұрын
@@vojtechproschl I have a question though. I recently implemented "Improved" Perlin noise from scratch in python. As you know, this is different from value noise. I am having a problem where most of the values are between 0.45-0.55 though. Do you know how to fix this?
@while_coyote
@while_coyote 6 ай бұрын
lovely. I'd love to see more.
@vojtechproschl
@vojtechproschl 6 ай бұрын
Thank you!
@JavierRuizGonzalez
@JavierRuizGonzalez 10 ай бұрын
I wonder if Fourier deserved a mention... Nice sections and graphs, btw!
@vojtechproschl
@vojtechproschl 10 ай бұрын
I regret not mentioning it. My original intention was to avoid confusing people new to the topic and letting advanced ones connect the dots themselves. Thank you!
@JavierRuizGonzalez
@JavierRuizGonzalez 10 ай бұрын
@@vojtechproschl It makes sense! Thanks for your reply.
@PeterLechner
@PeterLechner 10 ай бұрын
Finally I get what those fbm parameters mean🤌 great video! Would love to learn more!
@tylerbakeman
@tylerbakeman 10 ай бұрын
I’ve been trying to work on terrain generation with caves / cliffs / overhangs - the standard seems to be 4d perlin noise (using a fill function to remove floating terrain). Happy to report, wave function collapse seems to be a possible alternative. Otherwise, heightmaps and caves are treated like objects, is cool too. Fun jazz
@vojtechproschl
@vojtechproschl 10 ай бұрын
Sounds really interesting! I wanted to try this with hypertextures, but haven't really gotten to it yet.
@stevenchristy6156
@stevenchristy6156 10 ай бұрын
WFC can be good, not a magic bullet though. One challenge with WFC is a good way to handle large areas. Since the end result of WFC is determined by the initial starting point if your world is large you end up having to generate the entire world just to render a small chunk of it. So with WFC you need to come up with some partitioning scheme so that you can generate chunks somewhat independently.
@jemko
@jemko 10 ай бұрын
it should be 3D noise right?
@jemko
@jemko 10 ай бұрын
The way ive did it was to generate 3D noise and get the noise value at World Transform and check if its above a threshold, if its above then spawn a block, if not, skip it
@stevenchristy6156
@stevenchristy6156 10 ай бұрын
@@jemko Any function which describes a signed distance field can be combined with another similar function to create a SDF that describes the union of the two. So you can take a 2D noise function that describes a height and this function is interpreted as a plane. Then a 3D noise function which describes crevasse, tunnels, and caves can be subtracted from the plane. Where large caves intersect the side of a hill or mountain a cliff would appear.
@e1123581321345589144
@e1123581321345589144 11 ай бұрын
very beautiful presentation.
@vojtechproschl
@vojtechproschl 11 ай бұрын
Thank you!
@NikiTricky2
@NikiTricky2 10 ай бұрын
Underrated video!
@vojtechproschl
@vojtechproschl 10 ай бұрын
Appreciate it!
@yasscat5484
@yasscat5484 10 ай бұрын
glad to discover your channel
@vojtechproschl
@vojtechproschl 10 ай бұрын
I am glad that you like it!
@01binaryboy
@01binaryboy 11 ай бұрын
Very worth❤
@vojtechproschl
@vojtechproschl 11 ай бұрын
Thank you! ❤️
@ggavilan
@ggavilan 10 ай бұрын
Liked! Let's keep the algorithm doing it's job
@vojtechproschl
@vojtechproschl 10 ай бұрын
Thank you!
@Laff700
@Laff700 11 ай бұрын
Is there a way to create fractal noise using some deterministic iterative function such that points can be randomly sampled and the result will always be the same regardless of sampling order?
@vojtechproschl
@vojtechproschl 11 ай бұрын
Hi! The procedure I've explained works like that, but I wasn't very explicit about it. Let's say you have fBm with 6 octaves, and you want to evaluate it at x. 1: For each scale, you localize knot points (the largest knot point that is smaller or equal to x and the least knot point that is larger than x) 1.1: You assign deterministic random values to those knots using a hashmap 1.2: Then, you compute the interpolated value for x in that interval //This gives you the value of noise for one scale 2: Then you sum up all those scales together, and that is your result (also you can multiply it to rescale it) Essentially, when you ask for noise value for the same x, the output will always be the same due to the same knot points being picked and assigned the same PRN. Also, picking some other x' in the same interval will give you the same knot points. Just the interpolated value will be different. I am not entirely sure if I've answered your original question. Feel free to ask a follow-up one :) I am thinking about creating a GitHub repository with practical implementations. Would that be useful to you (probably in Python)?
@Foxtr0t1337
@Foxtr0t1337 10 ай бұрын
11:49 Shouldn't the freq be b/(2pi)?
@Electroshockist
@Electroshockist Ай бұрын
Interesting way to use fourier transforms. very cool.
@vojtechproschl
@vojtechproschl Ай бұрын
Thank you!
@bambus237
@bambus237 10 ай бұрын
What comes to my mind about generating "random" numbers is that you could use a logistic map after the chaos threshold. But I don't know how efficient this would be.
@vojtechproschl
@vojtechproschl 10 ай бұрын
Interesting idea! It could definitely work, but if you want to use it for the noise, you would have to generate an array of random values in advance to look them up later. On a similar note, another neat source of randomness are Halton sequences, which also generate "streams" of PRN but, on top of that, are uniformly distributed.
@johannes417
@johannes417 9 ай бұрын
Great
@illustriouspics1
@illustriouspics1 10 ай бұрын
Good shit 🔥
@bambus237
@bambus237 10 ай бұрын
What software or libraries do you use to create these beatiful visuals?
@vojtechproschl
@vojtechproschl 10 ай бұрын
Thank you for the compliment! I use SideFX Houdini with a few custom-made tools to simplify 2D animating. I've made most of the animations using some combination of Houdini's expression language (VEX) and tools. Besides that, I've used Blackmagic Resolve for editing and Blackmagic Fusion for compositing a few scenes.
@newogame1
@newogame1 10 ай бұрын
Another question" Simplex noise by Stefan Gustavson returns a noise value plus a "true analytic derivative". what is this and what can it used for?
@vojtechproschl
@vojtechproschl 10 ай бұрын
The information you directly get from Simplex noise is the value and the gradient at that point, which is likely referred to as the "true analytical derivative". In this context, the gradient tells you the direction of the steepest ascent - meaning which direction you should head in for the noise to increase the most. This is pretty handy, because with the gradient, you can, for instance, compute the tangent plane at that point on the noise function (that's the total derivative) or figure out the normal at that point. The "true analytical" bit means it's calculated using an analytical method (like some clever algebra) rather than just approximating it. This makes the result more precise in a way, even though computers can't always be 100% spot-on. If you're keen to dig deeper, and depending on how comfortable you are with math, I'd say check out some stuff on calculus. These topics usually pop up in multivariable/vector calculus (Khan Academy has great courses on that).
@newogame1
@newogame1 10 ай бұрын
@@vojtechproschl nope, I am not keen to dig deeper. I am merely skimming the surface to see if I can use it in my gamedev. I am going to attempt to visualize the analytical derivative to see if it can help me in my goals. As far as the simplex noise it only returns the value at a point, no gradient.
@isle_of_violets
@isle_of_violets 10 ай бұрын
what animation software did you use?
@vojtechproschl
@vojtechproschl 10 ай бұрын
The main software I use is SideFX Houdini. I've created a few custom tools to simplify 2D animating, but I've made most of the animations using some combination of Houdini's expression language (VEX) and tools. Besides that, I've used Blackmagic Resolve for editing and Blackmagic Fusion for compositing of a few scenes.
@estebanmarco8755
@estebanmarco8755 10 ай бұрын
Randomness does exist, but in the quantic world. We cannot predict when a radioactive isotope is going to desintegrate but we know it's law.
@beaverbuoy3011
@beaverbuoy3011 10 ай бұрын
WOW
@newogame1
@newogame1 10 ай бұрын
Most people already have a noise function. Combining them is usually the point where videos like this stop. If you have noise A which is land and noise B which is water. How do you combine them to ensure the water does no appear in weird places? This is the real challenge for me. Even more is doing it with as few noise hits as possible.
@vojtechproschl
@vojtechproschl 10 ай бұрын
Hi! The key to combining noises is to approach them as mathematical functions. By using tools like interpolation, you can composite these functions to derive new ones. I've created a video on the mathematics behind procedural texturing. While I don't address noises directly in it, I delve deep into various mathematical functions that will undoubtedly help you in achieving your desired result. It might be a valuable resource for you. kzfaq.info/get/bejne/grKKmcSqmsuan30.html Combining noises to address your problem: 1) Let's assume you have 3 noise types: a land height field, a water height field, and a third noise for water/land distribution (all ranging between [0,1]). 2) The third noise can serve as a driver to interpolate between the land and water noises. This ensures the water doesn't appear in unexpected areas. 3) Experiment with the interpolating noise. You could even try interpolating between three different levels. Armed with the concepts from my video on procedural texturing, I believe you'll be able to make the terrain you want :) Hope this helps, feel free to ask any other questions.
@newogame1
@newogame1 10 ай бұрын
@@vojtechproschl watched the video and it was too deep for me unfortnately. The concepts are too general. interpolating the between the noise levels is my only real focus. I use one noise to determine the presense of water at a point. So the water ends up on edges of the terrain if the terrain is really hilly. I could avoid this by sampling the surrounding areas but that is pretty costly. I am trying to determine if its safe to place water at a spot using ass few calculations as possible. Anyway thanx for your reply.
@nightwintertooth9502
@nightwintertooth9502 10 ай бұрын
FFT is a great way to reverse engineer any graph into its sinosoidal components :) it's magic sauce and great for computers.
@vojtechproschl
@vojtechproschl 10 ай бұрын
Exactly! When I learned about FFT for the first time, it was one of those "Wow, math can do this???" moments 😄
@andrewgardiner563
@andrewgardiner563 9 ай бұрын
You really don’t need such a high-definition mic. It sounds like I’m listening to this video from inside your mouth. I can hear every moist, lingual articulation.
@skeleton_craftGaming
@skeleton_craftGaming 10 ай бұрын
1:50 Yes, radioactive decay is truly random. Or at least quantumly random...
@vojtechproschl
@vojtechproschl 10 ай бұрын
Great example, should've mentioned it.
@aikarutunian7892
@aikarutunian7892 10 ай бұрын
Instead of a coin flip, we could make noise out of your accent switching between Polish and Austrian German (?). Just kidding sir, amazing work with the explanations and animations!
@zoltantorok1189
@zoltantorok1189 10 ай бұрын
More. We crave more, mother. Why have you forsaken us, mother? Mother?
@lexer_
@lexer_ 10 ай бұрын
I learned a lot watching this but I felt like you just sprung magic pieces of math without explanation way too often. It would take way too long to explain everything and just introducing existing concepts is generally fine. But I prefer it if the introduction of a new concept is somehow tied to something so I can connect ideas in my head. For example, pretty early you talk about brownian motion and at the very end you come back to the concept with fBm and this seems like a planned setup to tie things together. But You never even mention how these two are related except for the word "brownian". It's a bit like reading the third book in a series without prior knowledge about it. Characters we know nothing about just appear out of nowhere but we have no way of connecting them to the rest of the story. We don't need to know their entire life story but we need to know where to place them for the story to work.
@ludfde
@ludfde 10 ай бұрын
For the Algorithm,since it deserves more views
@vojtechproschl
@vojtechproschl 10 ай бұрын
Thank you!
@Ghc902
@Ghc902 9 ай бұрын
After viewing this video, I have some constructive feedback to offer. While the animation and video production quality were impressive, I found that the pacing and structure of the content could use refinement to effectively convey the intended knowledge. It strongly feels like at the beginning you want to talk about true random noise, but at the end you ended up talking about hash function generated noise which is pseudo random and deterministic. You also step by step almost feel like you are talking about generating true random noise procedurally then suddenly introduce another source of randomness required to generate the noise. This is basically luring people in with chocolate and ended up feed them 💩 . The segmentation into 17 sections felt a bit fragmented and the progression from one topic to another could be smoother. For instance, the introduction began with a discussion on true randomness 2:52 and procedural noise generation 3:23 , transitioning into real-world sampling methods like coin flipping, and then delving into molecular motion as another source of noise. Following this, the narrative shifted to sin wave-based noise generation, incorporating an unidentified random source for phase shifts, before introducing Fourier transformation. The revelation that hash functions were being used as the phase shift generator, without a subsequent explanation, left a bit of a gap in understanding. The video's level of technical detail seemed to be caught between a high-level conceptual overview and a low-level technical deep dive. For instance, if the goal was to provide a low-level technical explanation, including actual code and in-depth analysis would have been beneficial. Conversely, if the aim was a high-level overview, the inclusion of complex concepts like Fourier transformation may have been excessive. It might be more effective to focus on core topics like the possibility of true random noise, the generation of pseudo-random noise through computational techniques, and the role of hash functions in ensuring uniform distribution in random generators. A more bottom-up approach, starting from deterministic functions and progressing to more complex noise generation techniques, might provide a clearer, more satisfying learning trajectory. Moreover, the video's objective was a bit unclear-whether it aimed to educate on procedural true random noise generation or realistic terrain noise generation. The content at the beginning and end seemed to address different goals. If the focus is on terrain noise, it would be beneficial to hypothesize on the unique frequency profile of terrain noise and explain the necessity of certain filter combinations to accurately replicate such profiles.
@cmilkau
@cmilkau 10 ай бұрын
The art of procedural generation is to make something totally random look totally not random.
@zizkovhoodmoments1590
@zizkovhoodmoments1590 10 ай бұрын
uzasny video
@vojtechproschl
@vojtechproschl 10 ай бұрын
Díky!
@BryanLu0
@BryanLu0 10 ай бұрын
I like your video style, but your script is all over the place. You briefly touch on brownian motion, white noise, low/high pass filters, but these concepts are only tangentially related to the topic of the video.
@randyzeitman1354
@randyzeitman1354 10 ай бұрын
I have no idea what procedural noise is. Is it even mentioned in the video at all? I gave up after five minutes.
@EllyTaliesinBingle
@EllyTaliesinBingle 10 ай бұрын
I swear I've heard you before.
When Your Game Is Bad But Your Optimisation Is Genius
8:52
Vercidium
Рет қаралды 1,4 МЛН
This is how texturing really works | Procedural Texturing, Episode 1
34:05
Beautiful gymnastics 😍☺️
00:15
Lexa_Merin
Рет қаралды 15 МЛН
Spot The Fake Animal For $10,000
00:40
MrBeast
Рет қаралды 134 МЛН
Amazing weight loss transformation !! 😱😱
00:24
Tibo InShape
Рет қаралды 51 МЛН
The Mathematics of String Art
10:36
Virtually Passed
Рет қаралды 509 М.
Rethinking the real line #SoME3
14:54
Proof of Concept
Рет қаралды 94 М.
What is Perlin Noise?
7:49
Suboptimal Engineer
Рет қаралды 12 М.
Can you guess a shape from its shadows?
9:01
Ben Gobler
Рет қаралды 459 М.
The Fascinating New Maths behind Minecraft Dispensers
8:49
The Verhoeff-Gumm Check Digit Algorithm #SoME3
17:00
Kevin Lubick
Рет қаралды 191 М.
Making a Pitch Shifter
16:13
JentGent
Рет қаралды 69 М.
Yet Another Video About Traffic (SOME3)
7:03
Lachlan Perrier
Рет қаралды 1,2 М.
Perlin Noise is OP!
0:52
Gunnar L. Young (SixteenByNein)
Рет қаралды 1,8 М.
The ONE Texture Every Game NEEDS
9:00
SimonDev
Рет қаралды 248 М.
Beautiful gymnastics 😍☺️
00:15
Lexa_Merin
Рет қаралды 15 МЛН