Search results
Перегляньте профіль Oleksandr (Oles) Shyshkovtsov на LinkedIn, найбільшій у світі професійній спільноті. Oleksandr (Oles) має 2 вакансії у своєму профілі. Перегляньте повний профіль на LinkedIn...
- 4A Games
- CTO at 4A Games
- 370
- Ukraine
We recently caught up with Oles Shyshkovtsov, Ben Archard, and Sergei Karmalsy from 4A — the team behind Metro Exodus — about the unique features of the PC version of the game. Metro Exodus finds beauty in the darkest possible places. As players, we see fetid sewers, terrifying cannibal camps, and ruined compounds.
Oct 12, 2004 · Oles: I’m Oles Shyshkovtsov, Lead Programmer for S.T.A.L.K.E.R. modDB.com: Two years ago, if I mentioned the name ‘GSC Game World’ or ‘S.T.A.L.K.E.R.’ to most people, I’d receive only looks of bewilderment, but now almost every hardcore gamer out there knows about you and your game.
Apr 2, 2021 · Interview with the Team Behind Metro Exodus. We recently caught up with Oles Shyshkovtsov, Ben Archard, and Sergei Karmalsy from 4A – the team behind Metro Exodus – about the unique features of the PC version of the game. Metro Exodus finds beauty in the darkest possible places.
- AGENDA
- Know what you want to achieve
- Legacy version
- RTX ON
- Added buffer to cache raytrace data for use in RTAO and RTGI passes
- Why do it 1000 times when once will do?
- The importance of samples
- Night vs Day
- PUTTING IT ALL TOGETHER
- Modify some pipeline stages
- Add new pipeline stages
- Basic idea
- Raytracing Specific GPU Pipeline
- Ray tracing in screen space
- RAYTRACING
- Hit-positions processing
- Where to get albedo for hit results?
- All the accumulation and denoising happens in this space
- Important for PBR materials consistency
- Details
- Details
- What is it?
- EXAMPLE
- DENOISING IS NOT A FUN...
- Spatial component:
- Temporal component:
- As a single-pass blur
- NO
- Importance sampling
- NO
- Distance weight
- Radius of denoising
- DENOISING
- Fetch heavy data only if weight is non-zero
- Why not do reflections instead?
- GI replaces the need for it
- Color bleeding
- Content fixes and polishing
- Enough of concerns
- What would Oles dream of next?
Introduction Implementation Denosing Artist point of view
Everything? Ok, fine. Global Illumination! Ok, fine. A hybrid, indirect first-bounce, diffuse, Global Illumination and Deferred rendering pipeline. Right. Off you go. GBuffer / Deffer Albedo / AO Normals Materials Depth
Lighting Buffers Lighting Accumulation Shadows and SSAO RSM / Voxel Global Illumination Volumetric Atmospheric Integration Sun, Clustered Lights / IBLs, SSR, GI Forward Effects, Access To L-Clusters A standard deferred renderer TAA / Post-Process Distortions, TAA, Motion Blur, Tone-Mapping and Post Effects Calculate G-Buffer and lighting buffers, a...
Lighting Buffers Lighting Accumulation Perform and Cache Trace SSAO + RT New RTGI Denoiser Passes Standard Shadows and VIA Raytracing Contribution Standard Lighting and Forward Effects The raytraced elements merge nicely with standard deferred renderer
TAA / Post-Process Distortions, TAA, Motion Blur, Tone-Mapping and Post Effects Stochastic ray generation: Image is figuratively shouting at us, so a good denoiser is critical
Monte Carlo Integration: the approximation of large data sets with few samples Rather than adding up every single ray/photon, pick a few as “representative” You may lose some specific details, but will get the big picture Desirable for a GI solution Results get to the point of diminishing returns at a tiny fraction of the total set This doesn’t jus...
Beware of noise and aliasing, both are issues, aliasing is worse You are going to produce a noisy data set, and you will run denoisers Jitter, Importance sampling and Probability Density Function (PDF) provide leverage over sample distribution Output data is buffered for analysis, filtering and use later on Produces good general purpose (input agno...
Voxel GI Broad directional light, insufficient detail for shadows RTGI Light bounce and contact shadows from nearby objects Voxel GI No sense of depth RTGI Gradual self-occlusion on object interiors
Ok. Now it works. Just... RTX fitted in well with 4A engine The game was balanced for the traditional pipeline, but RTX walked in made it its own We want more “rays”: We generate as few as possible for performance, but we can always find as use for more them Lots of options for the future...
SSAO-pass now computes accumulation weights and accumulates raytraced AO Velocity, depth disocclusion, etc. Weights used for both AO accumulation and GI AO-filter pass Before: SSAO filtering, geometric ESM-AO sampling Blending with terrain AO, precomputed AO maps, per-vertex AO Now: Denoising and RTAO accumulation
Raytracing☺ + screen-space pre-tracing Geometry skinning and animation Albedo updates/management BLAS updates TLAS rebuilds Deferred shading of hit-positions Denoising & accumulation
Shoot rays at every pixel in all directions (ok, according to BRDF lobe) Gather lighting at the contact point; multiplied by albedo of that point Accumulate that! Hit distance gives us "free" RTAO
RAYTRACING !! Ambient Occlusion SSAO and SSR Pre-trace Ray Culling Perform Raytracing! Store Results RT-AO RT-AO Filtering Deferred Lighting for RT-GI Screen-space pre-trace + all actual raytracing Ambient Occlusion + Filtering Global Illumination + Two pass denoiser Global Illumination RT-GI First Denoising Pass RT-GI Second Denoising Pass
Exactly the same ray-generation as the real raytrace Ray-march against depth buffer Runs as async-compute, parallel to BVH updates/rebuilds Fixes missing "alpha-tested" geometry in most cases We aggressively filter it out whenever we can Almost constant distance in screen-space (cache-friendly) Outputs into UAV hit-distance and albedo (from g-buffe...
Real rays! Only spawn the real ray if pre-trace failed to find intersection Leads to a small perf-boost Ray-marches terrain’s heightmap inside the "raygen" shader Limit ray distance if intersection is found Almost free here (if done carefully) due to GPU latency hiding Extremely simple pipeline config Only [shader("closesthit")] is necessary for us...
Run exactly the same ray generation as in main trace Reconstruct hit position (or indication of "miss") and albedo MISS = sample skybox HIT = compute lighting Encode information, more on that later Accumulate with history DEFERRED LIGHTING
Color bleeding is mostly visible on close to contact surfaces Usually those are found by initial screen space pre-trace Just sample albedo from gbuffer Integration across the whole hemisphere is a low-pass filter in essence It is a good idea to pre-filter signal to lower denoiser’s input noise level We do that pre-filtering extremely aggressively -...
Illustration from paper “Stupid Spherical Harmonics (SH) Tricks” by Peter-Pike Sloan
This encoding is actually a low order approximation of cubemap But at each individual pixel! This allows us to reconstruct indirect specular! Crucial for metals where albedo is zero or close to it ( Illustration from paper “Stupid Spherical Harmonics (SH) Tricks” by Peter-Pike Sloan )
Resolve SH as usual against pixel's BRDF to get diffuse Extract dominant direction out of SH Compute SH degradation into non-directional/ambient SH If SH is non-directional - it means incoming light is uniform over hemisphere And if it is uniform - that’s the same as if material is "rough" -> recompute new roughness Run regular GGX with (extracted_...
Yes, that's arbitrary shaped and textured polygonal lights I saw a lot of research on that... But nobody does shadows, right? ☺ It is free!
Denoising (or noise reduction) is the process of removing noise from a signal Can be convolution or Deep Learning based DL-based solution is barely explored in real-time graphics Our approach is convolution-based and has spatial and temporal components
Denoised vs Noisy input EXAMPLE Noisy input vs Denoised
...but casting rays is :) Keeps you sad - IQ is always lower than it needs to be Friendship is very fragile - a small change can ruin IQ completely Small gifts don’t help – tiny tunings here and there turn the algorithm into Frankenstein’s creature Demands too much of attention – single pass denoising works badly or inefficiently
Sampling space, distribution and radius? Sample weight? Number of samples?
Feedback link or links? Feedback strength and ghosting?
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
AO and GI are nailed Area lights with soft shadows Caustics. Magic in real life Raytracing as one unified solution Light-based gameplay logic Deferred+Forward Volumetrics RT on consoles
Foundation. 4A Games was founded by former developers from GSC Game World: Andrew Prokhorov, Oles Shyshkovtsov, and Alexander Maximchuk; they, together with Sergei Karmalsky, formed the core team of S.T.A.L.K.E.R.: Shadow of Chernobyl, which was in development at GSC in the early and mid-2000s.
The Number One Educational Resource for the Game Industry. Exploring the Ray Traced Future in 'Metro Exodus' (Presented by NVIDIA) Ben Archard, Sergei Karmalsky, Oles Shyshkovtsov, Dmitry Zhdan. Did you know free users get access to 30% of content from the last 2 years?