<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://vrarwiki.com/index.php?action=history&amp;feed=atom&amp;title=Occlusion_culling</id>
	<title>Occlusion culling - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://vrarwiki.com/index.php?action=history&amp;feed=atom&amp;title=Occlusion_culling"/>
	<link rel="alternate" type="text/html" href="https://vrarwiki.com/index.php?title=Occlusion_culling&amp;action=history"/>
	<updated>2026-04-18T06:24:58Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://vrarwiki.com/index.php?title=Occlusion_culling&amp;diff=36767&amp;oldid=prev</id>
		<title>Xinreality at 22:34, 28 October 2025</title>
		<link rel="alternate" type="text/html" href="https://vrarwiki.com/index.php?title=Occlusion_culling&amp;diff=36767&amp;oldid=prev"/>
		<updated>2025-10-28T22:34:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:34, 28 October 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot;&gt;Line 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| website     =  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| website     =  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Occlusion culling1.jpg|right|300px]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Occlusion culling2.jpg|right|300px]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Occlusion culling&amp;#039;&amp;#039;&amp;#039; is a [[rendering]] optimization technique that prevents [[graphics]] systems from processing and drawing [[geometry]] hidden behind other objects in a scene. Unlike [[view frustum culling]] which only excludes objects outside the camera&amp;#039;s [[field of view]], occlusion culling identifies and skips objects within the frustum but obscured by foreground geometry.&amp;lt;ref&amp;gt;Unity Technologies. &amp;quot;Occlusion Culling - Unity Manual&amp;quot;. https://docs.unity3d.com/Manual/OcclusionCulling.html&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Umbra 3D. &amp;quot;Introduction to Occlusion Culling&amp;quot;. Medium. https://medium.com/@Umbra3D/introduction-to-occlusion-culling-3d6cfb195c79&amp;lt;/ref&amp;gt; This technique represents one of the most critical optimizations for [[virtual reality]] and [[augmented reality]] applications, where maintaining 90-120 [[frames per second]] is essential to prevent motion sickness and preserve [[immersion]].&amp;lt;ref&amp;gt;Road to VR. &amp;quot;Umbra Positioning Occlusion Culling Tech for 120 FPS VR Gaming&amp;quot;. https://www.roadtovr.com/umbra-software-occlusion-culling-120-fpt-virtual-reality-gaming/&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Occlusion culling&amp;#039;&amp;#039;&amp;#039; is a [[rendering]] optimization technique that prevents [[graphics]] systems from processing and drawing [[geometry]] hidden behind other objects in a scene. Unlike [[view frustum culling]] which only excludes objects outside the camera&amp;#039;s [[field of view]], occlusion culling identifies and skips objects within the frustum but obscured by foreground geometry.&amp;lt;ref&amp;gt;Unity Technologies. &amp;quot;Occlusion Culling - Unity Manual&amp;quot;. https://docs.unity3d.com/Manual/OcclusionCulling.html&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Umbra 3D. &amp;quot;Introduction to Occlusion Culling&amp;quot;. Medium. https://medium.com/@Umbra3D/introduction-to-occlusion-culling-3d6cfb195c79&amp;lt;/ref&amp;gt; This technique represents one of the most critical optimizations for [[virtual reality]] and [[augmented reality]] applications, where maintaining 90-120 [[frames per second]] is essential to prevent motion sickness and preserve [[immersion]].&amp;lt;ref&amp;gt;Road to VR. &amp;quot;Umbra Positioning Occlusion Culling Tech for 120 FPS VR Gaming&amp;quot;. https://www.roadtovr.com/umbra-software-occlusion-culling-120-fpt-virtual-reality-gaming/&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l519&quot;&gt;Line 519:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 522:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/references&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/references&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Terms]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Computer graphics]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Computer graphics]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:3D computer graphics]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:3D computer graphics]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Virtual reality]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Augmented reality]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Rendering (computer graphics)]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Rendering (computer graphics)]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Video game development]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Video game development]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Real-time computing]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Real-time computing]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Xinreality</name></author>
	</entry>
	<entry>
		<id>https://vrarwiki.com/index.php?title=Occlusion_culling&amp;diff=36698&amp;oldid=prev</id>
		<title>Xinreality at 00:43, 28 October 2025</title>
		<link rel="alternate" type="text/html" href="https://vrarwiki.com/index.php?title=Occlusion_culling&amp;diff=36698&amp;oldid=prev"/>
		<updated>2025-10-28T00:43:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://vrarwiki.com/index.php?title=Occlusion_culling&amp;amp;diff=36698&amp;amp;oldid=36688&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Xinreality</name></author>
	</entry>
	<entry>
		<id>https://vrarwiki.com/index.php?title=Occlusion_culling&amp;diff=36688&amp;oldid=prev</id>
		<title>Xinreality: Text replacement - &quot;e.g.,&quot; to &quot;for example&quot;</title>
		<link rel="alternate" type="text/html" href="https://vrarwiki.com/index.php?title=Occlusion_culling&amp;diff=36688&amp;oldid=prev"/>
		<updated>2025-10-28T00:29:44Z</updated>

		<summary type="html">&lt;p&gt;Text replacement - &amp;quot;e.g.,&amp;quot; to &amp;quot;for example&amp;quot;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:29, 28 October 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l66&quot;&gt;Line 66:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 66:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Recent developments since 2015 have focused on GPU-driven rendering pipelines. Jon Hasselgren, Magnus Andersson, and Tomas Akenine-Möller&amp;#039;s 2016 &amp;quot;Masked Software Occlusion Culling&amp;quot; paper introduced [[SIMD]]-optimized software rasterization achieving high performance on CPUs.&amp;lt;ref&amp;gt;Intel. &amp;quot;Software Occlusion Culling&amp;quot;. https://www.intel.com/content/www/us/en/developer/articles/technical/software-occlusion-culling.html&amp;lt;/ref&amp;gt; The emergence of [[mesh shaders]] in NVIDIA&amp;#039;s Turing architecture (2018) and AMD&amp;#039;s RDNA2 enabled per-meshlet culling at unprecedented granularity, with implementations in [[Unreal Engine 5]]&amp;#039;s [[Nanite]] and [[Alan Wake II]] showing 40-48% performance improvements.&amp;lt;ref&amp;gt;NVIDIA. &amp;quot;Introduction to Turing Mesh Shaders&amp;quot;. https://developer.nvidia.com/blog/introduction-turing-mesh-shaders/&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Recent developments since 2015 have focused on GPU-driven rendering pipelines. Jon Hasselgren, Magnus Andersson, and Tomas Akenine-Möller&amp;#039;s 2016 &amp;quot;Masked Software Occlusion Culling&amp;quot; paper introduced [[SIMD]]-optimized software rasterization achieving high performance on CPUs.&amp;lt;ref&amp;gt;Intel. &amp;quot;Software Occlusion Culling&amp;quot;. https://www.intel.com/content/www/us/en/developer/articles/technical/software-occlusion-culling.html&amp;lt;/ref&amp;gt; The emergence of [[mesh shaders]] in NVIDIA&amp;#039;s Turing architecture (2018) and AMD&amp;#039;s RDNA2 enabled per-meshlet culling at unprecedented granularity, with implementations in [[Unreal Engine 5]]&amp;#039;s [[Nanite]] and [[Alan Wake II]] showing 40-48% performance improvements.&amp;lt;ref&amp;gt;NVIDIA. &amp;quot;Introduction to Turing Mesh Shaders&amp;quot;. https://developer.nvidia.com/blog/introduction-turing-mesh-shaders/&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Modern engines now employ two-phase [[hierarchical depth buffer]] (HiZ) culling: rendering objects visible in the previous frame, building a depth pyramid, then testing newly visible objects—eliminating CPU-GPU synchronization while maintaining efficiency.&amp;lt;ref&amp;gt;Vulkan Guide. &quot;Compute based Culling&quot;. https://vkguide.dev/docs/gpudriven/compute_culling/&amp;lt;/ref&amp;gt; By the 2020s, mobile VR/AR devices (&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;e.g., &lt;/del&gt;Meta Quest series) necessitated custom, lightweight implementations, blending traditional methods with AI-accelerated depth estimation for dynamic scenes.&amp;lt;ref&amp;gt;Meta for Developers. &quot;Occlusion Culling for Mobile VR - Part 1: Developing a Custom Solution&quot;. https://developers.meta.com/horizon/blog/occlusion-culling-for-mobile-vr-developing-a-custom-solution/&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Modern engines now employ two-phase [[hierarchical depth buffer]] (HiZ) culling: rendering objects visible in the previous frame, building a depth pyramid, then testing newly visible objects—eliminating CPU-GPU synchronization while maintaining efficiency.&amp;lt;ref&amp;gt;Vulkan Guide. &quot;Compute based Culling&quot;. https://vkguide.dev/docs/gpudriven/compute_culling/&amp;lt;/ref&amp;gt; By the 2020s, mobile VR/AR devices (&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for example &lt;/ins&gt;Meta Quest series) necessitated custom, lightweight implementations, blending traditional methods with AI-accelerated depth estimation for dynamic scenes.&amp;lt;ref&amp;gt;Meta for Developers. &quot;Occlusion Culling for Mobile VR - Part 1: Developing a Custom Solution&quot;. https://developers.meta.com/horizon/blog/occlusion-culling-for-mobile-vr-developing-a-custom-solution/&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Principles and Techniques ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Principles and Techniques ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Occlusion culling operates on the principle that not all scene geometry contributes to the final image, as closer opaque objects can fully obscure distant ones. It is distinct from but complementary to other culling methods. Techniques are broadly classified as image-space (pixel-level, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;e.g., &lt;/del&gt;Z-buffering) or object-space (geometry-level, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;e.g., &lt;/del&gt;PVS), with hybrids common in practice.&amp;lt;ref&amp;gt;Wikipedia. &quot;Occlusion culling&quot;. https://en.wikipedia.org/wiki/Occlusion_culling&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Occlusion culling operates on the principle that not all scene geometry contributes to the final image, as closer opaque objects can fully obscure distant ones. It is distinct from but complementary to other culling methods. Techniques are broadly classified as image-space (pixel-level, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for example &lt;/ins&gt;Z-buffering) or object-space (geometry-level, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for example &lt;/ins&gt;PVS), with hybrids common in practice.&amp;lt;ref&amp;gt;Wikipedia. &quot;Occlusion culling&quot;. https://en.wikipedia.org/wiki/Occlusion_culling&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Algorithms for occlusion culling can be categorized based on when the visibility calculations are performed: during a pre-processing step or on-the-fly at runtime.&amp;lt;ref&amp;gt;Eurographics. &amp;quot;Occlusion Culling Methods&amp;quot;. https://diglib.eg.org/bitstream/handle/10.2312/egst20011049/oc-star.pdf&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Algorithms for occlusion culling can be categorized based on when the visibility calculations are performed: during a pre-processing step or on-the-fly at runtime.&amp;lt;ref&amp;gt;Eurographics. &amp;quot;Occlusion Culling Methods&amp;quot;. https://diglib.eg.org/bitstream/handle/10.2312/egst20011049/oc-star.pdf&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l85&quot;&gt;Line 85:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 85:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To avoid testing every object individually (which could itself be expensive if there are thousands of objects), engines commonly organize the scene graph or space partitioning structure in a hierarchy. Occlusion culling can then operate on groups of objects: if an entire group (node) is found to be occluded, all of its children (sub-objects) can be skipped without further checks. This hierarchical approach makes occlusion tests much more scalable to large scenes by quickly discarding large unseen sections.&amp;lt;ref&amp;gt;NVIDIA. &amp;quot;Chapter 29. Efficient Occlusion Culling&amp;quot;. GPU Gems. https://developer.nvidia.com/gpugems/gpugems/part-v-performance-and-practicalities/chapter-29-efficient-occlusion-culling&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To avoid testing every object individually (which could itself be expensive if there are thousands of objects), engines commonly organize the scene graph or space partitioning structure in a hierarchy. Occlusion culling can then operate on groups of objects: if an entire group (node) is found to be occluded, all of its children (sub-objects) can be skipped without further checks. This hierarchical approach makes occlusion tests much more scalable to large scenes by quickly discarding large unseen sections.&amp;lt;ref&amp;gt;NVIDIA. &amp;quot;Chapter 29. Efficient Occlusion Culling&amp;quot;. GPU Gems. https://developer.nvidia.com/gpugems/gpugems/part-v-performance-and-practicalities/chapter-29-efficient-occlusion-culling&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;These occlusion queries (sometimes called &quot;Hierarchical Z-buffer&quot; or &quot;Z-culling&quot; when done at a coarse level) allow dynamic, on-the-fly culling of arbitrary objects without precomputed data. To mitigate latency, engines often use techniques like &#039;&#039;&#039;temporal reprojection&#039;&#039;&#039; or &#039;&#039;&#039;multi-frame queries&#039;&#039;&#039; (&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;e.g., &lt;/del&gt;issuing queries for many objects and using last frame&#039;s results to decide what to draw in the current frame, sometimes known as &quot;round-robin&quot; occlusion culling). This reduces stalls by giving the GPU more time to produce query results in parallel. Unreal Engine, for example, can use asynchronous occlusion queries and even has a &quot;Round Robin Occlusion&quot; mode optimized for VR to distribute query workload across frames.&amp;lt;ref&amp;gt;Epic Games. &quot;Visibility and Occlusion Culling in Unreal Engine&quot;. https://dev.epicgames.com/documentation/en-us/unreal-engine/visibility-and-occlusion-culling-in-unreal-engine&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;These occlusion queries (sometimes called &quot;Hierarchical Z-buffer&quot; or &quot;Z-culling&quot; when done at a coarse level) allow dynamic, on-the-fly culling of arbitrary objects without precomputed data. To mitigate latency, engines often use techniques like &#039;&#039;&#039;temporal reprojection&#039;&#039;&#039; or &#039;&#039;&#039;multi-frame queries&#039;&#039;&#039; (&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for example &lt;/ins&gt;issuing queries for many objects and using last frame&#039;s results to decide what to draw in the current frame, sometimes known as &quot;round-robin&quot; occlusion culling). This reduces stalls by giving the GPU more time to produce query results in parallel. Unreal Engine, for example, can use asynchronous occlusion queries and even has a &quot;Round Robin Occlusion&quot; mode optimized for VR to distribute query workload across frames.&amp;lt;ref&amp;gt;Epic Games. &quot;Visibility and Occlusion Culling in Unreal Engine&quot;. https://dev.epicgames.com/documentation/en-us/unreal-engine/visibility-and-occlusion-culling-in-unreal-engine&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Hierarchical Z-Buffering ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Hierarchical Z-Buffering ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l233&quot;&gt;Line 233:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 233:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Extending the System for Moving Cameras ====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Extending the System for Moving Cameras ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For parts of the game with limited camera movement (&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;e.g., &lt;/del&gt;along a fixed rail), the system was extended. Instead of baking a full PVS at many points along the path, which would be memory-intensive, they baked a PVS only at key points.&amp;lt;ref&amp;gt;Meta for Developers. &quot;Occlusion Culling for Mobile VR - Part 2: Moving Cameras and Other Insights&quot;. https://developers.meta.com/horizon/blog/occlusion-culling-for-mobile-vr-part-2-moving-cameras-and-other-insights/&amp;lt;/ref&amp;gt; For the space between two key points, they stored only the &#039;&#039;difference&#039;&#039;—a small list of objects to enable or disable when transitioning from one PVS to the next. This &quot;difference list&quot; approach dramatically reduced the memory footprint and the computational cost of updating visibility as the camera moved.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For parts of the game with limited camera movement (&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for example &lt;/ins&gt;along a fixed rail), the system was extended. Instead of baking a full PVS at many points along the path, which would be memory-intensive, they baked a PVS only at key points.&amp;lt;ref&amp;gt;Meta for Developers. &quot;Occlusion Culling for Mobile VR - Part 2: Moving Cameras and Other Insights&quot;. https://developers.meta.com/horizon/blog/occlusion-culling-for-mobile-vr-part-2-moving-cameras-and-other-insights/&amp;lt;/ref&amp;gt; For the space between two key points, they stored only the &#039;&#039;difference&#039;&#039;—a small list of objects to enable or disable when transitioning from one PVS to the next. This &quot;difference list&quot; approach dramatically reduced the memory footprint and the computational cost of updating visibility as the camera moved.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This solution combined portal-style room-based culling with the Dead Secret method: baking potentially visible sets by rendering 385 colorized cubemaps at 6×512×512 resolution, storing hand-authored visibility lists per camera position, and maintaining difference lists between adjacent cells for moving cameras. This achieved a 95% draw call reduction (1,400 to 60), enabling a AAA-quality experience on mobile hardware.&amp;lt;ref&amp;gt;Meta for Developers. &amp;quot;Occlusion Culling for Mobile VR - Part 1: Developing a Custom Solution&amp;quot;. https://developers.meta.com/horizon/blog/occlusion-culling-for-mobile-vr-developing-a-custom-solution/&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This solution combined portal-style room-based culling with the Dead Secret method: baking potentially visible sets by rendering 385 colorized cubemaps at 6×512×512 resolution, storing hand-authored visibility lists per camera position, and maintaining difference lists between adjacent cells for moving cameras. This achieved a 95% draw call reduction (1,400 to 60), enabling a AAA-quality experience on mobile hardware.&amp;lt;ref&amp;gt;Meta for Developers. &amp;quot;Occlusion Culling for Mobile VR - Part 1: Developing a Custom Solution&amp;quot;. https://developers.meta.com/horizon/blog/occlusion-culling-for-mobile-vr-developing-a-custom-solution/&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l281&quot;&gt;Line 281:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 281:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Developers often have to balance quality and performance: for instance, Meta&amp;#039;s recent &amp;#039;&amp;#039;&amp;#039;Depth API&amp;#039;&amp;#039;&amp;#039; for the [[Meta Quest 3]] mixed reality headset offers two modes – &amp;quot;hard occlusion&amp;quot; and &amp;quot;soft occlusion&amp;quot;. Hard occlusion uses a coarse depth mask that is cheaper to compute but produces jagged edges in the composite, whereas soft occlusion smooths the mask for more realistic blending at the cost of extra GPU processing.&amp;lt;ref&amp;gt;Learn XR Blog. &amp;quot;Quest 3 Mixed Reality with Meta Depth API – New Occlusion Features!&amp;quot; https://blog.learnxr.io/xr-development/quest-3-mixed-reality-with-meta-depth-api-new-occlusion-features&amp;lt;/ref&amp;gt; The Quest 3 can use the depth sensor data to occlude virtual objects with real world depth, bringing AR-like occlusion into a VR/MR headset experience. Initial reports indicate that even the softer occlusion had minimal performance impact on Quest 3, but developers are advised to profile their apps and enable or disable these features depending on the target device&amp;#039;s capability.&amp;lt;ref&amp;gt;Learn XR Blog. &amp;quot;Quest 3 Mixed Reality with Meta Depth API – New Occlusion Features!&amp;quot; https://blog.learnxr.io/xr-development/quest-3-mixed-reality-with-meta-depth-api-new-occlusion-features&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Developers often have to balance quality and performance: for instance, Meta&amp;#039;s recent &amp;#039;&amp;#039;&amp;#039;Depth API&amp;#039;&amp;#039;&amp;#039; for the [[Meta Quest 3]] mixed reality headset offers two modes – &amp;quot;hard occlusion&amp;quot; and &amp;quot;soft occlusion&amp;quot;. Hard occlusion uses a coarse depth mask that is cheaper to compute but produces jagged edges in the composite, whereas soft occlusion smooths the mask for more realistic blending at the cost of extra GPU processing.&amp;lt;ref&amp;gt;Learn XR Blog. &amp;quot;Quest 3 Mixed Reality with Meta Depth API – New Occlusion Features!&amp;quot; https://blog.learnxr.io/xr-development/quest-3-mixed-reality-with-meta-depth-api-new-occlusion-features&amp;lt;/ref&amp;gt; The Quest 3 can use the depth sensor data to occlude virtual objects with real world depth, bringing AR-like occlusion into a VR/MR headset experience. Initial reports indicate that even the softer occlusion had minimal performance impact on Quest 3, but developers are advised to profile their apps and enable or disable these features depending on the target device&amp;#039;s capability.&amp;lt;ref&amp;gt;Learn XR Blog. &amp;quot;Quest 3 Mixed Reality with Meta Depth API – New Occlusion Features!&amp;quot; https://blog.learnxr.io/xr-development/quest-3-mixed-reality-with-meta-depth-api-new-occlusion-features&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Techniques to gather environmental depth include [[structured light]], [[time-of-flight]] cameras, and stereo camera vision, each with limitations in range, lighting, and resolution. When high-quality depth data is available (&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;e.g., &lt;/del&gt;LiDAR on high-end devices), AR apps can pre-scan the environment and even use a generated mesh as an occluder for virtual content, achieving very convincing occlusion effects. Developers often combine depth-based occlusion with other tricks (like shader-based depth masks or manual placement of invisible occlusion geometry in known locations) to handle occlusion in specific scenarios.&amp;lt;ref&amp;gt;Medium. &quot;Occlusion Culling in Augmented Reality&quot;. https://medium.com/@ishtian_rev/occlusion-culling-in-augmented-reality-c1ee433598&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Techniques to gather environmental depth include [[structured light]], [[time-of-flight]] cameras, and stereo camera vision, each with limitations in range, lighting, and resolution. When high-quality depth data is available (&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;for example &lt;/ins&gt;LiDAR on high-end devices), AR apps can pre-scan the environment and even use a generated mesh as an occluder for virtual content, achieving very convincing occlusion effects. Developers often combine depth-based occlusion with other tricks (like shader-based depth masks or manual placement of invisible occlusion geometry in known locations) to handle occlusion in specific scenarios.&amp;lt;ref&amp;gt;Medium. &quot;Occlusion Culling in Augmented Reality&quot;. https://medium.com/@ishtian_rev/occlusion-culling-in-augmented-reality-c1ee433598&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In summary, occlusion culling in AR serves both to avoid rendering unseen virtual content (improving performance) and to correctly hide virtual objects behind real objects (improving realism). As AR hardware advances, the fidelity of depth sensing and environmental understanding is improving, which makes occlusion more accurate. Nonetheless, it remains a challenging problem: as one AR developer noted, &amp;#039;&amp;#039;&amp;#039;&amp;quot;the hardest challenge for creating an occlusion mask is reconstructing a good enough model of the real world&amp;quot;&amp;#039;&amp;#039;&amp;#039; in real time. As AR continues to evolve toward mixed reality (MR) with devices like HoloLens and Meta Quest, the line between virtual and real occlusion blurs. A fully spatially aware device can occlusion-cull virtual objects against both virtual and real geometry seamlessly. Ultimately, solving occlusion in AR boosts both performance (by not rendering what isn&amp;#039;t visible) and immersion (by making virtual content obey real-world physics of line-of-sight). Both aspects are essential for convincing and comfortable AR experiences.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In summary, occlusion culling in AR serves both to avoid rendering unseen virtual content (improving performance) and to correctly hide virtual objects behind real objects (improving realism). As AR hardware advances, the fidelity of depth sensing and environmental understanding is improving, which makes occlusion more accurate. Nonetheless, it remains a challenging problem: as one AR developer noted, &amp;#039;&amp;#039;&amp;#039;&amp;quot;the hardest challenge for creating an occlusion mask is reconstructing a good enough model of the real world&amp;quot;&amp;#039;&amp;#039;&amp;#039; in real time. As AR continues to evolve toward mixed reality (MR) with devices like HoloLens and Meta Quest, the line between virtual and real occlusion blurs. A fully spatially aware device can occlusion-cull virtual objects against both virtual and real geometry seamlessly. Ultimately, solving occlusion in AR boosts both performance (by not rendering what isn&amp;#039;t visible) and immersion (by making virtual content obey real-world physics of line-of-sight). Both aspects are essential for convincing and comfortable AR experiences.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Xinreality</name></author>
	</entry>
	<entry>
		<id>https://vrarwiki.com/index.php?title=Occlusion_culling&amp;diff=36640&amp;oldid=prev</id>
		<title>Xinreality: Created page with &quot;{{Infobox technique | name        = Occlusion Culling | image       =  | caption     =  | type        = Rendering optimization | used_in     = Virtual Reality (VR) and Augmented Reality (AR) | developer   =  | year        =  | website     =  }}  &#039;&#039;&#039;Occlusion culling&#039;&#039;&#039; is a rendering optimization technique that prevents graphics systems from processing and drawing geometry hidden behind other objects in a scene. Unlike view frustum culling...&quot;</title>
		<link rel="alternate" type="text/html" href="https://vrarwiki.com/index.php?title=Occlusion_culling&amp;diff=36640&amp;oldid=prev"/>
		<updated>2025-10-26T21:40:51Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Infobox technique | name        = Occlusion Culling | image       =  | caption     =  | type        = Rendering optimization | used_in     = &lt;a href=&quot;/wiki/Virtual_Reality&quot; title=&quot;Virtual Reality&quot;&gt;Virtual Reality&lt;/a&gt; (&lt;a href=&quot;/wiki/VR&quot; class=&quot;mw-redirect&quot; title=&quot;VR&quot;&gt;VR&lt;/a&gt;) and &lt;a href=&quot;/wiki/Augmented_Reality&quot; class=&quot;mw-redirect&quot; title=&quot;Augmented Reality&quot;&gt;Augmented Reality&lt;/a&gt; (&lt;a href=&quot;/wiki/AR&quot; class=&quot;mw-redirect&quot; title=&quot;AR&quot;&gt;AR&lt;/a&gt;) | developer   =  | year        =  | website     =  }}  &amp;#039;&amp;#039;&amp;#039;Occlusion culling&amp;#039;&amp;#039;&amp;#039; is a &lt;a href=&quot;/index.php?title=Rendering&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Rendering (page does not exist)&quot;&gt;rendering&lt;/a&gt; optimization technique that prevents &lt;a href=&quot;/index.php?title=Graphics&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Graphics (page does not exist)&quot;&gt;graphics&lt;/a&gt; systems from processing and drawing &lt;a href=&quot;/index.php?title=Geometry&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Geometry (page does not exist)&quot;&gt;geometry&lt;/a&gt; hidden behind other objects in a scene. Unlike &lt;a href=&quot;/index.php?title=View_frustum_culling&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;View frustum culling (page does not exist)&quot;&gt;view frustum culling&lt;/a&gt;...&amp;quot;&lt;/p&gt;
&lt;a href=&quot;https://vrarwiki.com/index.php?title=Occlusion_culling&amp;amp;diff=36640&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Xinreality</name></author>
	</entry>
</feed>