76 lines
3.2 KiB
Markdown
76 lines
3.2 KiB
Markdown
|
|
# ouros
|
|
|
|
Ouros is a rudimentary 3D rendering application built with C++ utilizing the Vulkan API for blazing fast rasterization and shading. This is mainly for tinkering around, so don't expect the most performant and clean code. I will be using the amazing Sascha Willems's https://howtovulkan.com/ guide as a platform.
|
|
## Some design philosphies:
|
|
- Cross platform (Windown & Linux, Debian in my case)
|
|
- Minimal external libraries. Some libraries are unavoidable, especially for a project with a large scope. Libraries for window creation, matrix math, and device interfacing are inevitable, but dependency complexity is usually a problem.
|
|
- Compartmentalization: units should be separated a part from each other as mushc as possible to reduce codebase complexity. eg, the renderer should be completely separate from a keyboard interface.
|
|
- Performance tracking: since Vulkan is absurdly configurable, different options need to be able to be profiled to determine the best option
|
|
- Configurability: being able to change things without a rebuild is in general good practice. I like yaml
|
|
- Fun: if its a pain to maintain then you're doing it wrong
|
|
- shmunguss
|
|
|
|
## Roadmap
|
|
Below is some steps to organize development plan and future goals, mostly following Sascha's guide. Might change once I know what I'm doing (I won't).
|
|
- [x] Repo setup
|
|
- [x] Hello world application
|
|
- [x] Window creation (~~glfw~~ or sdl)
|
|
- [ ] Vulkan installation
|
|
- [ ] Hello Vulkan: instance creation
|
|
- [ ] Device/GPU Setup
|
|
- [ ] Graphics pipeline -> swapchain
|
|
- [ ] Shaders
|
|
- [ ] Hello triangle
|
|
- [ ] 3D
|
|
- [ ] Texture loader
|
|
- [ ] Model Loader
|
|
- [ ] Mouse/Keyboard inputs
|
|
|
|
Below is beyond Sascha's guide, but available elsewhere on his github. These are more long term ideas.
|
|
- [ ] Lighting
|
|
- [ ] Shadows (via Shadow Mapping)
|
|
- [ ] Compute Shading
|
|
- [ ] Raytracing
|
|
- [ ] Graphical User Interfacing
|
|
- [ ] Post-Processing Effects
|
|
- [ ] Procedural Generation
|
|
- [ ] Particles
|
|
|
|
## Build instructions
|
|
|
|
### Dependencies:
|
|
- CMake (im using 4.0.0)
|
|
- C++20 compatible compiler (I use g++12 or MSVC++17) (probably works with mingw but I haven't tested it myself)
|
|
- Vulkan compatible gpu drivers (tested with an RTX3070 and an R9700)
|
|
- Vulkan SDK (https://vulkan.lunarg.com/sdk/home) <- the installer provides the option to install SDL and VOC as well as verifies GPU drivers
|
|
- SDL3 (im using version 3.4.4)
|
|
- Will add more as the project grows
|
|
|
|
### Clone respository:
|
|
```bash
|
|
$ git clone https://git.vxbard.net/homeburger/ouros.git --recursive
|
|
```
|
|
### Configure and build project:
|
|
```bash
|
|
$ cmake -S . -B build \
|
|
-VULKAN_PATH="${VULKAN_INSTALL_PATH}" \ # either set these variables or substitute them in
|
|
-DSDL3_PATH="${SDL3_INSTALL_PATH}" # optional, dont need if youre using the sdl in the vulkan sdk
|
|
$ cmake --build build -j
|
|
```
|
|
### Execute application:
|
|
```bash
|
|
$ ./build/ouros
|
|
# or on windows:
|
|
.\build\Debug\ouros.exe
|
|
```
|
|
For control on debugging:
|
|
```bash
|
|
$ ./build/ouros --debug 0b00111111
|
|
```
|
|
where each bit in the mask corresponds to a debug level, in order: unused, unused, fatal, trace, error, warning, notice, and info. `0b1111111` enables all debug messages.
|
|
|
|
## Additional Resources
|
|
- https://howtovulkan.com/
|
|
- Will add more as I use them
|