After drawing out what happens when humans watch stereoscopic videos (3D movies) on a TV vs in a movie theater one too many times, I made a simulator.
A single-page web tool that simulates stereoscopic 3D viewing geometry. Set the viewer, the stereo content, and the screen, and two linked diagrams show in real time where every depth plane lands, how hard the eyes have to converge, and whether the content stays inside human stereo comfort limits.
The core question it answers is practical: will this stereo material work on this screen at this distance? Depth that reads perfectly on a 3D TV can force the eyes to diverge on a cinema screen. The simulator ships with presets for typical theatrical and home releases, and every parameter is draggable, so the tradeoffs become visible instead of theoretical. Hover over (?) for useful explanations. Not (yet) mobile optimized.
It is a plain web page: no install, no account, no server. It runs from a local file or from the live site.
Features
- See where 3D depth actually lands, a top-down view of eyes, screen, and depth planes redraws live as you drag
- Answers the practical question, will this stereo content be comfortable on this screen at this distance
- Five presets spanning conservative TV grades to deep theatrical and giant-screen setups; change anything and it becomes a custom profile
- Everything is draggable, eye spacing, screen size and distance, depth planes, with a fine-control mode for precise adjustments
- A second view shows the left-eye and right-eye images as they appear on screen; drag to slide them and re-place the depth range
- Every measurement reads out in three units at once (percent of image width, pixels, millimeters), plus perceived depth and eye angle per plane
- Warns when content would force the eyes to diverge, the primary cause of stereo eye strain
- Runs anywhere, one web page with no install or account, works offline from a local file
Under the hood
- —Depth and vergence come from exact similar-triangle geometry, perceived depth = IPD·D / (IPD − parallax), so parallax at or beyond the interpupillary distance is flagged as divergent instead of producing a fake depth number
- —The stereoacuity limit uses the 20-arcsecond threshold from Howard & Rogers, converted to on-screen parallax with exact trigonometry rather than an average pixels-per-degree figure, because edge pixels subtend about 5% less angle than center pixels at a 44° field of view
- —One canonical state object drives everything, every change re-derives all metrics and rebuilds both SVG views from scratch, so there is no incremental DOM state to drift out of sync
- —Drag handling uses event delegation keyed on data attributes, bindings survive the full SVG rebuild that happens on every frame
- —The plan view uses a dual vertical scale, true metric from eyes to screen, then linear in parallax beyond the screen (the screen-to-infinity region cannot be drawn to scale); the ruler switches to dashed at the handoff and labels always show true values
- —The geometry math lives in a ~100-line dependency-free module exposed both as a browser global and a CommonJS export, so the same code runs in the page and in node tests
- —Classic scripts with no framework and no build step, the page works from file:// without CORS restrictions
