SlideShare a Scribd company logo
1 of 58
Stable SSAO in Battlefield 3 with
Selective Temporal Filtering
Louis Bavoil
Developer Technology Engineer
NVIDIA
Johan Andersson
Rendering Architect
DICE / EA
SSAO
● Screen Space Ambient Occlusion (SSAO)
● Has become de-facto approach for rendering AO in
games with no precomputation
● Key Idea: use depth buffer as approximation of the
opaque geometry of the scene
● Large variety of SSAO algorithms, all taking as input
the scene depth buffer
[Kajalin 09]
[Loos and Sloan 10]
[McGuire et al. 11]
HBAO
● Horizon-Based Ambient Occlusion (HBAO)
● Considers the depth buffer as a heightfield, and
approximates ray-tracing this heightfield
● Improved implementation available in NVIDIA’s SDK11
(SSAO11.zip / HBAO_PS.hlsl)
● Used for rendering SSAO in Battlefield 3 / PC for its
“High” and “Ultra” Graphics Quality presets
[Bavoil and Sainz 09a]
[Andersson 10]
[White and Barré-Brisebois 11]
[Andersson 10]
Original HBAO
Implementation
in Frostbite 2
Frame time (GPU):
25.2 ms
Total HBAO time:
2.5 ms (10% of frame)
[1920x1200 “High” DX11
GeForce GTX 560 Ti]
Screenshot: With HBAO
Screenshot: HBAO Only
The HBAO looked good-enough on screenshots…
Video: Flickering HBAO
…but produced objectionable flickering in motion on thin objects
such as alpha-tested foliage (grass and trees in particular)
Our Constraints
● PC-only
● In Frostbite 2, HBAO implemented only for DX10 & DX11
● Low Perf Hit, High Quality
● Whole HBAO was already 2.5 ms (1920x1200 / GTX 560 Ti)
● HBAO used in High and Ultra presets, had to look great
Considered Workarounds
● Full-resolution SSAO or dual-resolution SSAO (*)
…but that more-than-doubled the cost of the SSAO, and
some flickering could remain
● Brighten SSAO on the problematic objects
…but we wanted a way to keep full-strength SSAO on
everything (in particular on foliage)
(*) [Bavoil and Sainz 09b]
Temporal Filtering Approach
● By definition, AO depends only on the scene
geometry, not on the camera
● For static (or nearly-static geometry), can re-project AO
from previous frame
● Reduce AO variance between frames by using a temporal
filter: newAO = lerp(newAO,previousAO,x)
● Known approach used in Gears of War 2
[Nehab et al. 07]
[Smedberg and Wright 09]
Reverse
Reprojection
[Nehab et al. 07]
(uvi, zi)
Current
Camera
(Frame i)
Previous
Camera
(Frame i-1)
Pi
(uvi, zi)
Reverse
Reprojection
[Nehab et al. 07]
Current
Camera
(Frame i)
1. Current
ViewProjection-1
Previous
Camera
(Frame i-1)
Pi
uvi-1
1. Current
ViewProjection-1
2. Previous
ViewProjection
(uvi, zi)
Reverse
Reprojection
[Nehab et al. 07]
Current
Camera
(Frame i)
Previous
Camera
(Frame i-1)
Current
Camera
(Frame i)
Pi
Pi-1
(uvi-1, zi-1)
1. Current
ViewProjection-1
3. Fetch
Previous
View Depth
2. Previous
ViewProjection
(uvi, zi)
Reverse
Reprojection
[Nehab et al. 07]
Previous
Camera
(Frame i-1)
Current
Camera
(Frame i) Pi
Pi-1
(uvi-1, zi-1)
1. Current
ViewProjection-1
3. Fetch Previous
View Depth
2. Previous
ViewProjection
4. If Pi ~= Pi-1
re-use AO(Pi-1)
(uvi, zi)
Reverse
Reprojection
[Nehab et al. 07]
Previous
Camera
(Frame i-1)
Temporal Refinement [Mattausch et al. 11]
If Pi-1 ~= Pi
AOi = (Ni-1 AOi-1 + AOi) / (Ni-1 + 1)
Ni = min(Ni-1 + 1, Nmax)
Else
AOi = AOi
Ni = 1
Ni = num. frames that have been accumulated in current solution at Pi
Nmax = max num. frames (~8), to keep AOi-1 contributing to AOi
Pi
Pi-1
(uvi-1, zi-1)
(uvi, zi)
Disocclusion Test [Mattausch et al. 11]
Pi ~= Pi-1 
wi = ViewDepth(Viewi-1, Pi)
wi-1 = ViewDepth(Viewi-1, Pi-1)
Relaxed Disocclusion Test
Pi ~= Pi-1 
To support nearly-static objects
● Such as foliage waving in the wind (grass, trees, …)
● We simply relaxed the threshold (used ε = 10%)
Video: Temporal Filtering with ε=+Inf
Flickering is fixed, but there are ghosting artifacts due to disocclusions
Flickering on the grass (nearly static), but no ghosting artifacts
Video: Temporal Filtering with ε=0.1%
No flickering, no ghosting, 1% perf hit (25.2 -> 25.5 ms)
Video: Temporal Filtering with ε=10%
Video: Trailing Artifacts
New issue: trailing artifacts on static objects receiving AO from dynamic objects
Observations
1. With temporal filtering OFF
The flickering pixels are mostly on
foliage. The other pixels do not have any
objectionable flickering.
2. With temporal filtering ON
The trailing artifacts (near the
character's feet) are not an issue on
foliage pixels.
Selective Temporal Filtering
● Assumption
The set of flickering pixels and the set of trailing
pixels are mutually exclusive
● Our Approach:
1. Classify the pixels as stable (potential trailing) or
unstable (potential flickering)
2. Disable the temporal filter for the stable pixels
Pixel Classification Approach
● Normal reconstruction in SSAO shader
● Px = ||P - Pleft|| < ||P - Pright|| ? Pleft : Pright
● Py = ||P - Ptop|| < ||P - Pbottom|| ? Ptop : Pbottom
● N = ± normalize(cross(P - Px, P - Py))
● Idea: If reconstructed normal is noisy,
the SSAO will be noisy
P
Pl Pr
Pt
Pb
Piecewise Continuity Test
1. Select nearest
neighbor Px between
Pleft and Pright
P
Px = Pleft
Pright
Piecewise Continuity Test
1. Select nearest
neighbor Px between
Pleft and Pright
2. Continuous pixels 
|| Px – P || < L
where L = distance threshold
(in view-space units)
P
Px = Pleft
Pright
Pixel Classification Examples
Two Half-Res Passes
Pass 1: Output SSAO and continuity mask
continuityMask = (|| Px – P || < L && || Py – P || < L)
Pass 2: Dilate the discontinuities
dilatedMask = all4x4(continuityMask)
Example Scene
Pass 1: Classification
Note: Distant pixels are all classified as “unstable” because ||P – Px/y||
increases with depth (perspective camera). Luckily for us, trailing
artifacts were not an issue in the distance so this was not an issue.
Pass 2: 4x4 Dilation
Pixel classified as unstable if it
has at least one discontinuity in
its neighborhood
4 Gather4 instructions on DX11
Enable temporal filter only:
- for unstable pixels
- with (|1 – wi /wi-1| < ε)
Selective Temporal Filtering
Video: HBAO + Selective Temporal Filtering
Video: Final Result
Final Pipeline with
Selective Temporal
Filtering (STF)
STF Performance Hit
[1920x1200 “High”, GTX 560 Ti]
• HBAO total: 2.5 ms -> 2.9 ms
• Frame time (GPU): 25.2 -> 25.6 ms
(1.6% performance hit)
STF Parameters
• Reprojection Threshold: For detecting
disocclusions (ε=10%)
• Distance Threshold: For detecting
discontinuities (L=0.1 meter)
• Dilation Kernel Size (4x4 texels)
History Buffers
● Additional GPU memory required for the history buffers
● For (AOi, Zi, Ni) and (AOi-1, Zi-1, Ni)
● Full-res, 1xMSAA
● For Multi-GPU Alternate Frame Rendering (AFR) rendering
● Create one set of buffers per GPU and alternate between them
● Each AFR GPU has its own buffers & reprojection state
● The history buffers are cleared on first use
● Clear values: (AO,Z)=(1.f, 0.f) and N=0
SelectiveTemporalFilter(uvi, AOi)
zi = Fetch(ZBufferi, uvi)
Pi = UnprojectToWorld(uvi, zi)
uvi-1 = ProjectToUV(Viewi-1, Pi)
zi-1 = Fetch(ZBufferi-1, uvi-1)
Pi-1 = UnprojectToWorld(uvi-1, zi-1)
wi = ViewDepth(Viewi-1 , Pi)
wi-1 = ViewDepth(Viewi-1 , Pi-1)
isStablePixel = Fetch(StabilityMask, uvi)
if ( |1 – wi/wi-1 | < ε && !isStablePixel )
AOi-1 = Fetch(AOTexturei-1, uvi-1)
Ni-1 = Fetch(NTexturei-1, uvi-1)
AOi = (Ni-1 AOi-1 + AOi) / (Ni-1 + 1)
Ni = min(Ni-1 + 1, Nmax)
else
Ni = 1
return(AOi, wi, Ni)
Unoptimized
pseudo-code
For fetching zi-1, use
clamp-to-border to
discard out-of-frame
data, with borderZ=0.f
For fetching AOi-1, use
bilinear filtering like in
[Nehab et al. 07]
Blur Optimization
Raw HBAO (Blur OFF)
Final HBAO (Blur ON)
Blur Overview
● Full-screen pixel-shader passes
● BlurX (horizontal)
● BlurY (vertical)
● BlurX takes as input
● Half-res AO
● Full-res linear depth (non-MSAA)
Blur Kernel
● We use 1D Cross-Bilateral Filters (CBF)
● Gaussian blur with depth-dependent weights
[Petschnigg et al. 04]
[Eisemann and Durand 04]
[Kopf et al. 07]
[Bavoil et al. 08]
[McGuire et al. 11]
Sum[ AOi w(i,Zi,Z0), i=-R..R ]
Sum[ w(i,Zi,Z0), i=-R..R ]
Output =
Blur Opt: Adaptive Sampling
2/3 of total weights
1/3 of total weights
Can these samples be
approximated?
Blur Opt: Adaptive Sampling
Replace pairs of samples
with in-between sample
Keep original samples
(AO,Z) fetches with
hw bilinear filtering
Blur Opt: Adaptive Sampling
Brute-Force Sampling BlurX cost: 0.8 ms
Adaptive Sampling BlurX cost: 0.6 ms
Blur Opt: Speedup
Blur Radius: 8
Resolution: 1920x1200
GeForce GTX 560 Ti
GPU Time Before After Speedup
Pack (AO,Z) 0.18 ms 0.18 ms 0%
BlurX 0.75 ms 0.58 ms 29%
BlurY+STF 1.00 ms 0.95 ms 5% (*)
Blur Total 1.93 ms 1.71 ms 13%
(*) Lower speedup due to the math overhead of
the Selective Temporal Filter (STF)
Summary
Two techniques used in Battlefield 3 / PC
1. A generic solution to fix SSAO flickering with
a low perf hit (*) on DX10/11 GPUs
2. An approximate cross-bilateral filter, using a
mix of point and bilinear taps
(*) 0.4 ms in 1920x1200 on GeForce GTX 560 Ti
Questions?
Louis Bavoil
lbavoil@nvidia.com
Johan Andersson
johan.andersson@dice.se
References
[McGuire et al. 11] McGuire, Osman, Bukowski, Hennessy. The Alchemy
Screen-Space Ambient Obscurance Algorithm. Proceedings of ACM
SIGGRAPH / Eurographics High-Performance Graphics 2011 (HPG '11).
[White and Barré-Brisebois 11] White, Barré-Brisebois. More Performance!
Five Rendering Ideas from Battlefield 3 and Need For Speed: The Run.
Advances in Real-Time Rendering in Games. SIGGRAPH 2011.
[Mattausch et al. 11] Mattausch, Scherzer, Wimmer. Temporal Screen-
Space Ambient Occlusion. In GPU Pro 2. 2011.
[Loos and Sloan 10] Loos, Sloan. Volumetric Obscurance. ACM Symposium
on Interactive 3D Graphics and Games 2010.
References
[Andersson 10] Andersson. Bending the Graphics Pipeline. Beyond
Programmable Shading course, SIGGRAPH 2010.
[Bavoil and Sainz 09a] Bavoil, Sainz. Image-Space Horizon-Based Ambient
Occlusion. In ShaderX7. 2009.
[Bavoil and Sainz 09b] Bavoil, Sainz. Multi-Layer Dual-Resolution Screen-
Space Ambient Occlusion. SIGGRAPH Talk. 2009.
[Smedberg and Wright 09] Smedberg, Wright. Rendering Techniques in
Gears of War 2. GDC 2009.
[Kajalin 09] Kajalin. Screen Space Ambient Occlusion. In ShaderX7. 2009.
[Bavoil et al. 08] Bavoil, Sainz, Dimitrov. Image-Space Horizon-Based
Ambient Occlusion. SIGGRAPH Talk. 2008.
References
[Nehab et al. 07] Nehab, Sander, Lawrence, Tatarchuk, Isidoro.
Accelerating Real-Time Shading with Reverse Reprojection Caching. In ACM
SIGGRAPH/Eurographics Symposium on Graphics Hardware 2007.
[Kopf et al. 07] Kopf, Cohen, Lischinski, Uyttendaele. 2007. Joint Bilateral
Upsampling. In Proceedings of SIGGRAPH 2007.
[Petschnigg et al. 04] Petschnigg, Szeliski, Agrawala, Cohen, Hoppe.
Toyama: Digital photography with flash and no-flash image pairs. In
Proceedings of SIGGRAPH 2004.
[Eisemann and Durand 04] Eisemann, Durand. “Flash Photography
Enhancement via Intrinsic Relighting”. In Proceedings of SIGGRAPH 2004.
Bonus Slides
HLSL: Adaptive Sampling
float r = 1;
// Inner half of the kernel: step size = 1 and POINT filtering
[unroll] for (; r <= KERNEL_RADIUS/2; r += 1)
{
float2 uv = r * deltaUV + uv0;
float2 AOZ = mainTexture.Sample(pointClampSampler, uv).xy;
processSample(AOZ, r, centerDepth, totalAO, totalW);
}
// Outer half of the kernel: step size = 2 and LINEAR filtering
[unroll] for (; r <= KERNEL_RADIUS; r += 2)
{
float2 uv = (r + 0.5) * deltaUV + uv0;
float2 AOZ = mainTexture.Sample(linearClampSampler, uv).xy;
processSample(AOZ, r, centerDepth, totalAO, totalW);
}
HLSL: Cross-Bilateral Weights
// d and d0 = linear depths
float crossBilateralWeight(float r, float d, float d0)
{
// precompiled by fxc
const float BlurSigma = ((float)KERNEL_RADIUS+1.0f) * 0.5f;
const float BlurFalloff = 1.f / (2.0f*BlurSigma*BlurSigma);
// assuming that d and d0 are pre-scaled linear depths
float dz = d0 - d;
return exp2(-r*r*BlurFalloff - dz*dz);
}

More Related Content

What's hot

Moving Frostbite to Physically Based Rendering
Moving Frostbite to Physically Based RenderingMoving Frostbite to Physically Based Rendering
Moving Frostbite to Physically Based Rendering
Electronic Arts / DICE
 

What's hot (20)

DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
 
Stochastic Screen-Space Reflections
Stochastic Screen-Space ReflectionsStochastic Screen-Space Reflections
Stochastic Screen-Space Reflections
 
Rendering Technologies from Crysis 3 (GDC 2013)
Rendering Technologies from Crysis 3 (GDC 2013)Rendering Technologies from Crysis 3 (GDC 2013)
Rendering Technologies from Crysis 3 (GDC 2013)
 
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
 
Optimizing the Graphics Pipeline with Compute, GDC 2016
Optimizing the Graphics Pipeline with Compute, GDC 2016Optimizing the Graphics Pipeline with Compute, GDC 2016
Optimizing the Graphics Pipeline with Compute, GDC 2016
 
Physically Based Sky, Atmosphere and Cloud Rendering in Frostbite
Physically Based Sky, Atmosphere and Cloud Rendering in FrostbitePhysically Based Sky, Atmosphere and Cloud Rendering in Frostbite
Physically Based Sky, Atmosphere and Cloud Rendering in Frostbite
 
Secrets of CryENGINE 3 Graphics Technology
Secrets of CryENGINE 3 Graphics TechnologySecrets of CryENGINE 3 Graphics Technology
Secrets of CryENGINE 3 Graphics Technology
 
Dx11 performancereloaded
Dx11 performancereloadedDx11 performancereloaded
Dx11 performancereloaded
 
Bindless Deferred Decals in The Surge 2
Bindless Deferred Decals in The Surge 2Bindless Deferred Decals in The Surge 2
Bindless Deferred Decals in The Surge 2
 
Dissecting the Rendering of The Surge
Dissecting the Rendering of The SurgeDissecting the Rendering of The Surge
Dissecting the Rendering of The Surge
 
Beyond porting
Beyond portingBeyond porting
Beyond porting
 
Triangle Visibility buffer
Triangle Visibility bufferTriangle Visibility buffer
Triangle Visibility buffer
 
Shiny PC Graphics in Battlefield 3
Shiny PC Graphics in Battlefield 3Shiny PC Graphics in Battlefield 3
Shiny PC Graphics in Battlefield 3
 
HPG 2018 - Game Ray Tracing: State-of-the-Art and Open Problems
HPG 2018 - Game Ray Tracing: State-of-the-Art and Open ProblemsHPG 2018 - Game Ray Tracing: State-of-the-Art and Open Problems
HPG 2018 - Game Ray Tracing: State-of-the-Art and Open Problems
 
Siggraph2016 - The Devil is in the Details: idTech 666
Siggraph2016 - The Devil is in the Details: idTech 666Siggraph2016 - The Devil is in the Details: idTech 666
Siggraph2016 - The Devil is in the Details: idTech 666
 
Star Ocean 4 - Flexible Shader Managment and Post-processing
Star Ocean 4 - Flexible Shader Managment and Post-processingStar Ocean 4 - Flexible Shader Managment and Post-processing
Star Ocean 4 - Flexible Shader Managment and Post-processing
 
SPU-Based Deferred Shading in BATTLEFIELD 3 for Playstation 3
SPU-Based Deferred Shading in BATTLEFIELD 3 for Playstation 3SPU-Based Deferred Shading in BATTLEFIELD 3 for Playstation 3
SPU-Based Deferred Shading in BATTLEFIELD 3 for Playstation 3
 
Moving Frostbite to Physically Based Rendering
Moving Frostbite to Physically Based RenderingMoving Frostbite to Physically Based Rendering
Moving Frostbite to Physically Based Rendering
 
Rendering Tech of Space Marine
Rendering Tech of Space MarineRendering Tech of Space Marine
Rendering Tech of Space Marine
 
Light prepass
Light prepassLight prepass
Light prepass
 

Viewers also liked

Viewers also liked (15)

Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2
 
Building the Battlefield AI Experience
Building the Battlefield AI ExperienceBuilding the Battlefield AI Experience
Building the Battlefield AI Experience
 
A Real-time Radiosity Architecture
A Real-time Radiosity ArchitectureA Real-time Radiosity Architecture
A Real-time Radiosity Architecture
 
Bending the Graphics Pipeline
Bending the Graphics PipelineBending the Graphics Pipeline
Bending the Graphics Pipeline
 
How data rules the world: Telemetry in Battlefield Heroes
How data rules the world: Telemetry in Battlefield HeroesHow data rules the world: Telemetry in Battlefield Heroes
How data rules the world: Telemetry in Battlefield Heroes
 
Destruction Masking in Frostbite 2 using Volume Distance Fields
Destruction Masking in Frostbite 2 using Volume Distance FieldsDestruction Masking in Frostbite 2 using Volume Distance Fields
Destruction Masking in Frostbite 2 using Volume Distance Fields
 
5 Major Challenges in Interactive Rendering
5 Major Challenges in Interactive Rendering5 Major Challenges in Interactive Rendering
5 Major Challenges in Interactive Rendering
 
Stylized Rendering in Battlefield Heroes
Stylized Rendering in Battlefield HeroesStylized Rendering in Battlefield Heroes
Stylized Rendering in Battlefield Heroes
 
Battlelog - Building scalable web sites with tight game integration
Battlelog - Building scalable web sites with tight game integrationBattlelog - Building scalable web sites with tight game integration
Battlelog - Building scalable web sites with tight game integration
 
Shadows & Decals: D3D10 Techniques in Frostbite (GDC'09)
 	 Shadows & Decals: D3D10 Techniques in Frostbite (GDC'09) 	 Shadows & Decals: D3D10 Techniques in Frostbite (GDC'09)
Shadows & Decals: D3D10 Techniques in Frostbite (GDC'09)
 
Scope Stack Allocation
Scope Stack AllocationScope Stack Allocation
Scope Stack Allocation
 
A Step Towards Data Orientation
A Step Towards Data OrientationA Step Towards Data Orientation
A Step Towards Data Orientation
 
Introduction to Data Oriented Design
Introduction to Data Oriented DesignIntroduction to Data Oriented Design
Introduction to Data Oriented Design
 
Level Design Challenges & Solutions - Mirror's Edge
Level Design Challenges & Solutions - Mirror's EdgeLevel Design Challenges & Solutions - Mirror's Edge
Level Design Challenges & Solutions - Mirror's Edge
 
Future Directions for Compute-for-Graphics
Future Directions for Compute-for-GraphicsFuture Directions for Compute-for-Graphics
Future Directions for Compute-for-Graphics
 

Similar to Stable SSAO in Battlefield 3 with Selective Temporal Filtering

Battle field3 ssao
Battle field3 ssaoBattle field3 ssao
Battle field3 ssao
MinGeun Park
 
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
Johan Andersson
 
Practical Spherical Harmonics Based PRT Methods
Practical Spherical Harmonics Based PRT MethodsPractical Spherical Harmonics Based PRT Methods
Practical Spherical Harmonics Based PRT Methods
Naughty Dog
 
CyberSec_JPEGcompressionForensics.pdf
CyberSec_JPEGcompressionForensics.pdfCyberSec_JPEGcompressionForensics.pdf
CyberSec_JPEGcompressionForensics.pdf
MohammadAzreeYahaya
 
Real Time Human Posture Detection with Multiple Depth Sensors
Real Time Human Posture Detection with Multiple Depth SensorsReal Time Human Posture Detection with Multiple Depth Sensors
Real Time Human Posture Detection with Multiple Depth Sensors
Wassim Filali
 
Technical Documentation_Embedded_Acoustic_DSP_Projects
Technical Documentation_Embedded_Acoustic_DSP_ProjectsTechnical Documentation_Embedded_Acoustic_DSP_Projects
Technical Documentation_Embedded_Acoustic_DSP_Projects
Emmanuel Chidinma
 
A Bit More Deferred Cry Engine3
A Bit More Deferred   Cry Engine3A Bit More Deferred   Cry Engine3
A Bit More Deferred Cry Engine3
guest11b095
 

Similar to Stable SSAO in Battlefield 3 with Selective Temporal Filtering (20)

Battle field3 ssao
Battle field3 ssaoBattle field3 ssao
Battle field3 ssao
 
Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...
Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...
Unite Berlin 2018 - Book of the Dead Optimizing Performance for High End Cons...
 
Interactive Control over Temporal Consistency while Stylizing Video Streams
Interactive Control over Temporal Consistency while Stylizing Video StreamsInteractive Control over Temporal Consistency while Stylizing Video Streams
Interactive Control over Temporal Consistency while Stylizing Video Streams
 
Multilayer Neuronal network hardware implementation
Multilayer Neuronal network hardware implementation Multilayer Neuronal network hardware implementation
Multilayer Neuronal network hardware implementation
 
Practical spherical harmonics based PRT methods.ppsx
Practical spherical harmonics based PRT methods.ppsxPractical spherical harmonics based PRT methods.ppsx
Practical spherical harmonics based PRT methods.ppsx
 
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
The Intersection of Game Engines & GPUs: Current & Future (Graphics Hardware ...
 
Practical Spherical Harmonics Based PRT Methods
Practical Spherical Harmonics Based PRT MethodsPractical Spherical Harmonics Based PRT Methods
Practical Spherical Harmonics Based PRT Methods
 
Alex Smola, Professor in the Machine Learning Department, Carnegie Mellon Uni...
Alex Smola, Professor in the Machine Learning Department, Carnegie Mellon Uni...Alex Smola, Professor in the Machine Learning Department, Carnegie Mellon Uni...
Alex Smola, Professor in the Machine Learning Department, Carnegie Mellon Uni...
 
Deblocking Filter for Reduction of Blocking Artifacts in Video
Deblocking Filter for Reduction of Blocking Artifacts in VideoDeblocking Filter for Reduction of Blocking Artifacts in Video
Deblocking Filter for Reduction of Blocking Artifacts in Video
 
Thesis Final Presentation
Thesis Final PresentationThesis Final Presentation
Thesis Final Presentation
 
B Eng Final Year Project Presentation
B Eng Final Year Project PresentationB Eng Final Year Project Presentation
B Eng Final Year Project Presentation
 
Applying Recursive Temporal Blocking for Stencil Computations to Deeper Memor...
Applying Recursive Temporal Blocking for Stencil Computations to Deeper Memor...Applying Recursive Temporal Blocking for Stencil Computations to Deeper Memor...
Applying Recursive Temporal Blocking for Stencil Computations to Deeper Memor...
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
 
Moving object detection on FPGA
Moving object detection on FPGAMoving object detection on FPGA
Moving object detection on FPGA
 
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
“Show Me the Garbage!”, Garbage Collection a Friend or a Foe
 
CyberSec_JPEGcompressionForensics.pdf
CyberSec_JPEGcompressionForensics.pdfCyberSec_JPEGcompressionForensics.pdf
CyberSec_JPEGcompressionForensics.pdf
 
Real Time Human Posture Detection with Multiple Depth Sensors
Real Time Human Posture Detection with Multiple Depth SensorsReal Time Human Posture Detection with Multiple Depth Sensors
Real Time Human Posture Detection with Multiple Depth Sensors
 
Technical Documentation_Embedded_Acoustic_DSP_Projects
Technical Documentation_Embedded_Acoustic_DSP_ProjectsTechnical Documentation_Embedded_Acoustic_DSP_Projects
Technical Documentation_Embedded_Acoustic_DSP_Projects
 
Parallel Graphics in Frostbite - Current & Future (Siggraph 2009)
Parallel Graphics in Frostbite - Current & Future (Siggraph 2009)Parallel Graphics in Frostbite - Current & Future (Siggraph 2009)
Parallel Graphics in Frostbite - Current & Future (Siggraph 2009)
 
A Bit More Deferred Cry Engine3
A Bit More Deferred   Cry Engine3A Bit More Deferred   Cry Engine3
A Bit More Deferred Cry Engine3
 

More from Electronic Arts / DICE

High Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in FrostbiteHigh Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in Frostbite
Electronic Arts / DICE
 

More from Electronic Arts / DICE (20)

GDC2019 - SEED - Towards Deep Generative Models in Game Development
GDC2019 - SEED - Towards Deep Generative Models in Game DevelopmentGDC2019 - SEED - Towards Deep Generative Models in Game Development
GDC2019 - SEED - Towards Deep Generative Models in Game Development
 
SIGGRAPH 2010 - Style and Gameplay in the Mirror's Edge
SIGGRAPH 2010 - Style and Gameplay in the Mirror's EdgeSIGGRAPH 2010 - Style and Gameplay in the Mirror's Edge
SIGGRAPH 2010 - Style and Gameplay in the Mirror's Edge
 
SEED - Halcyon Architecture
SEED - Halcyon ArchitectureSEED - Halcyon Architecture
SEED - Halcyon Architecture
 
Syysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray Tracing
Syysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray TracingSyysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray Tracing
Syysgraph 2018 - Modern Graphics Abstractions & Real-Time Ray Tracing
 
Khronos Munich 2018 - Halcyon and Vulkan
Khronos Munich 2018 - Halcyon and VulkanKhronos Munich 2018 - Halcyon and Vulkan
Khronos Munich 2018 - Halcyon and Vulkan
 
CEDEC 2018 - Towards Effortless Photorealism Through Real-Time Raytracing
CEDEC 2018 - Towards Effortless Photorealism Through Real-Time RaytracingCEDEC 2018 - Towards Effortless Photorealism Through Real-Time Raytracing
CEDEC 2018 - Towards Effortless Photorealism Through Real-Time Raytracing
 
CEDEC 2018 - Functional Symbiosis of Art Direction and Proceduralism
CEDEC 2018 - Functional Symbiosis of Art Direction and ProceduralismCEDEC 2018 - Functional Symbiosis of Art Direction and Proceduralism
CEDEC 2018 - Functional Symbiosis of Art Direction and Proceduralism
 
SIGGRAPH 2018 - PICA PICA and NVIDIA Turing
SIGGRAPH 2018 - PICA PICA and NVIDIA TuringSIGGRAPH 2018 - PICA PICA and NVIDIA Turing
SIGGRAPH 2018 - PICA PICA and NVIDIA Turing
 
SIGGRAPH 2018 - Full Rays Ahead! From Raster to Real-Time Raytracing
SIGGRAPH 2018 - Full Rays Ahead! From Raster to Real-Time RaytracingSIGGRAPH 2018 - Full Rays Ahead! From Raster to Real-Time Raytracing
SIGGRAPH 2018 - Full Rays Ahead! From Raster to Real-Time Raytracing
 
EPC 2018 - SEED - Exploring The Collaboration Between Proceduralism & Deep Le...
EPC 2018 - SEED - Exploring The Collaboration Between Proceduralism & Deep Le...EPC 2018 - SEED - Exploring The Collaboration Between Proceduralism & Deep Le...
EPC 2018 - SEED - Exploring The Collaboration Between Proceduralism & Deep Le...
 
Creativity of Rules and Patterns: Designing Procedural Systems
Creativity of Rules and Patterns: Designing Procedural SystemsCreativity of Rules and Patterns: Designing Procedural Systems
Creativity of Rules and Patterns: Designing Procedural Systems
 
Shiny Pixels and Beyond: Real-Time Raytracing at SEED
Shiny Pixels and Beyond: Real-Time Raytracing at SEEDShiny Pixels and Beyond: Real-Time Raytracing at SEED
Shiny Pixels and Beyond: Real-Time Raytracing at SEED
 
High Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in FrostbiteHigh Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in Frostbite
 
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
 
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in FrostbiteFrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in Frostbite
 
Lighting the City of Glass
Lighting the City of GlassLighting the City of Glass
Lighting the City of Glass
 
Photogrammetry and Star Wars Battlefront
Photogrammetry and Star Wars BattlefrontPhotogrammetry and Star Wars Battlefront
Photogrammetry and Star Wars Battlefront
 
Rendering Battlefield 4 with Mantle
Rendering Battlefield 4 with MantleRendering Battlefield 4 with Mantle
Rendering Battlefield 4 with Mantle
 
Mantle for Developers
Mantle for DevelopersMantle for Developers
Mantle for Developers
 
Battlefield 4 + Frostbite + Mantle
Battlefield 4 + Frostbite + MantleBattlefield 4 + Frostbite + Mantle
Battlefield 4 + Frostbite + Mantle
 

Recently uploaded

Dubai Call girls Service 0524076003 Call girls services in Dubai
Dubai Call girls Service 0524076003 Call girls services in DubaiDubai Call girls Service 0524076003 Call girls services in Dubai
Dubai Call girls Service 0524076003 Call girls services in Dubai
Monica Sydney
 
Haridwar Call Girls, 8699214473 Hot Girls Service Haridwar
Haridwar Call Girls, 8699214473 Hot Girls Service HaridwarHaridwar Call Girls, 8699214473 Hot Girls Service Haridwar
Haridwar Call Girls, 8699214473 Hot Girls Service Haridwar
ranekokila
 

Recently uploaded (20)

Hire 💕 8617370543 Dhalai Call Girls Service Call Girls Agency
Hire 💕 8617370543 Dhalai Call Girls Service Call Girls AgencyHire 💕 8617370543 Dhalai Call Girls Service Call Girls Agency
Hire 💕 8617370543 Dhalai Call Girls Service Call Girls Agency
 
🌹Bhubaneswar🌹Ravi Tailkes ❤CALL GIRL 9777949614 ❤CALL GIRLS IN bhubaneswar E...
🌹Bhubaneswar🌹Ravi Tailkes  ❤CALL GIRL 9777949614 ❤CALL GIRLS IN bhubaneswar E...🌹Bhubaneswar🌹Ravi Tailkes  ❤CALL GIRL 9777949614 ❤CALL GIRLS IN bhubaneswar E...
🌹Bhubaneswar🌹Ravi Tailkes ❤CALL GIRL 9777949614 ❤CALL GIRLS IN bhubaneswar E...
 
Call girls Service Khammam - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
Call girls Service Khammam - 9332606886 Rs 3000 Free Pickup & Drop Services 2...Call girls Service Khammam - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
Call girls Service Khammam - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
 
Call Girls Surat Just Call 8617370543 Top Class Call Girl Service Available
Call Girls Surat Just Call 8617370543 Top Class Call Girl Service AvailableCall Girls Surat Just Call 8617370543 Top Class Call Girl Service Available
Call Girls Surat Just Call 8617370543 Top Class Call Girl Service Available
 
Dubai Call girls Service 0524076003 Call girls services in Dubai
Dubai Call girls Service 0524076003 Call girls services in DubaiDubai Call girls Service 0524076003 Call girls services in Dubai
Dubai Call girls Service 0524076003 Call girls services in Dubai
 
Call Girls in Ernakulam - 9332606886 Our call girls are sure to provide you w...
Call Girls in Ernakulam - 9332606886 Our call girls are sure to provide you w...Call Girls in Ernakulam - 9332606886 Our call girls are sure to provide you w...
Call Girls in Ernakulam - 9332606886 Our call girls are sure to provide you w...
 
Exclusive Ahmedabad Call Girls 💯Call Us 🔝 6378878445 🔝 💃 Top Class Call Girl...
Exclusive  Ahmedabad Call Girls 💯Call Us 🔝 6378878445 🔝 💃 Top Class Call Girl...Exclusive  Ahmedabad Call Girls 💯Call Us 🔝 6378878445 🔝 💃 Top Class Call Girl...
Exclusive Ahmedabad Call Girls 💯Call Us 🔝 6378878445 🔝 💃 Top Class Call Girl...
 
Genuine 8617370543 Hot and Beautiful 💕 Gomati Escorts call Girls
Genuine 8617370543 Hot and Beautiful 💕 Gomati Escorts call GirlsGenuine 8617370543 Hot and Beautiful 💕 Gomati Escorts call Girls
Genuine 8617370543 Hot and Beautiful 💕 Gomati Escorts call Girls
 
Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...
Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...
Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...
 
Hire 💕 8617370543 Auraiya Call Girls Service Call Girls Agency
Hire 💕 8617370543 Auraiya Call Girls Service Call Girls AgencyHire 💕 8617370543 Auraiya Call Girls Service Call Girls Agency
Hire 💕 8617370543 Auraiya Call Girls Service Call Girls Agency
 
Call Girls Moradabad Just Call 8617370543 Top Class Call Girl Service Available
Call Girls Moradabad Just Call 8617370543 Top Class Call Girl Service AvailableCall Girls Moradabad Just Call 8617370543 Top Class Call Girl Service Available
Call Girls Moradabad Just Call 8617370543 Top Class Call Girl Service Available
 
Call Girls Bhubaneswar 9777949614 call me Independent Escort Service Bhubaneswar
Call Girls Bhubaneswar 9777949614 call me Independent Escort Service BhubaneswarCall Girls Bhubaneswar 9777949614 call me Independent Escort Service Bhubaneswar
Call Girls Bhubaneswar 9777949614 call me Independent Escort Service Bhubaneswar
 
Top IPTV Subscription Service to Stream Your Favorite Shows in 2024.pdf
Top IPTV Subscription Service to Stream Your Favorite Shows in 2024.pdfTop IPTV Subscription Service to Stream Your Favorite Shows in 2024.pdf
Top IPTV Subscription Service to Stream Your Favorite Shows in 2024.pdf
 
📞 Contact Number 8617370543VIP diu Call Girls
📞 Contact Number 8617370543VIP diu Call Girls📞 Contact Number 8617370543VIP diu Call Girls
📞 Contact Number 8617370543VIP diu Call Girls
 
Dahod Call Girl 📞 8617370543 Low Price Genuine Service
Dahod Call Girl 📞 8617370543 Low Price Genuine ServiceDahod Call Girl 📞 8617370543 Low Price Genuine Service
Dahod Call Girl 📞 8617370543 Low Price Genuine Service
 
Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
 
Haridwar Call Girls, 8699214473 Hot Girls Service Haridwar
Haridwar Call Girls, 8699214473 Hot Girls Service HaridwarHaridwar Call Girls, 8699214473 Hot Girls Service Haridwar
Haridwar Call Girls, 8699214473 Hot Girls Service Haridwar
 
Bhubaneswar🌹Call Girls Chandrashekharpur ❤Komal 9777949614 💟 Full Trusted CAL...
Bhubaneswar🌹Call Girls Chandrashekharpur ❤Komal 9777949614 💟 Full Trusted CAL...Bhubaneswar🌹Call Girls Chandrashekharpur ❤Komal 9777949614 💟 Full Trusted CAL...
Bhubaneswar🌹Call Girls Chandrashekharpur ❤Komal 9777949614 💟 Full Trusted CAL...
 
Call Girls Belonia Just Call 📞 8617370543 Top Class Call Girl Service Available
Call Girls Belonia Just Call 📞 8617370543 Top Class Call Girl Service AvailableCall Girls Belonia Just Call 📞 8617370543 Top Class Call Girl Service Available
Call Girls Belonia Just Call 📞 8617370543 Top Class Call Girl Service Available
 
Unnao 💋 Call Girl 8617370543 Call Girls in unnao Escort service book now
Unnao 💋 Call Girl 8617370543 Call Girls in unnao Escort service book nowUnnao 💋 Call Girl 8617370543 Call Girls in unnao Escort service book now
Unnao 💋 Call Girl 8617370543 Call Girls in unnao Escort service book now
 

Stable SSAO in Battlefield 3 with Selective Temporal Filtering

  • 1. Stable SSAO in Battlefield 3 with Selective Temporal Filtering Louis Bavoil Developer Technology Engineer NVIDIA Johan Andersson Rendering Architect DICE / EA
  • 2. SSAO ● Screen Space Ambient Occlusion (SSAO) ● Has become de-facto approach for rendering AO in games with no precomputation ● Key Idea: use depth buffer as approximation of the opaque geometry of the scene ● Large variety of SSAO algorithms, all taking as input the scene depth buffer [Kajalin 09] [Loos and Sloan 10] [McGuire et al. 11]
  • 3. HBAO ● Horizon-Based Ambient Occlusion (HBAO) ● Considers the depth buffer as a heightfield, and approximates ray-tracing this heightfield ● Improved implementation available in NVIDIA’s SDK11 (SSAO11.zip / HBAO_PS.hlsl) ● Used for rendering SSAO in Battlefield 3 / PC for its “High” and “Ultra” Graphics Quality presets [Bavoil and Sainz 09a] [Andersson 10] [White and Barré-Brisebois 11]
  • 5. Original HBAO Implementation in Frostbite 2 Frame time (GPU): 25.2 ms Total HBAO time: 2.5 ms (10% of frame) [1920x1200 “High” DX11 GeForce GTX 560 Ti]
  • 7. Screenshot: HBAO Only The HBAO looked good-enough on screenshots…
  • 8. Video: Flickering HBAO …but produced objectionable flickering in motion on thin objects such as alpha-tested foliage (grass and trees in particular)
  • 9. Our Constraints ● PC-only ● In Frostbite 2, HBAO implemented only for DX10 & DX11 ● Low Perf Hit, High Quality ● Whole HBAO was already 2.5 ms (1920x1200 / GTX 560 Ti) ● HBAO used in High and Ultra presets, had to look great
  • 10. Considered Workarounds ● Full-resolution SSAO or dual-resolution SSAO (*) …but that more-than-doubled the cost of the SSAO, and some flickering could remain ● Brighten SSAO on the problematic objects …but we wanted a way to keep full-strength SSAO on everything (in particular on foliage) (*) [Bavoil and Sainz 09b]
  • 11. Temporal Filtering Approach ● By definition, AO depends only on the scene geometry, not on the camera ● For static (or nearly-static geometry), can re-project AO from previous frame ● Reduce AO variance between frames by using a temporal filter: newAO = lerp(newAO,previousAO,x) ● Known approach used in Gears of War 2 [Nehab et al. 07] [Smedberg and Wright 09]
  • 12. Reverse Reprojection [Nehab et al. 07] (uvi, zi) Current Camera (Frame i) Previous Camera (Frame i-1)
  • 13. Pi (uvi, zi) Reverse Reprojection [Nehab et al. 07] Current Camera (Frame i) 1. Current ViewProjection-1 Previous Camera (Frame i-1)
  • 14. Pi uvi-1 1. Current ViewProjection-1 2. Previous ViewProjection (uvi, zi) Reverse Reprojection [Nehab et al. 07] Current Camera (Frame i) Previous Camera (Frame i-1)
  • 15. Current Camera (Frame i) Pi Pi-1 (uvi-1, zi-1) 1. Current ViewProjection-1 3. Fetch Previous View Depth 2. Previous ViewProjection (uvi, zi) Reverse Reprojection [Nehab et al. 07] Previous Camera (Frame i-1)
  • 16. Current Camera (Frame i) Pi Pi-1 (uvi-1, zi-1) 1. Current ViewProjection-1 3. Fetch Previous View Depth 2. Previous ViewProjection 4. If Pi ~= Pi-1 re-use AO(Pi-1) (uvi, zi) Reverse Reprojection [Nehab et al. 07] Previous Camera (Frame i-1)
  • 17. Temporal Refinement [Mattausch et al. 11] If Pi-1 ~= Pi AOi = (Ni-1 AOi-1 + AOi) / (Ni-1 + 1) Ni = min(Ni-1 + 1, Nmax) Else AOi = AOi Ni = 1 Ni = num. frames that have been accumulated in current solution at Pi Nmax = max num. frames (~8), to keep AOi-1 contributing to AOi Pi Pi-1 (uvi-1, zi-1) (uvi, zi)
  • 18. Disocclusion Test [Mattausch et al. 11] Pi ~= Pi-1  wi = ViewDepth(Viewi-1, Pi) wi-1 = ViewDepth(Viewi-1, Pi-1)
  • 19. Relaxed Disocclusion Test Pi ~= Pi-1  To support nearly-static objects ● Such as foliage waving in the wind (grass, trees, …) ● We simply relaxed the threshold (used ε = 10%)
  • 20. Video: Temporal Filtering with ε=+Inf Flickering is fixed, but there are ghosting artifacts due to disocclusions
  • 21. Flickering on the grass (nearly static), but no ghosting artifacts Video: Temporal Filtering with ε=0.1%
  • 22. No flickering, no ghosting, 1% perf hit (25.2 -> 25.5 ms) Video: Temporal Filtering with ε=10%
  • 23. Video: Trailing Artifacts New issue: trailing artifacts on static objects receiving AO from dynamic objects
  • 24. Observations 1. With temporal filtering OFF The flickering pixels are mostly on foliage. The other pixels do not have any objectionable flickering. 2. With temporal filtering ON The trailing artifacts (near the character's feet) are not an issue on foliage pixels.
  • 25. Selective Temporal Filtering ● Assumption The set of flickering pixels and the set of trailing pixels are mutually exclusive ● Our Approach: 1. Classify the pixels as stable (potential trailing) or unstable (potential flickering) 2. Disable the temporal filter for the stable pixels
  • 26. Pixel Classification Approach ● Normal reconstruction in SSAO shader ● Px = ||P - Pleft|| < ||P - Pright|| ? Pleft : Pright ● Py = ||P - Ptop|| < ||P - Pbottom|| ? Ptop : Pbottom ● N = ± normalize(cross(P - Px, P - Py)) ● Idea: If reconstructed normal is noisy, the SSAO will be noisy P Pl Pr Pt Pb
  • 27. Piecewise Continuity Test 1. Select nearest neighbor Px between Pleft and Pright P Px = Pleft Pright
  • 28. Piecewise Continuity Test 1. Select nearest neighbor Px between Pleft and Pright 2. Continuous pixels  || Px – P || < L where L = distance threshold (in view-space units) P Px = Pleft Pright
  • 30. Two Half-Res Passes Pass 1: Output SSAO and continuity mask continuityMask = (|| Px – P || < L && || Py – P || < L) Pass 2: Dilate the discontinuities dilatedMask = all4x4(continuityMask)
  • 32. Pass 1: Classification Note: Distant pixels are all classified as “unstable” because ||P – Px/y|| increases with depth (perspective camera). Luckily for us, trailing artifacts were not an issue in the distance so this was not an issue.
  • 33. Pass 2: 4x4 Dilation Pixel classified as unstable if it has at least one discontinuity in its neighborhood 4 Gather4 instructions on DX11
  • 34. Enable temporal filter only: - for unstable pixels - with (|1 – wi /wi-1| < ε) Selective Temporal Filtering
  • 35. Video: HBAO + Selective Temporal Filtering
  • 37. Final Pipeline with Selective Temporal Filtering (STF) STF Performance Hit [1920x1200 “High”, GTX 560 Ti] • HBAO total: 2.5 ms -> 2.9 ms • Frame time (GPU): 25.2 -> 25.6 ms (1.6% performance hit) STF Parameters • Reprojection Threshold: For detecting disocclusions (ε=10%) • Distance Threshold: For detecting discontinuities (L=0.1 meter) • Dilation Kernel Size (4x4 texels)
  • 38. History Buffers ● Additional GPU memory required for the history buffers ● For (AOi, Zi, Ni) and (AOi-1, Zi-1, Ni) ● Full-res, 1xMSAA ● For Multi-GPU Alternate Frame Rendering (AFR) rendering ● Create one set of buffers per GPU and alternate between them ● Each AFR GPU has its own buffers & reprojection state ● The history buffers are cleared on first use ● Clear values: (AO,Z)=(1.f, 0.f) and N=0
  • 39. SelectiveTemporalFilter(uvi, AOi) zi = Fetch(ZBufferi, uvi) Pi = UnprojectToWorld(uvi, zi) uvi-1 = ProjectToUV(Viewi-1, Pi) zi-1 = Fetch(ZBufferi-1, uvi-1) Pi-1 = UnprojectToWorld(uvi-1, zi-1) wi = ViewDepth(Viewi-1 , Pi) wi-1 = ViewDepth(Viewi-1 , Pi-1) isStablePixel = Fetch(StabilityMask, uvi) if ( |1 – wi/wi-1 | < ε && !isStablePixel ) AOi-1 = Fetch(AOTexturei-1, uvi-1) Ni-1 = Fetch(NTexturei-1, uvi-1) AOi = (Ni-1 AOi-1 + AOi) / (Ni-1 + 1) Ni = min(Ni-1 + 1, Nmax) else Ni = 1 return(AOi, wi, Ni) Unoptimized pseudo-code For fetching zi-1, use clamp-to-border to discard out-of-frame data, with borderZ=0.f For fetching AOi-1, use bilinear filtering like in [Nehab et al. 07]
  • 43. Blur Overview ● Full-screen pixel-shader passes ● BlurX (horizontal) ● BlurY (vertical) ● BlurX takes as input ● Half-res AO ● Full-res linear depth (non-MSAA)
  • 44. Blur Kernel ● We use 1D Cross-Bilateral Filters (CBF) ● Gaussian blur with depth-dependent weights [Petschnigg et al. 04] [Eisemann and Durand 04] [Kopf et al. 07] [Bavoil et al. 08] [McGuire et al. 11] Sum[ AOi w(i,Zi,Z0), i=-R..R ] Sum[ w(i,Zi,Z0), i=-R..R ] Output =
  • 45. Blur Opt: Adaptive Sampling 2/3 of total weights 1/3 of total weights Can these samples be approximated?
  • 46. Blur Opt: Adaptive Sampling Replace pairs of samples with in-between sample Keep original samples (AO,Z) fetches with hw bilinear filtering
  • 47. Blur Opt: Adaptive Sampling
  • 49. Adaptive Sampling BlurX cost: 0.6 ms
  • 50. Blur Opt: Speedup Blur Radius: 8 Resolution: 1920x1200 GeForce GTX 560 Ti GPU Time Before After Speedup Pack (AO,Z) 0.18 ms 0.18 ms 0% BlurX 0.75 ms 0.58 ms 29% BlurY+STF 1.00 ms 0.95 ms 5% (*) Blur Total 1.93 ms 1.71 ms 13% (*) Lower speedup due to the math overhead of the Selective Temporal Filter (STF)
  • 51. Summary Two techniques used in Battlefield 3 / PC 1. A generic solution to fix SSAO flickering with a low perf hit (*) on DX10/11 GPUs 2. An approximate cross-bilateral filter, using a mix of point and bilinear taps (*) 0.4 ms in 1920x1200 on GeForce GTX 560 Ti
  • 53. References [McGuire et al. 11] McGuire, Osman, Bukowski, Hennessy. The Alchemy Screen-Space Ambient Obscurance Algorithm. Proceedings of ACM SIGGRAPH / Eurographics High-Performance Graphics 2011 (HPG '11). [White and Barré-Brisebois 11] White, Barré-Brisebois. More Performance! Five Rendering Ideas from Battlefield 3 and Need For Speed: The Run. Advances in Real-Time Rendering in Games. SIGGRAPH 2011. [Mattausch et al. 11] Mattausch, Scherzer, Wimmer. Temporal Screen- Space Ambient Occlusion. In GPU Pro 2. 2011. [Loos and Sloan 10] Loos, Sloan. Volumetric Obscurance. ACM Symposium on Interactive 3D Graphics and Games 2010.
  • 54. References [Andersson 10] Andersson. Bending the Graphics Pipeline. Beyond Programmable Shading course, SIGGRAPH 2010. [Bavoil and Sainz 09a] Bavoil, Sainz. Image-Space Horizon-Based Ambient Occlusion. In ShaderX7. 2009. [Bavoil and Sainz 09b] Bavoil, Sainz. Multi-Layer Dual-Resolution Screen- Space Ambient Occlusion. SIGGRAPH Talk. 2009. [Smedberg and Wright 09] Smedberg, Wright. Rendering Techniques in Gears of War 2. GDC 2009. [Kajalin 09] Kajalin. Screen Space Ambient Occlusion. In ShaderX7. 2009. [Bavoil et al. 08] Bavoil, Sainz, Dimitrov. Image-Space Horizon-Based Ambient Occlusion. SIGGRAPH Talk. 2008.
  • 55. References [Nehab et al. 07] Nehab, Sander, Lawrence, Tatarchuk, Isidoro. Accelerating Real-Time Shading with Reverse Reprojection Caching. In ACM SIGGRAPH/Eurographics Symposium on Graphics Hardware 2007. [Kopf et al. 07] Kopf, Cohen, Lischinski, Uyttendaele. 2007. Joint Bilateral Upsampling. In Proceedings of SIGGRAPH 2007. [Petschnigg et al. 04] Petschnigg, Szeliski, Agrawala, Cohen, Hoppe. Toyama: Digital photography with flash and no-flash image pairs. In Proceedings of SIGGRAPH 2004. [Eisemann and Durand 04] Eisemann, Durand. “Flash Photography Enhancement via Intrinsic Relighting”. In Proceedings of SIGGRAPH 2004.
  • 57. HLSL: Adaptive Sampling float r = 1; // Inner half of the kernel: step size = 1 and POINT filtering [unroll] for (; r <= KERNEL_RADIUS/2; r += 1) { float2 uv = r * deltaUV + uv0; float2 AOZ = mainTexture.Sample(pointClampSampler, uv).xy; processSample(AOZ, r, centerDepth, totalAO, totalW); } // Outer half of the kernel: step size = 2 and LINEAR filtering [unroll] for (; r <= KERNEL_RADIUS; r += 2) { float2 uv = (r + 0.5) * deltaUV + uv0; float2 AOZ = mainTexture.Sample(linearClampSampler, uv).xy; processSample(AOZ, r, centerDepth, totalAO, totalW); }
  • 58. HLSL: Cross-Bilateral Weights // d and d0 = linear depths float crossBilateralWeight(float r, float d, float d0) { // precompiled by fxc const float BlurSigma = ((float)KERNEL_RADIUS+1.0f) * 0.5f; const float BlurFalloff = 1.f / (2.0f*BlurSigma*BlurSigma); // assuming that d and d0 are pre-scaled linear depths float dz = d0 - d; return exp2(-r*r*BlurFalloff - dz*dz); }

Editor's Notes

  1. In Gears of War 2 talk: “Motivation – Large spatial filters needed to hide low occlusion samples – Detail is lost with large filters Lots of variance between frames"
  2. Two 1D passes: applied horizontally, then vertically
  3. approximating the low-weighted part of the Gaussian kernel.
  4. TODO: Dump Gaussian weights for R=8