Commit Graph

186 Commits

Author SHA1 Message Date
marc audy
08c0dfc0a2 Fix uninitialized VertexBounds in NaniteDisplacedMesh and GeometryCollection code paths causing incorrect Nanite Meshes.
- Modified Nanite::IBuilderModule::FInputMeshData to take FBounds3f instead of FBoxSphereBounds since NaniteBuilder doesn't require sphere bounds.
- Calculate VertexBounds in DisplaceNaniteMesh(...) and BuildMeshDataFromGeometryCollection(...)

#rb rune.stubbe
#preflight 64258edb973e609670eb2ef0
#lockdown marc.audy

[CL 24884479 by marc audy in ue5-main branch]
2023-04-01 02:40:07 -04:00
rune stubbe
edc7e61019 Fixed issue where Nanite fallback meshes with LODIndex>0 would be extremely low poly because PercentTriangles was uninitialized.
The initialization code for PercentTriangles was lost in 24853395, seemingly by mistake.

[REVIEW] [at]tiago.costa

[CL 24867875 by rune stubbe in ue5-main branch]
2023-03-31 02:43:52 -04:00
sebastien lussier
0c3948ad71 FBoxSphereBounds - Fixed many potential issues with bounds initialization containing the origin (0,0,0)
* Added a FBoxSphereBounds::Builder class to help avoid these kind of issues
#rb jeanfrancois.dube, patrick.enfedaque
[FYI] Graham.Wihlidal
#preflight 6419e677ec01de1664d3e95c

[CL 24739078 by sebastien lussier in ue5-main branch]
2023-03-21 16:38:42 -04:00
graham wihlidal
448c7ab768 Fix Nanite mesh build never releasing memory during builds by changing usage of GetOrCacheMeshDescription to CloneMeshDescription, to follow what non-Nanite mesh building is doing (clone from a cached copy if present like during editing tools, but during cook where nothing is caching, just make a copy without storing back to the cache).
#rb yuriy.odonnell, rune.stubbe
[FYI] danny.couture, zousar.shaker
#preflight trivial

[CL 24667634 by graham wihlidal in ue5-main branch]
2023-03-16 00:28:41 -04:00
graham wihlidal
11aa8b1399 Undo overlapping corner changes for now (addresses some failure to weld cases, and a better approach is under development for this).
#preflight trivial
[FYI] alexis.matte, jonathan.bard

[CL 24650853 by graham wihlidal in ue5-main branch]
2023-03-15 03:51:33 -04:00
graham wihlidal
50dcdb0fe5 Possible fix for rare crash in StaticMeshBuilder when assigning accessing mesh description
#preflight trivial

[CL 24622109 by graham wihlidal in ue5-main branch]
2023-03-13 17:24:03 -04:00
graham wihlidal
60b68c4c39 Another non-unity fix
#preflight skip

[CL 24602830 by graham wihlidal in ue5-main branch]
2023-03-10 22:23:27 -05:00
graham wihlidal
d865a1b50c Robomerge and unity fixes
#preflight trivial

[CL 24602825 by graham wihlidal in ue5-main branch]
2023-03-10 22:23:03 -05:00
graham wihlidal
f92a4f5137 Fully de-interleaved attribute data during static mesh, Nanite, and geometry collection builds to save ~50% (on average) CPU memory across the board during SM builds.
#rb brian.karis
[FYI] yuriy.odonnell, danny.couture, rune.stubbe, ola.olsson
#preflight 640bb519af3fc35292eff3e6

[CL 24602822 by graham wihlidal in ue5-main branch]
2023-03-10 22:22:45 -05:00
graham wihlidal
1aec7d15e9 Significant DDC memory and perfomance optimizations to Nanite landscape mesh builds (and some general optimizations to all Nanite mesh builds). In some content cooks with extremely dense Nanite landscape mesh where the process memory well exceeded ~22gb, this brings it down to ~13gb, along with faster processing times.
Highlights:

 * Only allocate and use a wedge map for non-Nanite LODs, or if the mesh is sub 300kindices and it will be cache optimized
 * Only allocate and use a remap if there are no overlapping corners
 * When the Nanite landscape mesh is created, we now ensure the mesh description is fully compacted, computed, and optimized prior to committing it, along with making sure there are no overlapping corners.
 * Since Nanite landscape is checked to ensure no overlapping corners before the build, we can also now skip computing the overlapping corners, which was an intense number of tiny allocations.
 * When Nanite landscape is being built as a static mesh, we now avoid super expensive temporary copies of the mesh description, knowing that no actual mutation will occur.
 * The original code (after building) would release the memory from the mesh description copy, but it would not release the original immutable cached copy from memory (now that is released too)
 * Fixed NaniteLODIndex incorrectly creating a mesh description at a LOD other than the expected 0
 * Removed a full loop over all vertex positions by calculating the bounding box while we're building the vertex buffer (and already processing every vertex)
 * Added a NeedsCompact() helper to MeshDescription to avoid expensive and unnecessary Compact() calls that do lots of reallocs/copies even if the mesh description is already contiguous\packed in memory.
 * Skip building distance field and mesh card representations for the Nanite landscape mesh, which also avoids more cached mesh description deserialization and copies into memory.

Note: In the near future the APIs around this wil be cleaned up further.

#rb richard.talbotwatkin, yuriy.odonnell
[FYI] zousar.shaker, brian.karis, rune.stubbe, juan.canada, danny.couture
#preflight 640b7390482188d710464d39

[CL 24601442 by graham wihlidal in ue5-main branch]
2023-03-10 20:03:17 -05:00
tiago costa
3d3741df2b Prevent crash when trying to build Nanite Data for mesh with unsupported number of sections.
#preflight 63fd4163dd78dd50f6bee3d0
#rb graham.wihlidal, michael.balzer

[CL 24439073 by tiago costa in ue5-main branch]
2023-02-28 00:39:57 -05:00
brian karis
d1901ae146 Added Nanite static mesh setting: Fallback target.
This is an enum to say which target to reduce to for the fallback. It makes the default "Auto" which gives us more ability to change the default heuristic without needing to change uproperty defaults.

Along with this added r.Nanite.Builder.FallbackTriangleThreshold. Any mesh with source triangle count less than this threshold uses the source triangles directly for the fallback.

#rb graham.wihlidal
#lockdown marc.audy

#preflight 63f0041b1d71bcd26225228c

[CL 24330590 by brian karis in ue5-main branch]
2023-02-20 18:59:18 -05:00
graham wihlidal
70fd7c02c5 Refactored places fetching the result of NaniteSettings.bEnabled to instead get the value from UStatic::IsNaniteEnabled() so it correctly includes the force flag (except places using it to determine whether settings should be set).
#fyi brian.karis
#preflight trivial

[CL 24291376 by graham wihlidal in ue5-main branch]
2023-02-17 16:35:05 -05:00
graham wihlidal
521b800102 Implemented an "Allow Masked Materials" world setting that can force any any Nanite meshes using masked materials to fallback to non-Nanite rendering (default is to always use Nanite). SMC now also has a "Force Nanite for Masked" checkbox (false by default) that can be use to always use Nanite for masked materials, regardless of the world setting disallowing Nanite. Additionally this change also adds a cvar that can force all meshes to build Nanite data, even if the per-asset enabled checkbox is false.
#rb rune.stubbe
#fyi juan.canada, brian.karis
#preflight skip

[CL 24224547 by graham wihlidal in ue5-main branch]
2023-02-14 20:00:38 -05:00
dan thompson
ee896287b8 Warn when building a static mesh that has NaNs in it.
#rb charles.bloom
#preflight 63e6a891c23d1f29a3fbb411

[CL 24137697 by dan thompson in ue5-main branch]
2023-02-11 12:51:08 -05:00
richard talbotwatkin
da0d791bf7 Fixed issue where non-compact mesh descriptions can build with unused extra data.
#rb
#preflight

[CL 23580211 by richard talbotwatkin in ue5-main branch]
2023-01-04 15:47:28 -05:00
alexis matte
c4765e5da4 Do not cache the MeshDescription triangles/vertices count when we load the mesh description. Setting the cache when building the renderdata is good enough and it can use the already computed "FOverlappingCorners".
#jira UE-172554
#rb danny.couture
#rnx
#preflight 639772422540a78d27c8813f

[CL 23499862 by alexis matte in ue5-main branch]
2022-12-13 18:17:40 -05:00
alexis matte
4897d11583 Add Absolute criterion to staticmesh FMeshReductionSettings.
#rb brian.karis , jeanluc.corenthin , richard.talbotwatkin
#rnx
#preflight 638e35291776b8c21c32026b

[CL 23399365 by alexis matte in ue5-main branch]
2022-12-05 16:24:30 -05:00
henry falconer
4510b454c4 Allow users to limit the number of bone influences per vertex below what the project supports.
BoneInfluencesLimit can be set on each LOD of an asset. DefaultBoneInfluencesLimit is a per-platform global default that can be set from the project settings.

This allows you to, for example, enable Unlimited Bone Influences on a project while ensuring that meshes don't use more than 8 influences by default, even if they've been imported with more.

#rb alexis.matte,josie.yang
#preflight 6380959cf514e1ded907774d

[CL 23265588 by henry falconer in ue5-main branch]
2022-11-25 08:32:25 -05:00
David Lesage
34da27404d #jira UE-168689 Warning: The generation of LOD could have generated spikes on multiple meshes
The threshold in LOD generation to check the quality of the LOD was to small.
It has been update to sqrt(3) i.e. the reduced mesh must stay in the bounding sphere.
#rb none
#preflight 637632ef232e3d12cb949a38

[CL 23174735 by David Lesage in ue5-main branch]
2022-11-17 08:28:33 -05:00
David Lesage
7477e92eb9 #jira UE-168689 Warning: The generation of LOD could have generated spikes on multiple meshes
The threshold in LOD generation to check the quality of the LOD was to small.
It has been update.
#rb none
#preflight 637226fdb6636838285df8ae

[CL 23116233 by David Lesage in ue5-main branch]
2022-11-14 06:39:57 -05:00
jamie hayes
efc7833b06 Fix an issue where Nanite would be built for LOD0 when it was not supposed to be for non-Nanite platforms.
#rb graham.wihlidal
#rnx
#preflight 636cfe5d843e6ac79476f43f

[CL 23085790 by jamie hayes in ue5-main branch]
2022-11-10 14:37:59 -05:00
krzysztof narkowicz
78088a94e0 Distance Fields - Generate mesh distance fields from highest quality available data in order to match Nanite data.
#preflight 63611edd731604696a0f9134
#jira

[CL 22890143 by krzysztof narkowicz in ue5-main branch]
2022-11-01 16:01:53 -04:00
David Lesage
4fe8d2122b #jira UE-90182
The spikes seems to not happen any more with the new simplification algorithm.
Whatever, the bounding box of the simplified mesh is compared to the original mesh. If the new bounding box is larger, a message is output.
#preflight 635a8628316cf8bef6442135

[CL 22809103 by David Lesage in ue5-main branch]
2022-10-27 09:53:48 -04:00
henrik karlsson
b5b86c796c This change is a strategical submit for a coming change that removes lots of includes in headers that are included by many files. This change contains adding of includes in files that previously got those includes transitively from other inclkudes
#preflight 6355d4940313c24974b2107b
#rb none

[CL 22783162 by henrik karlsson in ue5-main branch]
2022-10-26 12:57:32 -04:00