Skip to content

Phase 1 optics benchmark

  • GPU: NVIDIA GeForce RTX 3090; torch 2.10.0+cu128; DeepLens 2.5.4+278e4f720a4549187a51edaea57bb658548911ce; Python 3.12.14
  • Lens: cellphone80deg.json, focus 2.0 m; image 1920x1200; PSF grid 17x11; 16 depth layers in [0.3, 20.0] m; ks 65
  • PSF bank build (DeepLens, one-time, cached): 22.9 s
  • Monte Carlo floor (two independently sampled banks, slanted plane): 61.9 dB
Scene Runtime render (ms) Peak GPU mem (GB) DeepLens reference (s) PSNR vs reference (dB) Ideal vs reference (dB) Energy out/in Reference out/in
slanted plane 0.4-15 m 473 1.92 23.7 46.2 25.4 0.9991 1.0000
fronto plane @ focus (2 m) 41 1.82 23.4 46.4 24.9 0.9991 1.0000
fronto plane @ 0.5 m 73 2.01 23.2 45.9 25.9 0.9991 1.0000
occluder 0.5 m over inf 115 2.01 23.5 46.4 24.4 0.9991 1.0000

Point responses vs direct DeepLens traces

A single bright pixel is rendered at an arbitrary field position and depth (between PSF nodes and depth layers). Its green response is compared with a PSF traced directly by DeepLens there. L1 = sum|a - b| (0 identical, 2 disjoint). The MC floor is two independent traces of the same point. Nearest is the closest bank PSF.

Pixel (row, col) Field (x, y) Depth (m) L1 rendered L1 MC floor L1 nearest Peak ratio
(600, 960) (0.001, -0.001) 10.0 0.062 0.076 0.077 1.01
(600, 960) (0.001, -0.001) 1.2 0.038 0.064 0.093 0.98
(600, 960) (0.001, -0.001) 0.33 0.079 0.094 0.112 0.92
(307, 331) (-0.655, 0.488) 10.0 0.099 0.080 0.202 0.96
(307, 331) (-0.655, 0.488) 1.2 0.086 0.072 0.329 0.98
(307, 331) (-0.655, 0.488) 0.33 0.079 0.066 0.181 0.98
(1150, 1900) (0.98, -0.917) 10.0 0.157 0.121 0.223 0.99
(1150, 1900) (0.98, -0.917) 1.2 0.127 0.063 0.255 0.96
(1150, 1900) (0.98, -0.917) 0.33 0.142 0.042 0.265 1.10
(10, 15) (-0.984, 0.983) 10.0 0.129 0.085 0.147 0.95
(10, 15) (-0.984, 0.983) 1.2 0.109 0.080 0.163 1.05
(10, 15) (-0.984, 0.983) 0.33 0.121 0.036 0.152 1.09

Notes

The reference is DeepLens psf_map_rgb + conv_psf_map_depth_interp at the same depth layers. It uses one PSF per block and blends by output-pixel depth, with no occlusion handling, so it is not ground truth at depth edges. Distortion and vignetting are not modeled by either path.

Energy out/in < 1 for the runtime renderer is expected. DeepLens PSFs are recentered on the chief ray, but coma moves their energy centroid radially (about 1 px at the field edge), and the scatter formulation moves light with it, so a little light leaves the frame. The gather-style reference normalizes per output pixel.

Render time scales with the number of occupied depth layers. A single plane occupies one layer. The slanted plane occupies all layers.