Extracting Triangular 3D Models, Materials, and Lighting From Images
Jacob Munkberg, Jon Hasselgren, Tianchang Shen, Jun Gao, Wenzheng Chen, Alex Evans, Thomas Müller, Sanja Fidler
TL;DR
The paper tackles inverse rendering from multi-view images by producing an explicit triangle mesh with spatially varying materials and an HDR environment map, suitable for direct use in traditional graphics pipelines. It extends differentiable marching tetrahedra (DMTet) to operate under 2D supervision, learning topology, volumetric textures encoded via an MLP, and all-frequency lighting through a differentiable split-sum model. The result is a compact, editable representation that enables scene editing, relighting, and high-quality view interpolation with interactive performance in triangle-based renderers. This approach bridges the gap between neural appearance modeling and production-ready geometry, offering practical workflows and broad applicability in graphics and AR/VR pipelines.
Abstract
We present an efficient method for joint optimization of topology, materials and lighting from multi-view image observations. Unlike recent multi-view reconstruction approaches, which typically produce entangled 3D representations encoded in neural networks, we output triangle meshes with spatially-varying materials and environment lighting that can be deployed in any traditional graphics engine unmodified. We leverage recent work in differentiable rendering, coordinate-based networks to compactly represent volumetric texturing, alongside differentiable marching tetrahedrons to enable gradient-based optimization directly on the surface mesh. Finally, we introduce a differentiable formulation of the split sum approximation of environment lighting to efficiently recover all-frequency lighting. Experiments show our extracted models used in advanced scene editing, material decomposition, and high quality view interpolation, all running at interactive rates in triangle-based renderers (rasterizers and path tracers). Project website: https://nvlabs.github.io/nvdiffrec/ .
