Releases: google/filament
Releases · google/filament
v1.9.0
Engine (new features ✨)
MASKED
mode now leaves destination alpha intact (useful for transparent targets).MASKED
mode now benefit from smoothing inunlit
materials.- Fixed frame graph crash when more than 32 stages were required.
- Temporal Anti-Aliasing (TAA) is now available as a complement to MSAA and FXAA. It can be turned
on and controlled usingView.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).- Variance Shadow Mapping (VSM) is now available as an alternative to PCF shadows (experimental).
- Fixed translucent views with custom render targets.
- 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.
Libraries and Tools
- Fixed
KHR_materials_transmission
to use theFADE
blending mode. - Fixed several memory leaks in gltfio and the JavaScript bindings.
- Reduced compiled material sizes by removing unnecessary variants.
Platforms and Backends
- Fixed several platform-specific Vulkan bugs and crashes.
- Switched to C++17.
- Many improvement and fixes in the Vulkan backend.
- Many improvement and fixes in the Metal backend.
- Improved MSAA implementation compatibility on Android devices.
v1.8.1
Engine (new features ✨)
- Color grading now has a quality option which affects the size and bit depth of the 3D LUT. See the documentation of
ColorGrading
for more information. - Added validation in
Texture::setImage()
. - Improved quality and performance of the depth of field effect.
- Fixed transform hierarchy memory corruption when a node is set to be parentless.
- Fixed refraction/transmission roughness when specular anti-aliasing is enabled.
Libraries and tools
- 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.
Platforms and Backends
- 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 crashes in some browsers and on some mobile devices caused by
Google-style line directives in shaders. - Fixed crash in the Metal backend when more than 16 samplers are bound.
Examples
KHR_materials_transmission
test asset as rendered by gltfio:
v1.8.0
Engine (new features ✨)
View::setToneMapping
is deprecated, useView::setColorGrading
instead. (⚠️ API change).- Tone mapping is now applied via a LUT.
- New tone mappers: linear, ACES, ACES legacy (default), filmic (tone mapper from previous versions
of Filament), Reinhard, Uchimura, and display range (to validate scene exposure). The new default
tone mapper has a much improved behavior in high intensity areas. - 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.
Engine Changes
- 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.
- Improved MSAA performance on mobile.
- Improved performance of the post-process pass when bloom is disabled on mobile.
- Added support for 3D textures.
Libraries and tools
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.gltfio
now provides Java/JavaScript APIs to access lights.glfio
now relies on the job system for various expensive tasks.ModelViewer
now allows resources to be fetched off the UI thread.
Platforms and Backends
- Improved JavaScript API for
SurfaceOrientation
andScene
. - Updated JavaScript API around
Camera
construction / destruction (⚠️ API change) - Add missing JavaScript API for
View::setVisibleLayers()
. - Fixed incorrect handling of texture swizzling.
- Fixed regression in JavaScript
IcoSphere
that caused tutorial to fail. - Fixed private API access on some versions of Android.
- 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. - Add support for DoF with Metal backend.
- Many improvements and bug fixes in Metal and Vulkan backends.
Examples
Improved depth-of-field
Depth-of-field off and on:
Vignette and color grading
Tone mapping
Comparison between the old tone mapper (now called "Filmic") and the new default "ACES (legacy)" tone mapper. Now how areas of high intensity (sun in the skybox, emissive red object in the foreground) behave in both cases.
v1.7.0
matc
to recompile.
Engine (new features ✨)
- Improved Depth of Field effect: bokeh rotates with the aperture diameter, improved CoC calculation, feather blur radius
- Introduced
getNormalizedViewportCoord
shader API MaterialInstance
now have optional names- Added basic SwiftShader support
Engine Changes
- Fixed
SwapChain
resizing issues in Vulkan - Added debug option to track Entities
- Fixed
Camera
entity leaks - Removed problematic
CreateEliminateDeadMembersPass
, which broke UBO layout - Only implement
flushAndWait()
debugging on android - Added assert that the engine is not terminated in
flushAndWait()
- Added several fixes and improvements around objects lifetime management
Libraries
- gltfio: AssetLoader now loads names for mesh-free nodes
- gltfio: Material names are now preserved in ubershader mode
Platforms and Backends
- JNI constructors are now "package private" unless they take an Engine
- Fixed JNI objects allocation and memory corruption
v1.6.0
matc
to recompile.
Engine (new features ✨)
- 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 no 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.
beginFrame()
now accepts a v-sync timestamp for accurate frame time measurement (used for frame skipping and dynamic resolution). You can pass 0 to get the old behavior (⚠️ API change).- Textures can now be swizzled.
- Added a Depth of Field post-processing effect.
Engine Changes
- Refraction mode and type can now be set by calling
MaterialBuilder::refractionMode()
. andMaterialBuilder::refractionType()
instead ofmaterialRefraction()
andmaterialRefractionType()
(️⚠️ API change). - Fixed documentation confusion about focused spot vs spot lights.
- Fixed a race condition in the job system.
- Improved dynamic resolution implementation to be more accurate and target more platforms.
- 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.
- 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 to LightManager for setting a punctual light's intensity in candela. - Fixed an issue where some
ShadowOptions
were not being respected when passed toLightManager::Builder
. - Fixed several lighting related bugs when multiple punctual lights are present.
- Fixed an issue with directional shadows when
stable
is true
Libraries
- gltfio: fixed incorrect cone angles with lights.
- camutils: added a new free flight camera manipulator. Pass the
-c flight
argument to material_sandbox and gltf_viewer to enable.
Platforms and Backends
- Refraction can now be set on
MaterialBuilder
from Java. - Fixed support for 565 bitmaps on Android.
- Metal backend: added support for timer queries.
- Fixed issue where JNI initialization could lead to crashes when using multiple versions.
- Added support for headless swapchains on Windows.
Screenshots
v1.5.2
v1.5.1
v1.5.0
matc
to recompile.
Engine (new features ✨)
- HDR Bloom as a post-process effect.
- Screen-space refraction.
- Shadow-casting spot lights.
- Bent normal maps and specular occlusion from bent normal maps.
- Screen-space contact shadows.
- Global fog.
glTF Loader (new features ✨)
- Asynchronous API for resource loading.
- Draco and clearcoat extensions.
- Flat-shaded models.
Engine Changes
- Removed depth-prepass related APIs. (⚠ API Change)
- Alpha masked objects are now part of the SSAO pass.
- Fixed bug in
Camera::setLensProjection()
and added the aspect ratio parameter. (⚠ API Change) - Improved performance of SSAO.
Libraries
- gltfio: Removed deprecated "Bindings" API. (⚠ API Change)
- gltfio: Reduced the size of the library and added
gltfio-lite
for Android. - Android libraries (
gltfio
andfilament-utils
) now use dynamic linking. - Android library
filamat-android-full
now calledfilamat-android
for consistency. (⚠ API Change) filament-utils
now offers full and lite flavors.
Materials
- Material instances now allow dynamic depth testing and other rasterization state.
- Unlit materials now apply emissive in the same way as lit materials.
- Added Java bindings for geometry::SurfaceOrientation.
Platforms and Backends
- WebGL: Improved TypeScript annotations.
- WebGL: Simplified callback API for glTF. (⚠ API Change)
- Fixed bug rendering transparent objects with Metal backend.
- Fixed crash on macOS Catalina when rendering with Metal backend.
Screenshots
v1.4.5
Android
- Improved memory management for gltfio on Android.
- Added new
setMediaOverlay
API toUiHelper
for controlling surface ordering. - New
filament-utils-android
library, available on Maven:
repositories {
// ...
mavenCentral()
}
dependencies {
// KTX loading, camera manipulator, gesture detection,
// model viewer, texture loader and math APIs
implementation 'com.google.android.filament:filament-utils-android:1.4.5'
}
Engine
- The depth prepass setting in View is now ignored and deprecated.
- Fixed a threading bug with the NOOP backend.
- Fix bug with incorrect world transforms computed in
TransformManager
. - Implemented sRGB support for DXT encoded textures.
Libraries
- Introduced
filament-utils
library withTextureLoader
,ModelViewer
, and Java bindings forcamutils
. - gltfio: fix out-of-bounds bug when glTF has many UV sets.
- gltfio: support external resources on Android.
v1.4.4
Android
- Android libraries are now available on Maven Central:
repositories {
// ...
mavenCentral()
}
dependencies {
// Filament rendering engine
implementation 'com.google.android.filament:filament-android:1.4.4'
// Filamat material builder
implementation 'com.google.android.filament:filamat-android-full:1.4.4'
// glTF 2.0 loader
implementation 'com.google.android.filament:gltfio-android:1.4.4'
}
Engine
- 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.
Materials
- Added support for solid and thin layer cubemap refraction.
- Improved high roughness material rendering by default when regenerating environments maps.
Libraries
- Removed
<iostream>
from math headers.
Tools
- cmgen now places KTX files directly in the specified deployment folder.
Samples
- Added new heightfield sample.