This shows you the differences between two versions of the page.
|
gp:laboratoare:04 [2026/03/23 10:40] maria_anca.balutoiu [Tasks] |
gp:laboratoare:04 [2026/03/27 20:01] (current) maria_anca.balutoiu [Tasks] |
||
|---|---|---|---|
| Line 28: | Line 28: | ||
| - Generați procedural folosind BSP un dungeon. | - Generați procedural folosind BSP un dungeon. | ||
| - **Bonus.** Generați un dungeon cu minim 3 etaje. | - **Bonus.** Generați un dungeon cu minim 3 etaje. | ||
| - | |||
| - | |||
| - | <hidden> Laboratorul 04. Generare Procedurală de Teren | ||
| - | Diamond Square Algorithm | ||
| - | Algoritmul Diamond-Square este o tehnică procedurală utilizată pentru a genera heightmaps. Acesta funcționează prin subdivizarea recursivă a unui grid și aplicarea unor perturbări aleatorii pentru a crea variații cu aspect natural. | ||
| - | |||
| - | Cum funcționează? | ||
| - | Inițializare. Se crează un grid de zerouri. Cele 4 colțuri sunt setate la o valoare aleatoare dintr-un interval predefinit de posibile înălțimi. | ||
| - | Pasul Pătrat. Se calculează punctul din mijloc al fiecărui pătrat, făcând media aritmetică ale celor 4 colțuri la care se adaugă o valoare aleatoare dintr-un interval predefinit. | ||
| - | Pasul Diamant. Se calculează punctul din mijloc al fiecărui diamant, făcând media aritmetică ale celor 4 colțuri ale diamantului la care se adună o valoare aleatoare din intervalul predefinit de valori aleatoare. În cazul în care diamantul este incomplet, se iau în calcul doar colțurile existente în calculul mediei aritmetice. | ||
| - | Recursivitate. Intervalul predefinit de valori aleatoare se înjumătățește. Se reiau pașii pătrat și diamant până se aleg calculează toate valorile din grid. | ||
| - | |||
| - | Fractal Noise | ||
| - | Pentru a îmbunătăți realismul terenului generat, tereneul se poate genera folosind fractal noise, care combină mai multe straturi de zgomot Perlin la frecvențe și amplitudini diferite. | ||
| - | |||
| - | float CalculateFractalNoise(int x, int y) | ||
| - | { | ||
| - | for (i = 0; i < octaves; i++) | ||
| - | { | ||
| - | xCoord = (float)x / width * scale * frequency; | ||
| - | yCoord = (float)y / height * scale * frequency; | ||
| - | |||
| - | perlinValue = Mathf.PerlinNoise(xCoord, yCoord) * 2 - 1; | ||
| - | noiseHeight += perlinValue * amplitude; | ||
| - | |||
| - | amplitude *= persistence; | ||
| - | frequency *= lacunarity; | ||
| - | } | ||
| - | |||
| - | return (noiseHeight + 1) / 2; // Normalize to 0 - 1 | ||
| - | } | ||
| - | |||
| - | Tasks | ||
| - | Implementați algoritmul diamond-square. | ||
| - | Deformați un teren, folosind fractal noise în Unity. | ||
| - | Bonus. Generați procedural multiple biomes. (Puteți porni de la acest exemplu: [[https://www.youtube.com/watch?v=aZyrimErjJ0]])</hidden> | ||