v1.2.0
This release is motivated by a need to update npm, which was last updated in December 2018 with
v1.1.0. Some of the changes since then:
Features
Materials
- Added
getWorldFromClipMatrix()
API - Added
flipUV
property to enable/disable UV Y coordinate flipping - Added
curvatureToRoughness
property for specular anti-aliasing - Added
limitOverInterpolation
property for specular anti-aliasing - Use
getUserTime()
to get the current time in seconds. SeeRenderer::resetUserTime()
for more information
Tools
- New
glslminifier
tool to reduce the size of built-in GLSL shaders matc
features are now part oflibfilamat
to generate materials at runtimeresgen
tool to embed data in binaries (pre-compiled materials, etc.)
Engine
- VertexBuffer builder
normalized()
method now accepts a boolean View::setFrontFaceWindingInverted
can be used to change the winding order of front faces. This is useful for mirrored rendering (reflections, etc.)- Added
View::setRenderQuality
API. It currently allows the use of anR11G11B10F
HDR color buffer instead ofRGB[A]16F
- Added the ability to set the polygon offset on a material instance
- Added API to compute tangent frame from vertex data (in
VertexBuffer
)
Samples
snorm16
UVs if UVs are in the range-1..1
- New webpack/TypeScript demos
- Added
gltf_viewer
sample
Enhancements
Engine
- Exposed tangent utility to Java/Kotlin
- Allow mutation of non-direct buffers in Java/JNI
- FrameGraph is now enabled internally
- Improved render target management
- Added
addEntities
toScene
- Windows debug libraries are now part of the distribution
- Add new queries to
TransformManager
andScene
- Mipmaps are now generated using the GPU for both Vulkan and OpenGL
- Improved job system performance, especially under contention
- Removed obsolete documentation about static lights
- Improved skinning memory usage
- Improved job system performance
- Set CPU affinity on job system threads on Android to avoid core hopping/cache thrashing
- Froxelization now runs during the shadow pass for improved parallelism
- Lights culling is now parallelized with renderables culling
- Various performance and code size optimizations
- Use compile-time hashing in
StaticString
- The JavaScript API now supports compressed textures
- Disabled depth prepass in the WebGL builds
Web
- Added more JavaScript bindings
- Added more TypeScript annotations
Android
- Upgraded samples to Android Studio 3.3 and Kotlin 1.3.10
- Improved rendering to TextureView
- API level requirement on Android was lowered from 24 to 21
- Reduced the size of the release AAR by ~150 KiB
UiHelper
can now create transparent render targets- Added a transparent render target demo
Vulkan
- Added support for RGB textures
Rendering
- Replace Cloth DFG approximation with DFG LUT
- Add
clearCoatIorChange
property to materials - Continued to improve Metal support
- Always recenter the world origin to the camera position (improves precision)
- Enable the FrameGraph for post-processing
- Add an option to turn dithering on/off
- Implemented blit in Vulkan
- Simplified command buffer management in Vulkan
- Progress on Metal backend
Tools
- Introduce
MATERIAL_VERSION
(this breaks older Materials) - Cleaned-up and simplified
filabridge
andfilaflat
- New
gltfio
library to more easily support gltf - API change: rename matrix factory functions
- New
ibl
library split fromcmgen
- The
filamat
library is now available as a library to generate materials at runtime - Improved linear to sRGB conversion functions
- Improved skygen rendering
- Added 4 channel versions of image operations
- Filamesh now generates dummy UV sets when necessary
Build
- Android standalone toolchains are not longer necessary
- Linux CI builds are now compiled with clang 7.0 instead of clang 5.0
Materials
- Shader optimizations are now on by default
- Shader optimizations can now be applied to materials that use external textures
- Use smol-v to compress SPIR-V shaders
Bug fixes
Engine
- Fixed a bug preventing material parameters to be set on default
MaterialInstance
- Fixed a double free in
RenderableManager::Builder
(#871) - Fixed
math::slerp
again - Fixed NaNs in
math::slerp
- Fixed out-of-bounds access
- Fixed compilation issues with some compilers
- Destroy engine's default material on shutdown
- Fixed incorrect order of arguments in
glBlendFuncSeparate
- Fixed VAO state management bug
- Fixed overflow issue when exactly 256 bones were declared in a renderable
- Fixed potential crash when copying a texture stream
FADE
materials are now properly sorted withTRANSPARENT
materials
Rendering
- Fixed FXAA offset by half a pixel
- Fixed
generateMipmap
implementation to properly honor base/max level - Fixed OpenGL error with incorrect UBO size in GPU skinning
- Fixed iOS specific OpenGL issues
- Fixed normals/tangents skinning when a transform is set
- Fixed black spots that would sometimes show up with FXAA enabled
- Fixed depth prepass rendering bug on NVIDIA hardware
Tools
- Fixed memory leak in libimage
- Fixed
baseColorFactor
support when loading glTF files - Fixed minor issues in glTF to
filamesh
conversions
Android
- Fixed skybox loader to accept dimensions greater than 256x256
- Fixed
filamesh
loader to correctly interpret optimized UVs
Vulkan
- Fixed mipmapping of 2D textures
- Fixed validation warning
- Fixed texture anisotropy in the Vulkan backend
- Depth offset and face culling now work