თუ თქვენ ხედავთ ამ შეტყობინებას, ესე იგი საიტზე გარე რესურსების ჩატვირთვისას მოხდა შეფერხება.

If you're behind a web filter, please make sure that the domains *.kastatic.org and *.kasandbox.org are unblocked.

ძირითადი მასალა

ორგანზომილებიანი ხმაური

1-განზომილებიან სამყაროში მცხოვრები ხმაურის იდეა მნიშვნელოვანია, რადგან მას პირდაპირ მივყავართ 2-განზომილებიანი სამყაროს განხილვისკენ. დავფიქრდეთ ამაზე. 1-განზომილებიანი ხმაურის შემთხვევაში გვაქვს მნიშვნელობების მიმდევრობა, რომელშიც თითოეული მოცემული მნიშვნელობა არის მისი მეზობლის მსგავსი. ვინაიდან მნიშვნელობა არის ერთ განზომილებაში, მას ჰყავს მხოლოდ 2 მეზობელი: მნიშვნელობა, რომელიც მის წინაა (გრაფიკზე აღნიშნულია მის მარცხნივ), და მნიშვნელობა, რომელიც მის მოსდევს (გრაფიკზე აღნიშნულია მის მარჯვნივ).
ფიგურა I.10: 1-განზომილებიანი ხმაური
2-განზომილებიანი ხმაური აზრობრივად ზუსტად ანალოგიურად მუშაობს. განსხვავება ისაა, რომ ამ შემთხვევაში ვუყურებთ მნიშვნელობებს არა წრფივი გზის გაყოლებაზე, არამედ მნიშვნელობებს, რომლებიც უჯრედებში სხედან. წარმოიდგინეთ უჯრედებიანი ფურცელი, რომლის თითოეულ უჯრედში ჩაწერილია რიცხვი. მოცემული მნიშვნელობა იქნება მისი ყველა მეზობლის მსგავსი: ზემოთ, ქვემოთ, მარჯვნივ, მარცხნივ და დიაგონალების გაყოლებაზე.
ფიგურა I.11: 2-განზომილებიანი ხმაური
თუ ამ უჯრედებიანი ფურცლის ვიზუალიზაციას გავაკეთებთ ისე, რომ თითოეულ მნიშვნელობას მივანიჭებთ ფერის შესაბამის სიკაშკაშეს, მაშინ მივიღებთ ღრუბლების მსგავს რაღაცას. თეთრი ზის ღია ნაცრისფრის გვერდით, რომელიც ზის ნაცრისფრის გვერდით, რომელიც ზის მუქი ნაცრისფრის გვერდით, რომელიც ზის შავის გვერდით, რომელიც ზის მუქი ნაცრისფრის გვერდით და ა.შ.
სწორედ ამიტომ შეიქმნა ხმაური თავიდან. რამდენიმე პარამეტრს ან ფერს გამოცდით, რათა მიიღოთ სურათი, რომელიც ჰგავს მარმარილოს, ხეს ან ნებისმიერ სხვა ორგანულ სტრუქტურას.
მოდით, ვნახოთ, როგორ შევქმნათ 2-განზომილებიანი ხმაური ProcessingJS-ში. თუ გსურთ ფანჯარაში თითოეული პიქსელის შემთხვევითად შეფერადება, დაგჭირდებათ ჩადგმული ციკლი, რომელიც გადაუყვება თითოეულ პიქსელს და აირჩევს შემთხვევით სიკაშკაშეს.
თითოეული პიქსელის noise() ფუნქციის მიხედვით გასაფერადებლად ზუსტად იგივეს ვიზამთ, მხოლოდ random()-ის გამოძახების ნაცვლად გამოვიძახებთ noise()-ს.
var bright = map(noise(x,y), 0, 1, 0, 255);
აზრობრივად ეს კარგი დასაწყისია — ის გაძლევთ ხმაურის მნიშვნელობას თითოეული (x,y) ადგილმდებარეობისთვის ჩვენს 2-განზომილებიან სამყაროში. პრობლემა ისაა, რომ მას არ ექნება ისეთი ღრუბლიანობის ხარისხი, როგორიც გვსურს. პიქსელ 200-იდან პიქსელ 201-ზე გადახტომა ზედმეტად დიდი ნახტომია ჩვენი ხმაურისთვის. როდესაც ჩვენს 1-განზომილებიან ხმაურთან ვმუშაობდით, ჩვენი დროის ცვლადს 0,01-ით ვზრდიდით ყოველ ჯერზე და არა 1-ით! ამ პრობლემის სამკაოდ კარგი გადაწყვეტაა ხმაურის არგუმენტებისთვის სხვადასხვა ცვლადის გამოყენება. მაგალითად, შეგვიძლია, გავზარდოთ ცვლადი xoff ყოველ ჯერზე, როცა ვმოძრაობთ ჰორიზონტალურად, და yoff ცვლადი ყოველ ჯერზე, როდესაც ვმოძრაობთ ვერტიკალურად ჩადგმულ ციკლებში.
ჩვენ გამოვცადეთ პერლინის ხმაურის რამდენიმე ტრადიციული გამოყენება. ერთგანზომილებიანი ხმაურისას ვიყენებდით მოსწორებულად განაწილებულ მნიშვნელობებს ობიექტისთვის ადგილმდებარეობის მისანიჭებლად, რათა ხეტიალის ვიზუალი მიგვეცა. ორგანზომილებიანი ხმაურით ჩვენ შევქმენით ღრუბლიანი კანონზომიერება მოსწორებულად განაწილებული მნიშვნელობებით პიქსელების სიბრტყეზე. მიუხედავად ამისა, მნიშვნელოვანია, გვახსოვდეს, რომ პერლინის ხმაურის მნიშვნელობები მხოლოდ და მხოლოდ მნიშვნელობებია. ისინი ავტომატურად დაკავშირებული არ არის პიქსელების ადგილმდებარეობებსა თუ ფერებთან. ნებისმიერი ისეთი მაგალითი ამ სახელმძღვანელოებში, რომელსაც აქვს ცვლადი, შეგვიძლია, ვაკონტროლოთ პერლინის ხმაურით. როდესაც მოდელირებას ვუკეთებთ ქარის ძალას, მისი ძალის კონტროლი შესაძლებელია პერლინის ხმაურით. იგივე ხდება ფრაქტალის ხის კანონზომიერებაში ტოტებს შორის კუთხეებისათვის, ან ნაკადის ველში არსებულ ბადეზე მოძრავი ობიექტების სიჩქარისა და მიმართულებისთვის, როგორც ეს ქვემოთ მოცემულ პროგრამაშია.
წინა სახელმძღვანელო დავიწყეთ შემთხვევითობაზე დაყრდნობის განხილვით. ხშირ შემთხვევაში, ეს არის ყველაზე ცხადი პასუხი იმ შეკითხვებზე, რომელთაც გამუდმებით ვსვამთ — როგორ უნდა იმოძრაოს ამ ობიექტმა? რა ფერის უნდა იყოს ის? ეს ცხადი პასუხი აგრეთვე შეიძლება, იყოს ზარმაციც.
ამ სახელმძღვანელოს დასრულებისას უნდა აღვნიშნოთ, რომ ასევე მარტივად შეიძლებოდა, პერლინის ხმაურის საყრდენად გამოყენების ხაფანგში ჩავვარდნილიყავით. როგორ უნდა იმოძრაოს ამ ობიექტმა? პერლინის ხმაური! რა ფერის უნდა იყოს ის? პერლინის ხმაური! რამდენად სწრაფად უნდა გაიზარდოს ის? პერლინის ხმაური!
ამ ყველაფრის აზრი არის არა ის, რომ უნდა გამოიყენოთ ან არ უნდა გამოიყენოთ შემთხვევითობა ან პერლინის ხმაური. აზრი არის ის, რომ თქვენი სისტემის წესებს განსაზღვრავთ თქვენ და რაც უფრო დიდია თქვენი არსენალი, მით უფრო მეტი გასაქანი გექნებათ ამ წესების იმპლემენტაციისთვის. ამ სახელმძღვანელოების მიზანია, დაგეხმაროთ თქვენი არსენალის შევსებაში. თუ მხოლოდ ერთი ტიპის შემთხვევითობა იცით, მაშინ თქვენს ყველა დიზაინს ექნება მხოლოდ ერთი ტიპის შემთხვევითობა. პერლინის ხმაურზე ცოტა ვარჯიშის შემდეგ გადავალთ კიდევ ერთი ტიპის იარაღზე — ვექტორებზე!
ეს „ბუნებრივი სიმულაციების" კურსი ეფუძნება დანიელ შიფმენის წიგნს "კოდის ბუნებას", ის გამოყენებულია ლიცენზიით Creative Commons Attribution-NonCommercial 3,0 Unported License.

გსურთ, შეუერთდეთ დისკუსიას?

პოსტები ჯერ არ არის.
გესმით ინგლისური? დააწკაპუნეთ აქ და გაეცანით განხილვას ხანის აკადემიის ინგლისურენოვან გვერდზე.