Skip to content

Rasterization using 3d gaussians#444

Open
fwilliams wants to merge 27 commits intoopenvdb:mainfrom
fwilliams:fw/rasterize_3d
Open

Rasterization using 3d gaussians#444
fwilliams wants to merge 27 commits intoopenvdb:mainfrom
fwilliams:fw/rasterize_3d

Conversation

@fwilliams
Copy link
Collaborator

No description provided.

Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request adds 3D Gaussian Splatting (3DGS) rasterization capability that enables rendering directly from world-space Gaussians rather than from 2D projections. This allows geometry gradients to flow through the rasterization step, which is particularly useful for non-pinhole camera models with distortion.

Changes:

  • Adds new render_images_from_world_3dgs method that performs ray-ellipsoid rasterization directly in world space
  • Introduces CameraModel and RollingShutterType enums for flexible camera projection support
  • Implements CUDA kernels for forward and backward passes of the 3DGS rasterizer with support for multiple camera models (pinhole, orthographic, and OpenCV distortion variants)

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/fvdb/detail/ops/gsplat/GaussianCameraModels.h Defines camera model and rolling shutter enums (contains critical duplication bug)
src/fvdb/detail/ops/gsplat/GaussianRasterizeFromWorld3DGS.cuh Shared utilities for ray generation, distortion, and coordinate transformations
src/fvdb/detail/ops/gsplat/GaussianRasterizeFromWorld3DGSForward.cu CUDA kernel for forward rasterization pass
src/fvdb/detail/ops/gsplat/GaussianRasterizeFromWorld3DGSBackward.cu CUDA kernel for backward gradient computation
src/fvdb/detail/autograd/GaussianRasterizeFromWorld3DGS.{h,cpp} PyTorch autograd wrapper for the rasterization operation
src/fvdb/GaussianSplat3d.{h,cpp} Main API implementation routing to appropriate projection and rasterization paths
src/python/GaussianSplatBinding.cpp Python bindings for the new enums and method
fvdb/gaussian_splatting.py Python wrapper for the new rendering method
fvdb/enums.py Python enum definitions for camera models and rolling shutter types
fvdb/_fvdb_cpp.pyi, fvdb/init.pyi, fvdb/init.py Type stubs and exports for the new functionality
tests/unit/test_rasterize_world3dgs.py Unit tests for gradient correctness and finite difference validation
src/CMakeLists.txt Build configuration for new source files
src/fvdb/detail/ops/gsplat/GaussianProjectionUT.h Refactored to use shared enum definitions

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 19 out of 19 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

fwilliams and others added 2 commits February 5, 2026 13:44
Signed-off-by: Francis Williams <francis@fwilliams.info>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Francis Williams <fwilliams@users.noreply.github.com>
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 19 out of 19 changed files in this pull request and generated 6 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 22 out of 22 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
Signed-off-by: Francis Williams <francis@fwilliams.info>
@fwilliams fwilliams requested a review from harrism February 6, 2026 23:16
@fwilliams fwilliams linked an issue Feb 6, 2026 that may be closed by this pull request
@swahtz
Copy link
Contributor

swahtz commented Feb 9, 2026

Could we get a description of the PR please?

const torch::Tensor &distortionCoeffs, // [C, K] (K=0 or 12)
const RollingShutterType rollingShutterType,
const CameraModel cameraModel,
// Render settings
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should use the RenderSettings object here like the other dispatchGaussianRasterize functions.

We should also just roll CameraModel and RollingShutterType into RenderSettings as well to help transport them all together.

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.

Rasterization using 3D Gaussians

2 participants