Skip to content

Releases: NVIDIAGameWorks/Falcor

4.3

04 Dec 21:58
6252ef7
Compare
Choose a tag to compare
4.3
  • Toolchain
    • Upgrade projects to Win 10 version 2004 using SDK version 19041.
  • Dependencies
    • Update packman to version 6.15.
    • Update slang to version 0.17.5.
    • Use same letter casing for package name and directory in Externals/.packman.
    • Get OSS dependencies from falcor_dependencies package placed in Externals/.packman/deps.
    • Add OpenVDB and NanoVDB.
  • Core
    • Remove deprecated APIs.
    • Add support for shader model 6.4 and 6.5.
    • Add utility code for TraceRayInline.
    • Add encoding/decoding of 8-bit snorm values.
    • Add encoding/decoding of normals in 2x8 octahedral format.
    • Convert palettized images to RGBA when loaded by Bitmap.
    • Fix issue with the search paths when an empty directory exists in the list.
    • Add caps check for new D3D features.
    • Move Bitmap init logic from create function to constructor
    • Add separate constructor to Bitmap that allocates memory but doesn't copy initial data.
    • Set memory stats when creating Bitmap from file.
    • Show hint to enable breaking on exceptions when an exception is caught.
    • Add support for creating views for Texture3D/2DMS resources.
    • Cleanup handling of null views to fix D3D12 validation error (null views now use the correct view dimension).
    • Move creation of TLAS SRV from into ShaderResourceView.
    • Update ParameterBlock logic to not create views when binding resource to root descriptor.
    • Add warning when creating buffer larger than 4GB as this is currently not well supported.
    • Fix size computation in buffer creation to handle >4GB.
    • Add runtime size check for large SRV/UAV view creation.
    • Move script writing functions from Scripting to separate ScriptWriter class.
    • Refactor BBox and BoundingBox classes into AABB class that matches the GPU-side slang module.
    • Make Profiler a singleton.
    • Program::Desc internals no longer require entry points to be defined contiguously.
    • Decouple declaration and shader library addition for hit groups in RtStateObject. This allows any particular entry point to be referenced in multiple hit groups while only being defined once.
  • DirectXTex
    • Fix row size calculation in CopyContext::ReadTextureTask to handle compressed formats.
    • Integrate DirectXTex for DDS import/export.
    • Remove legacy custom DDS loader.
    • Calculate and store row pitch and total size in Bitmap.
  • Logging
    • Add a new Logger::Level::Debug log level.
    • Use shorter log labels without tabs.
    • Do not capture stdout when running Python scripts by default, making print() from Python scripts forward to the terminal window.
  • CUDA
    • Fix the CudaInterop sample to build on VS 2019 and pull from Source/Externals/.packman/cuda
    • Update CUDA setup instructions in the README.
    • Add initial support for cross-compiling Slang compute shaders for CUDA execution.
  • Shaders
    • Fix Slang preprocessor warning when the emissive sampler is not used.
    • Import SampleGeneratorInterface instead of SampleGenerator if possible.
  • Scene
    • Cleanup to use enum directly in HitInfo struct.
    • Add instance type field to HitInfo struct to enumerate what class of geometry was hit.
    • Display materials in the UI in case-insensitive alphabetic order, rather than in material ID order.
    • Perform tangent space computation prior to pretransforming texture coordinates, as tangent space should be independent of texture transforms.
    • Renamed Scene::render to Scene::rasterize.
    • Add Scene::getSceneBoundsRadius() and Scene::getSceneBoundsCenter() and respective Python bindings
    • Bind scene acceleration structure as root descriptor (workaround for validation layer not correctly recognizing its view dimension).
    • Reduce scene GPU memory usage for the previous frame vertex positions.
    • Use 16-bit vertex indices for meshes with max 2^16 vertices.
    • Support mixed 16/32-bit format in the scene's global index buffer.
    • Support 32-bit draw IDs for rasterizing scenes with more than 2^16 mesh instances.
    • Remove deprecated BuffersAsShaderResource scene builder flag.
    • Add scene stats for texture compression and index/vertex/geometry memory usage.
    • Add detailed GPU memory usage stats for the scene representation.
    • Fix validation errors in BLAS construction.
    • Increase the maximum number of supported transforms and meshes to 2^21 each, reduce the number of supported materials to 2^21 as well.
    • Change RT build heuristics to place all static non-instanced meshes in a single BLAS.
    • Add scene builder flags to configure merging of meshes into BLASes.
    • Add Scene stats to show texture memory usage.
    • Make V-buffer format dynamically configured based on Scene requirements.
    • Add 96-bit V-buffer encoding to support large scenes that need 64-bit instance+primitive index.
    • Make Scene::setCamera() search by pointer (also fixes Python API).
    • Emit UpdateFlags::CameraSwitched when switching between cameras.
    • Add curves.
  • SceneBuilder
    • Fix scene builder flag that controls material merging, use DontMergeMaterials.
    • Add optimization pass that removes unused meshes.
    • Improve error messages when adding instances.
    • Fix documentation error for addMeshInstance.
    • Allow configuring render settings.
    • Split meshes in scene builder when computing optimized mesh groups (BLASes) for ray tracing.
    • Cleanup tangent space computation and make sure prepareShadingData always generates a plausible TBN frame.
    • Add check that normal and tangent are non-parallel, to avoid degenerate tangent spaces for bad assets.
    • Add top-down median BVH builder for partitioning the mesh groups.
    • Pre-transform static non-instanced meshes to world space at load time.
    • Add mesh winding flag.
    • Move calculation of mesh groups and sorted mesh instance list to the scene builder.
    • Split large mesh groups into chunks to reduce BLAS build memory usage.
    • Perform BLAS build in multiple iterations to reduce memory usage.
    • Add async/multi-threaded texture loading.
    • Move texture coordinate quantization and material de-duplication to a post-processing step. This is to avoid accessing material textures during the majority of scene building, which we want to avoid for parallel texture loading to work.
    • Add parallel mesh creation.
    • Fix so that tangents are correctly set to zero if missing.
  • Scene loading
    • Add more visible deprecation warning for fscene support.
    • Cleaning scripts from using .fscene files.
    • Use parent directory of .pyscene file as highest priority data directory during import.
    • Use parent directory of .py file as highest priority data directory during script loading.
    • Add new Python scene file format with many new features such as programmatically adding materials, cameras, lights, geometry and animations.
    • Loading Python scene files using the old # scenefile.xxx header for referencing a scene file results in an error.
    • Add TriangleMesh class to create and load simple triangle geometry (plus factory functions for quad, cube and sphere).
    • Add Transform class to setup transformations.
    • Add Python bindings for TriangleMesh, Transform, Animation as well as SceneBuilder.
  • Animation
    • Fix pre/post infinity linear mode with hermite interpolation.
    • General code cleanup and documentation updates.
    • Add support for looping animation channels individually based on some of the options available in Maya (constant, linear, cycle, and oscillate).
    • Add UI and scripting to control whether or not animations should also loop globally as well as how each animation channel behaves outside of defined keyframes.
    • Remove the Animation::Channel struct. This construct is not really necessary and complicates things for no good reason.
  • Material
    • Add a Transform to Falcor::Material, which can be used to apply scale/rotation/translation to all of the material's textures.
    • Texture transformation is implemented as a pretransformation of the texture coordinates of each mesh the material is bound to, using the inverse of its texture transform.
    • Minor fix to material comparison.
    • Add support for displacement mapping.
    • Extend Material to handle hair BCSDF parameters.
    • Add HairChiang16 using BxDF interface (eval, evalPdf and importance sampling implemented).
  • Environment map
    • Allow loading/clearing env map from UI.
    • Change the order in which the rotations passed to EnvMap::setRotation() are applied from (Z * Y * X) to (X * Y * Z).
    • Add getDimensions method to EnvMap.
  • Light probes
    • Remove LightProbe class and addadded EnvMapLighting which is used instead to do image-based lighting.
    • Remove light probes from the Scene and SceneBuilder classes (as well as the fscene importer).
    • Add EnvMapLighting to ForwardLighting pass to get back image-based lighting from the environment map.
    • Extend the SkyBox pass to directly support the environment map.
  • Camera & lights
    • Introduce explicit RectLight, DiscLight and SphereLight classes.
    • Make Camera and Light take optional name parameter in the static create functions.
    • Expose Camera, Light and Material constructors to Python API.
    • Replace color/intensity properties on Light with just intensity in Python API.
    • Fix light direction UI widget to not modify the value unless it was changed in the UI.
    • Fix bug in DistantLight update flags on first frame.
  • EmissiveLightSampler
    • Replace EmissiveLightSampler::prepareProgram with EmissiveLightSampler::getDefines.
    • Add onSurface flag to IEmissiveLightSampler to indicate if sample is used for surface or volume.
    • Implement onSurface flag in LightBVHSampler.
  • PathTracer
    • Update nested dielectric code to interpret material nested...
Read more

4.2

25 Aug 23:19
300aee1
Compare
Choose a tag to compare
4.2
  • Core improvements
    • Default to NVIDIA GPU during device creation.
    • Updated GLFW to 3.3.2. Fixes headless window initialization error on Windows 10 2004.
    • Fix async PNG file saving.
    • Fix incorrect assert in HitInfo.
    • Removed inherit_shared_from_this workaround.
    • Added Threading::finish() which waits for all executing threads to complete.
    • Fixed a crash when no scene is loaded.
    • Remove ConstSharedPtrRef typedefs and use const SharedPtr& instead.
    • Call flushAndSync() upon successful Material::loadTexture() to maintain reasonable upload heap size.
    • RtProgramVars and ShaderTable code cleanup.
    • Cleaned up Gui API and usage.
    • Replaced MAX macros with std::numeric_limits.
    • Use functions.
  • Logging
    • Log scene load timee.
    • Log to std::out/err by default.
    • Adds Logger::setTerminateOnError(bool enable) to allow control over whether Logger terminates the program after a message of level Level::Error is emitted. This allows programs to emit messages for recoverable errors.
    • Set default logger verbosity to Info.
  • Slang
    • Update Slang to 0.16.3.
    • Make use of scoped static const feature in Slang.
    • Added reflection support for int8, uint8, int16, uint16, float16 and float64.
    • Added shader tests for float16 and float64 buffers.
  • Scene load
    • Add SceneBuilder support for loading vertex attributes at different frequencies (constant, uniform, vertex, face-varying).
    • Merge identical vertices based on topology of existing index buffer.
    • Improve validation and error reporting in scene builder.
    • Update Assimp mesh load flags to avoid splitting large meshes (>1M faces) at load time.
    • Update Assimp mesh loader to cull unsupported vertex attribute at load time.
    • Improve scene load error handling.
  • Scene representation
    • Add scene support for non-indexed vertices.
    • Fix mesh instance updates.
    • Compact mesh instance data.
    • Moved helper functions in ShadingData.slang to Shading.slang.
    • Optimize BLAS construction.
    • Add resource names to the Scene buffers.
    • Fix handling scenes with no analytical light sources.
    • Clean up scene statistics and remove renderUI on LightCollection.
  • Fix tangent spaces and normal mapping
    • Fix Mikktspace tangents to use face-varying rate.
    • Fix tangent space orientation to match MikkTSpace.
    • Switch to represent tangent space using float4 tangent+sign.
    • Update asset importer and scene builder to compute correct tangent spaces.
    • Update render passes that produce/consume bitangents to pass around tangents instead.
  • Animation
    • Add support for hermite spline interpolation for animations.
    • AnimationController:animate() now returns false if there are no animations in the scene.
    • Replace AnimatedObject with Animatable base class for objects that have an animated transform (Camera and Light in Scene).
    • Check for camera animation data before enabling animations.
  • Cameras
    • Added support for multiple cameras per scene.
    • Added support for specifying camera frame width.
    • Fix undefined initialization for CameraData::aspectRatio.
  • Materials
    • Introduce a Material::TextureSlot enum to allow setting textures by slots.
    • Move some of the code in AssimpImporter for setting textures into Material.
    • Improve UI for materials (show textures, allow setting roughness/metallic on separate sliders, etc.)
    • Introduce Material::loadTexture function to allow loading textures from files via Python.
    • Support sample/evaluate specific BSDF lobes.
    • Added lobes parameter to ShadingData to select what BSDF lobes to sample/evaluate.
    • Added support for delta reflection/transmission in the new BSDF implementation (enabled if GGX alpha is below threshold).
    • Removed clamping of ShadingData::linearRoughness.
    • Added getBSDFLobes() to query the available BSDF lobes given some ShadingData.
    • Fixed sampling weights for rough dielectric BSDF (now matches results when VNDF is used).
    • Avoid returning BSDF samples with pdf == 0.
    • Enable VNDF sampling for GGX lobe.
  • Lights
    • Optimized data layout for emissive triangles in LightCollection.
    • Pack EmissiveTriangle into 64 bytes.
    • Optimize BVH node layout and access.
    • Change default LightBVH bounding cone method to Sphere for better performance.
    • Improve uniform light sampler.
    • Added support for DistantLight (directional light that subtends a finite solid angle).
    • Removed API and usage of setting position and distance for DirectionalLights.
    • Added new function getShadowRay to Lights.slang that generates a RayDesc for a shadow ray given an origin and the light being traced to.
    • Add light active flag to activate/deactivate individual analytical lights.
    • Introduce renderSettings on Scene to select what types of light sources to use for lighting.
  • Refactored environment map
    • Introduce EnvMap which simply holds the environment map and provides an eval function to query the environment map.
    • Added intensity property to EnvMap for scaling the radiance.
    • Added rotation property to EnvMap for rotating the environment map.
    • Added renderUI method for editing environment map as part of the scene.
    • Added scripting API for editing environment map properties.
    • Make EnvMap part of the global Scene object, similar to what we have with LightCollection.
    • Added Scene::UpdateFlags for detecting changes in the environment map properties (intensity, transform).
    • Introduce EnvMapSampler which is responsible for sampling an environment map. Path tracers replace EnvProbe with EnvMapSampler.
    • Added support for EnvMap tinting.
  • TexLOD3
    • Added anisotropic texture filtering to ray cones for primary ray traced visibility.
    • Added indirect curvature to ray cones (two methods: Combo and Unified).
    • Added environment filtering for ray cones and ray differentials both for primary and secondary hits.
    • Added GUI support in WhittedRayTracer for choosing ray cone method.
    • Added so ray cones can function without G-buffer (spread angle, which was required by the RTG version).
    • Added support for widening the ray cone based on the roughness of the BRDF.
    • Differential barycentric bug fix.
  • Path Tracer
    • Add maxNonSpecularBounces and disableCaustics options to path tracer.
    • Added rayCount and pathLength outputs for debugging.
    • Automatically enable pixel stats if rayCount or pathLength are connected.
    • Support for pure reflection/transmission events, BSDF and MIS improvements/fixes.
    • Sample lights only if BSDF has non-delta reflection lobes.
    • Correctly handle transmission and delta events when MIS is enabled.
    • Fix MIS weight in MegakernelPathTracer when multiple light samples are used.
    • Added option to enable alpha testing to path tracers.
    • Use closest hit for handling false intersections with nested dielectrics.
    • Add support for textured specular transmission.
    • Add ray footprint support.
    • Fix bug where MinimalPathTracer would not account for emissive lights.
    • Implement usage of new Scene renderSettings flags in MinimalPathTracer, WhittedRayTracer and MegakernelPathTracer.
    • Move emissive sampler options to sampling group.
    • Track per-ray type ray count stats in the path tracer.
  • GBuffer
    • Fixes prepareShadingData when reading GBuffer data by not flipping normals again.
    • Fixes forceCullMode in GBufferRaster pass by forwarding the rasterizer state to the depth pre-pass.
  • Utilities
    • Add LogLuv HDR encoding for storing HDR RGB data into 32 bits.
    • Added additional color maps to Utils.Color.ColorMap (Viridis, Plasma, Magma, Inferno).
    • Added ColorMapPass to DebugPasses library for applying a color map to an input.
    • Add option to ErrorMeasurePass to average the error over RGB when creating a difference image.
    • Added mechanism to reset AccumulatePass from script.
    • Update SampleGenerator API to use getDefines().
    • Uses nested padded struct in SampleGenerator.
    • Add fNumber, shutter speed, and exposure mode to ToneMapper.
    • Added MinMax reduction type to ComputeParallelReduction.
    • Added an auto-range feature to ColorMapPass.
    • Added Add and Multiply modes to Composite pass.
  • Add support for per pixel time measurements
    • Added GpuTimer class for measuring time in shaders.
    • Added GpuTimer slang module.
    • Added time output buffer (32bit) for time visualization in GBufferRT, VBufferRT and MegakernelPathTracer.
  • Mogwai improvements
    • When saving a config from Mogwai, store it in the list of recent scripts.
    • When loading a script from Mogwai, store it in the list of recent scripts.
    • Do not add script to recent files if in silent mode.
    • Improvements to capturing/saving render graph outputs.
    • Added more texture material metadata to UI.
    • Use .pyscene extension for python scenes to clearly separate them from render scripts.
    • Support dragging python scene files (.pyscene) into Mogwai.
  • Improved Mogwai console
    • Move console to the top of the window.
    • Make console black and some more styling.
    • Allow console to be toggled with the tick key (previously you could only open it that way).
    • Allow open console to be closed with Escape key.
    • Use Up/Down key to browse through the history.
    • Stick focus to the console as long as it's open.
    • Make Console a singleton.
    • Using `InteractiveInterpret...
Read more

Falcor 4 Revision 1

18 Apr 01:05
57e3d42
Compare
Choose a tag to compare
  • glm has been removed from the global namespace.
    • Added typedefs to glm vector types following HLSL convention (such as float4, uint3, etc.)
  • Updated scripting API; some replaced items have been marked deprecated, but other breaking changes exist. See documentation.
  • Moved HitInfo classes into Scene folder
  • Improved py scene file support and added documentation on scene file formats
  • Environment maps are now loaded properly in the Path Tracer
  • Mogwai saves and displays recently loaded scripts and scenes
  • Updated texture LOD support for ray tracing and new WhittedRayTracer render pass with example usage
  • Support declaring root descriptors through [root] Slang attribute
  • Optimizations to internal scene data structures

Falcor 4.0.1

31 Mar 06:39
Compare
Choose a tag to compare

4/17 Hotfix

  • No code changes from 4.0 release
  • Reverted a dependency license header that was accidentally overwritten

Falcor 4.0 Preview

30 Oct 01:28
48aa4e2
Compare
Choose a tag to compare
Falcor 4.0 Preview Pre-release
Pre-release

Development snapshot of Falcor 4.0 containing major features, fixes, and performance improvements. Mostly feature-complete, but not all interfaces are final.

Notable changes include:

  • Finalized render graph interfaces and workflow.
  • Library of various render passes.
  • Full rewrite of Scene components with greatly improved raster and raytracing performance.
  • Falcor scene files (.fscene) are deprecated. Cameras, lights, and animations can now be loaded from model files.

Falcor 3.2.1

30 Jan 00:48
2d424d3
Compare
Choose a tag to compare
  • Ctrl+Pause freezes/unfreezes the renderer. This if useful in low framerates situations when the user wants to change an attribute using the GUI
  • File open dialog filters for images now include .hdr files for HDR formats (Bitmap::getFileDialogFilters)
  • Added ability to force execution of render passes through a flag when adding the pass to a render graph
  • GUI groups can be opened as a separate window by right-clicking on the group header bar
  • Added support for sliders in the GUI
  • Added support for buttons with images in the GUI (Gui::addImageButton)
  • Added option to include a close button when creating GUI windows

New Samples:

  • PathTracer: A basic path tracer implemented using DXR and the render graph system

Bug Fixes:

  • Messages logged in dll's will no longer output to a separate text file
  • Updated make_new_project.py to use Python 3 print()'s
  • Python copied from Externals to executable folder after build to be used as Python home directory

Dependencies:

  • Updated Slang to 0.11.21

Falcor 3.2

22 Nov 02:16
236927c
Compare
Choose a tag to compare
  • Introduced concept of Experimental Features. These features are not included by default in "Falcor.h" and are instead part of a new "FalcorExperimental.h" header. DXR is considered an experimental feature.
  • Render Graph and a set of Render Passes are released as an experimental feature. Most existing effects can also be used as a render pass.
  • D3D Feature Level is now automatically selected by default
  • Check Vulkan device's max supported API version if user requested a specific version
  • RGB32 format no longer disabled on AMD GPUs now that drivers support it correctly
  • RGB32 format support is checked when loading textures in Vulkan
  • Added macro for suppressing deprecation warnings
  • Add option to Gui::pushWindow() to choose if it should be have focus or not
  • Add RenderContext::getBindFlags() getter
  • Add Sampler::getDesc() getter
  • Add Material::isEmissive() getter
  • Add alphaTest() that uses Slang generics to select Sample method
  • Add scene_unit key to fscene
  • Added renderUI() functions to Scene and Camera
  • Add error check for missing file in Program creation
  • Store scene bounding box in Scene, add getter
  • Change OBJ/MTL to use SpecGloss by default, overrideable with metal_rough key in fscene
  • Add frame reset option to video encoder UI
  • Make video encoder retain options (do not delete the UI class between exports)
  • Renamed getTriNormalsAndEdges to getTriNormalsAndEdgesInObjectSpace to clarify it's in object space
  • Renamed getGeometricNormal to getGeometricNormalW to clarify it's in world space
  • Loading of GLTF models has been enabled

New samples:

  • RenderGraphEditor: A visual, node-based tool for creating and editing render graph scripts.
  • RenderGraphViewer: Load scenes and render them with a render graph.
  • SamplePassLibrary: Demonstration of how to write render passes that compile to DLLs, and how they can be loaded from render graph scripts.

Bug Fixes:

  • Fixed reflection data to use row major flag from Slang
  • Fixed bug in RtProgram::addDefine() methods
  • Fixed bug in scene exporter that it aborted on nan/inf
  • Fixed Vulkan image tiling flag selection for textures

Deprecations:

  • Device::isExtensionSupported() - Use isFeatureSupported() instead.

Dependencies:

  • Updated packman to 5.7.1
  • Updated Slang to 0.11.8
  • Updated Falcor Media to 2.2.1

Falcor 3.1.0

24 Oct 18:37
5a12f29
Compare
Choose a tag to compare
  • Falcor now requires Windows 10 SDK version 1809 (10.0.17763.0)
  • DebugDXR and ReleaseDXR build configs have been removed, raytracing features are officially a part of DirectX 12 on Windows 10 RS5
  • RtSceneRenderer::renderScene() and RenderContext::raytrace() have been updated as DXR ray dispatch now takes 3 parameters (width, height, depth) instead of two
  • Added deprecation system
  • Added the option to pass CompilerFlags to many objects
  • Added Logger::Level::Fatal
  • Added env_map attribute and environment texture to scenes
  • Added Scene::setCamerasAspectRatio() which will set all the scene's cameras aspect ratio at once
  • Gui class supports multiple fonts. Default font is trebuchet, profiler font is consolas-bold
  • Added support for high-DPI displays (GUI only)
  • Added a way to query for device feature support (see Device::isFeatureSupported())

Bug Fixes and Improvements:

  • Added debug checks when binding compute/graphics vars
  • Added debug checks in resourceBarrier() to make sure the resource has the correct flags
  • Added support for StructuredBuffers with VariableBuffer::renderUI
  • Better abstraction of the alpha-test
  • Use a priority_queue to help optimize descriptor-heap allocations
  • Added a ProgramBase base class for better Program/RtProgram abstraction
  • Fixed VideoCapture UI
  • Fixed debug visualization in Shadows sample
  • No longer call SetSamplePositions when device doesn't support it

Dependencies:

  • Added pybind11 2.2.4
  • Updated GLM to 0.9.9.2
  • Updated Vulkan SDK to 1.1.82.1
  • Updated Slang to 0.11.4
  • Updated imgui to 1.65

Falcor 3.0.7

04 Aug 02:03
Compare
Choose a tag to compare
  • Updated Slang to 0.10.31

Bug Fixes:

  • Fixed a crash when rendering a VariablesBuffer/ConstantBuffer UI without specifying a group name

Falcor 3.0.6

28 Jul 00:36
Compare
Choose a tag to compare
  • Changed max bones to 256

Bug Fixes:

  • Updated Slang to 0.10.30. Fixes SceneEditor shaders in Vulkan configs
  • Apply scaling transforms in animations
  • Fixed interpolation issues at the end of animations