This function was incorrectly using the surface number to index into the
LOD indices vector. This resulted in just returning the same index over
and over again. In theory if you had a mesh with more surfaces than one
of its LOD vectors it could read pass the end of the LOD index array.
The SoftBody3D code creates a new ArrayMesh by duplicating the input
mesh, and uses `mesh_surface_get_lods()` to duplicate the LODs. The
broken behavior here results in SoftBody3D creating broken meshes that
render nothing due to each LOD just using a single vertex. This commit
fixes SoftBody3D to now work correctly with meshes with LODs.
Fixes#107984.
The purpose of this code is to expose the necessary
functions for users and engine devs to develop tooling
for properly timing and seeking inside particles.
Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
Co-authored-by: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com>
Co-authored-by: Tomasz Chabora <kobewi4e@gmail.com>
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
Technical implementation notes:
- Moved linearization step to before the outset matrix is applied and
changed polynomial contrast curve approximation.
- This does *not* implement Blender's chroma rotation to address hue shift.
This hue rotation was found to have a significant performance impact.
- Improved performance by combining the AgX outset matrix with the Rec 2020 matrix.
Co-authored-by: Allen Pestaluky <allenpestaluky@gmail.com>
Co-authored-by: Clay John <claynjohn@gmail.com>
Previously, the MetalFX scaling modes were only displayed in the
`macos` and `ios` feature tag overrides if the editor had Metal support
enabled. However, this is only available on the macOS editor, which caused
two issues:
- You couldn't set the 3D scaling mode to MetalFX for `macos` or `ios`
if you were using the editor on another platform.
- If you opened a project that was last edited on macOS with MetalFX scaling
modes set for these overrides, it would show an unknown value or revert
to the default when saving to the project (as the enum value didn't exist
anymore on your end).
- Tweak property hint ranges for some networking settings to ensure
the minimum values don't break the debugger entirely.
- Ensure shader time rollover is set to at least 1, as 0 causes a division by
zero to occur.
All relevant project settings are now covered by a range hint.
- Implements asynchronous transfer queues from PR #87590.
- Adds ubershaders that can run with specialization constants specified as push constants.
- Pipelines with specialization constants can compile in the background.
- Added monitoring for pipeline compilations.
- Materials and shaders can now be created asynchronously on background threads.
- Meshes that are loaded on background threads can also compile pipelines as part of the loading process.
This adds support in all backends, but the Compatibility renderer works the best.
Mobile and Forward+ can only support one directional light shader (the first in the tree)
While the Compatibility renderer supports any number of shadows.
Co-authored-by: Clay John <claynjohn@gmail.com>