Nanite DDC key not bumped as successfully built meshes are still valid.
#rb none
[FYI] graham.wihlidal, brian.karis
#ROBOMERGE-SOURCE: CL 16652302
#ROBOMERGE-BOT: (v834-16658389)
[CL 16659235 by rune stubbe in ue5-main branch]
Pages can now refererence data from the parent page.
Page transcoding is now batched based on page dependencies.
Removed Nanite's LZ container for platforms that don't have hardware LZ. Rely on iostore compression instead. ~4% disk saving. 32mb system memory saving from temp buffer.
Better integer-based UV quantization code similar to new position quantization.
Got rid of remaining old position quantization code.
Reduced float4s per cluster from 8 to 6. ~2% memory density.
Added BitStreamReader support for reading from UAV. Needed to reference parent data.
#rb graham.wihlidal
[FYI] brian.karis
#ROBOMERGE-SOURCE: CL 16621364
#ROBOMERGE-BOT: (v830-16605563)
[CL 16621388 by rune stubbe in ue5-main branch]
UV mirror seams are now considered an attribute discontinuity. This is handled through a cheap trick of changing the tops bits of the material index per triangle.
This should not strictly be necessary because the QEM could account for the difference but to get it to properly catch issues in practice required increasing the UV error weight high enough that it impacts all meshes including ones that didn't have noticable issues. Targeting the mirror case specifically was better even though it shouldn't be special theoretically.
This fixes Nanite UV bugs in Frosty.
#jira UE-113150
#ROBOMERGE-SOURCE: CL 16411470 in //UE5/Private-Frosty/...
#ROBOMERGE-BOT: STARSHIP (Private-Frosty -> Main) (v804-16311228)
[CL 16412628 by brian karis in ue5-main branch]
#[robomerge] ignore
#lockdown graham.wihlidal
#[fyi] nick.whiting
#ushell-cherrypick of 16120952 by Rune.Stubbe
[CL 16155632 by Rune Stubbe in ue5-main branch]
Changed attribute encoding alignment from 4 bytes to 1 byte. It saves a bit of space PC and is no longer worse on other platforms.
#rb none
[CL 16108167 by Rune Stubbe in ue5-main branch]
The scheme solves issues where meshes would no longer align properly after converting them to Nanite. It also solves the precision issues in clusters with triangles of non-uniform size.
By default the precision is heuristically selected by Nanite, but the user also has the ability to override with an explicit precision to solve issues or optimize for disk size.
Clusters store the coordinate components using the minimal number of bits required to span the range of values in the cluster.
Apart from fixing issues, the default quality seems no worse than before and is typically ~5-10% smaller than before.
Added Position Precision to the top left of Mesh viewer along with the other mesh stats.
Added Position Precision dropdown to Nanite import settings.
Added debug mode "r.nanite.visualize PositionBits" that shows the vertex position bit sizes for clusters.
New quantization code now updates float positions and cluster bounds to reflect the quantized coordinates.
#rb brian.karis, graham.wihlidal
#JIRA UE-102722
#preflight 607d56774df3b60001ef477c
[CL 16049335 by Rune Stubbe in ue5-main branch]
MaterialTable (slow path) data was 16-byte aligned when written to Nanite streaming pages, but this alignment was not reflected in offset calculations.
This would cause offsets to other data members (like UVs) to be wrong and the result of interpreting them would be garbage.
#rb graham.wihlidal
#ROBOMERGE-OWNER: rune.stubbe
#ROBOMERGE-AUTHOR: rune.stubbe
#ROBOMERGE-SOURCE: CL 15523309 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v771-15082668)
#ROBOMERGE-CONFLICT from-shelf
[CL 15523633 by rune stubbe in ue5-main branch]