Skip to content

Commit

Permalink
Update CI and README
Browse files Browse the repository at this point in the history
  • Loading branch information
shg8 committed Mar 14, 2024
1 parent 9331fb1 commit 232b3d8
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 17 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/cmake-multi-platform.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,4 @@ jobs:
name: vulkan_splatting-${{ matrix.os }}-${{ matrix.c_compiler }}-${{ matrix.build_type }}
path: |
${{ steps.strings.outputs.build-output-dir }}/apps/viewer/vulkan_splatting_viewer
${{ steps.strings.outputs.build-output-dir }}/Release/apps/viewer/vulkan_splatting_viewer.exe
${{ steps.strings.outputs.build-output-dir }}/apps/viewer/vulkan_splatting_viewer.exe
52 changes: 38 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
# VulkanSplatting
VulkanSplatting is an (not-yet-highly-) optimized, cross-platform implementation of [Gaussian Splatting](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/) using the [Vulkan API](https://www.khronos.org/vulkan/) and compute pipelines.

VulkanSplatting is an (not-yet-highly-) optimized, cross-platform implementation
of [Gaussian Splatting](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/) using
the [Vulkan API](https://www.khronos.org/vulkan/) and compute pipelines.

[![Windows + Linux](https://github.com/shg8/VulkanSplatting/actions/workflows/cmake-multi-platform.yml/badge.svg?branch=main)](https://github.com/shg8/VulkanSplatting/actions/workflows/cmake-multi-platform.yml)

![VulkanSplatting Demo macOS](https://github.com/shg8/VulkanSplatting/assets/38004233/66542056-ce30-4998-a612-dd4f6792599e)

## Command Line Usage

```
./vulkan_splatting [options] <input_file.ply>
```
Expand All @@ -20,29 +24,42 @@ VulkanSplatting is an (not-yet-highly-) optimized, cross-platform implementation

- `-i`, `--immediate-swapchain`: Set swapchain mode to immediate (VK_PRESENT_MODE_IMMEDIATE_KHR)

- `-w`, `--width <width>`: Set window width

- `-h`, `--height <height>`: Set window height

- `--no-gui`: Disable GUI

## Building

### Linux

VulkanSplatting requires the following dependencies:

`Vulkan headers, Vulkan validation layers, glslangValidator, glfw, glm`

The easiest way to install the first three is through the [LunarG Vulkan SDK](https://www.lunarg.com/vulkan-sdk/). Alternatively, you can install the corresponding packages from your distro. For Ubuntu, the packages to install are `vulkan-headers, vulkan-validationlayers, glslang-dev, libglfw3-dev, libglm-dev`.
The easiest way to install the first three is through the [LunarG Vulkan SDK](https://www.lunarg.com/vulkan-sdk/).
Alternatively, you can install the corresponding packages from your distro. For Ubuntu, the packages to install
are `vulkan-headers, vulkan-validationlayers, glslang-dev, libglfw3-dev, libglm-dev`.

### Windows
After installing Vulkan SDK, set the `VULKAN_SDK` environmental variable to the install path. Alternatively, pass `-DVULKAN_SDK=\INSTALL\LOCATION\OF\YOUR\SDK` to CMake when configuring.

After installing Vulkan SDK, set the `VULKAN_SDK` environmental variable to the install path. Alternatively,
pass `-DVULKAN_SDK=\INSTALL\LOCATION\OF\YOUR\SDK` to CMake when configuring.

A full CMake configure command is as follows:

```
mkdir .\VulkanSplatting\build
cmake -DCMAKE_BUILD_TYPE=Release -DVULKAN_SDK=\INSTALL\LOCATION\OF\YOUR\SDK -S .\VulkanSplatting -B .\VulkanSplatting\build
```

### macOS

After installing the Vulkan SDK, please proceed with CMake configuration and build steps as usual.

## TODO

- [x] Better controls and GUI on GLFW
- [ ] Implement SOTA parallel radix sort
- [ ] Use Vulkan subgroups to batch Gaussian retrievals at the warp level
Expand All @@ -53,17 +70,24 @@ After installing the Vulkan SDK, please proceed with CMake configuration and bui

Please feel free to open an issue if you have any feature suggestions or are interested in contributing.

## Contributing
If you are interested in integrating your Gaussian Splatting variant, please open an issue or a pull request.
VulkanSplatting's shaders follow the procedures outlined in the original paper, so it should be relatively
easy to port your CUDA code. With cross-platform support, it's a great way to expand the reach and adoption of your research.
If there are any questions, feel free to [send me an email](mailto:[email protected]).

## License
The project is licensed under LGPL. If that is not permissive enough for your project, please feel free to [send me an email](mailto:[email protected]).

The main project is licensed under LGPL.

This project uses several third-party libraries. Here is a list of these libraries along with their respective licenses:

- **GLM**: Licensed under the [MIT License](https://opensource.org/licenses/MIT).
- **args.hxx**: Licensed under the [MIT License](https://opensource.org/licenses/MIT).
- **spdlog**: Licensed under the [MIT License](https://opensource.org/licenses/MIT).
- **ImGUI**: Licensed under the [MIT License](https://opensource.org/licenses/MIT).
- **Vulkan Memory Allocator**: Licensed under the [MIT License](https://opensource.org/licenses/MIT).
- **VkRadixSort**: Licensed under the [MIT License](https://opensource.org/licenses/MIT).
- **implot**: Licensed under the [MIT License](https://opensource.org/licenses/MIT).
- **glfw**: Licensed under the [zlib/libpng license](https://www.glfw.org/license.html).
- **libenvpp**: Licensed under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
- **GLM**: [MIT License](https://opensource.org/licenses/MIT).
- **args.hxx**: [MIT License](https://opensource.org/licenses/MIT).
- **spdlog**: [MIT License](https://opensource.org/licenses/MIT).
- **ImGUI**: [MIT License](https://opensource.org/licenses/MIT).
- **Vulkan Memory Allocator**: [MIT License](https://opensource.org/licenses/MIT).
- **VkRadixSort**: [MIT License](https://opensource.org/licenses/MIT).
- **implot**: [MIT License](https://opensource.org/licenses/MIT).
- **glfw**: [zlib/libpng license](https://www.glfw.org/license.html).
- **libenvpp**: [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
4 changes: 2 additions & 2 deletions apps/viewer/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ int main(int argc, char** argv) {
parser, "immediate-swapchain", "Set swapchain mode to immediate (VK_PRESENT_MODE_IMMEDIATE_KHR)",
{'i', "immediate-swapchain"}
};
args::ValueFlag<uint32_t> widthFlag{parser, "width", "Set window width", {"width"}};
args::ValueFlag<uint32_t> heightFlag{parser, "height", "Set window height", {"height"}};
args::ValueFlag<uint32_t> widthFlag{parser, "width", "Set window width", {'w', "width"}};
args::ValueFlag<uint32_t> heightFlag{parser, "height", "Set window height", {'h', "height"}};
args::Flag noGuiFlag{parser, "no-gui", "Disable GUI", { "no-gui"}};
args::Positional<std::string> scenePath{parser, "scene", "Path to scene file", "scene.ply"};

Expand Down

0 comments on commit 232b3d8

Please sign in to comment.