https://ocw.cs.pub.ro/courses/egc/teme/2018/03
Table of Contents
Tema 3
- Responsabili: Alex Gradinaru, Alex Dinu
- Perioada de lucru: 8/12/2018 – 13/01/2019
- Termen de predare: 13/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, iluminare si texturare.
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.
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:
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.
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.
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.
Pentru fiecare triunghi generat, trebuie sa generati si coordonatele de texturare corespunzatoare, astfel incat puteti aplica o textura repetitiva (tileable, folositi GL_REPEAT) cu ferestre. Puteti gandi triunghiurile constituente ale primitivelor cate 2, formand un quad, caruia sa-i dati coordonate de texturare in afara intervalului (0,1)x(0,1), astfel incat sa folositi GL_REPEAT corespunzator.
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.
Pentru fiecare triunghi generat, trebuie sa generati si coordonatele de texturare corespunzatoare, astfel incat puteti aplica o textura repetitiva (tileable, folositi GL_REPEAT) cu ferestre. Puteti gandi triunghiurile constituente ale primitivelor cate 2, formand un quad, caruia sa-i dati coordonate de texturare in afara intervalului (0,1)x(0,1), astfel incat sa folositi GL_REPEAT corespunzator.
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.
Strazile trebuie sa fie si ele texturate utilizand GL_REPEAT.
Strazile trebuie sa fie si ele texturate utilizand GL_REPEAT.
Geometriile cladirilor nu se vor suprapune peste geometriile strazilor.
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.
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 un set de lumini de tip spot care o ilumineaza doar pe aceasta, cu directia aproximativ perpendiculara pe ground plane. Si aceastea vor fi generate procedural.
Fiecare cladire va avea un set de lumini 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
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.
Barem
- 20p - Generare procedurala a geometriei cladirilor
- 20p - Generare procedurala a retelei de drumuri
- 20p - Texturarea cladirilor
- 20p - Texturarea strazilor
- 15p - Iluminare scena
- 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 Explorer → Clean 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.
OpenGL-backed city builder game for Windows and Linux.
Simple city-builder using OpenGL. For Windows and Linux. See http://konstruisto.com/ for more.
Building
- Setup dependencies (below)
- Run
make rebuild run
To build release configuration:
make rebuild run CONFIG=RELEASE
. Command make help
shows all possible options.Dependencies
Windows dependencies
- You will need
make
,clang
,clang++
,clang-format
inPATH
. - Install GLEW in
ext/glew-2.0.0
- Install GLFW in
ext/glew-3.2.1
- Extract
glm
library toext/glm
- Extract
cereal
library toext/cereal-1.2.2
- Put
stb_image.h
toext/stb/stb/stb_image.h
- Build and install
nanovg
(see below) - You will need
windres
inPATH
frommingw-w64
nanovg
Building
You will need
premake4
(download).- Extract repo into
ext/nanovg
. - Build x64 release:
cd ext/nanovg premake --cc=gcc gmake mv build build-[windows|linux] cd build-[windows|linux] make config=release64 nanovg
Linux dependencies
You can just run
setup-deps.sh
, it will setup everything for you.git clone git@github.com:kantoniak/konstruisto.git konstruisto &&
cd konstruisto &&
chmod +x setup-deps.sh &&
sudo ./setup-deps.sh &&
cd - &&
make build run
If you want to do everything by hand, here's the list of dependencies:
- Install
clang-3.9 lldb-3.9
. Exportclang
,clang++
,clang-format
toPATH
. - Install
libglew-dev
(2.0.0): https://launchpad.net/ubuntu/+source/glew - Install
libglfw3-dev
(3.2.1): https://launchpad.net/ubuntu/+source/glfw3 - Download
glm
and extract toext/glm
wget https://github.com/g-truc/glm/releases/download/0.9.8.4/glm-0.9.8.4.zip && unzip glm-0.9.8.4.zip -d ext/ && rm glm-0.9.8.4.zip
- Download
cereal
and extract toext/cereal-1.2.2
wget https://github.com/USCiLab/cereal/archive/v1.2.2.zip --no-check-certificate -O cereal-1.2.2.zip && unzip cereal-1.2.2.zip -d "$EXT" && rm cereal-1.2.2.zip
- Download
stb_image.h
toext/stb/stb/stb_image.h
mkdir -p ext/stb/stb/ && wget https://raw.githubusercontent.com/nothings/stb/master/stb_image.h -P ext/stb/stb/
- Build and install
nanovg
(you will needpremake4
)git clone git@github.com:memononen/nanovg.git ext/nanovg && cd ext/nanovg && premake4 --cc=gcc gmake && mv build/ build-linux/ && cd build-linux/ && make config=release64 nanovg
license
Author and
Copyright © 2017 Krzysztof Antoniak
Contents of this repository is licensed under GNU General Public License, version 3.0 (GPL-3.0) with additional term according to the section 7(c) of the license: should you make a derivative of this repository, please do not use the name "Konstruisto", Konstruisto logo or use similar naming for your game what could misguide users. See LICENSE.txt for details.
Used libraries
- GLFW 3.2.1 under the zlib/libpng license
- GLEW 2.0.0 under the Modified BSD License, the Mesa 3-D License (MIT) and the Khronos License (MIT)
- GLM 0.9.8.4 under the MIT License
- Cereal 1.2.2 under BSD license
- NanoVG under the zlib/libpng license
No comments:
Post a Comment