diff --git a/src/projects/gaussianviewer/renderer/CMakeLists.txt b/src/projects/gaussianviewer/renderer/CMakeLists.txt index 53611a8bc819336edbf4630d40cb891b2c0ae4c9..8aaf7154a727db1ec459288d2bcc31096ce7dd98 100644 --- a/src/projects/gaussianviewer/renderer/CMakeLists.txt +++ b/src/projects/gaussianviewer/renderer/CMakeLists.txt @@ -12,7 +12,7 @@ project(sibr_${SIBR_PROJECT} LANGUAGES CXX) sibr_gitlibrary(TARGET CudaRasterizer GIT_REPOSITORY "https://github.com/graphdeco-inria/diff-gaussian-rasterization.git" - GIT_TAG "3a07ac2e39b9ba7043ffc8bb98397c3ba6e2532d" + GIT_TAG "1fe347d3dc87ab8b538e3d09d3b1105fc8fae4be" ) find_package(CUDAToolkit REQUIRED) diff --git a/src/projects/gaussianviewer/renderer/GaussianView.cpp b/src/projects/gaussianviewer/renderer/GaussianView.cpp index 01e9bc0f1edcdd955bce006db5b82b9c0e6744cd..9eaa673da2147a7f59c64c50d32b9e544f5dd0cb 100644 --- a/src/projects/gaussianviewer/renderer/GaussianView.cpp +++ b/src/projects/gaussianviewer/renderer/GaussianView.cpp @@ -281,6 +281,7 @@ sibr::GaussianView::GaussianView(const sibr::BasicIBRScene::Ptr & ibrScene, uint cudaMalloc((void**)&proj_cuda, sizeof(sibr::Matrix4f)); cudaMalloc((void**)&cam_pos_cuda, 3 * sizeof(float)); cudaMalloc((void**)&background_cuda, 3 * sizeof(float)); + cudaMalloc((void**)&rect_cuda, 2 * P * sizeof(int)); float bg[3] = { white_bg ? 1.f : 0.f, white_bg ? 1.f : 0.f, white_bg ? 1.f : 0.f }; cudaMemcpy(background_cuda, bg, 3 * sizeof(float), cudaMemcpyHostToDevice); @@ -354,6 +355,7 @@ void sibr::GaussianView::onRenderIBR(sibr::IRenderTarget & dst, const sibr::Came cudaGraphicsResourceGetMappedPointer((void**)&image_cuda, &bytes, imageBufferCuda); // Rasterize + int* rects = _fastCulling ? rect_cuda : nullptr; CudaRasterizer::Rasterizer::forward( geomBufferFunc, binningBufferFunc, @@ -375,7 +377,9 @@ void sibr::GaussianView::onRenderIBR(sibr::IRenderTarget & dst, const sibr::Came tan_fovx, tan_fovy, false, - image_cuda + image_cuda, + nullptr, + rects ); // Unmap OpenGL resource for use with OpenGL @@ -410,6 +414,7 @@ void sibr::GaussianView::onGUI() { ImGui::SliderFloat("Scaling Modifier", &_scalingModifier, 0.001f, 1.0f); } + ImGui::Checkbox("Fast culling", &_fastCulling); ImGui::End(); } @@ -426,6 +431,7 @@ sibr::GaussianView::~GaussianView() cudaFree(proj_cuda); cudaFree(cam_pos_cuda); cudaFree(background_cuda); + cudaFree(rect_cuda); cudaGraphicsUnregisterResource(imageBufferCuda); glDeleteBuffers(1, &imageBuffer); diff --git a/src/projects/gaussianviewer/renderer/GaussianView.hpp b/src/projects/gaussianviewer/renderer/GaussianView.hpp index 439fb916845febbbbe858a6c163e15ea5923de7b..b9e3777bff4b7699718fcacbd82f6e29878485e1 100644 --- a/src/projects/gaussianviewer/renderer/GaussianView.hpp +++ b/src/projects/gaussianviewer/renderer/GaussianView.hpp @@ -85,6 +85,7 @@ namespace sibr { std::string currMode = "Splats"; + bool _fastCulling = true; int _device = 0; int count; @@ -93,6 +94,7 @@ namespace sibr { float* scale_cuda; float* opacity_cuda; float* shs_cuda; + int* rect_cuda; GLuint imageBuffer; cudaGraphicsResource_t imageBufferCuda;