Skip to content

Enhance GSplat rendering and decimation pipeline with optimizations#6

Merged
merlotqi merged 29 commits into
mainfrom
dev-1.3.1
May 31, 2026
Merged

Enhance GSplat rendering and decimation pipeline with optimizations#6
merlotqi merged 29 commits into
mainfrom
dev-1.3.1

Conversation

@merlotqi
Copy link
Copy Markdown
Owner

No description provided.

merlotqi and others added 29 commits May 13, 2026 14:52
- Deleted renderer.cpp and renderer.h files, removing the OpenGL renderer for Gaussian splatting.
- Removed shader.h file, which contained shader compilation and management code.
- Updated viewer_ui.cpp and viewer_ui.h to eliminate dependencies on the removed renderer and camera classes.
- Adjusted UI overlay rendering logic to directly manage splat count and rendering parameters without the renderer.
- Enhanced UI controls for size scaling, maximum point size, and camera movement speed.
- Introduced `gpu_compute.h` for platform-agnostic GPU compute interfaces.
- Implemented `computeCentroidNorms` and `assignPointsToCentroids` functions for both CUDA and Metal.
- Added CPU fallback implementations in `kmeans_cpu.cpp`.
- Updated `CMakeLists.txt` to conditionally include GPU sources based on selected backend.
- Refactored `kmeans.cu` to utilize the new GPU compute functions.
- Created Metal compute kernels in `kmeans.metal` and corresponding Metal backend implementation.
- Added tests for GPU compute backend functionality in `gpu_compute_test.cpp`.
- Ensured proper memory management and error handling in CUDA and Metal implementations.
- Implemented gsplat_data_adapter.h and gsplat_data_adapter.cpp for adapting data tables to GSplat format.
- Created gsplat_renderer.h and gsplat_renderer.cpp for rendering GSplat instances using OpenGL.
- Added shader sources for vertex and fragment shaders in gsplat_shader_sources.h.
- Developed main application logic in main.cpp to handle input files, GLFW window management, and rendering loop.
- Introduced tests for data adaptation and camera functionality in playcanvas_viewer_adapter_test.cpp and playcanvas_viewer_camera_test.cpp.
- Updated CMakeLists.txt to include new tests and source files.
…zation

- Introduced GSplatGLRenderer class for rendering GSplat data using OpenGL.
- Added GSplatGLRenderOptions and GSplatGLFrameState structures to manage rendering options and frame state.
- Created vertex and fragment shader sources for GSplat rendering.
- Updated splat_visualizer to utilize GSplatGLRenderer for rendering.
- Implemented functions to compute bounds from GSplat data.
- Added tests for GSplat data adapter to ensure correct data adaptation and error handling.
… update PlaycanvasViewerShaderTests configuration
- Removed NativeSplatProp and replaced it with SplatGaussianProp for better encapsulation and functionality.
- Updated SplatVisualizer to utilize SplatGaussianProp, ensuring compatibility with existing rendering options.
- Added new methods for camera manipulation, including resetCameraToBounds, enhancing user experience.
- Introduced unit tests for SplatGaussianProp to validate data handling and rendering options.
- Updated smoke tests for SplatVisualizer to verify integration with the new SplatGaussianProp.
- Adjusted README and comments to reflect changes in the visualization architecture.
…ructures for GSplat rendering

- Deleted legacy files: gsplat_data.h, gsplat_gl_renderer.h, and splat_gaussian_prop.h.
- Introduced new gsplat_data.h and gsplat_gl_renderer.h with updated structures and functionalities.
- Updated references in various source files to use the new header files.
- Enhanced SplatVisualizer with additional mouse wheel interaction options and improved sorting behavior.
- Added tests for visualization public headers to ensure proper encapsulation of internal details.
…c_3x3 overload

Preparation for area-weighted merge math (#241 follow-up).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Original return-value overload now delegates to the caller-buffer overload
instead of duplicating the ~40-line Jacobi algorithm.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…-weighted mass

Memory ~50% lower for cache arrays. Mass now uses ellipsoid surface area
instead of volume for better anisotropic handling (#241).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…e R directly

Replaces per-call array allocation with scratch buffer. Switches from
Rt-based sampling to R-based sampling (matching upstream GPU kernel).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…stream (#241)

Replaces NanoGS Porter-Duff opacity + volume-weighted formula with the
spark area-weighted variant. Fixes color drift and over-saturation at
aggressive reduction ratios.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…geScratch

Upstream dropped opacity pruning in v2.2.0. MergeScratch allocated once
per simplifyGaussians call and passed to compute_edge_cost/moment_match.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@merlotqi merlotqi closed this May 31, 2026
@merlotqi merlotqi reopened this May 31, 2026
@merlotqi merlotqi merged commit 325389a into main May 31, 2026
0 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant