The-Forge

The Forge Cross-Platform Rendering Framework PC Windows, Steamdeck (native), Ray Tracing, macOS / iOS, Android, XBOX, PS4, PS5, Switch, Quest 2

APACHE-2.0 License

Stars
4.7K

Bot releases are visible (Hide)

The-Forge - Release 1.38 - November 14th - Cross-Platform Path Tracer

Published by AntoineConffx almost 5 years ago

  • The new 16_Raytracing unit test shows a simple cross-platform path tracer. On iOS this path tracer requires A11 or higher. It is meant to be used in tools in the future and doesn't run in real-time.
    To support the new path tracer, the Metal raytracing backend has been overhauled to use a sort-and-dispatch based approach, enabling efficient support for multiple hit groups and miss shaders. The most significant limitation for raytracing on Metal is that only tail recursion is supported, which can be worked around using larger per-ray payloads and splitting up shaders into sub-shaders after each TraceRay call; see the Metal shaders used for 16_Raytracing for an example on how this can be done.

macOS 1920x1080 AMD Pro Vega 64

Path Tracer running on macOS

iOS iPhone X 812x375

Path Tracer running on macOS

Windows 10 1080p NVIDIA RTX 2080 with DXR Driver version 441.12

Path Tracer running on Windows DXR

Windows 10 1080p NVIDIA RTX 2080 with RTX Driver version 441.12

Path Tracer running on Windows RTX

Linux 1080p NVIDIA RTX 2060 with RTX Driver version 435

Path Tracer running on Linux RTX

  • File System: Fixed an issue wherein compiled shader binaries weren’t being saved to the RD_SHADER_BINARIES resource directory
  • GitHub issues fixed:
    • #150 - [Vulkan] Failed to extend descriptor pool
    • #151 - [Vulkan] rootcbv of detection is case sensitive
    • #152 - [Vulkan] updateDescriptorSet is different from the DirectX12
The-Forge - Release 1.37 - October 30th - New Features Ephemeris 2 | Update Metal

Published by JenkinsConffx almost 5 years ago

The Forge Interactive Inc., the company behind The Forge became a Khronos Associate member.

  • Ephemeris 2
    • New features
      • Add Earth radius: controls the radius of clouds' radius with scale factor. The clouds field will be flatter and the user can see further along the horizon if the radius increase
      • Add noise flow: controls the direction and intensity of clouds' noise flow
      • Add rotation: rotates clouds based on a certain pivot position.
      • Add the second layer: it is possible to generate the second cloud layer which can act, independently
      • Add FXAA
    • Improvement
      • Ray-marching: now, hard-edge artifact is significantly reduced
      • Silver-lining: improved its quality
      • God ray: improved its quality
    • Performance: up to 25% performance increased

Click on the following image to see a video:


Head over to Custom Middleware to check out the source code.

  • macOS / iPad / iOS: ICB support for Metal renderer (draw; draw indexed; pipeline state switch with ICB; ICB optimization with BlitEncoder). The Visibility Buffer example now uses ICB features on MacOS
    • reduced memory consumption for argument buffers in Metal
    • fixes for Metal implementation of descriptor set
    • minor fixes and optimizations in Metal renderer
    • Due to bugs in the run-time for argument buffers we still can't run unit test 04, 06, and 10

The Visibility Buffer example runs now faster on macOS
macOS Visibility Buffer

The-Forge - Release 1.36 - October 18th - New File System

Published by JenkinsConffx almost 5 years ago

  • New cross-platform FileSystem C API, supporting disk-based files, memory streams, and files in zip archives. The API can be viewed in IFileSystem.h, and all of the example code has been updated to use the new API.
    • The API is based around Paths, where each Path represents an absolute, canonical path string on a particular file system. You can query information about the files at Paths, open files as FileStreams, and copy files between different Paths.
    • The concept of FileSystemRoots has been replaced by ResourceDirectorys. ResourceDirectorys are predefined directories where resources are expected to exist, and there are convenience functions to open files in resource directories. If your resources don’t exist within the default directory for a particular resource type, you can call fsSetPathForResourceDirectory to relocate the resource directory; see the unit tests for sample code on how to do this.
    • There's a new 12_FileSystem unit test that demonstrates how to read files from zip archives:

File System Unit Test

  • Vulkan: Adaptive Order Independent Transparency with Raster Order Views is now supported when VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT is supported.

After only a bit more than one week we wanted to ship a quick update ...

  • Ozz Animation System: there is a new unit test added to The Forge.

Ozz Inverse Kinematic: This unit test shows how to use Aim and Two bone IK solvers

Ozz Aim IK

Ozz Two Bone IK

  • Shader Translator:
    • Implicit cast fixes submitted for review
    • Added automated testing on mac via ssh from Windows - still requires integration in CI.
    • Argument buffer support
    • Fixed scalar swizzle in MSL
    • Fixed texture array output in MSL
    • Fixed indentation in MSL for compute shaders
    • Fixed redundant parenthesis in if statement warning in HLSL and MSL
    • Fixed texture object Load method output for MSL
  • Maintenance Update macOS / iOS:
    • Unified depth-stencil texture handling across macOS and iOS. To use a combined
    • The TEXTURE_CREATION_FLAG_ON_TILE flag now specifies that a render target attachment should neither be loaded or stored, in addition to ensuring that the attachment is memoryless on iOS
    • Added TEXTURE_CREATION_FLAG_ON_TILE to the depth buffers within many of the unit tests
    • Fixed a resource barrier issue in the Tessellation unit test on macOS and iOS
    • We still encounter many bugs especially on INTEL based devices. We have RADARs with Apple and we are hoping those will go away over time. Let us know if you need any help with the macOS / iOS run-time.

If you want to join us in sunny Encinitas, CA, USA as a graphics programmer, we would like to hear from you. If you are interested in working in our offices world-wide please let us know as well. We are in Spain, Netherlands, Ukraine, India, New Zealand and other places.

  • TinyImageFormat support: Deano Calver @DeanoC added his image format support library to The Forge. TinyImageFormat provides a query mechanism and encode/decode for many CPU and GPU image formats. Allowing you to use whatever pixel data is best whether its loading/saving or procedural generation.
  • Microprofiler: @zeuxcg this is the third rewrite of the Microprofiler. We replaced the proprietary UI with imGUI and simplified the usage. Now it is much more tightly and consistently integrated in our code base.

Microprofiler

Microprofiler

Microprofiler

Microprofiler

Here are screenshots of the Microprofiler running a unit test on iOS:

Microprofiler

Microprofiler

Microprofiler

Check out the Wikipage for an explanation on how to use it.

  • Descriptor System: @gavkar this is at least the fourth rewrite of the descriptor system now with support for the brand new argument buffers on macOS / iOS. It requires latest OS and XCode versions. This is a major update to the macOS / iOS runtime and it comes with many implementation changes:

    • improved Metal resource usage with useHeaps and useResorces

    • Metal shader reflection system was refactored

    • fixes and optimizations for some unit tests on MacOS and iOS platforms

    • initial support for paramIndex

    • more informative debug labels for Metal resources

      This is probably the first engine integration of argument buffers, so there are issues with the following unit tests on iPadOS/iOS platforms:

    • 04_ExecuteIndirect_iOS: GPU hangs due to argument buffers corruption in latest iOS 13.1. The bug doesn't occur if validation layer is enabled!

    • 06_MaterialPlayground_iOS: Fails to compile shaders trying to write to Texture2DArray (iOS 13.1 beta 2 & 3)

    • 10_PixelProjectedReflections on iOS: iOS Metal shader compiler crashes

    Check out the Wikipage for a high-level view of the architecture.

  • Light & Shadow Playground: we cleaned up the code base of the Light & Shadow Playground and integrated missing pieces into The Forge Eco system.

  • Shader Translator: a lot of work went into the Shader Translator since the last release. Let us know how it works for you. There is a how-to on the Wiki page here:

    How to use the Shader Translator

  • Issues: fixed #129 "Metal backend buffer namespace collision"

  • glTF model viewer - we build a simple cross-platform glTF model viewer by integrating Arseny Kapoulkine @zeuxcg excellent meshoptimizer and the same PBR as used in the Material Playground unit test.
    • It optimizes the geometry data set with all the features meshoptimizer offers
    • It will be extended in the future with more functionality, following some of our internal tools
    • Uses the cgltf reader from the same repository

glTF model viewer running on iPad with 2048x1536 resolution

glTF model viewer

glTF model viewer

glTF model viewer running on Samsung Galaxy S10 with Vulkan with 1995x945 resolution

glTF model viewer

glTF model viewer

glTF model viewer running on Ubuntu AMD RX 480 with Vulkan with 1920x1080 resolution

glTF model viewer

glTF model viewer

  • Basis Universal Texture Support: TF now supports Binomials @richgel999 @google Basis Universal Texture Support as an option to load textures. Support was added to the Image class as a "new image format". So you can pick basis like you can pick DDS or KTX.

  • Shader Translator: since more than a year we are developing on and off a shader translator that allows us to define our own shader language. This shader language is an extension to HLSL and will in the future offer the opportunity to store more data for the various platforms. For example we will able to pre-compile pipelines with this setup. We are using it extensively to translate all the shaders you see in The Forge. You can find the source code in

    Common_3/ThirdParty/OpenSource/hlslparser

    The public version translates at the moment to HLSL, GLSL and Metal. Metal support is still work in progress. There is a test scenario where the shader translator translates most of the shaders of the unit tests and examples to HLSL and GLSL. It will be integrated into our Jenkins test system and it gets tested with every code change.

  • Input system: we re-architected the app level interface for our cross-platform input system based on gainput. Our previous interface somehow leaned toward PC input systems and we wanted to better focus on our main target platforms.

  • Ozz animation system: we cleaned up the code base. There was a lot of unused code because we wired up the system with all the "service providers" of The Forge. So Ozz like any other third party library is using the math, log, error, assert, file system, memory management and others sub-systems from The Forge. Previously, it had a lot of those implemented on its own.

  • Issues resolved:

    • 128 "The DepthStateDesc.mDepthTest is ignored on the Metal backend"
    • 130 "Vulkan and D3D12 backend set sampler maxLod to zero for nearest mipmap mode"
    • 131 "Vulkan sampler set the anistropy flag to false always."
  • Ephemeris - Skydome System
    • Added Procedural Night Sky and Star-field - the night sky's nebula colors are now customizable
    • Added Glow effects on Sun and Moon
    • Fix the issue that Godrays can be drawn on unexpected area

Click on the following screenshot to see a movie:

Ephemeris 2

  • New Light and Shadow Playground: we rebuild the light and shadow playground by using the St. Miguel art assets and adding some new shadowing techniques:
    • Exponential Shadow Map - this is based on Marco Salvi's @marcosalvi papers. This technique filters out the edge of the shadow map by approximating the shadow test using exponential function that involves three subjects: the depth value rendered by the light source, the actual depth value that is being tested against, and the constant value defined by the user to control the softness of the shadow
    • Adaptive Shadow Map with Parallax Correction Cache - this is based on the article "Parallax-Corrected Cached Shadow Maps" by Pavlo Turchyn in GPU Zen 2. It adaptively chooses which light source view to be used when rendering a shadow map based on a hiearchical grid structure. The grid structure is constantly updated depending on the user's point of view and it uses caching system that only renders uncovered part of the scene. The algorithm greatly reduce shadow aliasing that is normally found in traditional shadow map due to insufficient resolution. Pavlo Turchyn's paper from GPU Pro 2 added an additional improvement by implementing multi resolution filtering, a technique that approximates larger size PCF kernel using multiple mipmaps to achieve cheap soft shadow. He also describes how he integrated a Parallax Correction Cache to Adaptive Shadow Map, an algorithm that approximates moving sun's shadow on static scene without rendering tiles of shadow map every frame. The algorithm is generally used in an open world game to approximate the simulation of day & night’s shadow cycle more realistically without too much CPU/GPU cost.
    • Signed Distance Field Soft Shadow - this is based on Daniel Wright's Siggraph 2015 @EpicShaders presentation. To achieve real time SDF shadow, we store the distance to the nearest surface for every unique Meshes to a 3D volume texture atlas. The Mesh SDF is generated offline using triangle ray tracing, and half precision float 3D volume texture atlas is accurate enough to represent 3D meshes with SDF. The current implementation only supports rigid meshes and uniform transformations (non-uniform scale is not supported). An approximate cone intersection can be achieved by measuring the closest distance of a passed ray to an occluder which gives us a cheap soft shadow when using SDF.

To achieve high-performance, the playground runs on our signature rendering architecture called Triangle Visibility Buffer. The step that generates the SDF data also uses this architecture.

Click on the following screenshot to see a movie:

Signed Distance Field Soft Shadow Map

The following PC screenshots are taken on Windows 10 with a AMD RX550 GPU (driver 19.7.1) with a resolution of 1920x1080.

Exponential Shadow Maps:

Light and Shadow Playground - Exponential Shadow Map

Adaptive Shadow Map with Parallax Correction Cache

Adaptive Shadow Map with Parallax Correction Cache

Signed Distance Field Soft Shadow:

Signed Distance Field Soft Shadow Map

Signed Distance Field Soft Shadows - Debug Visualization

Signed Distance Field Soft Shadow Map

The following shots show Signed Distance Field Soft Shadows running on iMac with a AMD RADEON Pro 580

Signed Distance Field Soft Shadow Map

Signed Distance Field Soft Shadow Map

The following shots show Signed Distance Field Soft Shadows running on XBOX One:

Signed Distance Field Soft Shadow Map

Signed Distance Field Soft Shadow Map

Signed Distance Field Soft Shadow Map

Readme for Signed Distance Field Soft Shadow Maps:

To generate the SDF Mesh data you should select “Signed Distance Field” as the selected shadow type in the Light and Shadow Playground. There is a button called “Generate Missing SDF” and once its clicked, it shows a progress bar that represents the remaining SDF mesh objects utilized for SDF data generation. This process is multithreaded, so the user can still move around the scene while waiting for the SDF process to be finished. This is a long process and it could consume up to 8+ hours depending on your CPU specs. To check how many SDF objects there are presently in the scene, you can mark the checkbox "Visualize SDF Geometry On The Scene".

  • Android: we switched from AndroidStudio to Visual Studio, because the AndroidStudio environment didn't allow us to work effectively and integrating it into our Jenkins test system made the build time explode.
  • Vulkan:
    • support of GPU assisted validation
    • new Vulkan SDK 1.1.114 is supported
  • Art package: we updated the St. Miguel scene with colored flags for the future Aura Global Illumination example. Because it is used by several unit tests, you want to download the art package again. See the Install instructions below for how to do this.

P.S: we have a new logo :-) The Forge Logo

  • macOS / iOS - we are now supporting Metal 2.2 on those platforms. The macOS version of the Visibility Buffer now uses primitive_id argument that allows to use indexed geometry similar to the Vulkan and DirectX 12 versions. There is a significant increase in performance and reduction in memory consumption
    • Debug labels for buffers and textures now present in frame captures;
    • cmdSynchronizeResources for MacOS and iOS;
    • Minor fixes in GPU synchronization with memory barriers
    • Minor fixes in ArgumentBuffers implementation

Please note that we use the early beta system and XCode versions for development. So there might some instabilities.

Here is a screenshot: Macbook Pro 2017 with Radeon Pro 560 3360x2100 resolution
Visibility Buffer with Metal 2.2

  • Android - we increased the number of unit tests support. With this release we additionally support on the devices mentioned below:

    • 06_MaterialPlayground
    • 18_Playback
    • 19_Blending
    • 20_JoinAttachment
    • 21_PartialBlending
    • 22_AdditiveBlending
    • 23_BakedPhysics
    • 24_MultiThread
    • 25_Skinning
    • 26_Audio
  • Vulkan:

    • Updated volk Metaloader for Vulkan to latest
    • The Forge supports now as the min spec for the Vulkan SDK 1.1.82.0 and as the max spec is 1.1.101.0
  • Discord: we offer now also support through a discord channel. Sign up here:
    Join the Discord channel at https://discord.gg/hJS54bz

  • User Group Meetings - there will be a user group meeting during GDC. In case you want to organize a user group meeting in your country / town at any other point in time, we would like to support this. We could send an engineer for a talk.

  • Support for Education - in case your School / College / University uses The Forge for education, we would like to support this as well. We could send an engineer or help create material. So far the following schools use The Forge for teaching:

Breda University of Applied Sciences

        Contact:
        Jeremiah van Oosten 
        Monseigneur Hopmansstraat 1
        4817 JT Breda

Ontario Tech University

        Contact:
        Andrew Hogue
        Ontario Tech University
        SIRC 4th floor
        2000 Simcoe St N
        Oshawa, ON, L1H 7K4
  • Writing Guidelines - For contributions to The Forge we apply the following writing guidelines:
  • Ephemeris 2: this is a new volumetric skydome system developed for PS4 / XBOX One class of hardware. Click on the image to watch a video:

Ephemeris 2

For Ephemeris and the rest of our commercial custom middleware there is now a new GitHub repository here Custom-Middleware

We also have a skydome system for mobile hardware called Ephemeris 1, that will be released on GitHub later.

  • Android: we are supporting now more and more unit tests in Android by improving the run-time support. Here are screenshots:

01_Transformations
01_Transformations

02_Compute
02_Compute

05_FontRendering
05_FontRendering

09_LightAndShadow
09_LightAndShadow

13_imGUI
13_imGuI

17_EntityComponentSystem
17_EntityComponentSystem

We added the Samsung S10 Galaxy phone (Qualcomm Adreno 640 Graphics Card (Vulkan 1.1.87)) to the test devices for Android.

  • ENTT: we decided to remove ENTT and replace it with our own ECS system that we use internally for tools. ENTT in debug is too slow for practical usage because it decreases execution speed and increases compile times substantially. It appears that "modern C++ 17" and probably also "modern C++ 14" is not ready for usage in a team environment because it decreases productivity too much. We tried to remove C++ 17 and 14 features to make it run faster but it ended up too much work. We went from more than 200 ms with ENTT to 60 ms with our own ECS running a Debug build on a Intel Core i7-6700T 2.8GHz. In release our own system is in the moment not as fast as ENTT but we will fix that.

  • Audio: we did a first pass on integrating SoLoud for all our platforms. There is a new unit test:

26_Audio

  • Linux: following STEAM, we are switching to the Mesa RADV driver in our test environment for AMD GPUs. For NVIDIA GPUs we are still using the NVIDIA driver.

  • Texture Asset pipeline: we did a first pass on a unified texture asset pipeline. On the app level only the name of the texture needs to be provided and then depending on the underlying platform it will attempt to load the "optimal compressed" texture, which in the moment is either KTX or dds. In the future there will be Google Basis support as well.

    • Removed support for various non-optimal texture file formats - png, jpg, tga, hdr, exr
    • Add ASTC support for iOS through KTX container
    • Add compressed textures for all unit test resources
    • Add BC6H signed and unsigned float variants

Please make sure you download the art asset zip file again with the help of the batch file.

  • Issue list:
    • issue #109 "Texture updates broken" is fixed now
    • NVIDIA GTX 1660 bug: this card with the Vulkan run-time and driver 419.35 became unresponsive, while the DirectX 12 run-time works as expected. Any other NVIDIA GPU works fine ... this looks like a driver bug ...
  • We replaced for all platforms TinySTL with EASTL for support of additional data structures and functionality. This was a major change and we still expect a few bugs to appear.
  • ARM based platforms (iOS/Android) can pick a new NEON intrinsics code path in our math library
  • Microprofiler
    • Multithreaded GPU Profiling is now supported
    • Microprofiler is now enabled on all the Unit-tests and togglable using UI checkbox.
    • Added new common interface, IProfiler.h
  • Issue fixed:
    • #105 - 04_ExecuteIndirect crash on macOS

We added a new section below the Examples to show screenshots and an explanation of some of the Tools that we integrated. We will fill this up over the next few releases.

  • We were helping James Webb with his level editor for 'Star Wars Galaxies' called SWB that now uses The Forge

Here is a screenshot

SWB Level Editor

SWB is an editor for the 2003 game 'Star Wars Galaxies' that can edit terrains, scenes, particles and import/export models via FBX. The editor uses an engine called 'atlas' that will be made open source in the future. It focuses on making efficient use of the new graphics APIs (with help from The-Forge!), ease-of-use and terrain rendering.

  • Memory tracking:
    • Fluid memory tracker cross-platform for Windows, macOS and Linux
    • We used MTuner to remove many memory leaks and improve memory usage. MTuner might be integrated in the future.
  • Micro Profiler: our initial implementation of Microprofiler needed to be re-done from scratch. This time we wanted to do the integration right and also implemented the dedicated UI.

Microprofiler in Visibility Buffer

Microprofiler in Visibility Buffer

To enable/disable profiling, go to file ProfileEnableMacro.h line 9 and set it
to 0(disabled) or 1(enabled).
It's supported on the following platforms:

  • Windows
  • Linux
  • macOS (GPU profiling is disabled)
  • iOS (GPU profiling is disabled)
  • Android(WIP will be enabled later on)

We can find MicroProfile integrated in the follwing examples (more will follow):

  • Unit Test 02_Compute
  • VisibilityBuffer

How to use it:
MicroProfile has different display modes. The most useful one when running inside
the application is Timers. We can change the display mode going to Mode and right
clicking the one we want.

If we are on Timer, we will be able to right click on the labels. This will enable
a graph at the bottom left.

If we wanted to just see some of the groups inside the profile display, go to Groups
and select the ones you want.

The other options are self explanatory.

If the user wants to dump the profile to a file, we just need to go to dump,
and right click on the amount of frames we want. This generates a html file in the
executable folder. Open it with your prefered web browser to have a look.

Dumping is useful, because we will be able to see the profile frame by frame,
without it being updated every frame. This will be useful when displaying in Detailed
mode.

There is also a Help menu item.

  • Log system improvements:
    • Support for multiple log files
    • Easy to use log macros
    • Scoped logging
    • Multithreaded support
    • New log format: date, time, thread, file, line, log level and message
    • No need to declare global LogManager, it will be created on demand
  • Filesystem improvements: this is fed back from one of our game engine integrations of The Forge
    • file time functions now use time_t
    • added FileWatcher class for Windows/Linux/macOS
    • added CombinePaths function
  • macOS / iOS Metal:
    • added Barriers with memoryBarrierWithScope for Buffers,Textures and Render targets
    • added GPU sync with MTLFence as fallback (for cross encoder synchranization and BlitEncoder where memoryBarrier isn't available). Removed force fence on render targets change because it is no longer necessary. There might be a small performance improvements coming from this
    • support of Microprofiler see above
    • refactor of windows support code: replaced MTKView for iOS and macOS with a custom NSview and NSWindow implementation. We have more explicit control now over the window.
  • Issues fixed:
    • #112 - cmdBindDescriptors performance issue (DX12)
    • #110 - RenderDoc compatibility with SM6+
The-Forge - Release 1.27 - April 25th, 2019 - Spring House Cleaning Release :-)

Published by JenkinsConffx over 5 years ago

  • DirectX
    • Improved our support for DXGI_FORMAT_BC6H_SF16, DXGI_FORMAT_BC7_UNORM
    • DirectX12 removed CPU wait on GPU only fences.
  • Windows - header include cleanup, resolved conflict with CALLTYPE enum in objidl.h
  • macOS / iOS - utilize packed_* data types more in shaders
  • Replaced some usages of GPURingBuffer with API Buffers, for reduced dependencies
  • Unit tests fixes
    • Fixed sky frag shaders in all unit tests
    • Fixed unit test debug vk crash from validation layer with AMD gpu (Vulkan SDK 1.1.101)
  • UI fixes + improvements
    • Added an example of how to use the texture previewer widget in the ui unit test (13_UserInterface)
    • App can now control the UI descriptor binder update freq
  • Improved ThreadedTask system and added helper texture loading code that uses the new async loading system in 06_MaterialPlayground and Visibility Buffer
  • Fixed issue #100 "About FBX resource import?"
The-Forge - Release 1.26 - April 3rd, 2019 - Vulkan Ray Tracing for Windows & Linux

Published by AntoineConffx over 5 years ago

  • Ray Tracing with the Vulkan API (Vulkan SDK 1.1.101.0) is now working on Windows and Ubuntu through our unified Ray Tracing interface in IRay.h:

PC Ubuntu Vulkan RTX, GeForce RTX 2070, Driver Version 418.56 1080p
Ray Tracing on PC Ubuntu with Vulkan RTX

PC Windows 10 RS5, DirectX12, GeForce RTX 2070, Driver version 418.81 1080p:
Ray Tracing on PC With DXR

Mac Mini with Intel Core i5 3GHz cpu with integrated graphics Intel UHD Graphics 630 (Part No. MRTT2RU/A) with resolution 3440x1440:
Ray Tracing on macOS

iPad 6th Generation iOS 12.1.3 (16D39) with a resolution of 2048x1536
Ray Tracing on iOS

  • New Descriptor Memory Management System: we did a second pass over that system and improved performance and memory consumption further. Now we can group individual descriptor bindors into a single one. A lot of bug and memory leak fixes were done as well.
  • Async / Sync Resource Loading system: instead of allocating additional memory, it uses now fixed size memory and splits resources for upload
  • Unified UniformRingBuffer and MeshRingBuffer into GPURingBuffer
  • Vulkan: we implemented now something close to the official recommendation how to convert "Vsync on/off" to Vulkan parameters (in pseudocode) (thanks to Adam Sawicki
    @Reg__):
if mEnableVsync:
    Try to find among available present modes, in this order: FIFO_RELAXED, FIFO
else:
    Try to find among available present modes, in this order: IMMEDIATE, MAILBOX, FIFO (we prefer here FIFO_RELAXED instead)

if chosen mode == IMMEDIATE:
    imageCount = (Fullscreen ? 2 : 3)
else if chosen mode == MAILBOX:
    imageCount = 3
else if chosen mode == FIFO or FIFO_RELAXED:
    imageCount = 2
imageCount = max(VkSurfaceCapabilitiesKHR::minImageCount, min(imageCount, VkSurfaceCapabilitiesKHR::maxImageCount))
  • The purpose of the DescriptorBinder approach is to allocate all memory descriptor space at load time, instead of doing it on-demand at runtime, as it is commonly done. This is done in an effort to allow applications to have better control over memory footprint overhead, which is especially important on mobile targets, and to improve performance by avoiding runtime memory allocations.
    The system will use shader reflection to determine the appropriate descriptor layouts in combination with descriptor update frequency knowledge. This knowledge will come from the client domain or from content editor tools.
    With this information, we are able to allocate all necessary descriptor memory up-front, giving more control to the application about the memory footprint. This is one of the initiatives leading up to the new version of The Forge.
    Read more Descriptor Management

  • The input system was refactored and streamlined. This is mostly a rewrite of the code layer above gainput.

    • IOperatingSystem.h: getMousePosition, getKeyDown, getKeyUp, getJoystickButtonDown, getJoystickButtonUp were removed
    • InputSystem.h:
      • KeyMappingDescription - changed now every axis should be defined as separate entry
      • IsButtonPressed, IsButtonTriggered, IsButtonReleased, MapKey, SetActiveInputMap, GetButtonData, GetDisplayWidth, GetDisplayHeight, were removed
      • New functions GetBoolInput, GetFloatInput. KeyMappingDescription for new function require directly specifying intended action(released, pressed, triggered) via DEFINE_DEVICE_ACTION macro
      • For InputEventHandler old style definition is used
The-Forge - Release 1.24 - March 1st, 2019 - Asynchronous Resource Loading | Micro Profiler

Published by JenkinsConffx over 5 years ago

The Forge now allows to asynchronously load resources on all platforms. There are two ways to do this:

  • use addResource/updateResource with boolean parameter called batch set to true, and later wait for completion with waitBatchCompleted (used in 01_Transformations, 03_MultiThread, 06_MaterialPlayground, 09_LightShadowPlayground, 09a_HybridRaytracing, 12_RendererRumtimeSwitch, 15_Transparency)
  • use addResource with SyncToken parameter and check for completion with isTokenCompleted or wait for completion with waitTokenCompleted (used in 10_PixelProjectedReflections)
    addResource/updateResource with boolean parameter set to false are the old blocking versions.
    Let us know what you think of this system.
  • We integrated zeux's Micro Profiler into The Forge. So far it supports DirectX 11, 12 and Vulkan. We are still working on Metal and Android support.

Chrome
Micro Profiler in Chrome

Visibility Buffer on PC Windows 10
Micro Profiler in Visibility Buffer

Linux Ubuntu
Micro Profiler Linux Ubuntu

  • Better integration of Ray Tracing into the renderer; still Vulkan RTX is work in progress
  • Fixed Vulkan instance extension bug: "InstanceLayers loop is wrong in CreateInstance" issue #92
The-Forge - Release 1.23 - February 14th, 2019 - New Cross-Platform Ray Tracing Interface

Published by JenkinsConffx over 5 years ago

Happy Valentines! Here is some love from The Forge team:

  • new cross-platform Ray Tracing interface in IRay.h, currently supporting DXR (Vulkan comes next) and Metal Ray Tracing on Windows, macOS and iOS. In other words you can now write Ray Tracing code that runs on Windows, macOS and iOS. You will need a RTX GPU to run this on Windows. On macOS / iOS only latest software update is needed.

PC Windows 10 RS5, DirectX12, GeForce RTX 2070, Driver version 418.81 with resolution 3440x1440:
Ray Tracing on PC With DXR

Mac Mini with Intel Core i5 3GHz cpu with integrated graphics Intel UHD Graphics 630 (Part No. MRTT2RU/A) with resolution 3440x1440:
Ray Tracing on macOS

iPad 6th Generation iOS 12.1.3 (16D39) with a resolution of 2048x1536
Ray Tracing on iOS

  • Rewrote the Light & Shadow Playground from scratch, thanks to Mateusz Kielan:

iMac with AMD RADEON 580 (Part No. MNED2xxA) with resolution of 5120x2880:
Light & Shadow Playground

iPhone 7 iOS 12.1.4 (16D57) with a resolution of 1334x750:
Light & Shadow Playground

Linux Ubuntu 18.04.1 LTS Vulkan 1.1.92 RADEON 480 Driver 18.30 with a resolution of 1920x1080:
Light & Shadow Playground

  • macOS / iOS:

    • upgraded to
      • macOS Mojave 10.14.4 beta (18E174f)
      • iOS 12.2 beta (16E5181f)
      • Xcode 10.2 beta (10P82s)
    • a few months ago, we submitted a bug report for wave intrinsics to Apple and with the latest firmware beta (see above), wave intrinsics are working now in unit test 15
    • support PVR texture compression (V3 header) on iOS
  • Improvements for all Platforms:

    • 3D Texture mip maps for write
    • Unified texture subresource updates across all APIs
    • Memory optimizations: much less memory is used across all platforms
  • All the unit tests are now in one folder unit test and they are in one solution file

This is the first release in 2019 and The Forge GitHub repository is today exactly one year old, with the first release on the same day last year :-) In 2018 we made 22 releases and we improved The Forge in many areas.
If you followed us so far ... why not just join us? We are looking for more graphics programmer joining our teams. We have offices in Encinitas, CA USA (Main) / Mumbai, India / Shanghai, China / Breda, Netherlands / St. Petersburg, Russia and in Lviv, Ukraine.

Now back to release notes: many years ago in 2012 / 2013, we helped AMD and Crystal Dynamics with the development of TressFX for Tomb Raider. We also wrote an article about the implementation in GPU Pro 5 and gave a few joint presentations on conferences like FMX. At the end of last year we revisited TressFX. We took the current code in the GitHub repository, changed it a bit and ported it to The Forge. It now runs on PC with DirectX 12 / Vulkan, macOS and iOS with Metal 2 and on the XBOX One. We also created a few new hair assets so that we can showcase it. Here are screenshots of our programmers art:

PC Windows DirectX 12 GTX 950 Driver 416.81:

Hair on PC

iPad (Model A1803):

Hair on iOS

The current implementation is overall too slow to be used on some of our platforms but we are going to improve performance over time. We are also going to improve on the hair art assets.
Apart from Hair, the Material Playground now also has improved versions of Metal and a new material category Wood:

Metal:

Material Playground Metal on PC

Wood:

Material Playground Wood on PC

  • Entity component system (ECS) for all platforms: we've chosen to integrate ENTT (https://github.com/skypjack/entt) into The Forge. The initial implementation was contributed by Amer Koleci @AmerKoleci:

Image of the Entity Component System unit test in The Forge

  • Lua Scripting System for all platforms: the Lua scripting integration allows to register functions to lua contexts so these functions will be available via scripts. Functions can be static or lambda. In latter case you can store some state information within lambda. Scripts are executed using LuaManager::RunScript() or LuaManager::AddAsyncScript() methods. In second case scripts are still executed in synchronous way. Async execution implementation is planned. Also there is "updateable" script. It is loaded (at this point script main body is executed), then it can be "updated" - update() function from script is invoked. Script can invoke any registered function and can store state information which will be available from update to update. The script can be reloaded - can be useful for fast iterations when you just modify script and don't even need to restart application. If that script contains exit() function then it will be executed when script is reloaded or closed. Checkout unit test 06_MaterialPlayground for an example on how to use it. In this unit tests it executes three scripts to load models and textures and animate the camera.

The team will soon go into winter hybernation mode ... which means many Confetti people will fly home over the holiday season to spend time with their loved ones. We will be back with more releases next year, probably in February.

To send you season greetings, we extended our Ozz implementation by adding a new Skinning unit test:

PC Windows 10 DirectX 12 GeForce 950 Driver 411.63 with a resolution of 1080p
PC Windows 10 skinning unit test

Linux Ubuntu 18.04.1 LTS Vulkan 1.1.92 RADEON 480 Driver 18.30 with a resolution of 1920x1080
Ubuntu skinning unit test

iMac with AMD RADEON 580 (Part No. MNED2xx/A) with resolution of 1920x1080
macOS skinning unit test

iPhone 7 iOS 12.0.1 (16A404) with a resolution of 1334x750
iOS skinning unit test

XBOX One
XBOX One skinning unit test

  • Vulkan:
    • all three Vulkan platforms (Windows, Linux, Android) use now the same Vulkan shaders
    • Upgraded Linux and Windows SDK to 1.1.92.1
  • The math library now supports more integer data types
  • Updated assimp to use latest master + added projects instead of shipping binaries
  • macOS / iOS
    • Added support for iOS Gestures (Not currently in use in the unit-tests)
    • Improved pixel projected reflections on Metal Platforms
    • Upgraded all the XCode projects to target Xcode 10.1 (10B61) and iOS Version 12.0.1 (16A404)
    • Started Testing additionally on A12 Devices Phone Xs Max (Model MT5D2LL/A)
  • Numerous shader translator updates. Head over to Confetti Shader Translator check them out :-) It is getting more and more stable.
  • Triangle Visibility Buffer (for PC and XBOX One. macOS and Linux will be supported in the next release):
    • Added PBR art assets and PBR Lighting (please download the art assets again with the script see Install section below)
    • Added swapchain3 DirectX 12 HDR support (in the future swapchain4 and Vulkan HDR will be added) and additionally made sure the PBR art assets are HDR "enabled"
    • There is an automatic camera fly-through to make demos easier
    • God rays were added for additional "awesomeness"
    • With the new PBR art assets and God rays (switchable), we still expect it to run faster than before on all target platforms

PC Windows 10 DirectX12 NVIDIA GeForce 1080 Driver 416.16 with a resolution of 3840x2160 in window mode (MSAA x2)
Triangle Visibility Buffer PC DirectX 12

PC Windows 10 Vulkan 1.1.85 NVIDIA GeForce 1080 Driver 416.16 with a resolution of 3840x2160 in window mode (MSAA x2)
Triangle Visibility Buffer PC Vulkan

Linux Ubuntu 18.04.1 LTS Vulkan 1.1.85 AMD RX480 resolution of 1920x1080 in window mode (MSAA x2)
Triangle Visibility Buffer Linux Vulkan

iMac with AMD RADEON 580 (Part No. MNED2xx/A) 2560x1440 in window mode (MSAA x1)
Triangle Visibility Buffer iMac

Xbox One resolution of 1920x1080
Triangle Visibility Buffer XBOX One

PC Windows 10 Vulkan 1.1.85 GeForce 950 Driver 416.81 with a resolution of 1920x1080 in window mode:
Ray Marching example PC

iMac with AMD RADEON 580 (Part No. MNED2xx/A) with resolution of 1920x1080 in window mode:
Ray Marching example iMac

Linux Vulkan 1.1.85 RADEON 480 Driver 18.30 with a resolution of 1920x1080 in window mode:
Ray Marching example Linux

  • The font rendering unit test was upgraded
    • Added light and dark theme (... inspired by macOS here)
    • Added fit-to-screen functionality for arbitrary resolutions
    • Scene text is now docked to center

Image of the Font Rendering Unit test

  • There were many updates for iOS / macOS and XBOX One run-times and a few for Linux
The-Forge - Release 1.19 - November 1st, 2018 - Material Playground

Published by AntoineConffx almost 6 years ago

  • Added more materials to the Material Playground. Therefore you want to download the Art folder again just for this release (see the Install section below on how to do this).
    Here are shots of five of the supported platforms:

PC Windows 10 Vulkan 1.1.82.1 GeForce 1080 Driver 399.07 with a resolution of 1920x1080 in full-screen:
Material Playground on PC

Linux Vulkan 1.1.82.1 RADEON 480 Driver 18.30 with a resolution of 1920x1080 in full-screen:
Material Playground on PC

iMac with AMD RADEON 580 (Part No. MNED2xx/A) with resolution of 5120x2880 in full-screen:
Material Playground on iMac

iPad (Model A1803) with iOS 12.0 and a resolution of 2048x1536 in full-screen:
Material Playground on iPad

XBOX One:
Material Playground on XBOX One

  • Updated Fontstash library to the latest version and added .OTF font file support
  • macOS / iOS Metal 2 we are working on applications running on those run-times, so there is a constant stream of improvmements coming in:
    • Sampler arrays
    • Enable some parts of GPU profiler code for debug markers, cpu timestamps on Metal runtime
    • File system bug fixes
    • Include headers fixes
    • Improved error and warnings in Metal shaders