Perlin Noise Explained Tutorial 2

Поделиться
HTML-код
  • Опубликовано: 13 янв 2017
  • Noise Tutorials: Tutorial 2 - Perlin Noise Explained
    Previous tutorial: Tutorial 1 - Random Noise Animation by using Java • Random Noise Animation...
    Next tutorial: Tutorial 3 - How To Use Perlin Noise Algorithm? • Perlin Noise Algorithm...
    Improved Perlin noise article: mrl.nyu.edu/~perlin/paper445.pdf
    Improved Perlin noise algorithm: mrl.nyu.edu/~perlin/noise/
    Our website: fataho.com
    You can contact us via email: info@fataho.com

Комментарии • 153

  • @The-cyber-imbiber
    @The-cyber-imbiber 4 года назад +11

    This is literally the only good explanation of Perlin Noise I could find on the web. Most people who try to teach this stuff either leave out big gaping gaps of essential information (probably because they falsely assume that the viewer already knows it) or they use technical jargon only relevant to one particular coding language (usually Python, Java, or C++) or they claim to explain it and proceed to show they don't actually understand it themselves.
    This is a great video. Without it, I'm not sure what I would do! Thanks for posting!

  • @Aarmaxian
    @Aarmaxian 3 года назад +19

    This tutorial is a god send for me. I was trying to understand Perlin noise and thanks to you, now I do. Thank You. Thank You.

  • @SoftlyAdverse
    @SoftlyAdverse 7 лет назад +7

    It's really interesting to compare this to the coding train's series of videos on Perlin noise. While coding train has production value coming out the ears, and is obviously a skilled, interactive teacher, this video is so much better for actually learning how to implement Perlin noise. Straight to the point, and easily understandable. Great job.

    • @Fataho
      @Fataho  7 лет назад

      Thank you for the kind words that really means a lot to me.

  • @jesuschris9543
    @jesuschris9543 Год назад +6

    Wow… the only tutorial I have found that seems like it was made for actual humans, who don’t already know how perlin noise works; thank you sir

  • @elsam_
    @elsam_ 4 года назад +11

    Should the x and y on the third distance vector at 15:50 is 0.75 for x and -0.75 for y not the opposite?

  • @omegalphadelta726
    @omegalphadelta726 18 дней назад

    7 years later, thank you, I live randomness and perlin noise is one of the things I wanted to learn

  • @Andrew90046zero
    @Andrew90046zero 3 года назад +6

    I'm so glad I found this video, I never fully understood Perlin noise, and I just used as a "black box" like you said, without really knowing enough to make my own custom noise function if I wanted to.

  • @grybx835
    @grybx835 4 года назад +8

    This was the best explanation of Perlin Noise I've ever seen. Thank you so much! I only needed to watch the video once and I completely understood

  • @Florent04
    @Florent04 7 месяцев назад +2

    I have been looking for this video for dozens of minutes, great content!

  • @snbv5real
    @snbv5real 6 лет назад +7

    Holy crap, this is by far the best explanation I've seen you should contribute to Stack Overflow Documentation on Perlin Noise.

  • @wisemandenny8
    @wisemandenny8 3 года назад +6

    Watching this on 2x speed 2 minutes before my graphics final exam.... thank you!

    • @ian.ambrose
      @ian.ambrose 9 месяцев назад

      May I ask what was your exam like? Did it really ask about the algorithm of Perlin Noise.

  • @mgord9518
    @mgord9518 Год назад +1

    By far the best video I've seen about both how to use perlin noise and how it works

  • @janzimmer8136
    @janzimmer8136 6 лет назад +4

    I have tried to understand Perlin Noise for a long time, this has helped me alot. Thanks

    • @Fataho
      @Fataho  6 лет назад +1

      I am glad it helped.

  • @mevlin7726
    @mevlin7726 5 лет назад +7

    so much better than the wikipedia page

  • @victorl2886
    @victorl2886 5 лет назад +2

    Clearest explanation for me so far. Thank you so much. Also, great dev log!

  • @The-cyber-imbiber
    @The-cyber-imbiber 4 года назад +2

    I got my Perlin noise algorithm up and running today thanks to this video. thank you so much!!!!!

  • @ollocksbay
    @ollocksbay Год назад +3

    This is amazing and exactly what I needed, thank you!

  • @Naarii14
    @Naarii14 4 года назад +2

    what did you use to make the grid visuals? I want to try and explain the vector math of perlin noise for my Math IA, and i'd appreciate being able to make the visuals myself too...

  • @invntiv
    @invntiv 7 лет назад

    This is a truly fascinsting topic. This was the only video I found that explained from the ground up! Very understandable and moves at a perfect pace; not too slow that it drags but also but not too fast

    • @Fataho
      @Fataho  7 лет назад

      Thank you. This topic is indeed very interesting and more importantly it is very useful - there are so many things that can be done with noise algorithms.

  • @ukaszjanczak3999
    @ukaszjanczak3999 2 года назад +6

    Awesome lecture, thank you

  • @AngryCPPCoder
    @AngryCPPCoder 4 года назад +4

    Nice tutorial, that was great and very detailed explanation.

  • @nikolaypopov9509
    @nikolaypopov9509 7 лет назад +2

    Great video man, the most clear explanation I have found!

    • @Fataho
      @Fataho  7 лет назад +1

      Thank you.

  • @SHPOKAZZZ
    @SHPOKAZZZ 7 лет назад +1

    I really like what you are doing here, especially the Arnold dialect. Hope You'll Be Back with some new tutorials soon.

  • @mounirrouibi2669
    @mounirrouibi2669 Год назад +1

    i used opensimplex's perlin noise for my project but i wanted to understand how it works, thanks for the great video

  • @nitrousoxide4970
    @nitrousoxide4970 4 года назад

    Thank you. You made this so simple!

  • @amphibia95
    @amphibia95 3 года назад

    Great explanation, thank you!

  • @Hyrtsi
    @Hyrtsi 3 года назад

    really good tutorial. thank you so much for the effort!

  • @lepruconx
    @lepruconx 4 года назад +10

    russian math made this guy's accent seem totally normal to me at first.

  • @pako_powr
    @pako_powr 4 года назад

    Very nice explanation, thank you!

  • @csongorzih5094
    @csongorzih5094 5 лет назад

    Amazing video. Thank you!

  • @Shirocco89
    @Shirocco89 3 года назад +2

    Real life saver for me, thank you very very much!

  • @cechovas
    @cechovas 7 лет назад

    Very good job. Exceptionaly simple and exhaustive explanation.

  • @AlexanderElo
    @AlexanderElo 7 лет назад

    Very nice tutorial, thank you! Keep up the good work!

    • @Fataho
      @Fataho  7 лет назад

      Thank you. I will try to do that.

  • @taylorf94
    @taylorf94 7 лет назад

    thank you for a greatly in depth explanation, really helpful!

    • @Fataho
      @Fataho  7 лет назад

      I am very glad it helped you.

  • @jeyko666
    @jeyko666 5 лет назад

    Is the "improved" part the random vectors being controlled ?

  • @tompatterson7252
    @tompatterson7252 7 лет назад

    this is brilliant. please make more tutorials these help so much

    • @Fataho
      @Fataho  7 лет назад

      I am very glad you like it. I will definitely do more tutorials.

  • @ruchisheth9430
    @ruchisheth9430 4 года назад +1

    Thankyou so much for such brilliant explanation! It cleared so many doubts. Could you make one on opensimplex noise too & possibly differentiating the complexity aspect and visual aspect of both classic n open simplex noise would be great too! Thanks:)

  • @Switch620
    @Switch620 2 года назад +1

    Ty for the explanation man :)

  • @williamharrison4665
    @williamharrison4665 4 года назад +1

    This was Great!

  • @josiethompson2420
    @josiethompson2420 5 лет назад

    Is the fade function some sort of Taylor Series approximation?

  • @OmegaBlackjack
    @OmegaBlackjack 4 года назад +11

    Вэри гуд пронанциэйшн, просто конфэта

    • @stickguy9109
      @stickguy9109 3 года назад

      Ай донт андэрстэнд ведзер ю сейд ит айроникалли ор ю вер комплиментинг. Бат ю готта чек оут Борис бикоз хиз проносиэйшн из ивен ворс

  • @TheBobbytux
    @TheBobbytux 3 месяца назад +1

    Thank you for that great explanation. It helped me a lot. If I may at 16:02, for D3 the D vector values are in reverse order. the dot product value does not change by the the fact that th G vector is (1,1) .. ;)

  • @harriehausenman8623
    @harriehausenman8623 5 лет назад

    Very fine. Thank you!

  • @akeclipsee
    @akeclipsee 4 года назад +2

    Wow, that is had to took ages to make :D + for effort for sure :) thanks

  • @evux1
    @evux1 7 лет назад +1

    good tutorial, informative, thank you again:-)

  • @SuperToughnut
    @SuperToughnut 3 года назад +2

    I don't understand where the gradient vectors come from. Do you take two random numbers from a set of random numbers for each gradient vector? How would you be able to generate a large terrain and then walk the terrain away from origin and come back and it will still be the same? It seems like you must use a random generator to get values, but I don't get how how to use these random values in a way so that the terrain doesn't change if you leave a section and come back.

    • @unknown335
      @unknown335 3 года назад +3

      it use permutation table
      first you need to make an array (call it permutation array) of sequential numbers starting from 0. so in example in array of length 10 it would be like this {0, 1, 2, 3, 4, 5 ,6 ,7, 8, 9} and then shuffle them all randomly {2, 5, 1, 3, 9, 4, 6, 8, 7} then when you need a gradient for a corner use the corner position. in 2d the most comment way to do is:
      gradTable[ permTable[ permTable[ x % permLength] + y & permLength ] % gradTableLength ]
      where "gradTable" is the array that hold the gradients and "gradTableLength" is its length
      and "permTable" is permutation array and "permLength" is its length
      also this notation "%" means modulus operation to make sure number are in range.
      sorry if the explanation isnt clear but i hope its good
      you can see another example of using permutation table in another way (same idea)
      mrl.cs.nyu.edu/~perlin/noise/
      EDITE: sorry the modulus operation is % not &

  • @fierval
    @fierval 4 года назад

    Awesome! Thanks.

  • @huscat1609
    @huscat1609 5 лет назад

    Thank you for this fantastic tutorial, it really explained everything I needed to know. Did you considered also explaining Simplex Noise? I would very much appreciate it.

    • @huscat1609
      @huscat1609 5 лет назад +1

      For anyone interested, here is the best explanation I found so far: weber.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf

  • @gabrielakaczka7808
    @gabrielakaczka7808 6 лет назад

    Great explanation! Thanks a lot! :)

    • @Fataho
      @Fataho  6 лет назад

      I am glad you liked it!

    • @gabrielakaczka7808
      @gabrielakaczka7808 6 лет назад

      btw what is the license for your Perlin noise code on Github? I am currently implementing it by myself using your video, but just in case...:) [I plan to use Perlin noise in my MS thesis]

    • @Fataho
      @Fataho  6 лет назад

      I do not know much about licenses, however you can use my code for what ever reason you like. If your work is related to Perlin Noise, you should cite Ken's Perlin article in your thesis.

    • @gabrielakaczka7808
      @gabrielakaczka7808 6 лет назад

      Sure, I will [I am implementing map generator], but anyway will cite your resources too :) Thanks!

  • @Kykla4eB
    @Kykla4eB 3 года назад +2

    Хорошо пояснил, спасибо!

  • @StrexGamer
    @StrexGamer 5 лет назад +1

    Wonderful

  • @hansuswurstus888
    @hansuswurstus888 Год назад +2

    Thanks for the nice video :)
    What I don't completely understand is why we use an random number table instad of random generated numbers ( like in Java Math.random() )? As far as I understood the contains the table random placed values between 0 and 255. has it something to do with the grey values?

    • @_PranavDesai
      @_PranavDesai Год назад +2

      it's mostly to do with absolute randomness. built-in functions like Math.random() aren't strong random number generators leading in a bad perlin noise. a random number table guarantees a good amount of randomness. i'm not aware of a way to quantify it but yea.

  • @emilismaila7550
    @emilismaila7550 7 лет назад +1

    very very good :)
    thanks alot

  • @cyberniux
    @cyberniux 7 лет назад +1

    Awesome!!!

  • @JohnSmith-mr6wp
    @JohnSmith-mr6wp 4 года назад

    Good job, thx

  • @FrSIBYLA
    @FrSIBYLA 5 лет назад

    Is that a typo at 14:55 for the gradient vector? It says G(-1,1) but the orange arrow is clearly going down the y-axis. Shouldn't it be G(-1,-1) instead or is there something I'm missing?
    EDIT: Actually, even the distance vector says D(0.75,0.25) but the green arrow is tilted "down". Shouldn't it be D(0.75,*-0.25*) instead?

    • @Fataho
      @Fataho  5 лет назад

      Thank you for the good question. It is hard for me to remember, but I think it does not matter. If you choose G(-1, -1), when D will be (0.75, -0.25) and not (0.75, 0.25). In this case G(-1, -1) and D(0.75, -0.25) dot product you will be the same as G(-1, 1) and D(0.75, 0.25), which is -0.5.

    • @FrSIBYLA
      @FrSIBYLA 5 лет назад

      Thanks for the reply and that DOES make sense.
      However, I can't seem to wrap my head around which needs to be negative and which should not, specially at 15:48. My problem is that I can't find an example where the gradient is G(positive,positive) with a distance of D(positive,positive) this causes a problem with a >1 Dot Product that, even when interpolated, causes >1 output.
      Thanks again for replying!

    • @Fataho
      @Fataho  5 лет назад

      Write me (info@fataho.com) your calculations, where you get output >1. I will look through it.

    • @FrSIBYLA
      @FrSIBYLA 5 лет назад

      Hi again... sorry for being such a bother... I've figured out that yes, you are correct. Any DotProduct that exceeds (-1,1) is eliminated after the interpolation. Thanks for that!
      Now, I'm dealing with a different problem with the Gradient Vectors. I was trying to manually do the formula at (15:50) and I got the same results. However, I wanted to try using a different set of orange arrows as vectors, I tried it will all the Gradients pointing at (1,1) instead.
      I got the following Dot Products for Pixel (0.75,0.25)
      D1 = G(1,1) D(0.75,0.25)
      D1 = (1*0.75) + (1*0.25)
      D1 = 1
      D2 = G(1,1) D(-0.25,0.25)
      D2 = (1*-0.25) + (1*0.25)
      D2 = 0
      D3 = G(1,1) D(-0.75,0.75)
      D3 = (1*-0.75) + (1*0.75)
      D3 = 0
      D4 = G(1,1) D(-0.25,-0.75)
      D4 = (1*-0.25) + (1*-0.75)
      D4 = -1
      Now following the Interpolation formula at (16:10)
      AB = D1 + 0.75 * (D2 - D1)
      AB = 1 + 0.75 * (0 - 1)
      AB = 1 + 0.75 * (-1)
      AB = 1 + (-0.75)
      AB = .25
      CD = D3 + 0.75 * (D4 - D3)
      CD = 0 + 0.75 * (-1 - 0)
      CD = 0 + 0.75 * (-1)
      CD = 0 + (-0.75)
      CD = -0.75
      Value = AB + 0.25 * (CD - AB)
      Value = 0.25 + 0.25 * (-0.75 - 0.25)
      Value = 0.25 + 0.25 * (-1)
      Value = 0 (?)
      I don't think I should be getting zero here, and if I try it at any other coordinate. I feel like I'm missing something so obvious and I feel stupid for bothering you again just for it, so even if you don't reply I completely understand and would want to thank you for all the help you've given so far, but if you DO reply, that would be very much appreciated.

    • @FrSIBYLA
      @FrSIBYLA 5 лет назад

      I made a spreadsheet to demonstrate my problem:
      docs.google.com/spreadsheets/d/16aDEr6T9Jv82YNCMaCgrImKTAcj1AxdO7mg5YqsLuUI/edit?usp=sharing

  • @fiestlast5277
    @fiestlast5277 4 года назад

    what is the g-> supposed to mean?

  • @lucasbalfagon4573
    @lucasbalfagon4573 3 года назад +1

    It was a really good tutorial, but I still don't understand what is the purpouse of the linear interpolation in the process. You do that linear interpolation with every single pixel on the grid, on depending on the value you give it a color?

    • @kappascopezz5122
      @kappascopezz5122 3 года назад +2

      For each pixel, you have 4 dot products with each coming from one of the corners of the square the pixel is in.
      What the interpolation does is that it combines these 4 products you have into one result, where the one coming from the nearest corner of the square should matter most.

  • @alexcubed4270
    @alexcubed4270 5 лет назад

    Great video. I have a few questions: Am I right in saying the dot product values range from -2 to 2?
    Is FracX basically the x-component of the distance vector (same goed for FracY)?
    Once you calculated the linear interpolation value, you then put that value in the Fade Function, right?
    I know this video has been uploaded for quite a long time, so I hope you’ll still have time and you’ll still be able to see this and respond :)

    • @Fataho
      @Fataho  5 лет назад

      Hi, thanks for the great questions.
      1. I think yes. But I paste here some info from stackoverflow.com: "When you calculate dot product, you may get values outside -1 +1 range, however during interpolation step, final value falls in -1 +1 range. This is because distance vectors of dots products that are interpolated point into opposite directions of interpolated axis. During the last interpolation output will not exceed -1 +1 range." At least this is how I remember, but if you want to be sure 100%, do the math and also tell me :D
      2. Yes.
      3. Yes.
      I also recommend to watch my 4th tutorial: ruclips.net/video/iW4nFygKAjw/видео.html, because the programming part is very counter-intuitive compared with theory.

    • @alexcubed4270
      @alexcubed4270 5 лет назад

      Fataho thanks for your quick response! I have watched some parts of your fourth tutorial but the implementation where I need it for is a lot different. So I prefer to use this tutorial to understand how it works and then work out the ‘code’ by myself. Now my response on your answers:
      1) Yeah that’s exactly what I had guessed that would happen. I haven’t actually done the maths to prove if it’s indeed exactly like this, but I’m pretty confident it is.
      2) After the time I made my first comment I had rewatched this video a few times and I think what I said at my second question isnt correct. Because there are 4 distance vectors (1 for each corner in 2D) so fracx and fracy would be the x and y component of the distance vector from to origin to the local pixel position. (I think this is the correct way of phrasing it, right?)
      3) Just to get this clear to me, exactly which values do I need to pass through the fade function? Cause initially I thought the end product of all the linear interpolation steps (called Value in the video) needed to go through the fade function. Then I realised that doesnt range from 0 to 1 so I thought I had to put fracx and fracy through the fade function. But now i’m actually not quite sure. In short; could you explain which values need to go through the fade function?
      Thanks for your time and help :)

    • @Fataho
      @Fataho  5 лет назад

      2. Yes.
      3. You have to add fracX and fraY values into the fade function. These values are adjusted a little bit by the fade function, so when you use them later in linear interpolation you will not get these rectangle artifacts. All squares become connected smoothly.
      If I remember correctly, the fade function is not necessary, if you use slower cosine interpolation. However I think fade function + linear interpolation is faster compared to cosine interpolation alone.

  • @user-rd3lj4gn4s
    @user-rd3lj4gn4s 4 года назад +9

    Эх Ёзас, рассказал бы ты тоже самое по-русски, цены б тебе не было бы!

  • @Raffael-Tausend
    @Raffael-Tausend 4 года назад +6

    so you say minecraft terrain is a series of dot products? simple enough!

  • @mond2440
    @mond2440 2 года назад +1

    Why does it have an attribute called frequency? Frequencies should be measured in Hz right? How come?

    • @EngineeringFun
      @EngineeringFun 2 года назад +3

      Replace time with space and you get "spatial frequency".

    • @vial7912
      @vial7912 8 месяцев назад

      Well, the frequency that I use the toilet is not measured in Hz...

    • @mond2440
      @mond2440 8 месяцев назад

      @@vial7912 it could be with a sample size large enough. An average of twice per day is equal to 1/43200 Hz

  • @ctheart8833
    @ctheart8833 7 лет назад +1

    is the improved Perlin noise free to use , can I use it in a commercial program legally . If not what is the alternative . Thank you.

    • @Fataho
      @Fataho  7 лет назад

      It is very good question and I do not have 100% answer to it. According to Wikipedia:
      "Perlin did not apply for any patents on the algorithm, but in 2001 he was granted a patent for the use of 3D+ implementations of simplex noise for texture synthesis." however wiki does not tell anything about improved Perlin noise.
      I have found something here, but I am not exactly sure if this is the right patent:
      www.google.com/patents/US6867776
      If you still will have problems in finding required information, you can contact author himself, check his webpage:
      www.kenperlin.com/
      If you will find the answer, you are welcome to share it here. I am sorry that I could not help you more.

    • @ctheart8833
      @ctheart8833 7 лет назад

      Thanks for the reply . Can you suggest some other function that produces similar kind of result but is free to use . At this point I am using Perlin noise to produce smooth motion in a 2D and 3D plane instead of using random function which does not produces smooth motion .

    • @Fataho
      @Fataho  7 лет назад

      As far as I know, you cannot patent algorithm, you can patent only implementation of it for something, for instance, for texture generation, therefore it is most likely that you can use all of them for smooth animations.
      I am almost (99,9%) sure that Perlin Noise original algorithm is free to use and for smooth animations it should work just fine. Also you can try Value noise (again, I am almost sure that it is free to use):
      web.archive.org/web/20080724063449/freespace.virgin.net/hugo.elias/models/m_perlin.htm
      Even more algorithms (c++ source code included) can be found here (Check Perlin noise algorithm):
      code.google.com/archive/p/fractalterraingeneration/
      For 100% certainty you will have to do some research by your self.

    • @ctheart8833
      @ctheart8833 7 лет назад

      can you give any link to the Perlin Noise original algorithm code . that would be helpful .

    • @Fataho
      @Fataho  7 лет назад

      code.google.com/archive/p/fractalterraingeneration/wikis/Perlin_Noise.wiki
      And here you will find a source code:
      code.google.com/archive/p/fractalterraingeneration/downloads

  • @oz7352
    @oz7352 3 года назад +4

    Great tutorial, it helped me understand a lot of things, thank you for that.
    But now there something i don't get: When you do the bilinear interpolation.
    Correct me if i'm wrong but, what i understand is, you do Twice the linear interpolation of the corners and the point. But if you do that you get 2 values. How do i put them together? Is it a simple multiplication, or am i missing a formula?

    • @MajinHico
      @MajinHico 3 года назад +1

      I think you also need interpolate these 2 values, which you get. See 16:33 there is a 2 blue interpolations and one green interpolation.

    • @oz7352
      @oz7352 3 года назад

      @@MajinHico Oh yeah, i get it now. I thought you only had to interpolate once on the X axis, but in fact, you have to do it twice. And then, as you said, re interpolate these 2 values to get the final one. Thank you !

  • @natancosta4982
    @natancosta4982 4 года назад +3

    What is FracX and fracY? (Awesome tutorial)

    • @Penguin_Spy
      @Penguin_Spy 4 года назад

      the fraction X and Y coordinates of where the pixel is in the square. at 16:08, it is labeled on the edges of the square. at 13:07 he explains it with the visual.

  • @maksj-lewis4504
    @maksj-lewis4504 6 лет назад +3

    Great tutorial although sometimes you could work on your wording but otherwise great!

    • @Fataho
      @Fataho  6 лет назад +1

      Thank you, I am working on it.

  • @sebastiangehteuchnixan42
    @sebastiangehteuchnixan42 3 года назад +2

    what does fracX and fracY mean ? (16:10)

    • @endidasdis
      @endidasdis 3 года назад +2

      They are the decimal parts of your input x and y. For noise(1.45, 7.25), fracX = 0.45 and fracY = 0.25

    • @BearTheCoder
      @BearTheCoder 3 года назад

      The idea behind FracX and FracY is the same.
      So, if you look at the formula below FracX:
      If FracX = 1, then the output of the entire formula is equal to DotD
      if FracX = 0, then the output is equal to DotC
      if FracX = 0.5, then the output is the average, or a perfect blend, between DotC and DotD
      That being said,
      If the x-coordinate of DotC = 1 and the x-coordinate of DotD = 2
      then if the x-coordinate of FracX = 1.70, we can subtract the x-coord of DotC from the x-coord of FracX
      making FracX = 0.70, making the output of the formula more heavily weighted towards DotD.

  • @pikcelalien7793
    @pikcelalien7793 3 года назад +1

    I know this is old video. But i watch other videos they saying noise function out put is between 0 and 1 but here its is -1 and 1 can't understand

    • @sarahwrt4356
      @sarahwrt4356 3 года назад +1

      It's not a problem in most cases. Usually only one implementation is used in a project and the output is commonly mapped to a different range, specific for use.

    • @BearTheCoder
      @BearTheCoder 3 года назад +2

      The output of the dot product is -1 to 1 which is a used in Perlin Noise, but generally the output is shifted to 0 to 1 in order to be used as pixel values.

    • @tupoiu
      @tupoiu Год назад

      To remap the range from (-1 to 1) to (0 to 1) use return 0.5*(noise + 1) instead of return noise at the end of your function.

    • @mgord9518
      @mgord9518 Год назад

      I believe the original implementation was a range from -1 to 1. Many new ones may shift that to 0 to 1 to make it slightly easier to use though

  • @asdfgh6906
    @asdfgh6906 2 года назад +12

    Нихуя у тебя акцент, брат. Спасибо за объяснение

  • @XxearthxX844
    @XxearthxX844 6 лет назад

    is error at 10:10? should scale 8x8 be top = square and 8x2 bottom = rectangle? i like the tutorial to understand

    • @Fataho
      @Fataho  6 лет назад +2

      If I understand your question correctly, I can say that there is no error, because 8x2 results in top image and 8x8 in bottom. Everything depends on the image height and width. If you want 8x8 to be non-stretched you should use same length for the with and the height of the image. For instance, 1024 x 1024 image will be non-stretched if we use 8x8. If the image size is 1024 x 128, you will have to fit 8 rectangles to 128, which would lead to stretched image. For better understanding, you should try to do Perlin Noise programming by your self and try various options. See Tutorial 4 for programming part. I hope this helps. Do not hesitate to ask if you have more questions.

  • @emilnmhansen
    @emilnmhansen 6 лет назад +1

    I don't understand the outputs. You use a function which require a number in the range of [0,1], but the output of perlinnoise you made is [-1, 1]. How come?

    • @Fataho
      @Fataho  6 лет назад

      Hey. Thank you for your interest in Perlin Noise. Could you be more specific about which function you are talking? You can add negative values in PerlinNoise function, see this part of the tutorial 3:47

    • @emilnmhansen
      @emilnmhansen 6 лет назад

      The fadefunction

    • @Fataho
      @Fataho  6 лет назад +1

      I see now. Thank you for a good question. You add fraction values of one rectangle (0 to 1) in the fade function, this values are later modified by dot and linear interpolation functions, which leads to -1 +1 final output. See my 4th tutorial, where I show step by step how to write 2D Perlin noise code in Java. In this tutorial I tired to explain the principle how the algorithm works, however the implementation in programming language is not that straight forward.

    • @emilnmhansen
      @emilnmhansen 6 лет назад

      I will check it out. Have been trying to figure out perlin noise for the past two weeks, so hopefully it helps :)

    • @Fataho
      @Fataho  6 лет назад +1

      Emil Hansen, Perlin noise can be hard to understand and most of the ppl fail to do so. Based on your good question I can see that you are in the right direction. Implementation part may be hard too, especially dot product part, but keep going, you are not that far. Do not hesitate to ask if you have more questions.

  • @dancingbread7015
    @dancingbread7015 5 лет назад +16

    *_OUR_* perlin noise

    • @TheFlexXMLG
      @TheFlexXMLG 4 года назад

      ahahhaha i see what you did there...

  • @lucasbalfagon4573
    @lucasbalfagon4573 3 года назад +1

    Hi, I'm having some doubts related to the fade function. Fisrt of all, we must substitute the pixel value in the function to obtain a new value in order to get the fade effect? And if it is like this, how do we apply it to negative values? The fade function doesn't wprk with them. Thank you.

    • @pitri_hub
      @pitri_hub 3 года назад

      I think the fade function is used to calculate the new interpolation "position" between the points for the linear interpolation, which will always be between 0 and 1 (0 = beginning, 1 = end). The actual values what we want to interpolate is completely irrelevant for the fade function, in this case.
      While it will still be a linear interpolation, we won't sample it with linear "speed", but slowly accellerate towards the center and then decellerate for a smooth and slow finish.

  • @UnidayStudio
    @UnidayStudio 7 лет назад

    The fade function is very hard to understand how to implement :/ btw, great tutorial!

    • @Fataho
      @Fataho  7 лет назад

      Hello. I have created tutorials how to implement Perlin noise with Java programming language.
      ruclips.net/video/5NSaDKqL22I/видео.html
      ruclips.net/video/iW4nFygKAjw/видео.html
      In the last one (at time 13 : 40) I talk a bit more about fade function. I you still will not understand it, you can write me an email info@fataho.com and tell me a bit more about your problem and I will try to help you.

  • @timber4785
    @timber4785 2 года назад +5

    1:26 oks like the old netherrack texture from minecraft

  • @rickdellis_
    @rickdellis_ 5 лет назад

    Thumbs up for Microsoft Paint. RIP

  • @MaulanaRamaIbrahim
    @MaulanaRamaIbrahim 3 года назад +1

    thumbnail looks like a dancing square

    • @MajinHico
      @MajinHico 3 года назад

      Well, Perlin noise is a dancing squares (cubes)

    • @AethernaLuxen
      @AethernaLuxen 3 года назад

      ‎‎‎‎‎‎‎

  • @DasAntiNaziBroetchen
    @DasAntiNaziBroetchen 4 года назад +34

    You sound like you almost care.

  • @The_Arkadium
    @The_Arkadium 4 года назад +4

    Русский шоле?

  • @FredoCorleone
    @FredoCorleone 5 лет назад +4

    Understood... Nothing.

    • @Fataho
      @Fataho  5 лет назад +2

      Perlin Noise can be hard to understand. If my tutorial was not clear for you, maybe you should try this one: flafla2.github.io/2014/08/09/perlinnoise.html
      I hope it helps.

  • @somedudeontheinternet142
    @somedudeontheinternet142 2 года назад +12

    Praise Mother Russia, Commrade!

  • @iiii-dw1jx
    @iiii-dw1jx 4 года назад +6

    Sounds like crap