NeRF gradients from instant-ngp
Basic notations:
(assume single color channel denoted as R)
αiTiwiRiR=1−e−σiδi={1,(1−αi−1)(1−αi−2)⋯(1−α1),i=1i>1=αiTi=j=1∑iwjrj=RN
Gradient towards color:
∂ri∂L=∂R∂L∂ri∂R=∂R∂Lwi=∂R∂LαiTi
Gradient towards sigma:
∂σi∂L=∂R∂L∂σi∂R=∂R∂L∂αi∂R∂σi∂αi
We have:
∂αi∂R=∂αi∂∑j=1NαjTjrj=∂αi∂∑j=iNαjTjrj=∂αi∂(αiTiri+αi+1Ti+1ri+1+⋯+αNTNrN)=∂αi∂(αiTiri+αi+1[(1−αi)(1−αi−1)⋯(1−α1)]ri+1+⋯+αNTNrN) =Tiri−αi+1(1−αi−1)(1−αi−2)⋯(1−α1)ri+1−⋯−αN(1−αN−1)⋯(1−αi+1)(1−αi−1)⋯(1−α1)rN=1−αi1((1−αi)Tiri−αi+1Ti+1ri+1−⋯−αNTNrN)=1−αi1(Ti+1ri−j=i+1∑NαjTjrj)=1−αi1(Ti+1ri−(R−Ri))
And since:
∂σi∂αi=δie−σiδi=δi(1−αi)
We finally have:
∂σi∂L=∂R∂L∂αi∂R∂σi∂αi=∂R∂Lδi(1−αi)1−αi1(Ti+1ri−(R−Ri))=∂R∂Lδi(Ti+1ri−(R−Ri))
And this is the form used in instant-ngp.
A more beautiful form:
Ti+1ri−j=i+1∑NαjTjrj=(1−αi)Tiri−j=i+1∑NαjTjrj=Tiri−αiTiri−j=i+1∑NαjTjrj=Tiri−j=i∑NαjTjrj=Tiri−(R−Ri−1)