This file contains one line summaries of commits that are worthy of mentioning in release notes. A new header is inserted each time a tag is created.
- engine: Improvements to shadowing.
- engine: Internal materials can use structures as parameters [
⚠️ Material breakage]. - engine:
readPixels
on aSwapChain
must be called withinbeginFrame
/endFrame
[⚠️ API Change]. - engine: Fix normal bias and improve spotlight quality.
- Java: Fix shadow biases.
- Android: Gradle configuration caching is now enabled.
- Android: Filament's Gradle properties have all been renamed to
com.google.android.filament.xxx
wherexxx
is the property name. Seeandroid/build.gradle
for a complete list [⚠️ ] - Android: The Gradle property
filament_tools_dir
(now calledcom.google.android.filament.tools-dir
) does not have a default value anymore. Please specify one in yourgradle.properties
if you reuse the Gradle plugin in your projects [⚠️ ] - engine: Fix spotlights direction and falloff [
⚠️ Material breakage]. - engine: Improvements to VSM and spotlight shadows.
- Metal: Color grading performance improvement on M1 devices.
- samples: Fix glitchy animation seen in gltf-viewer iOS sample.
- engine: rewrite dynamic resolution scaling controller for better accuracy and less jittering.
- Java: fix missing ASTC texture enum.
- tools: Fix normal map issues in mipgen.
- WebGL: expose some
SurfaceOrientation
functions.
- engine: New API:
MultiSampleAntiAliasingOptions
and HDR-aware MSAA resolve. WhencustomResolve
is enabled, improves anti-aliasing quality [NEW API]. - engine: Fixes and improvements for FSR.
- engine: All APIs that take a callback as argument now also take a
CallbackHandler*
, a new interface that provides more flexibility around callback dispatch [NEW API]. - Android: Fix JNI bindings for
DepthOfFieldOptions
. - Android: workarounds for Adreno-specific fraembuffer issue.
- JavaScript: updates to JS bindings.
- engine: Added picking API to
View
[⚠️ Materials need to be rebuilt to access this new feature]. - engine: A new
Engine::pumpMessageQueues()
method can be used to trigger all pending user callbacks right away [NEW API]. - engine: new inline helpers to more easily use lambdas, functors and method callbacks with
{Pixel}BufferDescriptor
. - Vulkan: fix vertical offset for
readPixels
. - Vulkan: various internal improvements.
- Metal: support integer formats with
readPixels
.
- engine: Fix, apply emissive after shadowing.
- engine: Added concept of lod bias to materials.
[
⚠️ Materials need to be rebuilt to access this new feature]. - engine: Fix, BGRA ordering respected for external images with OpenGL on iOS.
- engine: Use more sensible defaults for spot light inner outer cone angles.
- engine: Fix potential race condition that caused stalls in
endFrame
. - gltfio: Improved handling of transparent materials.
- Metal: Fix potential crash on earlier versions of iOS (<= 13.0).
- Android: Fix
filament-utils-android
'lite' flavor. - Java: Fix potential crash with
IBLPrefilter
.
- engine: work around a job scheduling issue in
endFrame
that caused stuttering on some Android devices.
- engine: New night adaptation API on
ColorGrading
. This API can be used to create an effect that that simulates color and brightness shifts in human vision in low-light conditions. - engine: improved performance of AMD FidelityFX FSR1 by 4.6x, it now runs in about 2ms in 4K.
- engine: Dynamic resolution quality
MEDIUM
,HIGH
andULTRA
now all use AMD FidelityFX FSR1. - engine: Fix crash when duplicating material instances.
- gltfio: generate tangents if requested by the material.
- engine: Support AMD FidelityFX Super Resolution for dynamic resolution scaling
- engine: New API on
ColorGrading
to enable or disable gamut mapping at will [New API]. - engine: Fix typo causing ShadowOptions::shadowFar to not work properly.
- engine: Fix, CSM glitch when using shadowMultiplier materials.
- engine: Improve precision when computing camera projection.
- engine: Increase the number of supported spot shadows to 14 (from 6).
- Metal: Add texture swizzling support for external textures.
- engine:
double
precision translation support in TransformManager. Disabled by default. Augment model (and view) matrix onCamera
to accept double precision matrices. When enabled, double precision translations allow filament to handle a very large world space [New API]. - engine: Fix, Views with custom render targets are now blendable.
- engine: Option to automatically compute bent normals from SSAO & apply to specular AO
[
⚠️ Material breakage]. - engine: New APIs: Light channels. Geometry and lights now have a channel associated to them, at
least one channel must match for lighting to occur [
⚠️ Material breakage]. - engine: Fix potential GPU crash with punctual lights near the far clipping plane.
- materials: The
inverseTonemap
API is now an exact inverse of the Filmic tonemapper. - Metal: Better support for texture formats on M1 Macs.
- engine: New API:
ColorGrading::Builder::toneMapper(const ToneMapper*)
. - engine: New tone mapper:
GenericToneMapper
, a configurable tone mapper. - engine:
ColorGrading::Builder::toneMapping(ColorGrading::ToneMapping)
is now deprecated. - engine: Removed
REINHARD
tonemap operator[⚠️ API Change]. - engine: Improve s3tc_srgb detection on desktop.
- engine: Add bilateral threshold in SSAO options.
- gltfio: Fix AssetLoader leak, remove unwanted destructor.
- Metal/Vulkan: Fix uploading texture data with padding or offset.
- Metal: fix GPU crash seen with large amounts of geometry.
- engine: Luminance scaling can now be used with any tone mapping operator. It was previously tied to the "EVILS" tone mapping operator.
- engine: Removed the "EVILS" tone mapping operator [
⚠️ API Change]. - engine: Improvements to Skinning. A new
SkinningBuffer
API allows bone sharing between renderables. - engine: Improvements to internal memory allocation for Metal and Vulkan backends.
- engine: Default to OpenGL backend when Windows does not support Vulkan.
- samples: Add new sample app: image_viewer.
- engine: Added support for transparent shadows. Add
transparentShadow : true
in the material file. - engine: honor user-defined precision in material files for non-samplers, rename
SamplerPrecision
toParameterPrecicion
. [⚠️ API Change] - engine: Work around Qualcomm issue with point lights.
- engine: Allow MSAA when post-processing is disabled.
- engine: enable up to 6 spot-light shadows.
- gltfio: Added support for
KHR_materials_volume
. - gltfio: fix precision in KHR_texture_transform.
- java: Removed support for Java desktop targets (macOS, Linux, and Windows) [
⚠️ API Change].
- engine: Spot-light position calculation moved to fragment shader.
- engine: Small shadow mapping fixes and improvements.
- gltfio: Add fast path for native material providers.
- gltfio: Allow Java / Kotlin clients to customize MaterialProvider.
- engine: Fix out of bounds access with
RenderTarget
java bindings. - Metal:
TextureFormat::DEPTH24_STENCIL8
now maps to a 32 bit depth format on iOS.
- engine: Use exponential VSM and improve VSM user settings [
⚠️ Recompile Materials for VSM]. - engine: Optional blurring of VSM shadowmaps.
- engine: Fix a crash when using lens flares.
- engine: Fix backend crashes when using an unsupported sample count.
- gltfio: Add new
getAsset
API toFilamentInstance
. - gltfio: Introduce support for extras strings.
- OpenGL: Increase OpenGL backend handle arena from 2 to 4 MiB.
- Vulkan: Fix Texture swizzle support.
- android: AAR libraries now properly include their ProGuard rules.
- engine: User materials can now provide custom lighting/surface shading, please consult the materials documentation for details.
- engine:
Backend::DEFAULT
now selects the most appropriate backend for the platform, rather than alwaysOPENGL
. On Android the default isOPENGL
, on Apple platforms the default isMETAL
and on all other platforms that default isVULKAN
. - engine: Fix a potential memory corruption when using more than 4 render targets.
- engine: Fix a possible crash when bloom is enabled.
- engine: Fix and refactor support for S3TC + SRGB with OpenGL.
- engine: Fix automatic clearing of rendertargets.
- engine: Fix imported render target discard and clear flags.
- engine: Fix opaque blit with imported render targets.
- engine: improvements to internal job system.
- Vulkan: performance improvements on Mali.
- gltfio: improvements to load time for large models.
- WebGL: remove bogus stride argument, fix
BindingType
TypeScript definition.
- android: use
debug.filament.backend
system property to select the desired backend. - engine: fix
LightManager::getFalloff
. - gltfio: fix crash with non-triangles.
- macOS: fix main thread checker warnings with OpenGL.
- vulkan: fix crash on Windows machines with NVIDIA GPUs.
- Vulkan: validation and diagnostic improvements
- engine: improvements for scenes with many renderables.
- gltfio: added support for
KHR_materials_ior
. - java: Add bindings for
IBLPrefilterContext
. - java: add
KTXLoader.getSphericalHarmonics
JNI binding - libimage: fix, respect sRGB option for compressed formats.
- sample-gltf-viewer: fix lifetime cycle for RemoteServer.
- engine: Add
getPlatform
API to Engine. - engine: Add a new cone angles API to
LightManager
. - engine: Attachments of custom RendereTargets are not systematically discarded.
- engine: Fix a crash when using custom rendertargets.
- engine: New API to duplicate a
MaterialInstance
. - filagui: fix support for custom images in ImGuiHelper.
- java: Add bindings for HDRLoader.
- engine: User materials can now use 9 samplers instead of 8 [
⚠️ Material breakage]. - engine: Remove
populateTangentQuaternions
[⚠️ API change]. - engine: Deprecate
Stream::Builder::stream(intptr_t)
[⚠️ API Change]. - engine: Remove deprecated APIs:
Camera::setScaling
,Engine::destroy(Camera*)
,Engine::createCamera
,Renderer::beginFrame(SwapChain*, uint64_t, backend::FrameScheduledCallback, void*)
, andView::setShadowsEnabled
[⚠️ API Change]. - engine: Remove
focusDistance
fromView::BloomOptions
[⚠️ API Change]. - engine: Add a
FILAMENT_SUPPORTS_OPENGL
CMake option to enable/disable OpenGL support. - Vulkan: fixes and improvements for large scenes.
- gltfio: fix morphing bugs uncovered by MorphStressTest.
- Java: add API for
Texture::Builder::import()
. - WebGL: Fix a potential INVALID_OPERATION.
- NEW API: Screen-space lens flare effect.
- engine: Fix several memory leaks in the GL backend.
- Vulkan: General bug fixes and improvements.
- Vulkan: Fix some problems seen on Mali devices.
- ios: Fix VSM shadows not working.
- webgl: Fix black screen seen with some samples.
- engine: Fix memory leaks in OpenGL driver.
- engine: new experimental tone mapper,
EVILS
(name will most likely change). - engine: Improvements to Vulkan backend.
- engine: Fix incorrect units documented for
LightManager.getIntensity
. - engine: fix high quality upsampling for SSAO.
- engine: implement accurate normal reconstruction for SSAO.
- engine: improve LOW and HIGH quality levels for SSAO.
- libs: improvements to
libiblprefilter
. - materials: New
quality
property. - samples: Add new gltf-viewer iOS sample.
- samples: clear the background in lightbulb sample.
- Vulkan: various fixes.
- android: fix crash seen using VSM with MSAA on Adreno devices.
- engine: Add
Engine::getEntityManager()
. - engine: Fix desktop crash seen with some GPU drivers.
- engine: improve importance sampling.
- gltfio: robustness improvements for Draco meshes.
- libs: Add new Transcoder API for C++ clients (part of
libgeometry
). - libs: New
iblprefilter
library to compute IBL pre-integration on the GPU using filament. - materials: Fix documentation for
getNormalizedViewportCoord
. - samples: fix rendertarget sample crash on launch.
- NEW API:
Renderer::renderStandaloneView()
is a new method that can be used outside of beginFrame/endFrame on Views that have a RenderTarget associated. This can be used as a pseudo-compute API. - Vulkan: bug fixes and improvements.
- engine: RenderTarget API can now use MRT.
- sample-gltf-viewer: improvements for reading zip files.
- sample-gltf-viewer: enable contact-shadows functionality in mobile gltf-viewer.
- windows: fix build error in filament_framegraph_test.
- JavaScript: add missing TextureSampler bindings.
- Metal: Fix texture swizzling crash with older Nvidia GPUs.
- Vulkan: fix image layout validation error on Android.
- android: fix MSAA w/ multisampled_render_to_texture on Mali.
- engine: better anisotropic filtering with various drivers.
- gltfio: Use BufferObject API, simplify MorphHelper.
- gltfio: honor stride in normalizeSkinningWeights.
- samples: Add web component demo.
- Android: Fix VSM.
- engine: Introduce BufferObject API.
- engine: Add new isTextureSwizzleSupported API on Texture.
- engine: Add support to Metal and Vulkan backends for texture swizzling.
- engine: Add new DoF settings (native/half res, gather kernel ring counts, CoC radius clamp).
- engine: DoF quality and performance improvements.
- engine: Fix high-quality upsampling issue with SSAO.
- Java: Expose
TransformManager.getParent(int)
. - samples: Add Metal and Vulkan backend support to Suzanne sample.
- WebGL: expose fitIntoUnitCube to JS.
- WebGL: support for multiple
<canvas>
elements.
- engine: Fix Metal bug when setGeometryAt is called multiple times.
- engine: Improvements to DoF.
- engine: Fix RenderTarget NPE when depth is not present.
- engine: Improvements to Camera APIs. Move focus distance from DofOptions to Camera.
- engine: VSM shadows now support
shadowMultiplier
. - java: Expose severla MaterialInstance APIs (setColorWrite, setDepthWrite, setDepthCulling) that should have been public.
- java: fix bug with Texture::setImage buffer size calculation.
- engine: Fix a DoF bug that caused black dots around the fast tiles.
- engine: Minor DoF optimizations.
- engine: Fix blanking windows not being drawn into on macOS.
- gltfio: Add support for data:// in image URI's.
- gltfio: Add internal MorphHelper, enable up to 255 targets.
- engine: Fix a hang in JobSystem.
- samples: Fix rendertarget sample app.
- engine: New shift parameter on
Camera
to translate the viewport and emulate a tilt/shift lens. - engine:
Camera::setCustomProjection()
now allows to set a different projection for culling and rendering. - engine: Fixed depth of field rendering with custom projection matrices.
- engine: Fix a rare indefinite hang.
- gltfio:
SimpleViewer
now exposes more rendering parameters, includingColorGrading
. - gltfio: Fix tangents when morphing is enabled.
- Metal/Vulkan: fix incorrect dominant light shadows rendering.
- Fixe some issues with imported rendertargets.
gltfio: Add ResourceLoader evict API. gltfio: Fix ResourceLoader cache bug. iOS: Disable exceptions to reduce binary size.
- filamat/matc: fix sporadic crash.
- Improve bloom/emissive with glTF files.
- Publicly expose Exposure API for gltfio.
- Android: fix "No implementation found" error.
- Android: fix compilation error in UbershaderLoader.
- engine: computeDataSize now returns correct value for USHORT_565.
- Vulkan: various internal improvements.
- engine: Fixed GL errors seen with MSAA on WebGL. Warning: this can affect multisampling behavior on devices that do not support OpenGL ES 3.1
- materials: Added new
getVertexIndex()
API for vertex shaders. - samples: RenderTarget demo now disables post-processing in offscreen view and creates depth attachment.
- gltfio: Fix, animation jolt when time delta is very small.
- Added support for Apple silicon Macs. build.sh can now be used to build on either Apple silicon or
Intel-based Macs. Pass the
-l
flag to build universal binaries. - Added
sheenColor
andsheenRoughness
properties to materials to create cloth/fabric. - Materials generation using
libfilamat
is now multi-threaded. MaterialBuilder::build()
now expects a reference to aJobSystem
to multi-thread shaders generation. AJobSystem
can be obtained withEngine::getJobSystem()
when using Filament, or created directly otherwise. (⚠️ API change)- Add planar reflection RenderTarget demo.
- Metal: honor inverseFrontFaces RasterState.
- Metal: Fix crash when switching between views with shadowing enabled.
- Metal: Fix crash when calling Texture::setImage() on SAMPLER_2D_ARRAY texture.
- gltfio: added support for
KHR_materials_sheen
. - gltfio: shader optimizations are now disabled by default, unless opting in or using ubershaders.
- gltfio: Fix "_maskThreshold not found" error.
- gltfio on Java: fix potential memory leak in AssetLoader#destroy.
- gltfio: fix crash during async texture decode.
- gltfio: support animation in dynamically-added instances.
- gltfio: Improve robustness when decoding textures.
- gltfio: Fix animator crash for orphaned nodes.
- gltfio: fix tangents with morphing.
- gltf_viewer: fix very sporadic crash when exiting.
- gltf_viewer: fix crash when rapidly switching between glTF models.
- WebGL: Fix samples erroring on Windows with Chrome.
- WebGL: Support
highlight
for setBloomOptions in JavaScript. - WebGL: Include TypeScript bindings in releases.
- engine: Fix, punctual lights get clipped at certain angles.
- engine: Fix memory leak when calling
View::setViewport
frequently. - engine: Fix, materials not working on some Qualcomm devices.
- engine: Modulate emissive by alpha on blended objects.
- engine: Fix, RenderTarget cleared multiple times.
- Java: Fix JNI bindings for color grading.
- Android: reduced binary size.
- Introduce
libibl_lite
library. - engine: Fix
EXC_BAD_INSTRUCTION
seen when using headless SwapChains on macOS with OpenGL. - engine: Add new callback API to
SwapChain
. - engine: Fix SwiftShader crash when using an IBL without a reflections texture.
- filamat: Shrink internal
Skybox
material size. - filamat: improvements to generated material size.
- filamat: silence spirv-opt warnings in release builds.
- matc: Add fog variant filter.
- matc: Fix crash when building mobile materials.
- math: reduce template bloat for matrices.
- Vulkan: internal robustness improvements.
- Metal: Support CVPixelBuffer SwapChains.
- Metal: Support copyFrame.
- Fix clear behavior with RenderTarget API.
- Fix GetRefractionMode JNI binding.
- Additional fixes for Fence bug.
- Fix a few Fence-related bugs
- gltfio: add createInstance() to AssetLoader.
- gltfio: fix ASAN issue when consuming invalid animation.
- gltfio: do not segfault on invalid primitives.
- gltfio: add safety checks to getAnimator.
- gltfio: fix segfault when consuming invalid file.
- Vulkan: various internal refactoring and improvements
- mathio: add ostream operator for quaternions.
- Fix color grading not applied when dithering is off.
- Vulkan: improvements to the ReadPixels implementation.
- Vulkan: warn instead of panic for sampler overflow.
- Vulkan: fix leak with headless swap chain.
- PlatformVkLinux now supports all combos of XLIB and XCB.
- Fix TypeScript binding for TextureUsage.
- Added View::setVsmShadowOptions (experimental)
- Add anisotropic shadow map sampling with VSM (experimental)
- matc: fixed bug where some compilation failures still exited with code 0
- Vulkan + Android: fix build break
- Add optional XCB support to PlatformVkLinux
- Fix Vulkan black screen on Windows with NVIDIA hardware
- Added a new Live Wallpaper Android sample
UiHelper
now supports managing aSurfaceHolder
- Fix: an internal texture resource was never destroyed
- Fix: hang on 2-CPU machines
- Fix: Vulkan crash when using shadow cascades
- Linux fixes for headless SwiftShader
- Fix null pointer dereference in
FIndirectLight
- Fix Windows build by avoiding nested initializers
- Vulkan: support readPixels and headless swap chains
- VSM improvements
- Add screen space cone tracing (SSCT)
- Improvements to VSM shadow quality
- New
ShadowOptions
control to render Variance Shadow Maps (VSM) with MSAA (experimental) - Improvements and fixes to screen-space ambient occlusion
- gltf_viewer: add --headless option
- gltf_viewer: Add new automation UI and functionality
- engine: Added new APIs to enable/disable screen space refraction
- engine: Fix, flip the shading normal when det < 0.
- gltfio: Fix animation by clamping the per-channel interpolant.
- gltfio: add async cancellation API
- gltfio: Fix "uniform not found" errors.
- gltfio: Disable clear coat layer IOR change in glTF files (#3104)
- Vulkan: fix final image barrier used for swap chain.
- matdbg: Various improvements
- JavaScript bindings: fix TextureUsage bitmask.
- cmgen / mipgen: add opt-in for ASTC / ETC support.
- Fixes / improvements for contact shadows, fog, and DOF
- Reduce SSAO creases caused by geometry tessellation
- Fix compilation warnings and issue with Clang 12
- Fix JNI crashes
- Rename .blurScale to .cocScale in DOF options
- Improvements to SSAO quality
- Fix unoptimized shader crashes with certain OpenGL drivers
- Add float versions of math constants to libmath
- filament-utils: fix,
CoroutineScope
job should be canceled before destroy
MASKED
mode now leaves destination alpha intact (useful for transparent targets).MASKED
mode now benefit from smoothing inunlit
materials.- Small performance improvement to FXAA.
- Fixed
KHR_materials_transmission
to use theFADE
blending mode. - Fixed frame graph crash when more than 32 stages were required.
- Fixed several memory leaks in gltfio and the JavaScript bindings.
- Fixed several platform-specific Vulkan bugs and crashes.
- Temporal Anti-Aliasing (TAA) is now available as a complement to MSAA and FXAA. It can be turned
on and controlled using
View.setTemporalAntiAliasingOptions()
. - Added texture getters to
Skybox
andIndirectLight
(C++, Java, JavaScript). - Added APIs to create 3D textures and 2D texture arrays.
- Internal buffers can now be sized at compile times for applications that render very large numbers of objects.
View.setAmbientOcclusion()
is deprecated in favor ofView.setAmbientOcclusionOptions
(⚠️ API change).- Switched to C++17.
- Variance Shadow Mapping (VSM) is now available as an alternative to PCF shadows (experimental).
- Reduced compiled material sizes by removing unnecessary variants.
- Many improvement and fixes in the Vulkan backend.
- Many improvement and fixes in the Metal backend.
- Fixed translucent views with custom render targets.
- Improved MSAA implementation compatibility on Android devices.
- Use "reverse-z" for the depth buffer.
- Added a way to create an
Engine
asynchronously. - Highlights are now more stable under depth of field.
- New option to compress highlights before bloom.
- Improvements and fixes to SSAO and DOF.
- New CocoaPods sample for iOS.
- Filament for iOS now supports iOS 11.
- Updated the Emscripten SDK to 1.39.19.
- Fixed skinning issue with Emscripten.
- JavaScript APIs for color grading and the vignette effect.
- Added various missing APIs to Java and JavaScript bindings.
- Fixed camera aspect ratio when loading a camera from a glTF file.
- gltfio now uses specular anti-aliasing by default.
- gltfio now supports the KHR_materials_transmission extension.
- Compiled materials do not perform unnecessary fp32 operations anymore.
- Improved quality and performance of the depth of field effect.
- Fixed transform hierarchy memory corruption when a node is set to be parentless.
- Fixed crashed in some browsers and on some mobile devices caused by Google-style line directives in shaders.
- Color grading now has a quality option which affects the size and bit depth of the 3D LUT.
- Fixed crash in the Metal backend when more than 16 samplers are bound.
- Added validation in
Texture::setImage()
. - Fixed refraction/transmission roughness when specular anti-aliasing is enabled.
- Improved JavaScript API for SurfaceOrientation and Scene.
- Updated JavaScript API around Camera construction / destruction (
⚠️ API change) - Add missing JavaScript API for
View::setVisibleLayers()
. - Fixed regression in JavaScript IcoSphere that caused tutorial to fail.
- gltf_viewer now supports viewing with glTF cameras.
- gltfio now uses high precision for texture coordinates.
- gltfio now supports importing glTF cameras.
- gltfio now supports simple instancing of entire assets.
- gltfio has improved performance and assumes assets are well-formed.
- gltfio now supports name and prefix lookup for entities.
- ModelViewer now allows resources to be fetched off the UI thread.
- Add support for DOF with Metal backend.
- New Depth-of-Field (Dof) algorithm, which is more plausible and about an order of magnitude faster (about 4ms on Pixel4).
- SSAO now has an optional high(er) quality upsampler.
- Tone mappping now uses the real ACES tone mapper, applied in the proper color space.
- Tone mapping is now applied via a LUT.
View::setToneMapping
is deprecated, useView::setColorGrading
instead. (⚠️ API change)- Color grading capabilities per View: white balance (temperature/tint), channel mixer, tonal ranges (shadows/mid-tones/highlights), ASC CDL (slope/offset/power), contrast, vibrance, saturation, and curves.
- New vignette effect.
- Improved MSAA performance on mobile.
- Improved performance of the post-process pass when bloom is disabled on mobile.
- Added support for 3D textures.
- Fixed private API access on some versions of Android.
- Many improvements and bug fixes in Metal and Vulkan backends.
- Fixed bug in the Metal backend when SSR and MSAA were turned on.
- Fixed Metal issue with
BufferDescriptor
andPixelBufferDescriptor
s not being called on the application thread.
- MaterialInstances now have optional names.
- Improved Depth of Field effect: bokeh rotates with the aperture diameter, improved CoC calculation, feather blur radius.
- Introduced
getNormalizedViewportCoord
shader API. - Added basic SwiftShader support.
- Fixed SwapChain resizing issues in Vulkan.
- Added debug option to track
Entities
. - Fixed
Camera
entity leaks. - Removed problematic
CreateEliminateDeadMembersPass
, which broke UBO layout. - Added assert that the engine is not terminated in
flushAndWait()
. - Added several fixes and improvements around objects lifetime management
gltfio
: AssetLoader now loads names for mesh-free nodesgltfio
: Material names are now preserved in ubershader mode- Fixed JNI objects allocation and memory corruption
- JNI constructors are now "package private" unless they take an Engine.
- gltfio: fixed incorrect cone angles with lights.
- Specular ambient occlusion now offers 3 modes: off, simple (default on desktop) and bent normals. The latter is more accurate but more expensive and requires a bent normal to be specified in the material. If selected and not bent normal is specified, Filament falls back to the simple mode.
- Specular ambient occlusion from bent normals now smoothly disappears as roughness goes from 0.3 to 0.1. Specular ambient occlusion can completely remove specular light which looks bad on glossy metals. Use the simple specular occlusion mode for glossy metals instead.
- Refraction can now be set on
MaterialBuilder
from Java. - Refraction mode and type can now be set by calling
MaterialBuilder::refractionMode()
. andMaterialBuilder::refractionType()
instad ofmaterialRefraction()
andmaterialRefractionType()
(️⚠️ API change). - Fixed documentation confusion about focused spot vs spot lights.
- Fixed a race condition in the job system.
- Fixed support for 565 bitmaps on Android.
- Added support for timer queries in the Metal backend.
- Improved dynamic resolution implementation to be more accurate and target more platforms.
beginFrame()
now accepts a v-sync timestamp for accurate frame time measurement (used for frame skipping and dynamic resolution). You can pass0
to get the old behavior (⚠️ API change).- Fixed several issues related to multi-view support: removed
View::setClearColor()
, a similar functionality is now handled byRenderer::setClearOptions()
andSkybox
, the later now can be set to a constant color (⚠️ API breakage). - Fixed spot/point lights rendering bug depending on Viewport position.
- Textures can now be swizzled.
- The emissive property of materials is now expressed in nits and the alpha channel contains the
exposure weight (at 0.0 the exposure is not applied to the emissive component of a surface, at
1.0 the exposure is applied just like with any regular light) (
⚠️ API breakage). - Added new
intensityCandela
andsetIntensityCandela
API toLightManager
for setting a punctual light's intensity in candela. - Fixed an issue where some
ShadowOptions
were not being respected when passed toLightManager::Builder
. - Added a Depth of Field post-processing effect
- gltfio: fixed null pointer exception seen with some Android clients.
- Engine now exposes its JobSystem to C++ clients.
- Expose setCulling() in public RenderableManager API.
- Fixed "no texture bound" warning in WebGL.
- Fixed a clearing bug with imported render targets.
- Fixed the creation potentially invalid entities during shadow map initialization.
- Fixed Maven dependencies for the
filament-utils
library.
- The Android support libraries (gltfio and filament-utils) now use dynamic linking.
- Removed depth-prepass related APIs. (⚠ API Change)
- gltfio: add asynchronous API to ResourceLoader.
- gltfio: generate normals for flat-shaded models that do not have normals.
- Material instances now allow dynamic depth testing and other rasterization state.
- Unlit materials now apply emissive in the same way as lit materials.
- Screen-space refraction is now supported.
- Support for HDR Bloom as a post-process effect.
- Alpha masked objects are now part of the SSAO pass.
- Added Java bindings for geometry::SurfaceOrientation.
- Fixed bug rendering transparent objects with Metal backend.
- Fixed crash on macOS Catalina when rendering with Metal backend.
- Fixed bug in Camera::setLensProjection() and added the aspect ratio parameter. (⚠ API Change)
- WebGL: Improved TypeScript annotations.
- WebGL: Simplified callback API for glTF. (⚠ API Change)
- gltfio: Removed deprecated "Bindings" API. (⚠ API Change)
- gltfio: Added support for Draco.
- gltfio: Reduced the size of the library.
- Improved performance of SSAO.
- Added support for screen-space contact shadows.
- Added support for global fog.
- Added support for bent normal maps and specular occlusion from bent normal maps.
- Added support for shadow-casting spot lights.
- The depth prepass setting in View is now ignored and deprecated.
- Fixed a threading bug with the NOOP backend.
- Improved memory management for gltfio on Android.
- Introduced
filament-utils
library withTextureLoader
,ModelViewer
, and Java bindings forcamutils
. - Fix out-of-bounds bug when glTF has many UV sets.
- Added new
setMediaOverlay
API toUiHelper
for controlling surface ordering. - Implemented sRGB support for DXT encoded textures.
- Fix bug with incorrect world transforms computed in
TransformManager
. - gltfio: support external resources on Android.
- Added support for solid and thin layer cubemap and screen-space refraction.
- Improved high roughness material rendering by default when regenerating environments maps.
- Fix bad instruction exception with macOS Catalina.
- Fixed bad state after removing an IBL from the Scene.
- Fixed incorrect punctual light binning (affected Metal and Vulkan backends).
- Fixed crash when using a Metal headless SwapChain with an Intel integrated GPU.
- Added support for ASTC textures on iOS with Metal backend.
- Added new heightfield sample.
- Removed
<iostream>
from math headers. - cmgen now places KTX files directly in the specified deployment folder.
- Fixed an assertion when a parameter array occurs last in a material definition.
- Fixed morph shapes not rendering in WebGL.
- Added support for the latest version of emscripten.
- gltfio: fixed blackness seen with default material.
- Added ETC2 and BC compressed texture support to Metal backend.
- Rendering a
SAMPLER_EXTERNAL
texture before setting an external image no longer results in GPU errors. - Fixed a normals issue when skinning without a normal map or anisotropy.
- Fixed an issue where transparent views couldn't be used with post-processing.
- Always use higher quality 3-bands SH for indirect lighting, even on mobile.
- The Metal backend can now handle binding individual planes of YUV external images.
- Added support for depth buffer when post-processing is turned off
- Improved performance on GPUs that use tile-based rendering
- Cleaned up the validation strategy in Engine (checks for use-after-destroy etc).
- OpenGL: Fixed ES 3.0 support on iOS.
- OpenGL: Added support for KHR_debug in debug builds.
- gltfio: Added Java / Kotlin bindings for Animator.
- gltfio: Fixed panic with the Android gltf-bloom demo.
- gltfio: Java clients should no longer call Filament#init.
- Improved IBL diffuse by allowing to use the specular cubemap at
roughness
= 1 instead of Spherical Harmonics
- Added missing API documentation.
- Fixed crash for sandboxed macOS apps using Filament.
- Fixed an issue that limited the camera near plane to ~1mm.
- Added Android sample for Camera Stream.
- Fixed an Xcode assertion when rendering skinned meshes using the Metal backend.
- Added support for Core Animation / Metal frame synchronization with Metal backend.
- Fixed an issue with culling in
MaterialInstance
. - Fix additional compatibility issues with MSVC, including the Vulkan backend.
- matdbg: fixed missing symbol issue when linking against debug builds.
- filamat: fixed crash when using the "lite" version of the library.
- matinfo: Fix a crash with on Windows.
- gltfio: fixed an animation loop bug.
- gltfio: added support for sparse accessors.
- Add JS binding to unary
Camera::setExposure
.
- API Breakage: Simplified public-facing Fence API.
- Minimum API level on Android is now API 19 instead of API 21.
- Filament can now be built with msvc 2019.
- Added the ability to modify clip space coordinates in the vertex shader.
- Added missing API documentation.
- Improved existing API documentation.
- Added
Camera::setExposure(float)
to directly control the camera's exposure. - Backface culling can now be toggled on material instances.
- Face direction is now reversed when transforms have negative scale.
- Dielectrics now behave properly under a white furnace (energy preserving and conserving).
- Clear coat roughness now remains in the 0..1 (previously remapped to the 0..0.6 range).
- gltfio: Fixed several limitations with ubershader mode.
- gltfio: Fixed a transforms issue with non-uniform scale.
- webgl: Fixed an issue with JPEG textures.
- Windows: Fix link error in debug builds.
- matdbg: Web server must now be enabled with an environment variable.
- matdbg: Added support for editing GLSL and MSL code.
- Added optional web server for real-time inspection of shader code.
- Added basic #include support in material files.
- Fixed potential Metal memory leak.
- Fixed intermittent memory overflow in wasm builds.
- Fix bad normal mapping with skinning.
- Java clients can now call getNativeObject().
- Unified Filament Sceneform and npm releases.
- Improved cmgen SH with HDR images.
- IndirectLight can now be queried for dominant direction and color.
- Added support for vertex morphing.
- Introduced custom attributes, accessible from the vertex shader.
- Added Java / Kotlin bindings for KtxLoader.
- Added JavaScript / Typescript bindings for the new
RenderTarget
class. - Added base path to glTF loadResources method for JavaScript.
- Added support for iOS
CVPixelBuffer
external images with the OpenGL backend.
- Added
gltf_bloom
Android sample to show gltfio and theRenderTarget
API. - Added
getMaterialInstanceAt
to the Java version of RenderableManager. - Fix JNI bindings for setting values in parameter arrays.
- Added JNI bindings for the gltfio library.
- Fix support for parameter arrays in
.mat
files. - Added support for
RGB_11_11_10
- Removed support for
RGBM
(warning: source compatibility breakage) - IBL cubemap can now be of any size
Texture::generatePrefilterMipmap
can be used for runtime generation of a reflection cubemap
- Added
Scene.addEntities()
to the Java / Kotlin bindings. - Improved robustness in the tangents utility for meshes that have tangents and normals.
- Introduced
RenderTarget
API that allows View to reference an offscreen render target. - Added
lucy_bloom
sample to demonstrate the newRenderTarget
API. - Added Screen Space Ambient Occlusion support (SAO)
- New blending modes:
multiply
andscreen
- Fixed an issue when sorting blended objects with different blending modes
- The material property
curvatureToRoughness
has been replaced withspecularAntiAliasing
. This new specular anti-aliasing solution offers more control via two new properties:specularAntiAliasingVariance
andspecularAntiAliasingThreshold
. They can also be set on material instances if needed - Added specular ambient occlusion to compute a new AO term applied to specular reflections
(see
specularAmbientOcclusion
property in materials) - Added multi-bounce ambient occlusion to brighten AO and preserve local color
(see
multiBounceAmbientOcclusion
property in materials) - Micro-shadowing is now applied to material ambient occlusion
- Use a smaller 64x64 DFG LUT on mobile to reduce binary size
- Added a distance field generator to libimage.
- JavaScript MaterialInstance now supports vec4 colors.
- Further reduced
filamat
binary size by removing reliance on stdlib. - Added a new, smaller, version of the
filamat
library,filamat_lite
. Material optimization and compiling for non-OpenGL backends have been removed in favor of a smaller binary size. - Implemented hard fences for the Metal backend, enablying dynamic resolution support.
- Improved
SurfaceOrientation
robustness when using UVs to generate tangents. - Created a
RELEASE_NOTES.md
file, to be updated with significant PRs.