Papers
Topics
Authors
Recent
Search
2000 character limit reached

DiffSoup: Compact Radiance Field Rendering

Updated 3 July 2026
  • DiffSoup is a radiance field representation that replaces dense models with a compact collection of opaque triangles augmented by multi-resolution neural textures.
  • It introduces stochastic opacity masking to enable direct differentiation through binary visibility in standard GPU rasterization, ensuring robust gradient-based optimization.
  • It achieves significant reductions in storage and computation while delivering real-time performance and compatibility with existing graphics pipelines.

DiffSoup is a radiance field representation and differentiable rendering method designed for extreme simplification of 3D scene models, enabling efficient and high-fidelity view synthesis with a minimal set of geometric primitives. The method replaces dense point-based or volumetric representations with a compact "triangle soup": a highly unstructured collection of opaque triangles, each augmented with compact multi-resolution neural textures and a binary opacity function. A key advance is the adoption of stochastic opacity masking, which allows direct differentiation through discrete visibility events in standard GPU rasterization, thereby obviating the need for smooth or volumetric rasterization and enabling robust gradient-based optimization even with hard, binary visibility. DiffSoup achieves significant reduction in storage and computation while providing compatibility with existing graphics hardware and pipelines, real-time performance on consumer devices, and quality competitive with state-of-the-art approaches using orders of magnitude more primitives (Tojo et al., 28 Mar 2026).

1. Triangle-Soup Radiance Field Representation

The core data structure of DiffSoup is a set of MM unstructured triangles,

T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,

where each triangle TtT_t is associated with two texture functions parameterized over barycentric coordinates bR2\mathbf{b} \in \mathbb{R}^2:

  • Color feature: Ct(b)RNfeatC_t(\mathbf{b}) \in \mathbb{R}^{N_\mathrm{feat}}
  • Opacity: αt(b)[0,1]\alpha_t(\mathbf{b}) \in [0,1]

Neural texture encoding employs a latent feature vector of dimension Nfeat=7N_\mathrm{feat} = 7 and a scalar alpha per subdivision vertex of a multi-resolution triangular grid on each triangle. At subdivision resolution RR, this results in (2R1+1)×(2R+1)(2^{R-1} + 1) \times (2^R + 1) texture vertices per triangle. Training involves texture feature blending across levels RminRRmaxR_{\min} \le R \le R_{\max}, with the finest level stored as a compact 8-bit PNG atlas after training.

2. Differentiable Binary Opacity via Stochastic Masking

Standard GPU rasterization with binary opacity typically yields non-differentiable discrete visibility. DiffSoup addresses this via stochastic opacity masking: for each fragment T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,0, a random threshold T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,1 determines whether the triangle is visible (T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,2). The visible fragment per pixel is then selected as

T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,3

where T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,4 is the fragment depth. This induces a differentiable probability T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,5 for each fragment,

T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,6

which is equivalent to the volumetric weight used in NeRF losses.

Gradients are computed using the likelihood-ratio trick, yielding an unbiased estimator even for discrete visibility events: T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,7 where the score term for each fragment has a closed form. This formulation eliminates the requirement for mollifiers (edge smoothing) and supports stable optimization to binary opacity.

3. Rasterization and Rendering Pipeline

DiffSoup's inference pipeline is tightly integrated with standard GPU depth-tested rasterization. Each triangle fragment fetches its per-triangle alpha value and performs the stochastic threshold test in-shader, discarding the fragment if it fails. Depth-tested surviving fragments provide features for deferred neural shading: the selected per-pixel feature is input to a dedicated MLP, which combines it with a view-direction encoding (spherical harmonics up to degree 2, totaling 9 SH coefficients) to produce RGB output.

The rendering pipeline can be implemented as a GLSL or HLSL shader, ensuring cross-platform compatibility. Empirical validation demonstrates real-time performance across diverse hardware platforms, including NVIDIA RTX 4090 (up to 2,000 fps at quarter resolution), MacBook Pro M3 Pro (147 fps full resolution), and iPhone 15 (51 fps at T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,8).

4. Training Methodology and Optimization

Optimization is driven by a composite loss: T={Tt}t=1M,Tt=(vt1,vt2,vt3),  vtiR3,\mathcal{T} = \{T_t\}_{t=1}^M, \quad T_t = (v_{t1}, v_{t2}, v_{t3}),\; v_{ti} \in \mathbb{R}^3,9 where TtT_t0 and TtT_t1 are predicted and ground truth color features, respectively.

Initialization samples sparse structure-from-motion keypoints, using two-thirds farthest-point sampling and one-third uniform, each covered by a small randomly oriented triangle. Vertex positions are optimized with VectorAdam (learning rate TtT_t2). Texture and MLP weights use Adam (feature lr TtT_t3, network lr TtT_t4), both decayed by TtT_t5 exponentially.

The training progression includes a coarse-to-fine multi-resolution texture schedule: for the first 5,000 iterations, a single-level texture (TtT_t6); in the next 5,000, multi-resolution (TtT_t7). Every 100 iterations, edge splitting subdivides triangles exceeding a fractional screen-space length, and pruning eliminates triangles with zero pixel coverage to enforce the target primitive budget.

5. Quantitative Evaluations and Comparative Benchmarks

On the MipNeRF360 dataset with 15,000 primitives, DiffSoup reports:

Representation PSNR SSIM LPIPS ↓ FPS (RTX 4090)
3DGS (23K Gaussians) 23.72 0.664 0.420 115
Triangle Splatting (15K tri) 22.81 0.634 0.430
TexGS (15K Gaussians+tex) 24.80 0.697 0.270 16.8
DiffSoup (15K tri, CUDA) 24.76 0.748 0.204 1960

On Synthetic Scenes and the MobileNeRF benchmark, DiffSoup uses TtT_t8K triangles, while MobileNeRF uses TtT_t9K faces and requires 8 minutes of training (QEM mesh-init) versus 6 hours. DiffSoup matches or exceeds PSNR on NeRF-Synthetic and Shelly datasets.

Ablation studies confirm:

  • Learned opacity is essential to capturing sub-triangle detail; fixing bR2\mathbf{b} \in \mathbb{R}^20 results in degraded SSIM/LPIPS.
  • Multi-resolution textures yield faster convergence and less noisy geometry compared to single-level.
  • Reducing the primitive budget from 15K to 5K incurs only bR2\mathbf{b} \in \mathbb{R}^21 dB PSNR loss, indicating graceful quality/budget trade-off.

6. Implementation Details and Memory Considerations

Geometry storage is 9 floats per triangle. At bR2\mathbf{b} \in \mathbb{R}^22, each triangle's texture grid consumes 561 points × 8 floats = 4,488 floats per triangle; for 15K triangles, this totals approximately 65.9 MB GPU memory and 44.3 MB for 8-bit PNG textures. The forward pass requires a single full-screen draw call with stochastic alpha and depth testing, plus deferred neural shading. A custom CUDA operator implements the backward pass for stochastic masking gradients. Per-fragment stochastic thresholding and depth-test are efficiently implemented in fragment shaders with pseudo-random noise textures.

7. Significance and Applications

DiffSoup demonstrates high-quality radiance field simplification with compactness and performance unattainable by prior Gaussian or volumetric splatting methods. Its full compatibility with standard graphics pipelines, orders-of-magnitude reduction in triangle count (typically bR2\mathbf{b} \in \mathbb{R}^23K), and robust differentiable rasterization of hard-edged geometry establish its utility for scenarios demanding low-latency, platform-agnostic rendering, bandwidth efficiency, and real-time interactivity on commodity devices (Tojo et al., 28 Mar 2026).

Definition Search Book Streamline Icon: https://streamlinehq.com
References (1)

Topic to Video (Beta)

No one has generated a video about this topic yet.

Whiteboard

No one has generated a whiteboard explanation for this topic yet.

Follow Topic

Get notified by email when new papers are published related to DiffSoup.