nerfstudio-project / nerfacc

A General NeRF Acceleration Toolbox in PyTorch.
https://www.nerfacc.com/
Other
1.37k stars 113 forks source link

[Help Wanted] Implementation choises of UN_BOUNDED_SPHERE #180

Closed jingyibo123 closed 1 year ago

jingyibo123 commented 1 year ago

Bravo for the great work.

I see that in the implementation of UN_BOUNDED_SPHERE contraction here, the input is first normalized like in NDC, then applied the equation 10 of Mip-NeRF 360, the contracted sphere is in [0.25, 0.75]

Which is not identical to the "official" implementation here, which if I'm not mistaken, takes (scaled) euclidean coordinates as input.

Is there specific reasons for implementing like this?

A possible implementation mimicing multinerf would be to calculate a sphere based on roi, recenter the coordinates with respect to the center of sphere, scale with the radius, then apply the same equation?

liruilong940607 commented 1 year ago

Hi first of all there is no NDC involved in the contraction function.

Our implementation maps [-inf, inf] to [0, 1], and the roi region to [0.25, 0.75]. For multinerf's impl, it maps [-inf, inf] to [-2, 2], the roi region to [-1, 1].

So it is basically the same (just imaging we further normalize [-2, 2] to [0, 1], and [-1, 1] becomes [0.25, 0.75]). The reason is NGP's radiance field need to take in a value between 0 and 1.

jingyibo123 commented 1 year ago

I mistaken the function call roi_to_unit for NDC normalization, which in multinerf's implementation is done outside of contraction. Thanks for the clarification!