{"id":13816199,"url":"https://github.com/jaesung-cs/vkgs","last_synced_at":"2025-05-15T15:32:16.659Z","repository":{"id":234514938,"uuid":"773194739","full_name":"jaesung-cs/vkgs","owner":"jaesung-cs","description":"Vulkan-based Gaussian Splatting viewer, and python binding","archived":false,"fork":false,"pushed_at":"2025-03-17T13:31:27.000Z","size":4665,"stargazers_count":83,"open_issues_count":2,"forks_count":10,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-17T14:40:07.998Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jaesung-cs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-17T01:37:33.000Z","updated_at":"2025-03-13T11:29:16.000Z","dependencies_parsed_at":"2024-06-26T15:54:40.412Z","dependency_job_id":"304c50ce-c0e9-4631-9b9a-6808901f961f","html_url":"https://github.com/jaesung-cs/vkgs","commit_stats":null,"previous_names":["jaesung-cs/pygs","jaesung-cs/vkgs"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaesung-cs%2Fvkgs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaesung-cs%2Fvkgs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaesung-cs%2Fvkgs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaesung-cs%2Fvkgs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jaesung-cs","download_url":"https://codeload.github.com/jaesung-cs/vkgs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254367619,"owners_count":22059542,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-04T05:00:37.134Z","updated_at":"2025-05-15T15:32:16.648Z","avatar_url":"https://github.com/jaesung-cs.png","language":"C++","funding_links":[],"categories":["Open Source Implementations","Tools, Pipeline \u0026 Utilities"],"sub_categories":["Viewers","Gaussian Splatting \u0026 NeRF"],"readme":"# vkgs\n\nGaussian splatting viewer written in Vulkan.\n\nThe main goal of this project is to maximize rendering speed.\n\nFor more details, refer to [details](DETAILS.md).\n\n\n## Notes\n\nCurrently I am **not actively maintaining** this project, but I am still open to suggestions or discussions, and will be happy to answer any questions or make quick fixes. Please open github issues about anything. Job offer is also welcome ;)\n\nConsider using [vk_gaussian_splatting](https://github.com/nvpro-samples/vk_gaussian_splatting), another Vulkan 3DGS renderer by NVidia with richer functionalities.\nThey mentioned my project (which is a great honor for me), and obviously their codes are far more well-organized.\n\nAlso, check out [vulkan_radix_sort](https://github.com/jaesung-cs/vulkan_radix_sort).\nIt has a way better user-friendly interface that can be easily used by other projects.\nIt is adopted by the NVidia sample, implying that the sort algorithm is quite stable.\n\n\n## Desktop Viewer\n\n![](/media/screenshot-fast2.jpg)\n\nViewer works with pre-trained vanilla 3DGS models as input.\n\n\n### Feature Highlights\n\n- Fast rendering speed\n  - 350+ FPS on 1600x900, high-end GPU (NVidia GeForce RTX 4090)\n  - 50+ FPS on 1600x900, high-end MacOS laptop (Apple M2 Pro)\n  - 1-1.5x speed compared to SIBR viewer, but difference becomes bigger when scene is zoomed out,\n    - because the number of tiles increases, and\n    - more splats overlap in a single tile, so sequential blending operation takes more time\n- Using graphics pipeline\n  - Draw gaussian splats over other opaque objects, interacting with depth buffer\n- 100% GPU tasks\n  - No CPU-GPU synchronization for single frame: while GPU is working on frame i, CPU prepares a commands buffer and submits for frame i+1. No synchronization for frame i to get number of visible splats.\n  - Indirect sort \u0026 draw: sorting and rendering only visible points\n  - My vulkan radix sort implementation\n\n\n### Requirements\n- `VulkanSDK\u003e=1.2`\n  - Download the latest version from https://vulkan.lunarg.com/ and follow install instruction.\n- `cmake\u003e=3.15`\n\n\n### Dependencies\n- submodules\n  ```bash\n  $ git submodule update --init --recursive\n  ```\n  - VulkanMemoryAllocator\n  - glm\n  - glfw\n  - imgui\n  - argparse\n  - [vulkan_radix_sort](https://github.com/jaesung-cs/vulkan_radix_sort): my Vulkan/GLSL implementation of reduce-then-scan radix sort.\n\n\n### Build\n```bash\n$ cmake . -B build\n$ cmake --build build --config Release -j\n```\n\n\n### Run\n```bash\n$ ./build/vkgs_viewer  # or ./build/Release/vkgs_viewer\n$ ./build/vkgs_viewer -i \u003cply_filepath\u003e\n```\nDrag and drop pretrained .ply file from [official gaussian splatting](https://github.com/graphdeco-inria/gaussian-splatting), Pre-trained Models (14 GB).\n\n- Left drag to rotate.\n\n- Right drag to translate.\n\n- Left+Right drag to zoom in/out.\n\n- WASD, Space to move.\n\n- Wheel to zoom in/out.\n\n- Ctrl+wheel to change FOV.\n\n\n## pygs: Python Binding (WIP)\n\nGUI is created in an off thread.\nAccording to GLFW documentation, the user should create window in main thread.\nHowever, managing windows off-thread seems working in Windows and Linux somehow.\n\nUnfortunately, MacOS doesn't allow this.\nMacOS’s UI frameworks can only be called from the main thread.\nHere's a related [thread](https://forums.developer.apple.com/forums/thread/659010) by Apple staff.\n\n\n### Requirements\n\n- Windows or Linux (Doesn't work for MacOS.)\n- conda: cmake, pybind11, cuda-toolkit (cuda WIP, not necessary yet)\n```bash\n$ conda create -n pygs python=3.10\n$ conda activate pygs\n$ conda install conda-forge::cmake\n$ conda install conda-forge::pybind11\n$ conda install nvidia/label/cuda-12.2.2::cuda-toolkit  # or any other version\n```\n\n\n### Build\n\nThe python package dynamically links to c++ shared library file.\n\nSo, first build the shared library first, then install python package.\n\n```bash\n$ cmake . -B build\n$ cmake --build build --config Release -j\n$ pip install -e binding/python\n```\n\n\n### Test\n\n```bash\n$ python\n\u003e\u003e\u003e import pygs\n\u003e\u003e\u003e pygs.show()\n\u003e\u003e\u003e pygs.load(\"./models/bicycle_30000.ply\")  # asynchronously load model to viewer\n\u003e\u003e\u003e pygs.load(\"./models/garden_30000.ply\")\n\u003e\u003e\u003e pygs.close()\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaesung-cs%2Fvkgs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaesung-cs%2Fvkgs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaesung-cs%2Fvkgs/lists"}