{"id":28719165,"url":"https://github.com/alejandroamat/3dgs-vulkan-cpp","last_synced_at":"2025-06-15T06:00:28.026Z","repository":{"id":295217688,"uuid":"988765750","full_name":"AlejandroAmat/3dgs-vulkan-cpp","owner":"AlejandroAmat","description":"Cross-platform Vulkan 3D Gaussian Splatting renderer - Windows/Mac/Linux, any GPU, with Python binding support","archived":false,"fork":false,"pushed_at":"2025-06-08T01:33:16.000Z","size":136108,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-08T01:33:59.647Z","etag":null,"topics":["3d","3d-graphics","3d-reconstruction","3dgs","apple","computer-vision","cuda","differentiable-rendering","gaussian-splatting","glfw3","gpu","gpu-acceleration","linux","macos","nerf","neural-rendering","python","real-time","vulkan","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlejandroAmat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null}},"created_at":"2025-05-23T03:32:03.000Z","updated_at":"2025-06-08T01:33:20.000Z","dependencies_parsed_at":"2025-06-08T01:35:50.608Z","dependency_job_id":null,"html_url":"https://github.com/AlejandroAmat/3dgs-vulkan-cpp","commit_stats":null,"previous_names":["alejandroamat/3dgs-vulkan-cpp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AlejandroAmat/3dgs-vulkan-cpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlejandroAmat%2F3dgs-vulkan-cpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlejandroAmat%2F3dgs-vulkan-cpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlejandroAmat%2F3dgs-vulkan-cpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlejandroAmat%2F3dgs-vulkan-cpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlejandroAmat","download_url":"https://codeload.github.com/AlejandroAmat/3dgs-vulkan-cpp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlejandroAmat%2F3dgs-vulkan-cpp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259929946,"owners_count":22933527,"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":["3d","3d-graphics","3d-reconstruction","3dgs","apple","computer-vision","cuda","differentiable-rendering","gaussian-splatting","glfw3","gpu","gpu-acceleration","linux","macos","nerf","neural-rendering","python","real-time","vulkan","windows"],"created_at":"2025-06-15T06:00:22.595Z","updated_at":"2025-06-15T06:00:27.964Z","avatar_url":"https://github.com/AlejandroAmat.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vulkan 3D Gaussian Splatting\n\nCross-platform 3D Gaussian Splatting implementation with KeyFrame Animation system using **pure Vulkan compute shaders** — no CUDA dependencies. Python support.\n\n![Current State](media/gaussian_record.gif)\n*Real-time rendering with keyframe animation system and configurable parameters on NVIDIA RTX 3060 ti*\n\n---\n\n**Example PLY**: https://huggingface.co/datasets/dylanebert/3dgs/tree/main/bonsai/point_cloud/iteration_30000\nSH_DEGREE=3\n\nMost 3DGS implementations rely on CUDA, locking them to NVIDIA GPUs. This project uses **standard Vulkan 1.3**, and provides:\n\n- ✅ **Cross-platform**: Runs on Windows, macOS, and Linux\n- ✅ **Any GPU vendor**: NVIDIA, AMD, Intel, Apple Silicon\n- ✅ **HPC render**: 30-90fps real-time gaussian rendering.\n- ✅ **Python Integration**: Bindings to run the renderer from python. For this, check [Vulkan 3dgs Python](https://github.com/AlejandroAmat/vulkan-3dgs-python)\n- ✅ **ImGui control System**: Features a Keyframe Animation system for real-time rendering, adjustable FOV, wireframe mode, position, rotation, performance metrics, and more.\n- ✅ **World Axis Reference**:  Easily modify the coordinate system to match your target PLY file, useful for tilted point clouds or specific viewing rotations.\n  \n     Note: For AMD change the SUBGROUP_SIZE to 64 in the [radix_sort/radixsort.comp shader](vulkan-3dgs/src/Shaders/radix_sort/radixsort.comp)\n---\n\n### Keyframe Animation System\n\n**Camera Animation**:\n- **Keyframe Recording**: Capture camera positions, rotations, and rendering parameters at specific time points\n- **Smooth Interpolation**: Automatic interpolation between keyframes for cinematic camera movements\n- **Playback Control**: Play, stop, and loop through your animation sequences\n- **Parameter Animation**: Animate FOV, near/far planes, wireframe mode, and more\n\n### Configurable Parameters\n\n**Real-time Controls via ImGui**:\n- **Camera Settings**:\n  - FOV adjustment (30 - 120)\n  - Mouse sensitivity (0.01 - 0.4)\n  - Movement speed (1.0 - 10.0)\n  \n- **Rendering Options**:\n  - Distance culling with adjustable near/far planes\n  - Wireframe mode with Gaussian scale control\n  - Real-time performance metrics (FPS, GPU memory)\n  - Tile size configuration (currently fixed at 16)\n  \n- **Animation Keyframes Include**:\n  - Camera position (X, Y, Z)\n  - Camera rotation (Yaw, Pitch)\n  - Field of View\n  - Near/Far culling planes\n  - Wireframe mode toggle\n  - Timing control\n\n---\n\n## Building from Source\n\n### Prerequisites\n- **Vulkan SDK 1.3+** - Download from https://vulkan.lunarg.com/\n- **Compiler**: Visual Studio 2022 (Windows) or GCC/Clang (Linux/macOS)\n- **CMake 3.16+**\n\n### Step 1: Clone the Repository\n```bash\ngit clone --recursive https://github.com/AlejandroAmat/3dgs-vulkan-cpp.git\ncd 3dgs-vulkan-cpp\n```\n\n### Step 2: Create Build Directory\n```bash\nmkdir build\ncd build\n```\n\n### Step 3: Configure with CMake\n```bash\ncmake ..\n```\n\nFor Visual Studio users, specify the generator:\n```bash\ncmake -G \"Visual Studio 17 2022\" ..\n```\n\n### Step 4: Build the Project\n```bash\n# Release build (recommended)\ncmake --build . --config Release\n\n# Debug build\ncmake --build . --config Debug\n```\n\n**Alternative for Visual Studio**:\n- Open `build/vulkan-3dgs.sln`\n- Set `vulkan-3dgs` as the startup project\n- Press F5 to build and run\n- **Note**: The program expects PLY path and optionally width and height - configure these in project properties\n\n### Step 5: Locate the Executable\nThe executable will be created in:\n- **Windows**: `build/vulkan-3dgs/Release/vulkan-3dgs.exe` (or `Debug/`)\n- **Linux/macOS**: `build/vulkan-3dgs/vulkan-3dgs`\n\n### Step 6: Run the Application\n```bash\n# Navigate to the executable directory (vulkan-3dgs MacOs/Linux, vulkan-3dgs/Release Windows)\ncd vulkan-3dgs/Release\n\n# Run with a PLY file\n./vulkan-3dgs.exe path/to/your/pointcloud.ply (optional): width height\n\n#Example\n\n./vulkan-3dgs.exe bonsai.ply\n\n./vulkan-3dgs.exe bonsai.ply 1600 800\n\n```\n\n### Platform-Specific Issues\n\n#### macOS\n- **Metal Argument Buffers**: For some Vulkan/MoltenVK versions, set `MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS=0` before running\n- **Vulkan SDK 1.3.290** is tested and does not require this workaround\n\n### Directory Structure After Build (Windows: For Linux/MacOS, no Release/Debug folder)\n```\nbuild/\n└── vulkan-3dgs/\n    └── Release/\n        ├── vulkan-3dgs.exe\n        ├── Shaders/\n        │   ├── preprocess.spv\n        │   ├── render.spv\n        │   └── ... (other shader files)\n        └── (place your .ply file here or specify full path)\n```\n\n![macOS Screenshot](media/g_macos.png)\n*Vulkan 3DGS running on MacBook Air M2*\n---\n\n## Usage \u0026 Controls\n\n### Camera Controls\n- **WASD** - Move forward/backward/left/right\n- **Q/E** - Rotate (Roll)\n- **C/Space** - Move up/down\n- **Right Mouse + Drag / Two-finger drag (trackpad)** - Look around \n\n### Animation Workflow\n1. **Enter Sequence Mode** - Click \"Enter Sequence\" in the Camera Sequence window\n2. **Position Camera** - Navigate to desired viewpoint\n3. **Add Keyframe** - Captures current camera state and parameters\n4. **Repeat** - Add multiple keyframes at different times\n5. **Play** - Watch smooth interpolated animation\n6. **Export** - Record to video with consistent framerate\n\n### ImGui Interface\n- **Performance Panel** - Real-time FPS, frame time, GPU memory usage\n- **Camera Panel** - Position, rotation, FOV, speed controls\n- **Rendering Panel** - Culling, wireframe, tile size options\n- **Sequence Panel** - Keyframe management and playback\n\n---\n\n## ⏳ Roadmap\n\n### Platform Expansion  \n- **Resizable Windows** — Dynamic window resizing support (coming soon)\n- **Image Snapshot** — Direct jpeg export from image snaphot\n- **Video Export** — Direct MP4/AVI export from animation sequences\n- **Mobile Support** — Native Android app + iOS via MoltenVK\n\n### User Experience\n- **Advanced Animation** — Bézier curves, easing functions, path preview\n- **Drag \u0026 Drop** — Direct PLY file loading from desktop\n- **Multi-PLY Support** — Load and switch between multiple models\n\n---\n\n## Tech Stack\n\n- **Graphics API**: Vulkan 1.3 (compute + graphics)\n- **Language**: C++17 with modern practices\n- **Shaders**: GLSL → SPIR-V compilation\n- **Math Library**: [GLM](https://github.com/g-truc/glm) for transforms\n- **UI Framework**: [Dear ImGui](https://github.com/ocornut/imgui) for controls\n- **Build System**: CMake (cross-platform)\n- **Windowing**: [GLFW](https://github.com/glfw/glfw) for cross-platform support\n- **Radix Sort**: [VkRadixSort](https://github.com/MircoWerner/VkRadixSort) by MircoWerner for GPU depth sorting with modifications done by [3ds.cpp](https://github.com/shg8/3DGS.cpp)\n- **Platforms**: Windows, Linux, macOS (mobile planned)\n\n---\n\n## Requirements\n\n- **Vulkan 1.3** compatible GPU and drivers\n- **C++17** compiler\n- **CMake 3.16+**\n- **Vulkan SDK**\n\n---\n\n## 📄 License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falejandroamat%2F3dgs-vulkan-cpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falejandroamat%2F3dgs-vulkan-cpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falejandroamat%2F3dgs-vulkan-cpp/lists"}