Differences

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

Link to this comparison view

gp:laboratoare:04 [2025/03/23 19:08]
maria_anca.balutoiu [Tasks]
gp:laboratoare:04 [2026/03/27 20:01] (current)
maria_anca.balutoiu [Tasks]
Line 1: Line 1:
-===== Laboratorul 04. Generare ​Procedurală ​de Teren ===== +===== Laboratorul 04. Generarea ​Procedurală ​a unui Dungeon ​===== 
-==== Diamond Square Algorithm ==== +Implementarea procedurală de dungeon-uri implică crearea de algoritmi care pot genera în mod autonom modele de dungeon diverse și jucabile. Acest proces include de obicei definirea structurilor camerei, conectarea lor cu coridoare și asigurarea că aspectul general ​este coerent și navigabil. Pași pentru a putea genera un dungeon: 
-Algoritmul Diamond-Square ​este o tehnică procedurală utilizată pentru a genera heightmapsAcesta funcționează prin subdivizarea recursivă a unui grid și aplicarea unor perturbări aleatorii ​pentru a crea variații cu aspect natural.+  - Definirea structurii dungeon-ului 
 +    * **Grid based layout:** Se utilizează un grid, în care fiecare celulă reprezintă ​posibilă cameră sau un posibil segment de coridor. 
 +    * **Template-uri pentru camere:** Se utilizează diverse templete-uri de diferite dimensiuni și forme. Aceste template-uri pot fi fie prefabs, fie modele generate procedural. 
 +  - Algoritm de poziționare a camerelor 
 +    * **Random Walk Algorithm:​** Se începe dintr-un punct central și se efectuează o cale aleatoare ​pentru a plasa camereAceastă metodă creează modele organice ​și neliniare. 
 +    * **Binary Space Partitioning (BSP):** Se împarte spațiul gridului recursiv în secțiuni mai mici pentru a plasa camere, asigurând o distribuție echilibrată
 +  - Conectarea camerelor 
 +    * **Generarea coridorului:​** După ce s-au plasat camerele, se generează coridoare ​pentru a crea conexiuniToate camerele ar trebui să fie conectate. 
 +    * **Pathfinding:​** Se implementează algoritmi precum A* pentru a asigura cele mai scurte și mai logice căi între camere. 
 +  - Vizualizarea dungeon-ului 
 +    * Tilemaps pentru 2D 
 +    * Instanțiere de prefabs pentru 3D   
 +  - Optimizări și Îmbunătățiri 
 +    * Occlusion Culling 
 +    * Elemente decorative
  
-=== Cum funcționează? ​=== +==== BSP ==== 
-  - **Inițializare.** Se crează un grid de zerouri. Cele 4 colțuri sunt setate la valoare aleatoare dintr-un interval predefinit ​de posibile înălțimi. +BSP urmează o abordare recursivă ​de partiționare a spațiului în care o zonă mare este împărțită continuu ​în secțiuni mai miciPașii includ:
-  - **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ă ​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 predefiniti 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 ==== +  - **Inițializarea spațiului.** Se începe cu o regiune dreptunghiulară mare care reprezintă întreaga zonă dungeon-ului. 
-Pentru ​îmbunătăți realismul terenului generattereneul se poate genera folosind fractal noise, care combină mai multe straturi de zgomot Perlin la frecvențe și amplitudini diferite+  - **Divizări recursive.** Se împarte recursiv spațiul în două subregiuni folosind fie o împărțire verticalăfie orizontală. Se continuă împărțirea până când regiunile ating o dimensiune minimă predefinită
- +  ​- ​**Plasarea camerei.** În fiecare subregiune, se plasează aleatoriu o cameră care se încadrează în spațiuCamera nu trebuie neapărat să acopere întreaga subregiunepermițând amenajări mai naturale. 
-<​code>​ +  ​- ​**Conectarea camerelor.** Odată ce camerele sunt amplasate, coridoarele sunt create pentru a le conecta.
-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(xCoordyCoord) * 2 - 1; +
-        ​noiseHeight += perlinValue ​amplitude;​ +
- +
-        amplitude ​*= persistence;​ +
-        frequency ​*= lacunarity;​ +
-    } +
- +
-    return (noiseHeight + 1) / 2; // Normalize to 0 - 1 +
-+
-</​code>​+
  
 ==== Tasks ==== ==== Tasks ====
-  - Implementați algoritmul diamond-square+  - Generați procedural folosind BSP un dungeon
-  - Deformați un teren, folosind fractal noise în Unity. +  - **Bonus.** Generați un dungeon cu minim 3 etaje.
- +
-<​hidden>​ +
-</​hidden>​+
  
gp/laboratoare/04.1742749716.txt.gz · Last modified: 2025/03/23 19:08 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