Differences

This shows you the differences between two versions of the page.

Link to this comparison view

gp:laboratoare:02 [2025/03/11 16:34]
maria_anca.balutoiu [Implementare]
gp:laboratoare:02 [2025/03/14 15:53] (current)
maria_anca.balutoiu [Implementare]
Line 77: Line 77:
 <​code>​ <​code>​
 def getConstantVector(v):​ def getConstantVector(v):​
-    h = v % 3+    h = v % 4
  
     if h == 0:     if h == 0:
Line 104: Line 104:
 {{ :​gp:​laboratoare:​perlin_noise_nonlinear_interpolation.png?​500 |}}  {{ :​gp:​laboratoare:​perlin_noise_nonlinear_interpolation.png?​500 |}} 
  
-<​hidden>​+Pentru a obține de acest rezultat, Ken Perlin s-a folosit de funcția **fade** pentru a uniformiza valorile de input ale interpolării:​
  
 +<​code>​
 +def fade(t):
 +    return ((6 * t - 15) * t + 10) * t * t * t
 +</​code>​
  
-După cum puteți vedea, schimbarea dintre ceea ce este inferior lui 1 șceea ce este superior lui 1 este bruscăCeea ce ne dorim este ceva mai lin, ca acesta: +==== Tasks ==== 
- +  - Implementați algoritmul Perlin Noise. Salvațrezultatul într-o imagine PNG
-Cu interpolarea liniarăam folosi xf ca valoare de interpolare (t). În schimb, vom transforma xf șyf în u și v. O vom face astfel încât, având în vedere o valoare a t între 0,0 și 0,5 (exclus), valoarea transformată va fi ceva mai mică (dar plafonată la 0,0)De asemenea, având în vedere o valoare a t între 0,5 (exclus) și 1,0, valoarea transformată ar fi puțin mai mare (dar plafonată la 1,0). Pentru 0,5, valoarea transformată ar trebui să fie 0,5. Acest lucru va avea ca rezultat ​tranziție curbată, ca în figurile 5 și 6+  - Într-un proiect Unitygenerațun teren cu denivelărifolosind Perlin Noise. 
- +  - **Bonus ​1.** Adăugați încă o octavă în implementarea algoritmului
-Pentru a face acest lucru, avem nevoie ​de ceva numit curbă de ușurință: este doar o curbă matematică care arată astfel+  - **Bonus 2.** Implementați efectul ​de plasmă specific Perlin Noise. Exemplu: 
- +<​html>​ 
-Dacă te uiți cu atenție, poți vedea că pentru o intrare (xf sau yf, axa x) între 0,0 și 0,5, ieșirea (u sau v, axa y) este puțin mai aproape de 0,0Și pentru o valoare între 0,5 și 1,0, ieșirea este puțin mai aproape de 1,0Pentru x=0,5, y=0,5. Asta va face treaba perfect.+<p style="​text-align:​center;​margin:auto;">​ 
 +<iframe width="​560"​ height="​315"​ src="​https://​www.youtube.com/​embed/​9B89kwHvTN4?​si=McVA2s62UZGbUNTF&​amp;​start=242" title="​YouTube video player"​ frameborder="​0" allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share"​ referrerpolicy="​strict-origin-when-cross-origin"​ allowfullscreen></​iframe>​ 
 +</​p>​ 
 +</​html>​
  
-Curba de mai sus este funcția ​de ușurință folosită de Ken Perlin în implementarea lui Perlin NoiseEcuația este 6t5-15t4+10t3. Aceasta se mai numește și funcție de estompare. În codarată așa:</hidden>+<note tip>În Unity C# există ​funcția ​**float Mathf.PerlinNoise(float xfloat y)**</note
  
 +==== Resurse ====
 +  * [[https://​www.youtube.com/​watch?​v=9B89kwHvTN4]]
 +  * [[https://​rtouti.github.io/​graphics/​perlin-noise-algorithm]]
 +  * [[https://​www.youtube.com/​watch?​v=vFvwyu_ZKfU]]
gp/laboratoare/02.1741703648.txt.gz · Last modified: 2025/03/11 16:34 by maria_anca.balutoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0