前文我们分析了两者的源码,接下来我们做一个简短的分析对比一下Sat-NeRF
和标准 NeRF
模型的代码
一、输出通道的不同
论据:
-
标准 NeRF:
self.number_of_outputs = 4 # rgb (3) + sigma (1)
-
Sat-NeRF:
self.number_of_outputs = 9 # rgb (3) + sigma (1) + sun visibility (1) + rgb from sky color (3) + beta (1)
分析:
标准 NeRF 模型输出 4 个通道,分别是 RGB 颜色(3 个通道)和体积密度 σ(1 个通道)。而 Sat-NeRF
增加了额外的输出,包括太阳能可见性(1 个通道)、天空颜色 RGB(3 个通道)和不确定性 β(1 个通道),总共 9 个输出通道。
结论:
Sat-NeRF
的输出更加丰富,除了基本的颜色和密度信息外,还包含了与光照相关的参数。这使得 Sat-NeRF
能够在渲染过程中更好地模拟真实世界中的光照和阴影效果,尤其适用于需要考虑太阳方向和天空颜色的应用场景。
二、输入参数的扩展
论据:
-
标准 NeRF 的
inference
函数:def inference(model, args, rays_xyz, z_vals, rays_d=None): ... rays_d_ = None if rays_d is None else torch.repeat_interleave(rays_d, repeats=N_samples, dim=0) ... for i in range(0, batch_size, chunk): input_dir = None if rays_d_ is None else rays_d_[i:i + chunk] out_chunks += [model(xyz_[i:i+chunk], input_dir=input_dir)] ...
-
Sat-NeRF 的
inference
函数:def inference(model, args, rays_xyz, z_vals, rays_d=None, sun_d=None, rays_t=None): ... rays_d_ = None if rays_d is None else torch.repeat_interleave(rays_d, repeats=N_samples, dim=0) sun_d_ = None if sun_d is None else torch.repeat_interleave(sun_d, repeats=N_samples, dim=0) rays_t_ = None if rays_t is None else torch.repeat_interleave(rays_t, repeats=N_samples, dim=0) ... for i in range(0, batch_size, chunk): out_chunks += [model( xyz_[i:i+chunk], input_dir=None if rays_d_ is None else rays_d_[i:i +