Stereoscopic rendering: Difference between revisions
Appearance
Xinreality (talk | contribs) No edit summary |
Xinreality (talk | contribs) |
||
| (3 intermediate revisions by the same user not shown) | |||
| Line 78: | 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 142: | 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: | ||
<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 208: | 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"/> | ||