All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
This is a major upgrade in which 90% of the code has been rewritten. In this version we achieves:
Links:
- Documentation: https://www.nerfacc.com/en/v0.5.0/
- ArXiv Report: Coming Soon.
Methodologies:
- Upgrade Occupancy Grid to support multiple levels.
- Support Proposal Network from Mip-NeRF 360.
- Update examples on unbounded scenes to use Multi-level Occupancy Grid or Proposal Network.
- Contraction for Occupancy Grid is no longer supported due to it's inefficiency for ray traversal.
API Changes:
- [Changed]
OccupancyGrid()
->OccGridEstimator()
.- [Added] Argument
levels=1
for multi-level support. - [Added] Function
self.sampling()
that does basically the same thing with the oldnerfacc.ray_marching
. - [Renamed] Function
self.every_n_step()
->self.update_every_n_steps()
- [Added] Argument
- [Added]
PropNetEstimator()
. With functionsself.sampling()
,self.update_every_n_steps()
andself.compute_loss()
. - [Removed]
ray_marching()
. Ray marching is now implemented through callingsampling()
of theOccGridEstimator()
/PropNetEstimator()
. - [Changed]
ray_aabb_intersect()
now supports multiple aabb, and supports new argumentnear_plane
,far_plane
,miss_value
. - [Changed]
render_*_from_*()
. The input shape changes from(all_samples, 1)
to(all_samples)
. And the function will returns all intermediate results so it might be a tuple. - [Changed]
rendering()
. The input shape changes from(all_samples, 1)
to(all_samples)
, including the shape assumption for thergb_sigma_fn
andrgb_alpha_fn
. Be aware of this shape change. - [Changed]
accumulate_along_rays()
. The shape of theweights
in the inputs should be(all_samples)
now. - [Removed]
unpack_info()
,pack_data()
,unpack_data()
are temporally removed due to in-compatibility with the new backend implementation. Will add them back later. - [Added] Some basic functions that support both batched tensor and flattened tensor:
inclusive_prod()
,inclusive_sum()
,exclusive_prod()
,exclusive_sum()
,importance_sampling()
,searchsorted()
.
Examples & Benchmarks:
- More benchmarks and examples. See folder
examples/
andbenchmarks/
.
A stable version that achieves:
- The vanilla Nerf model with 8-layer MLPs can be trained to better quality (+0.5 PNSR) in 1 hour rather than days as in the paper.
- The Instant-NGP Nerf model can be trained to equal quality in 4.5 minutes, comparing to the official pure-CUDA implementation.
- The D-Nerf model for dynamic objects can also be trained in 1 hour rather than 2 days as in the paper, and with better quality (+~2.5 PSNR).
- Both bounded and unbounded scenes are supported.
Links:
- Documentation: https://www.nerfacc.com/en/v0.3.5/
- ArXiv Report: https://arxiv.org/abs/2210.04847v2/
Methodologies:
- Single resolution
nerfacc.OccupancyGrid
for synthetic scenes. - Contraction methods
nerfacc.ContractionType
for unbounded scenes.