Releases: iftodebogdan/GITechDemo
Integrated ImGui
By integrating ImGui, a proper UI has been implemented which allows for tweaking of artist parameters in real time. It also includes a GPU frametime graph alongside the old text based GPU profile markers list. Model and texture files now leverage LZ4 compression.
Update v1.9.1:
- Internal refactor of how shader constants are updated
- Made resolution and refresh rate options to be a dropdown list
- Disabled selective FXAA application based on edge detection since it does more harm than good
- Added an ASCII render effect as a post-process filter - disabled by default
- Fixed a stall caused by faulty logic with index/vertex buffer update and usage, causing uneven frame pacing
- Tuned some parameters, particularly for tonemapping
- Fixed a couple of memory leaks
Added new bidirectional reflectance distribution functions
Ashikhmin-Shirley and Ward BRDFs were added, as well as spheres mapped with PBR material samples from Free PBR Materials to serve as a more efficient way of comparing different lighting models. The default BRDF is now Cook-Torrance with GGX normal distribution and geometric shadowing terms, since it seems to be the most popular, appearing in Unreal Engine 4, Unity 5 and most modern games that implement a physically based rendering pipeline. Some lighting and post-processing parameters have been updated to reflect this change. Blending of cubemap reflections with screen space reflections has also seen improvements.
Update v1.8.1
- Upgraded the build environment to Visual Studio 2017 - now requires the Microsoft Visual C++ Redistributable for Visual Studio 2017 for x86 or x64 systems
- Removed DirectX 9 runtime libraries from the binaries folder - now requires the DirectX End-User Runtimes (June 2010)
- Fixed a bug where closing the window would sometimes not terminate the process
- Made the HUD rendering system triple buffered to minimize stalls and frame spikes
- Added color correction through the use of a 3D color lookup texture
- Added anamorphic bokeh effect as an option (disabled by default)
- Fix for some lens flare issues on certain resolutions
Update v1.8.1.1
- Updated some rendering parameters for lighting, tone mapping, bloom, film grain and color correction
- Application now defaults to borderless window mode
Screen Space Reflections and GPU profiling
Version 1.7.0 includes the following features and fixes:
- Screen space reflection technique based on the work of Morgan McGuire and Michael Mara, found here
- Tuned some textures to better take advantage of SSR
- Optimized shaders that use downsampled depth buffers
- Noise from indirect lighting was removed by using low frequency normals (vertex normals, actually)
- Bloom is no longer applied to volumetric lighting effect
- Real time GPU timings for each rendering pass in the HUD
Update v1.7.1 - more prominent light shafts
- Added some geometry meant to interact with the volumetric lighting effect (grill above)
- Removed lens distortion effect due to blurring
- SSR no longer reflects sun and sky
Update v1.7.1.1
- Fixed a bug when switching between lighting models
Update v1.7.2
- Added support for infinite projection matrix as per this paper and added an artist parameter to toggle its usage
- Fixed an issue where some combinations of camera, light and surface normal angles would cause a division by zero, leading to severe visual artifacts from NaN propagation
- FXAA is now applied only on edges (depth based edge detection) so as to minimize texture blurring
- Implemented support for borderless windowed mode
- Volumetric fog color is now an artist parameter
- Adjusted default artist parameters for various effects
Revised bokeh depth of field effect with chromatic aberration, vignetting and film grain
Revised the bokeh depth of field effect for added performance. In this sense, a multi-pass approach has been employed where a blur kernel the shape of a hexagon has been used. The samples are weighted based on their respective circle of confusion (CoC) value, which is stored in the alpha channel during an initial pass. Depending on the size of the aperture, bokeh will appear larger on screen, but multiple passes will be required so as not to have the appearance of a dithered pattern due to undersampling. Bokeh is extracted by utilizing a brightness pass filter, where all samples above a specified luminance value have their weight increased with respect to the specified gain value. Aperture size directly relates to the size of the blur kernel. As such, in order to maximize coverage of samples over all passes, the kernel size varies for each pass. Vignetting and the chromatic aberration effect have remained unchanged from the previous shader version. The option to render into a quarter resolution target has been removed, though, since the new full resolution version provides increased quality at an acceptable performance cost (besting even the old quarter resolution variant).
Added a film grain effect at the end of the post-processing chain (after tonemapping) so as not to be affected by other effects or by exposure adjustments. It uses an ALU based pseudo-random number generator seeded by the last frame's CPU time and by the current fragment's texture coordinate. It provides decent procedural noise without an apparent pattern associated to it (as is the case with precomputed noise textures) and has low ALU and no bandwidth cost.
At an application level, support for enforcing display refresh rate has been implemented, albeit it will only work in fullscreen mode. VSync has also been added as an option which, unlike the latter, will work when the application is in windowed mode as well. Other quality of life fixes for the window management system have found their way into the current release, such as glitch-free switching between fullscreen and windowed modes.
Update v1.6.1 - optimization to volumetric light sample distribution
*ray samples for the volumetric light effect now have a customizable distribution via the corresponding artist parameter - this provides a higher sample density near the camera
*the intensity of the volumetric light now scales with the intensity of the directional light
Update v1.6.2 - optimization to rendering flow, concerning gamma space, resulting in higher quality dark tones
*gamma correction is no longer applied to input diffuse textures
*the G-Buffer's albedo component now stores sRGB color information and gamma correction is done at lighting stage
Volumetric lighting and anamorphic lens flares
Implemented volumetric lighting with realistic fog attenuation effect.
While ray marching through the scene, samples are shaded using the radiative transport equation. Additionally, they are modulated with a 3D noise texture, sampled in world space (plus a time-dependent offset, for a "scrolling" animation), after which an exponential vertical falloff is applied for a realistic fog effect. The samples are then gathered into a quarter resolution (1/2 width and 1/2 height) render target. Ray starting positions are offset according to an 8x8 dither map (Bayer matrix) and, therefore, the texture in which the light is accumulated is blurred using a separable Gaussian kernel, taking care not to bleed over edges by adjusting the Gaussian weights based on the difference between the sample's depth and the depth of the currently shaded fragment. Finally, the quarter resolution texture is added to the scene using additive blending after an upscaling process which consists of a hybrid between the nearest-depth and bilinear filters. To avoid the typical blocky artifacts caused by it, the nearest-depth filter is applied only on edge fragments, as determined by the edge detection algorithm, defaulting to regular bilinear filtering on non-edge fragments.
The anamorphic lens flare effect consists of multiple horizontal blur passes on a very narrow render target (1/32 width of back buffer) after having done a brightness filter pass.
Cook-Torrance BRDF, Motion Blur, Lens Flare and more!
Implemented Cook-Torrance BRDF shading model with two normal distribution functions: GGX and Beckmann. This comes with new textures which determine material type (dielectric/metallic) and roughness.
Implemented motion blur effect, consistent with frame time.
Implemented lens flare effect.
Camera animation (no collisions, currently).
Artist parameters (changeable on-the-fly) are now exposed to the user via the HUD. Use the arrow keys to modify them in real time.
Resources are now loaded on separate threads, drastically reducing loading times. The progress, along with thread IDs, is shown in the console.
Some tuning to bloom, DoF autofocus time, shadow map rendering, RSM.
Rendering will be paused when window is out of focus, giving other applications more CPU time.
Bokeh DoF effect is now disabled by default due to it being very expensive. Can still be enabled via HUD.
Depth of Field with bokeh, SSAO and FXAA
High Dynamic Range (HDR) rendering
Implemented High Dynamic Range rendering and the filmic tone mapping operator used in Uncharted 2, which mimics a filmic response curve for a more natural, film-like look. Bloom is added to objects that are very bright by performing a brightness filter pass before blurring the bloom texture. Diffuse textures and the LDR render target are now sRGB enabled so as to perform all shading in linear space and have gamma-correct output. Also, the light tuning has gone through a complete overhaul so as to leverage the new post-processing techniques.
Reflective Shadow Map
Real-time rendering of indirect illumination by using adaptive sampling of the Reflective Shadow Map (RSM). Supports fully dynamic lights and scene geometry and does not require any kind of asset conditioning.
Update v1.1.1 - optimizations to the Reflective Shadow Map:
*the indirect light is now stored in a separate quarter-resolution buffer so as to reduce the number of samples from the RSM
*the quarter-resolution indirect light accumulation buffer is upscaled with an edge-aware bilateral filter and composited to the full-resolution light accumulation buffer using additive color blending