All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Had to bring back
GltfAsset.isDone
for render tests
- WebGL loading by not using unsupported
System.Threading.Task.Run
(fixes #131) - Escaped, relative buffer/texture URIs now work on local file system consistently
- Rendertests work again
- Error message when a UV set other than the first one is used (is unsupported; see issue #34)
- Unit test for loading all models once (good for quick checks in comparison to performance tests, which take very long)
- No more exception on models with
KHR_materials_variants
glTF extension (not supported yet) - Compiler errors in Tests assembly due to inconsistent/incomplete class names/namespaces changes
- Moved
SampleSet
related code into dedicated Assembly, so it can be used in unit tests as well client applications (but doesn't have to).
- Build size optimization: Physics package is not required anymore (
GltfBoundsAsset
won't work as expected in that case) - Build size optimization: Removed usage of
System.Linq
- Removed compiler warnings (in case KtxUnity is missing)
- KtxUnity required version >=1.0.0
- DracoUnity required version >=1.4.0
- Converted API and internals to async/await. This is more convenient in some cases and eases future optimizations.
- Performance improvements
- Non-trivial JSONs are parsed in a thread now
- More consistent frame rates due to task duration estimation in various places along the loading code
- Embed base 64 buffers are decoded in a thread now
- Less memory usage (and likely faster) du to Jpeg and PNG textures being loaded non-readable (if possible)
- Support for performance benchmark package
- Unit tests are working in builds again (not just in the Editor)
- Renamed glTF shader graph properties to match Unity Lit/BuiltIn Standard shader properties. Switching shaders preserves more attributes this way.
- Consistent casing in shader graph names
- Apply material's occlusion strength properly
- Removed artifacts on double sided opaque materials
- Properly clean up volatile download dictionaries
- Build compilation when targeting URP/HDRP
- Ported partial support for transmission materials to URP/HDRP 7.x
- Improved/alternative transmission mode for Universal Render Pipeline that kicks in if
Opaque Texture
is enabled in URP settings
- Partial support for transmission materials in built-in render pipeline (extension KHR_materials_transmission; see #111 for details)
- Performance improvement: Avoid redundant Shader.Find invocations by making cached shader references static
- Built-In shaders can customized now by overriding
BuiltInMaterialGenerator.FindShader*
methods
- Unlit double sided shader graph materials
- Support for Shader Graph based Render Pipelines including Universal Render Pipeline (URP) and High Definition Render Pipeline (HDRP) (#41,#42)
- Material inspector: texture rotation value (in degrees) for both built-in and Shader Graph materials
GltfAsset
now provides astreamingAssets
option (default is off), for loading relative paths from the StreamingAssets folderGameObjectBoundsInstantiator
, a derived version ofGameObjectInstantiator
that calculates the glTF's axis-aligned bounding boxGltfBoundsAsset
, a derived version ofGltfAsset
that adds a BoxCollider to instantiations- Render Tests: Minimize chance of visual regression by checking import results against reference images
- Texture transform UV rotation: Using standard
_ST
property (Scale-Translation) by default. When rotation is enabled, scale values act as m00/m11 values of 2-by-2 rotation/scale matrix and are supplemented by two rotation values (for m01/m10). - Textures that fail to load don't cause the whole loading process to fail (thanks @Bersaelor for #117)
- Unit Tests: Sample model list is now part of GltfSampleSet objects and not loaded from text file anymore
- Removed shader compiler warnings for built-in shaders
- Removed compiler warnings in Unity 2020.1/2020.2
- Changes to materials (in custom shader GUI) are saved now
- Invalid matrix error. ValidTRS reports error in matrix data that does look correct (fixes #116)
- Removed potential memory leak warnings by allocating all buffers permanently (#115)
- Blend mode can be set in inspector for glTF materials via custom ShaderGUI (thanks @camnewnham for #89)
- Option to make all mesh data readable via
GLTFAST_KEEP_MESH_DATA
scripting define (alternative to #86) - Better support for URLs without file extension. glTF type (JSON or binary) is derived from HTTP Content-Type header, if present. (thanks @camnewnham for #87)
- Method
GltFast.LoadGltfBinary
to load .glb files from byte arrays is public now (#81)
- Switched internal URL type from
string
toUri
- Dependency on com.unity.mathematics was added (for matrix decomposition; see fix below)
- Unit tests updated to latest glTF-Sample-Models
- Absolute URI in external resources
- Special characters in URL (#79)
- Corner-case matrix decomposition errors (#99)
- Missing
Shader
results in error message instead of exception (#88)
- Updated KTX/Basis Texture Unity Package to 0.8.x
- The KTX specification changed (from ~draft20 to pr-draft2), thus older KTX files cannot be loaded anymore.
- Support for KTX specification 2.0 pr-draft2 (fixes #16)
- Support for Basis Universal UASTC supercompression mode (higher quality)
- Support for skinning
- Instantiation can now be customized via injection
- Complete refactor to allow more optimization by using Unity's new Mesh API (introduced in 2019.1)
- Required Unity version was raised to 2019.1 or newer
- Material generator (IMaterialGenerator) is now properly exposed and can be injected ( thanks @p-skakun for #80 )
- Reduced memory usage by uploading mesh data instantly and make it no longer readable
- Unlit shader now works with vertex colors
GltFast.LoadingDone
state property indicates if loading routine has finishedGltfAssetBase
, a minimum asset component for manual loading via scriptGetMaterial
interface, to retrieved imported materials by index.
- Added loading state sanity checks to instantiation
- Loading glTFs with materials only (no scene/geometry)
- Normal texture scale is applied correctly now
- Abstract interface
IDownloadProvider
let's users implement custom download behavior (useful for authentification or caching) - Added
CustomHeaderDownloadProvider
, a reference implementation that downloads glTF's files with custom HTTP headers
- Removed support for obsolete draft extensions
KHR_texture_cttf
andKHR_image_ktx2
- Correct (brighter) colors due to color-space conversion (conversion from linear to gamma before applying to material)
- Correct shading in linear color space projects due to correct (linear) sampling of normal, occlusion and metallic-roughness maps
- Memory leak: free up volatile array
imageFormats
- Support for Draco mesh compression is now optional (install DracoUnity package to enable it)
- Support for KTX2/Basis Universal textures is now optional (install KtxUnity package to enable it)
- Faster mesh creation due to using the advanced Mesh API on Unity 2019.3 and newer.
- Support for texture samplers' wrapping mode
- Support for texture samplers' filter modes (partial; see issue)
- Increased performance due to more balanced threading by making all C# Jobs parallel
- Refactored loading behavior
- Main loading class does not interfere with it's IDeferAgent anymore. It just follows its order.
GltfAsset
now has aloadOnStartup
flat to disable automatic loadingGltfAsset.onLoadComplete
now also returns itsGltfAsset
instance for convenience
- Redundant Load calls when using
UninterruptedDeferAgent
- Normals and tangents (if not present) are only calculated if the assigned material actually requires them.
- Experimental KTX / Basis Universal support was merged (off by default)
- Proper error handling invalid URL/path
- Improved glTF-binary URL extension detection
- Correct index order for line strip primitives (#59)
- Support for Universal Windows Platform (not verified/tested myself)
- Refactored GltFast class to control loading coroutine in an effort to make usage and future port to async easier.
- Optimization: Data loading is now based on accessors (rather than primitives). This reduces redundant loading jobs wherever accessors are used across primitives.
- Optimization: Primitives of a mesh, that share vertex attributes now become sub-meshes of one Unity Mesh. This reduces memory usage and creates less Renderers/GameObjects.
- glTF type (JSON or binary) is now auto-detected based on file name extension. Removed obsolete
GlbAsset
. This was done soGltfAsset
can be derived off more flexible.
- Support for quantized mesh data via
KHR_mesh_quantization
extension
- UV space conversion now happens per UV coordinate (not negatively scaled via texture tiling anymore). This helped to fix tangent calculation.
- glTF standard shaders now have a cull mode, allowing them to be double-sided. The now obsolete
Double
variants were removed (thanks to Ben Golus for support)
- Certified correct normal mapping by making normals, UVs and tangents consistent
- Double sided material fixes
- Shader compilation error on Vulkan/GLES3
- Support for texture transform (extension KHR_texture_transform)
- Support for double sided materials
- Support for data URI / embedded buffers and images
- Support for vertex colors in materials
- Support for implicit/undefined primitive indices
- Experimental support for primitive modes points, lines, line strip and line loop
- Using custom glTF shaders instead of Unity Standard shaders. This speeds up occlusion and roughness/metallic texture loading since they don't have to be converted at runtime anymore.
- Factor and texture (for metallic-roughness and specular-glossiness) are now multiplied as defined in spec.
- Unlit materials now support baseColorTexture and texture transforms
- glTF binary with Draco compression (decoding error due to invalid buffer view access)
- Legacy .NET speed regression
- Unity backwards compatibility (tested with 2018.2 with .NET 3.5)
- Removed job-less support
- The node or primitive GameObjects now have their mesh's name, if there is no node name provided
- Correct transforms and coordinate space. The glTF scene's root node is not scaled negative in any axis anymore
- Texture default wrap mode is repeat (not set to clamp anymore)
- Support for unlit materials (KHR_materials_unlit extension)
- Support for specular-glossiness type materials (KHR_materials_pbrSpecularGlossiness extension)
- Fixed broken assembly references by switching to non-GUID refs (thanks Stephen Gower for pointing it out)
- Metallic-Roughness texture not working. Now they are created only after their source was properly loaded.
- Draco mesh compression support
- Report unsupported glTF extensions and gracefully fail if a required extension is not supported.
- Tranformed Project into a Unity Package, which can easily be installed via Package Manager
0.3.0 - 2019-06-30
- Threaded glTF loading via Unity Job System
- Update to Unity 2019.1.7f1
- Formatted ChangeLog markdown file
0.2.0 - 2019-02-22
- Support for regular JSON glTFs (non-binary)
- First pre-release
- Support for meshes with more than 65k vertices.
- free up memory when destroying content
- Added support for interleaved vertex data
- added support for 3 component vertex colors (rgb without alpha)
- added support for uint16 vertex colors
- fixed metallic roughness texture usage (workaround)
- fixed occlusion texture usage (workaround)
- initial version