Devoir 3

  • Perioada de lucru: 11/12/2018 – 15/01/2019
  • Termen de predare: 15/01/2019, 23:55

New Vegas

Scopul acestei teme este de a stimula creativitatea prin generarea procedurala a unui oras in 3D. Va veti folosi cunostintele din domeniul graficii asistate de calculator, anume generare de modele 3D, transformari geometrice, si iluminare.
Tema isi propune un minim de complexitate, descris in cerintele ce urmeaza, insa va incurajeaza sa veniti cu idei si abordari proprii, astfel incat sa va exercitati capabilitatile programatice si creativitatea, prin generare procedurala.
Utilitatea deprinderilor dobandite in urma crearii acestui mediu virtual se regaseste in industrii precum: jocuri video(mai ales open world, e.g. No Man's Sky), filme(Hollywood CGI), retail(e.g. geometric patterns).

Generare procedurală

Generarea procedurala este procesul prin care entitati ale unei clase sunt generate prin instantierea repetata de obiecte(indivizi) de acea clasa, fiecarui individ atribuindu-se valori pseudoaleatoare, ghidate de un set de reguli.
Desi aceasta definitie pare abstracta, avantajul este ca nu sunteti constransi in vreun fel de a genera cladirile si strazile, astfel ca puteti utiliza aparate matematice la alegere pentru generarea geometriei si astfel puteti fi foarte creativi.

Orașul. Clădiri și străzi

Scopul generarii procedurale in aceasta tema este de a crea un oras virtual.
Elementele din acesta sunt:

  • Cladiri
  • Strazi
  • Elemente decorative(e.g. elemente de trafic, iluminare stradala, etc.)

Cladirile si strazile vor fi generate exclusiv procedural.
Elementele decorative nu e nevoie sa fie generate procedural, pot fi meshe importate de voi, insa plasarea lor in scena trebuie sa fie pur procedurala. Alegerea elementelor decorative este lasata la latitudinea voastra. Trebuie sa aveti minim trei tipuri de elemente decorative.

Nu sunteti constransi in a nu adauga elemente decorative pe cladiri, insa ferestrele cladirilor nu sunt elemente decorative.

Cerinte

Se va genera procedural o scena cu elementele mentionate mai sus.
Utilizatorul se poate plimba prin intreaga scena utilizand camera din laborator.
La fiecare noua rulare a aplicatiei, orasul va arata diferit.

Clădrile

Cladirile sunt formate prin asamblare de primitive cu geometrie alterata procedural. Asamblarea este controlata printr-un proces pseudorandom creat de voi. Primitivele pot fi, de exemplu, cilindri cu distanta nu neaparat uniforma intre oricare 2 puncte succesive de pe conturul cercului generator, cu numar variabil de puncte, etc. Pot fi paralelipipede, etc.
Asamblarea primitivelor constituente unei cladiri consta in aplicarea de transformari (scalare, translatie, rotatie) acestora dupa un set de reguli(constrangeri) creat de voi astfel incat rezultatul arata ca o potentiala cladire.

Străzile

Algoritmul de generare a strazilor este lasat la latitudinea voastra, cu precizarea ca intre 2 rulari succesive ale aplicatiei, reteaua de drumuri arata diferit ca topologie si ca distanta intre strazi. Reteaua de drumuri trebuie sa fie conexa, adica exista un drum intre oricare 2 intersectii.

Geometriile cladirilor nu se vor suprapune peste geometriile strazilor.

Minimul de complexitate implica doar strazi pe verticala si pe orizontala. Cladirile vor fi plasate in celulele formate intre strazi. Minimul de complexitate implica o cladire per celula.

Elementele decorative

Orasul va contine elemente decorative plasate printr-un algoritm procedural, dupa un set de reguli ales de voi, astfel ca nu se intersecteaza cu alte elemente, iar pozitia, rotatia si dimensiunea acestora le incadreaza corespunzator in scena.
Elementele pot fi meshe alese de voi. O resursa buna on-line este TurboSquid Trebuie sa aveti minim 3 tipuri de astfel de elemente.

Luminile

Veti avea o lumina directionala (L constant pentru toate fragmentele iluminate) care va ilumina intreg orasul.
Fiecare cladire va avea o lumina de tip spot care o ilumineaza doar pe aceasta, cu directia aproximativ perpendiculara pe ground plane. Si aceastea vor fi generate procedural.

Exemplu de Implementare

Sunteti incurajati sa va ghidati dupa implementarea de la acest link:
https://youtu.be/-d2-PtK4F6Y

Puteti folosi gramatici independente de context pentru construirea algoritmului de generare procedurala.

Alte exemple orientative

Resurse utile

Bonus

  • Orice aduce un plus de realism scenei.
  • Orice imbunatateste atmosfera scenei si/sau este captivant vizual.
  • Animatii, dinamism.
  • Trafic dinamic.
  • Texturare

Barem

  • 40p - Generare procedurala a geometriei cladirilor
  • 20p - Generare procedurala a retelei de drumuri
  • 35p - Iluminare globala scena (iluminare de tip spot bonus)
  • 5p - Readme&Comentarii

Arhivarea proiectului

  • in mod normal arhiva trebuie sa contina toate resursele necesare compilarii si rularii
  • inainte de a face arhiva asigurati-va ca ati dat clean la proiect
    • click dreapta pe proiect in Solution ExplorerClean Solution, sau
    • stergeti folderul /Visual Studio/obj
  • stergeti fisierul /Visual Studio/Framework_EGC.sdf (in caz ca exista)
  • stergeti fisierul /Visual Studio/Framework_EGC.VC.db (in caz ca exista)
  • stergeti folderul /x64 sau /x86 (in caz ca exista)
    • executabilul final este generat in folderul /x86 sau /x64 la finalul link-editarii in functie de arhitectura aleasa la compilare (32/64 biti)
  • in cazul in care arhiva tot depaseste limita de 20MB (nu ar trebui), puteti sa stergeti si folderul /libs sau /Resources intrucat se pot adauga la testare. Nu este recomandat sa faceti acest lucru intrucat ingreuneaza mult testarea in cazul in care versiunea curenta a librariilor/resurselor difera de versiunea utilizata la momentul scrierii temei.

Observatii

Alte aspecte ce nu au fost prezentate raman la latitudinea voastra.

  • Se poate utiliza framework-ul de laborator sau o implementare proprie.
  • Documentatia pentru evenimentele de mouse se gaseste in fisierul /Core/Window/InputController.h

Punctajul este oferit doar pentru cerintele integrate in aceeasi scena.

Punctajul bonus se ofera doar daca cerintele obligatorii sunt implementate corect.

egc/teme/fr/2018/03.txt · Last modified: 2019/01/10 15:45 by alexandru.gradinaru
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