From f9adc1cc21dbeff05098abb0cff27bfe73f1c775 Mon Sep 17 00:00:00 2001 From: Simon Oehrl <simon.oehrl@rwth-aachen.de> Date: Fri, 28 Apr 2023 17:26:06 +0200 Subject: [PATCH] Update readme with first draft --- README.md | 168 ++++++++---------------------------------------------- 1 file changed, 23 insertions(+), 145 deletions(-) diff --git a/README.md b/README.md index 15fe2baf..ba91416f 100644 --- a/README.md +++ b/README.md @@ -1,145 +1,23 @@ -<a href="https://git.io/liblava"><img align="left" src="https://github.com/liblava.png" width="200" style="margin:0px 40px 0px 0px"></a> - -š **[liblava](https://git.io/liblava) A modern and easy-to-use library for the <a href="https://www.khronos.org/vulkan/" target="_blank">Vulkan</a>Ā® API** - -**lava** is a lean framework that provides **essentials** for **low-level graphics**<br />and is specially well suited for **prototyping**, **tooling** and **education** - -<br /> - -**C++20** + **Modular** / **Windows** + **Linux** / **[Demos](#demos)** + **[Projects](#projects)** - -[](https://git.io/liblava) [](LICENSE) [](https://www.codefactor.io/repository/github/liblava/liblava) [](https://discord.lava-block.com) [](https://paypal.me/liblava) [](https://twitter.com/liblava) - -<br /> - -### [Features](doc/Features.md) - -* written in **modern C++** with latest **Vulkan** support -* **run loop** abstraction for **window** and **input** handling -* plain **renderer** and **command buffer** model -* **texture** and **mesh** loading from virtual **file system** -* **GUI** + **camera** + **logging** + **utils** and much more - -<br /> - -##### ā Download latest **<a href="https://github.com/liblava/liblava/releases/latest">demo</a>** (December 20, 2020) - -<br /> - -<a href="https://www.khronos.org/vulkan/" target="_blank"><img align="right" hspace="20" src="res/Vulkan_170px_Dec16.png" width="300"></a> - -[Requirements](#requirements) [Build](#build) [Template](#template) - -<br /> - -### Docs - - **[Tutorial](doc/Tutorial.md)** [Guide](doc/Guide.md) [Reference](doc/Reference.md) [Tests](doc/Tests.md) [Third-Party](doc/Third-Party.md) [Install](doc/Install.md) - -<br /> - -### [Modules](doc/Modules.md) - -[](liblava/core) [](liblava/util) [](liblava/file) [](liblava/base) [](liblava/resource) [](liblava/asset) [](liblava/frame) [](liblava/block) [](liblava/app) [](liblava-demo) - -<br /> - -### Demos - -##### [lava spawn](liblava-demo/spawn.cpp) ā uniform buffer camera - -<a href="liblava-demo/spawn.cpp"></a> - -<br /> - -##### [lava lamp](liblava-demo/lamp.cpp) ā push constants to shader - -<a href="liblava-demo/lamp.cpp"></a> - -<br /> - -##### [lava triangle](liblava-demo/triangle.cpp) ā classic colored mesh - -<a href="liblava-demo/triangle.cpp"></a> - -<br /> - -### Projects - -##### [raytracing cubes](https://github.com/pezcode/lava-rt/blob/main/demo/cubes.cpp) ā raytraced reflecting cubes ([pezcode/lava-rt](https://github.com/pezcode/lava-rt)) - -<a href="https://github.com/pezcode/lava-rt/blob/main/demo/cubes.cpp"></a> - -<br /> - -## Requirements - -* **C++20** compatible compiler -* CMake **3.20+** -* [Vulkan SDK](https://vulkan.lunarg.com) - -<br /> - -## Build - -[](https://ci.appveyor.com/project/TheLavaBlock/liblava) [](https://travis-ci.com/liblava/liblava) - -```bash -git clone https://github.com/liblava/liblava.git -cd liblava - -git submodule update --init --recursive - -mkdir build -cd build - -cmake .. -make -``` - -<br /> - -## Template - -You can start coding with the **template** project. If you like you can rename it in [CMakeLists](CMakeLists.txt) - -ā Just put your code in the [src](src) folder. Everything you need is in [main.cpp](src/main.cpp) - -<br /> - -## Collaborate - -Use the [issue tracker](https://github.com/liblava/liblava/issues) to report any bug or compatibility issue - -:heart: Thanks to all **[contributors](https://github.com/liblava/liblava/graphs/contributors)** making **liblava** flow... - -<br /> - -### Support - -If you want to contribute, we suggest the following: - -1. Fork the [official repository](https://github.com/liblava/liblava/fork) -2. Apply your changes to your fork -3. Submit a [pull request](https://github.com/liblava/liblava/pulls) describing the changes you have made - -<br /> - -## License - -<a href="https://opensource.org" target="_blank"><img align="right" width="90" src="http://opensource.org/trademarks/opensource/OSI-Approved-License-100x137.png" style="margin:0px 0px 0px 80px"></a> - -**liblava** is licensed under [MIT License](LICENSE.md) which allows you to use the software for any purpose you might like, including commercial and for-profit use! - -<br /> - -However, this library includes several [Third-Party](doc/Third-Party.md) libraries, which are licensed under their own respective **Open Source** licenses ā They all allow static linking with closed source software - -**All copies of liblava must include a copy of the MIT License terms and the copyright notice** - -##### Vulkan and the Vulkan logo are trademarks of the <a href="http://www.khronos.org" target="_blank">Khronos Group Inc.</a> -##### Copyright (c) 2018-present, <a href="https://lava-block.com">Lava Block OĆ</a> and [contributors](https://github.com/liblava/liblava/graphs/contributors) - -<br /> - -<a href="https://git.io/liblava"><img src="https://github.com/liblava.png" width="50"></a> +# Virtual Reality Rendering Framework +This framework is based on [liblava](https://github.com/liblava/liblava) and was extended to include features necessary for developing and evaluating new stereo rendering strategies. +A special focus of the framework lies on remote rendering for standalone consumer HMDs over WiFi. + +In order to support multiple APIs as well as local and remote rendering a [Headset interface](src/headset/headset.hpp) was introduced with implementations for +* [OpenXR Headset](src/headset/openxr_headset.hpp), which uses the [OpenXR standard](https://www.khronos.org/openxr/) developed by Khronos to communicate with an HMD. +* [OpenVR Headset (legacy)](src/headset/openvr_headset.hpp), which uses the [OpenVR API](https://github.com/ValveSoftware/openvr) developed by Valve to communicate with HMDs via the SteamVR platform. +* [Remote Headset](src/headset/remote_headset.hpp), which uses custom protocol to communicate with a standalone HMD running a [custom application](https://git-ce.rwth-aachen.de/vr-vis/VR-Group/hmd-streaming). +* [Emulated Headset](src/headset/emulated_headset.hpp), which is a fallback solution to test out the rendering techniques without the need to having an actual HMD attached. + +## Rendering +This framework is intended to investiage different stereo rendering strategies. +Thus, a [stereo strategy interface](src/strategy/stereo_strategy.hpp) was created to easiliy switch between different strategies and compare them. +Currently, there exist the following stereo strategies: +* [Naive Stereo Forward](src/strategy/native_stereo_forward.hpp): renders the image for one eye at a time using forward shading. +* [Naive Stereo Deferred](src/strategy/native_stereo_deferred.hpp): renders the image for one eye at a time using deferred shading. +* [Multi View Stereo](src/strategy/native_stereo_deferred.hpp): renders both images simulatenously using multi-view. +* [Depth Peeling Reprojection](src/strategy/depth_peeling_reprojection.hpp): a custom rendering technique desribed below. + +In general, the framework supports [shadow mapping](src/utility/shadow_cache.hpp) and approximate global illumination using [light propagation volumes](src/utility/indirect_cache.hpp). +For evaluation of the performance and quality of the different rendering techniques the framework provides utility functions for [measuring gpu times](src/utility/pass_timer.hpp) and [capturing images](src/utility/frame_capture.hpp) for an external comparison to a ground truth. + +## Depth Peeling Reprojection -- GitLab