README.md 4.48 KB
Newer Older
Lukas Tietze's avatar
Lukas Tietze committed
1
# Forschungsprokect Raytracing mit Vulkan
Lukas Tietze's avatar
V 0.8.1  
Lukas Tietze committed
2

3 4 5
Forschungspraktikum bei der Professur GDV (Graphische Datenverarbeitung) an der TU-Chemnitz. 

**Das Forschungspraktikum ist abgeschlossen, der Branch zeigt den letzten Stand der Praktikumsaufgabe an!**
Lukas Tietze's avatar
Lukas Tietze committed
6 7

## Zielsetzung
Lukas Tietze's avatar
V 0.8.1  
Lukas Tietze committed
8

Lukas Tietze's avatar
Texten  
Lukas Tietze committed
9
Das Erarbeiten einer Anwendung, die eine einfache Szene mittels Raytracing rendern kann. Die Raytracing-Shader sollen dabei im laufenden Programm angepasst und neu geladen werden k枚nnen, um das Herumspielen mit verschiedenen Konfigurationen zu erm枚glichen.
Lukas Tietze's avatar
Lukas Tietze committed
10

Lukas Tietze's avatar
Lukas Tietze committed
11
## Voraussetzungen
Lukas Tietze's avatar
V 0.8.1  
Lukas Tietze committed
12

13
- Git
Lukas Tietze's avatar
Lukas Tietze committed
14
- Python
15
- cmake 3.5 oder neuer
Lukas Tietze's avatar
Lukas Tietze committed
16 17
- Installiertes Vulkan-SDK von [LunarG](https://vulkan.lunarg.com) in der Version 1.1.130.0 oder neuer (alte Versionen sind nicht erprobt, k枚nnen aber auch funktionieren)
- Belibige CMake-kompatible Buildtools, z.B. Visual Studio, oder gnu make
Lukas Tietze's avatar
Lukas Tietze committed
18 19

## Initialisierung
Lukas Tietze's avatar
V 0.8.1  
Lukas Tietze committed
20

Lukas Tietze's avatar
Lukas Tietze committed
21 22
1. Repository klonen (oder herunterladen)
2. Submodule auschecken: `git submodule update --init --recursive`
23 24 25 26 27 28
   - Falls das Repository nicht mit git ausgecheckt, sondern heruntergeladen wurde, m眉ssen die entsprechenden Submodule manuell heruntergeladen und in `src/submodules` platziert werden:
     - [GLFW3](https://github.com/glfw/glfw) -> `src/submodules/glfw`
     - [Assimp](https://github.com/assimp/assimp) -> `src/submodules/assimp`
     - [glm](https://github.com/g-truc/glm) -> `src/submodules/glm`
     - [shaderc (known good-branch)](https://github.com/google/shaderc/tree/known-good) -> `src/submodules/shaderc`
3. Skript `src/submodules/shaderc/update_shaderc_sources.py` ausf眉hren um die Abh盲nigkeiten von `libshaderc` herunterzuladen.
Lukas Tietze's avatar
Lukas Tietze committed
29 30

## Build
Lukas Tietze's avatar
V 0.8.1  
Lukas Tietze committed
31

32
Es ist empfohlen eine Out-Of-Source-Build zu nutzen. Dazu im Stammverzeichnis zun盲chst ein build-Verzeichnis erstellen und hinein wechseln:
Lukas Tietze's avatar
Lukas Tietze committed
33

34
``` bash
Lukas Tietze's avatar
Lukas Tietze committed
35 36 37
mkdir build
cd build
```
38

Lukas Tietze's avatar
Lukas Tietze committed
39
Danach die Build-files erstellen und den Build-Prozess starten:
40 41

``` bash
42
cmake .. -A x64
Lukas Tietze's avatar
Lukas Tietze committed
43 44
cmake --build .
```
Lukas Tietze's avatar
Lukas Tietze committed
45

Lukas Tietze's avatar
V 0.8.1  
Lukas Tietze committed
46 47
## Versionen

Lukas Tietze's avatar
Lukas Tietze committed
48
!Die Aufzeichnung der Features beginnt erst ab Version 0.8.1!
Lukas Tietze's avatar
V 0.8.1  
Lukas Tietze committed
49 50

### 0.8.1
51

Lukas Tietze's avatar
V 0.8.1  
Lukas Tietze committed
52 53
- Kamera-Klasse
- Shader k枚nnen auch mit `#include`-direktive kompiliert werden.
54 55 56 57

### 0.8.2

- Alle von lib assimp unterst眉tzten Dateitypen k枚nnen geladen werden
Lukas Tietze's avatar
Lukas Tietze committed
58 59
  - Es werden noch keine Materialien geladen
  - Es kann immer nur eine Modell-Datei geladen werden
Lukas Tietze's avatar
Lukas Tietze committed
60 61 62 63

- Der Zugriff auf die Kamera ist nun per lib::IContext::GetCamera() m枚glich

- lib::OneTimeCommandBuffer::run() wartet nur noch, falls kein Fence angegeben wurde
Lukas Tietze's avatar
Lukas Tietze committed
64 65 66 67 68 69 70 71

### 0.8.3

- Die Nutzerinteraktion wurde verbessert
  - Der Nutzer implementiert nicht mehr nur einen Framehandler, sondern einen IAppAdapter
  - Kann auf mehrere Ereignisse reagieren
- Neue Funktionen f眉r die Kamera
  - Hat eigene Funktionen um sich in jede Richtung zu bewegen oder zu rollen.
Lukas Tietze's avatar
Lukas Tietze committed
72 73 74 75 76 77
  - Bewegungen nach vorne/hinten k枚nnen nun entweder in Blickrichtung oder in der Ebene ausgef眉hrt werden

### 0.8.4

- Das Vergr枚脽ern und Verkleinern des Fensters funktioniert ohne Absturz
- Der Aspect-Ratio wird ebenfalls angepasst
Lukas Tietze's avatar
Lukas Tietze committed
78 79 80 81 82 83 84 85 86 87 88 89 90

### 0.9

- Der Fehler beim Laden von Modellen mit Assimp ist behoben, der Absturz wurde durch ein misplaziertes 
`#pragma pack` ausgel枚st

### 0.9.1

- Die Eingabe wird nun nach dem Frame zur眉ckgesetzt.
- Beim Einfangen oder freigeben des Cursors wird dieser zentriert.
- Das Einfangen des Cursors funktioniert nun richtig.
- `MoveBackwardsOnPlane` funktioniert nun richtig.
- Die Kamera dreht sich anhand der richtigen Achsen.
Lukas Tietze's avatar
Lukas Tietze committed
91 92 93 94 95 96

### 0.9.2

- Debug marker werden nur noch gesetzt, wenn die entsprechende Funktionalit盲t vorhanden ist.
- Dies ist z.B. der Fall, wenn die Answendung aus NVidia NSights heraus gestartet wird, aber nicht, wenn sie
von einer anderen Quelle gestartet wird.
Lukas Tietze's avatar
Lukas Tietze committed
97 98 99 100 101 102

### 0.9.3

- Szenenbeschreibungs- und Lichtquellen-puffer werden korrekt gebunden und die DescriptorSets werden korrekt
beschrieben
- Umstieg auf ein Datenmodell, bei dem alle Member auf 16-Byte ausgerichtet werden k枚nnen (alignment 16)
Lukas Tietze's avatar
Lukas Tietze committed
103 104 105 106 107 108 109 110 111 112 113

### 0.9.4

- Klasse zur Szenenbeschreibung, enth盲lt vorerst nur Anzahl der Lichter und Clearcolor, noch ungenutzt.
- Closesthit shader mit Beleuchtungsgleich nach Blinn-Phong

### 0.9.5

- Diverse Bugs wurden behoben
- Es werden Schatten gezeichnet

Lukas Tietze's avatar
Lukas Tietze committed
114
### 1.0.0
Lukas Tietze's avatar
Lukas Tietze committed
115

Lukas Tietze's avatar
Lukas Tietze committed
116 117 118
- Diverse Bugs wurden behoben
- Die Fehlertoleranz bei fehlerhaften Shadern wurde erh枚ht.
- Die Standardeinstellungen wurden angepasst
Lukas Tietze's avatar
Lukas Tietze committed
119
- Neue Standardszene
Lukas Tietze's avatar
Text  
Lukas Tietze committed
120 121 122 123 124

### 1.0.1

- UBOs werden als DeviceLocal gespeichert und es findet ein Staging-Prozess pro Frame statt.
- MaterialIndex nun nicht mehr an Mesh, sondern an Objektinstanz gebunden.
Lukas Tietze's avatar
Text  
Lukas Tietze committed
125 126 127 128 129

### 1.0.2

- Anforderungen in Readme aktualisiert.
- FPS k枚nnen nun im Fenstertitel angezeigt werden