shijianjian/ZDPShift
ZDPShift: Beyond the Zero-Disparity Plane in Stereo Every public stereo benchmark assumes positive disparity valuesd = fB/Z ≥ 0. Mordern stereoscopic display — cinema 3D, VR, HMDs — actively uses d < 0. ZDPShift bridges the gap: the same artist-authored open-movie content rendered at five ZDP shifts Δ ∈ {−16, 0, +16, +24, +32} pixels, giving you a controlled continuum from textbook-positive to substantially-crossed disparities, with analytical ground truth at every pixel.… See the full description on the dataset page: https://huggingface.co/datasets/shijianjian/ZDPShift.
ZDPShift: Beyond the Zero-Disparity Plane in Stereo
<p align="center"> <img src="images/teaser.png" alt="Same scene rendered at five ZDP shifts; anaglyph + GT disparity + error map" width="100%"/> </p>
Every public stereo benchmark assumes positive disparity valuesd = fB/Z ≥ 0. Mordern stereoscopic display — cinema 3D, VR, HMDs — actively uses d < 0. ZDPShift bridges the gap: the same artist-authored open-movie content rendered at five ZDP shifts Δ ∈ {−16, 0, +16, +24, +32} pixels, giving you a controlled continuum from textbook-positive to substantially-crossed disparities, with analytical ground truth at every pixel.
News:
- [1st July] A technical report is on the way!
The problem in one plot
<p align="center"> <img src="images/sota_failure.png" alt="EPE of public SOTA stereo models vs ZDP shift" width="80%"/> </p>
Every public SOTA fails by 19–60× the instant disparity crosses zero. ZDPShift gives you the data to fix that.
What you get
Per pair: left.png + right.png (1920×1280 open-movie) + disparity.npy (signed float32) + meta.json (Δ, focal, baseline, KL, KR, % crossed).
Gallery
<p align="center"> <img src="images/gallery.png" alt="ZDPShift scene gallery across the 8 source franchises" width="100%"/> </p>
Geometry
d(Z, Δ) = f · B / Z − Δ baseline B = 0.10 m, Δ ∈ {−16, 0, +16, +24, +32} pxCameras stay physically parallel — only the principal points shift by ∓Δ/2. Multi-Δ self-consistency d(Δᵢ) − d(Δⱼ) = Δⱼ − Δᵢ holds to a median 0.04 px residual (sub-pixel Cycles noise).
rendered_datasets/<split>/<scene>/frame_<N>_<cam>/shift_{-16,+0,+16,+24,+32}/
├── left.png
├── right.png
├── disparity.npy
└── meta.jsonRender protocol
To keep ground truth well-defined at every pixel, three artist settings are overridden:
- Aperture forced to f/64 — defocus blur kept below sub-pixel
- Motion blur off — fast objects have crisp per-frame correspondences
- Compositor bypassed — no grading / bloom / flare distortion after correspondence
Everything else (lighting, materials, scene composition, camera path, focal length per shot) is inherited from the original .blend unchanged. Cycles 32 spp + OPTIX denoising; sampler noise floor ≈ 0.005/255 per pixel.
License
CC-BY-SA-4.0, inherited from the Blender Studio open movies. Redistribute and adapt with attribution and share-alike.
