|
|
| (6 intermediate revisions by the same user not shown) |
| Line 17: |
Line 17: |
| | users = 171 million (2024) | | | users = 171 million (2024) |
| }} | | }} |
| | [[File:stereoscopic rendering1.jpg|300px|right]] |
|
| |
|
| '''Stereoscopic rendering''' is the foundational [[computer graphics]] technique that creates the perception of three-dimensional depth in [[virtual reality]] (VR) and [[augmented reality]] (AR) systems by generating two slightly different images from distinct viewpoints corresponding to the left and right eyes.<ref name="arm2021">ARM Software. "Introduction to Stereo Rendering - VR SDK for Android." ARM Developer Documentation, 2021. https://arm-software.github.io/vr-sdk-for-android/IntroductionToStereoRendering.html</ref> This technique exploits [[binocular disparity]]—the horizontal displacement between corresponding points in the two images—enabling the [[visual cortex]] to reconstruct depth information through [[stereopsis]], the same process human eyes use to perceive the real world.<ref name="numberanalytics2024">Number Analytics. "Stereoscopy in VR: A Comprehensive Guide." 2024. https://www.numberanalytics.com/blog/ultimate-guide-stereoscopy-vr-ar-development</ref> By delivering two offset images (one per eye) that the brain combines into a single scene, stereoscopic rendering produces an illusion of depth that mimics natural [[binocular vision]].<ref name="drawandcode">Draw & Code. "What Is Stereoscopic VR Technology." January 23, 2024. https://drawandcode.com/learning-zone/what-is-stereoscopic-vr-technology/</ref>
| | [[File:stereoscopic rendering2.jpg|300px|right]] |
| | |
| The approach doubles computational requirements compared to traditional rendering but delivers the immersive depth perception that defines modern VR experiences, powering a $15.9 billion industry serving 171 million users worldwide as of 2024.<ref name="mordor2024">Mordor Intelligence. "Virtual Reality (VR) Market Size, Report, Share & Growth Trends 2025-2030." 2024. https://www.mordorintelligence.com/industry-reports/virtual-reality-market</ref> Unlike monoscopic imagery (showing the same image to both eyes), stereoscopic rendering presents each eye with a slightly different perspective, closely matching how humans view the real world and thereby greatly enhancing the sense of presence and realism in VR/AR.<ref name="borisfx2024">Boris FX. "Monoscopic vs Stereoscopic 360 VR: Key Differences." 2024. https://borisfx.com/blog/monoscopic-vs-stereoscopic-360-vr-key-differences/</ref>
| |
| | |
| == Fundamental Principles ==
| |
| | |
| === How It Works ===
| |
| | |
| In stereoscopic rendering, a scene is captured or rendered from two viewpoints separated by roughly the distance between the human eyes (the [[interpupillary distance]] or IPD), typically calibrated to the average human IPD of 64mm (ranging from 54-74mm in adults).<ref name="afifi2020">Afifi, Mahmoud. "Basics of stereoscopic imaging in virtual and augmented reality systems." Medium, 2020. https://medium.com/@mahmoudnafifi/basics-of-stereoscopic-imaging-6f69a7916cfd</ref> Each viewpoint (often called the left-eye and right-eye camera) generates a 2D image of the scene. When these images are presented to the corresponding eyes of the user, the slight horizontal disparity between them is interpreted by the visual system as depth information through [[stereopsis]].<ref name="wikipedia_depth">Wikipedia. "Depth perception." https://en.wikipedia.org/wiki/Depth_perception</ref>
| |
| | |
| Modern VR headsets have two displays or a split display, one for each eye, and each display shows an image rendered from the appropriate perspective. Similarly, AR headsets (such as see-through [[head-mounted display]]s) project stereoscopic digital overlays so that virtual objects appear integrated into the real world with correct depth. The result is that the user perceives a unified 3D scene with depth, providing critical spatial awareness for interaction.<ref name="drawandcode"/>
| |
| | |
| === Binocular Disparity and Parallax ===
| |
| | |
| The primary depth cue exploited by stereoscopic rendering is [[binocular disparity]]. Because the two virtual cameras are separated horizontally, objects in the 3D scene are projected onto different locations in the left and right images. This difference in projection is called [[parallax]].<ref name="basic_principles">Newcastle University. "Basic Principles of Stereoscopic 3D." 2024. https://www.ncl.ac.uk/</ref>
| |
| | |
| * '''Positive Parallax (Uncrossed Disparity)''': Occurs when an object appears behind the display screen. The object's image is shifted to the left in the left eye's view and to the right in the right eye's view.
| |
| * '''Negative Parallax (Crossed Disparity)''': Occurs when an object appears in front of the display screen, "popping out" toward the viewer. The object's image is shifted to the right in the left eye's view and to the left in the right eye's view.
| |
| * '''Zero Parallax''': Occurs when an object appears exactly at the depth of the display screen. The object's image is in the same position in both the left and right eye views. This plane is also known as the convergence plane or stereo window.
| |
| | |
| The magnitude of parallax for an object is inversely proportional to its distance from the cameras. The mathematical relationship between disparity and depth follows: '''Z = b×f/d''', where Z is depth, b is baseline (interocular distance), f is focal length, and d is disparity.<ref name="scratchapixel2024">Scratchapixel. "The Perspective and Orthographic Projection Matrix." 2024. https://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/building-basic-perspective-projection-matrix.html</ref>
| |
| | |
| === Convergence and Accommodation ===
| |
| | |
| In the real world, two functions of the eyes are perfectly synchronized:
| |
| * '''[[Vergence]]''': The simultaneous movement of both eyes in opposite directions to obtain or maintain single binocular vision. When looking at a nearby object, the eyes rotate inward (converge).
| |
| * '''[[Accommodation (eye)|Accommodation]]''': The process by which the eye's lens changes shape to focus light on the retina.
| |
| | |
| Stereoscopic displays create a conflict between these two systems, known as the '''[[Vergence-Accommodation Conflict]]''' (VAC).<ref name="wikipedia_vac">Wikipedia. "Vergence-accommodation conflict." https://en.wikipedia.org/wiki/Vergence-accommodation_conflict</ref> The viewer's eyes must always accommodate (focus) on the fixed physical distance of the display screen, while their vergence system is directed to objects that appear at various depths within the virtual scene. This mismatch is a primary cause of visual fatigue and discomfort in VR and AR.<ref name="packet39_2017">Packet39. "The Accommodation-Vergence conflict and how it affects your kids (and yourself)." 2017. https://packet39.com/blog/2017/12/25/the-accommodation-vergence-conflict-and-how-it-affects-your-kids-and-yourself/</ref>
| |
| | |
| == Historical Evolution ==
| |
| | |
| {| class="wikitable"
| |
| |+ Timeline of Key Milestones in Stereoscopic Rendering
| |
| |-
| |
| ! Year !! Event !! Relevance
| |
| |-
| |
| | 1838 || Charles Wheatstone invents [[stereoscope]] || Foundational demonstration of binocular depth perception
| |
| |-
| |
| | 1849 || David Brewster's lenticular stereoscope || First portable commercial stereoscopic device
| |
| |-
| |
| | 1939 || [[View-Master]] patented || Popular consumer stereoscopic viewer | |
| |-
| |
| | 1956 || Morton Heilig's Sensorama || Multi-sensory stereoscopic experience machine
| |
| |-
| |
| | 1960 || Heilig's Telesphere Mask || First stereoscopic head-mounted display patent
| |
| |-
| |
| | 1968 || Ivan Sutherland's Sword of Damocles || First computer-generated stereoscopic VR display
| |
| |-
| |
| | 1972 || General Electric flight simulator || 180-degree stereoscopic views for training
| |
| |-
| |
| | 1980 || StereoGraphics stereo glasses || Electronic stereoscopic viewing for PCs
| |
| |-
| |
| | 1982 || Sega SubRoc-3D || First commercial stereoscopic video game
| |
| |-
| |
| | 1991 || Virtuality VR arcades || Real-time stereoscopic multiplayer VR
| |
| |-
| |
| | 1995 || Nintendo Virtual Boy || Portable stereoscopic gaming console
| |
| |-
| |
| | 2010 || Oculus Rift prototype || Modern stereoscopic HMD revival
| |
| |-
| |
| | 2016 || HTC Vive/Oculus Rift CV1 release || Consumer room-scale stereoscopic VR
| |
| |-
| |
| | 2023 || Apple Vision Pro || High-resolution stereoscopic mixed reality (70 pixels per degree)
| |
| |}
| |
| | |
| === Early Mechanical Stereoscopy ===
| |
| | |
| The conceptual foundation emerged in 1838 when Sir [[Charles Wheatstone]] invented the first stereoscope using mirrors to present two offset images, formally describing binocular vision in a paper to the [[Royal Society]], earning him the Royal Medal in 1840.<ref name="googlearts2024">Google Arts & Culture. "Stereoscopy: the birth of 3D technology." 2024. https://artsandculture.google.com/story/stereoscopy-the-birth-of-3d-technology-the-royal-society/pwWRTNS-hqDN5g</ref> Sir [[David Brewster]] improved the design in 1849 with a lens-based portable stereoscope that became the first commercially successful stereoscopic device after the [[Great Exhibition]] of 1851.<ref name="googlearts2024"/>
| |
| | |
| === Computer Graphics Era ===
| |
| | |
| Computer-generated stereoscopy began with [[Ivan Sutherland]]'s 1968 head-mounted display at [[Harvard University]], nicknamed the "[[Sword of Damocles (virtual reality)|Sword of Damocles]]" due to its unwieldy overhead suspension system. This wireframe graphics prototype established the technical template—[[head tracking]], stereoscopic displays, and real-time rendering—that would define VR development for decades.<ref name="nextgen2024">Nextgeninvent. "Virtual Reality's Evolution From Science Fiction to Mainstream Technology." 2024. https://nextgeninvent.com/blogs/the-evolution-of-virtual-reality/</ref>
| |
| | |
| The gaming industry drove early consumer adoption with [[Sega]]'s SubRoc-3D in 1982, the world's first commercial stereoscopic video game featuring an active shutter 3D system jointly developed with [[Matsushita Electric Industrial Co.|Matsushita]].<ref name="siggraph2024">ACM SIGGRAPH. "Remember Stereo 3D on the PC? Have You Ever Wondered What Happened to It?" 2024. https://blog.siggraph.org/2024/10/stereo-3d-pc-history-decline.html/</ref>
| |
| | |
| === Modern VR Revolution ===
| |
| | |
| The modern VR revolution began with [[Palmer Luckey]]'s 2012 [[Oculus Rift]] [[Kickstarter]] campaign, which raised $2.5 million. [[Facebook]]'s $2 billion acquisition of [[Oculus VR|Oculus]] in 2014 validated the market potential. The watershed 2016 launches of the [[Oculus Rift#Consumer version|Oculus Rift CV1]] and [[HTC Vive]]—offering 2160×1200 combined resolution at 90Hz with [[room-scale tracking]]—established the technical baseline for modern VR.<ref name="cavendish2024">Cavendishprofessionals. "The Evolution of VR and AR in Gaming: A Historical Perspective." 2024. https://www.cavendishprofessionals.com/the-evolution-of-vr-and-ar-in-gaming-a-historical-perspective/</ref>
| |
| | |
| == Mathematical Foundations ==
| |
| | |
| === Perspective Projection ===
| |
| | |
| The core mathematics begins with [[perspective projection]], where a 3D point projects onto a 2D image plane based on its depth. For a single viewpoint with center of projection at (0, 0, -d), the projected coordinates follow:
| |
| * x<sub>p</sub> = (x×d)/(d+z)
| |
| * y<sub>p</sub> = (y×d)/(d+z)
| |
| | |
| Stereoscopic rendering extends this with off-axis projection:<ref name="songho2024">Song Ho Ahn. "OpenGL Projection Matrix." 2024. https://www.songho.ca/opengl/gl_projectionmatrix.html</ref>
| |
| * Left eye at (-e/2, 0, -d): x<sub>left</sub> = (x×d - z×e/2)/(d+z)
| |
| * Right eye at (e/2, 0, -d): x<sub>right</sub> = (x×d + z×e/2)/(d+z)
| |
| | |
| Where e represents eye separation. The horizontal displacement varies with depth z, creating the disparity cues that enable stereopsis.
| |
| | |
| === Asymmetric Frustum and Off-Axis Projection ===
| |
| | |
| The correct method for stereoscopic rendering is known as '''off-axis projection'''. It involves keeping the camera view vectors parallel and instead shearing the [[viewing frustum]] for each eye horizontally.<ref name="bourke">Bourke, P. "Stereoscopic Rendering." 2024. http://paulbourke.net/stereographics/stereorender/</ref> This avoids the vertical parallax issues that would be introduced by "toeing-in" the cameras.
| |
| | |
| The horizontal shift (s) for the frustum boundaries on the near plane is given by:
| |
| '''s = (e/2) × (n/d)'''
| |
| | |
| Where:
| |
| * e is the eye separation (interaxial distance)
| |
| * n is the distance to the near clipping plane
| |
| * d is the convergence distance (the distance to the zero parallax plane)
| |
| | |
| This shift value modifies the left and right parameters of the frustum definition:
| |
| * '''For the left eye''': left = left_original + s, right = right_original + s
| |
| * '''For the right eye''': left = left_original - s, right = right_original - s
| |
| | |
| Graphics APIs like OpenGL provide functions such as `glFrustum(left, right, bottom, top, near, far)` that allow for the explicit definition of an asymmetric frustum.<ref name="utah2024">University of Utah. "Projection and View Frustums." Computer Graphics Course Material, 2024. https://my.eng.utah.edu/~cs6360/Lectures/frustum.pdf</ref>
| |
| | |
| == Rendering Techniques ==
| |
| | |
| === Multi-Pass Rendering ===
| |
| | |
| Traditional multi-pass rendering takes the straightforward approach of rendering the complete scene twice sequentially, once per eye. Each eye uses separate camera parameters, performing independent [[draw call]]s, culling operations, and shader executions. While conceptually simple and compatible with all rendering pipelines, this approach imposes nearly 2× computational cost—doubling [[CPU]] overhead from draw call submission, duplicating geometry processing on the [[GPU]], and requiring full iteration through all rendering stages twice.<ref name="unity2024">Unity. "How to maximize AR and VR performance with advanced stereo rendering." Unity Blog, 2024. https://blog.unity.com/technology/how-to-maximize-ar-and-vr-performance-with-advanced-stereo-rendering</ref>
| |
| | |
| === Single-Pass Stereo Rendering ===
| |
| | |
| Single-pass stereo rendering optimizes by traversing the scene graph once while rendering to both eye buffers.<ref name="nvidia2018">NVIDIA Developer. "Turing Multi-View Rendering in VRWorks." NVIDIA Technical Blog, 2018. https://developer.nvidia.com/blog/turing-multi-view-rendering-vrworks/</ref> Single-pass instanced approach uses GPU instancing with instance count of 2, where the [[vertex shader]] outputs positions for both views simultaneously. Example shader code:
| |
| <code>
| |
| uniform EyeUniforms {
| |
| mat4 mMatrix[2];
| |
| };
| |
| vec4 pos = mMatrix[gl_InvocationID] * vertex;
| |
| </code>
| |
| | |
| {{Infobox technology
| |
| | name = Stereoscopic Rendering
| |
| | image =
| |
| | caption =
| |
| | type = [[Computer graphics]] technique
| |
| | inventor =
| |
| | inception = 1838 (concept), 1968 (computer graphics)
| |
| | manufacturer =
| |
| | available =
| |
| | current_supplier =
| |
| | last_production =
| |
| | introduced =
| |
| | discontinued =
| |
| | cost =
| |
| | applications = [[Virtual reality]], [[Augmented reality]], [[3D gaming]], [[Medical visualization]]
| |
| | industry = VR/AR ($15.9 billion as of 2024)
| |
| | users = 171 million (2024)
| |
| }}
| |
|
| |
|
| '''Stereoscopic rendering''' is the foundational [[computer graphics]] technique that creates the perception of three-dimensional depth in [[virtual reality]] (VR) and [[augmented reality]] (AR) systems by generating two slightly different images from distinct viewpoints corresponding to the left and right eyes.<ref name="arm2021">ARM Software. "Introduction to Stereo Rendering - VR SDK for Android." ARM Developer Documentation, 2021. https://arm-software.github.io/vr-sdk-for-android/IntroductionToStereoRendering.html</ref> This technique exploits [[binocular disparity]]—the horizontal displacement between corresponding points in the two images—enabling the [[visual cortex]] to reconstruct depth information through [[stereopsis]], the same process human eyes use to perceive the real world.<ref name="numberanalytics2024">Number Analytics. "Stereoscopy in VR: A Comprehensive Guide." 2024. https://www.numberanalytics.com/blog/ultimate-guide-stereoscopy-vr-ar-development</ref> By delivering two offset images (one per eye) that the brain combines into a single scene, stereoscopic rendering produces an illusion of depth that mimics natural [[binocular vision]].<ref name="drawandcode">Draw & Code. "What Is Stereoscopic VR Technology." January 23, 2024. https://drawandcode.com/learning-zone/what-is-stereoscopic-vr-technology/</ref> | | '''Stereoscopic rendering''' is the foundational [[computer graphics]] technique that creates the perception of three-dimensional depth in [[virtual reality]] (VR) and [[augmented reality]] (AR) systems by generating two slightly different images from distinct viewpoints corresponding to the left and right eyes.<ref name="arm2021">ARM Software. "Introduction to Stereo Rendering - VR SDK for Android." ARM Developer Documentation, 2021. https://arm-software.github.io/vr-sdk-for-android/IntroductionToStereoRendering.html</ref> This technique exploits [[binocular disparity]]—the horizontal displacement between corresponding points in the two images—enabling the [[visual cortex]] to reconstruct depth information through [[stereopsis]], the same process human eyes use to perceive the real world.<ref name="numberanalytics2024">Number Analytics. "Stereoscopy in VR: A Comprehensive Guide." 2024. https://www.numberanalytics.com/blog/ultimate-guide-stereoscopy-vr-ar-development</ref> By delivering two offset images (one per eye) that the brain combines into a single scene, stereoscopic rendering produces an illusion of depth that mimics natural [[binocular vision]].<ref name="drawandcode">Draw & Code. "What Is Stereoscopic VR Technology." January 23, 2024. https://drawandcode.com/learning-zone/what-is-stereoscopic-vr-technology/</ref> |
| Line 222: |
Line 78: |
| | 1991 || Virtuality VR arcades || Real-time stereoscopic multiplayer VR | | | 1991 || Virtuality VR arcades || Real-time stereoscopic multiplayer VR |
| |- | | |- |
| | 1995 || Nintendo Virtual Boy || Portable stereoscopic gaming console | | | 1995 || [[Nintendo Virtual Boy]] || Portable stereoscopic gaming console |
| |- | | |- |
| | 2010 || Oculus Rift prototype || Modern stereoscopic HMD revival | | | 2010 || [[Oculus Rift]] prototype || Modern stereoscopic HMD revival |
| |- | | |- |
| | 2016 || HTC Vive/Oculus Rift CV1 release || Consumer room-scale stereoscopic VR | | | 2016 || [[HTC Vive]]/[[Oculus Rift CV1]] release || Consumer room-scale stereoscopic VR |
| |- | | |- |
| | 2023 || Apple Vision Pro || High-resolution stereoscopic mixed reality (70 pixels per degree) | | | 2023 || [[Apple Vision Pro]] || High-resolution stereoscopic mixed reality (70 pixels per degree) |
| |} | | |} |
|
| |
|
| Line 286: |
Line 142: |
|
| |
|
| Single-pass stereo rendering optimizes by traversing the scene graph once while rendering to both eye buffers.<ref name="nvidia2018">NVIDIA Developer. "Turing Multi-View Rendering in VRWorks." NVIDIA Technical Blog, 2018. https://developer.nvidia.com/blog/turing-multi-view-rendering-vrworks/</ref> Single-pass instanced approach uses GPU instancing with instance count of 2, where the [[vertex shader]] outputs positions for both views simultaneously. Example shader code: | | Single-pass stereo rendering optimizes by traversing the scene graph once while rendering to both eye buffers.<ref name="nvidia2018">NVIDIA Developer. "Turing Multi-View Rendering in VRWorks." NVIDIA Technical Blog, 2018. https://developer.nvidia.com/blog/turing-multi-view-rendering-vrworks/</ref> Single-pass instanced approach uses GPU instancing with instance count of 2, where the [[vertex shader]] outputs positions for both views simultaneously. Example shader code: |
| ```glsl
| | <pre> |
| uniform EyeUniforms { | | uniform EyeUniforms { |
| mat4 mMatrix[2]; | | mat4 mMatrix[2]; |
| }; | | }; |
| vec4 pos = mMatrix[gl_InvocationID] * vertex; | | vec4 pos = mMatrix[gl_InvocationID] * vertex; |
| ```
| | </pre> |
|
| |
|
| This technique halves draw call count compared to multi-pass, reducing CPU bottlenecks in complex scenes.<ref name="iquilez">Quilez, Inigo. "Stereo rendering." 2024. https://iquilezles.org/articles/stereo/</ref> | | This technique halves draw call count compared to multi-pass, reducing CPU bottlenecks in complex scenes.<ref name="iquilez">Quilez, Inigo. "Stereo rendering." 2024. https://iquilezles.org/articles/stereo/</ref> |
| Line 352: |
Line 208: |
| * '''[[Head-Mounted Display]]s (HMDs)''': Modern VR and AR headsets achieve perfect image separation using either two separate micro-displays (one for each eye) or a single display partitioned by optics. This direct-view approach completely isolates the left and right eye views, eliminating [[crosstalk]].<ref name="drawandcode"/> | | * '''[[Head-Mounted Display]]s (HMDs)''': Modern VR and AR headsets achieve perfect image separation using either two separate micro-displays (one for each eye) or a single display partitioned by optics. This direct-view approach completely isolates the left and right eye views, eliminating [[crosstalk]].<ref name="drawandcode"/> |
|
| |
|
| * '''Color Filtering ([[Anaglyph 3D|Anaglyph]])''': Uses glasses with filters of different colors, typically red and cyan. Very inexpensive but suffers from severe color distortion and ghosting.<ref name="basic_principles"/> | | * '''[[Color Filtering]] ([[Anaglyph 3D|Anaglyph]])''': Uses glasses with filters of different colors, typically red and cyan. Very inexpensive but suffers from severe color distortion and ghosting.<ref name="basic_principles"/> |
|
| |
|
| * '''[[Polarized 3D system|Polarization]]''': Uses glasses with differently polarized lenses. Linear polarization orients filters at 90 degrees; circular polarization uses opposite clockwise/counter-clockwise polarization. Commonly used in 3D cinemas.<ref name="palušová2023">Palušová, P. "Stereoscopy in Extended Reality: Utilizing Natural Binocular Disparity." 2023. https://www.petrapalusova.com/stereoscopy</ref> | | * '''[[Polarized 3D system|Polarization]]''': Uses glasses with differently polarized lenses. Linear polarization orients filters at 90 degrees; circular polarization uses opposite clockwise/counter-clockwise polarization. Commonly used in 3D cinemas.<ref name="palušová2023">Palušová, P. "Stereoscopy in Extended Reality: Utilizing Natural Binocular Disparity." 2023. https://www.petrapalusova.com/stereoscopy</ref> |
|
| |
|
| * '''Time Multiplexing (Active Shutter)''': Display alternates between left and right images at high speed (120+ Hz). Viewer wears LCD shutter glasses synchronized to the display. Delivers full resolution to each eye.<ref name="basic_principles"/> | | * '''[[Time Multiplexing]] (Active Shutter)''': Display alternates between left and right images at high speed (120+ Hz). Viewer wears LCD shutter glasses synchronized to the display. Delivers full resolution to each eye.<ref name="basic_principles"/> |
|
| |
|
| * '''[[Autostereoscopy]] (Glasses-Free 3D)''': Uses optical elements like [[parallax barrier]]s or [[lenticular lens]]es to direct different pixels to each eye. Limited by narrow optimal viewing angle.<ref name="palušová2023"/> | | * '''[[Autostereoscopy]] (Glasses-Free 3D)''': Uses optical elements like [[parallax barrier]]s or [[lenticular lens]]es to direct different pixels to each eye. Limited by narrow optimal viewing angle.<ref name="palušová2023"/> |
| Line 516: |
Line 372: |
| </references> | | </references> |
|
| |
|
| [[Category:Virtual reality]] | | [[Category:Terms]] |
| [[Category:Augmented reality]]
| |
| [[Category:Computer graphics]] | | [[Category:Computer graphics]] |
| [[Category:3D rendering]] | | [[Category:3D rendering]] |
| [[Category:Display technology]] | | [[Category:Display technology]] |
| [[Category:Human–computer interaction]] | | [[Category:Human–computer interaction]] |