Navigation
API > API/Plugins > API/Plugins/DynamicMesh
Inheritance Hierarchy
- FMeshRefinerBase
- FRemesher
- FQueueRemesher
- FNormalFlowRemesher
References
| Module | DynamicMesh |
| Header | /Engine/Plugins/Runtime/GeometryProcessing/Source/DynamicMesh/Public/QueueRemesher.h |
| Include | #include "QueueRemesher.h" |
Syntax
class FQueueRemesher : public UE::Geometry::FRemesher
Remarks
Extension to Remesher that is smarter about which edges/vertices to touch:
- A buffer tracks edges that were affected on last pass, and hence might need to be updated
- FastSplitIteration() just does splits, to reach target edge length as quickly as possible
- RemeshIteration() applies remesh pass for modified edges
- TrackedFullSmoothPass_Buffer() smooths all vertices but only adds to queue if edge changes enough
- TrackedFullProjectionPass() projects all vertices but only adds to queue if edge changes enough
Variables
| Type | Name | Description | |
|---|---|---|---|
| TSet< int > | EdgeBuffer | Persistent buffer of edges to be processed. This buffer is filled then iterated over. | |
| TArray< bool > | EdgeShouldBeQueuedBuffer | Whether an edge should be added to ModifiedEdges (used in async tasks) | |
| int | MaxFastSplitIterations | Max number of passes just doing edge splits. | |
| int | MaxRemeshIterations | Max number of passes doing full remeshing operations. | |
| double | MinActiveEdgeFraction | If fraction of active edges falls below this threshold, consider result converged and terminate before MaxRemeshIterations. | |
| TOptional< TSet< int > > | ModifiedEdges | Set of edges that have been modified during a given iteration. | |
| TFunction< void(int, int, int, int)> | PostEdgeSplitFunction | The function called after an edge split occurs. This function will enqueue edges in ModifiedEdges. | |
| SettingState | SavedState |
Constructors
| Type | Name | Description | |
|---|---|---|---|
FQueueRemesher
(
FDynamicMesh3* MeshIn |
Functions
| Type | Name | Description | |
|---|---|---|---|
| void | Converge on remeshed result as quickly as possible. | ||
| int | This pass only does edge splits and enqueues modified vertex neighborhoods. | ||
| void | PopState () |
||
| void | PushState () |
||
| void | QueueEdge
(
int eid |
||
| void | QueueOneRing
(
int vid |
||
| void | RemeshIteration
(
TFunctionRef< bool(void)> EarlyTerminationCheck |
This pass does all edge operations plug smoothing and reprojection. | |
| void | ResetQueue () |
||
| void | TrackedFullProjectionPass
(
bool bParallel |
Note: FRemesher has this: virtual void FullProjectionPass();. | |
| void | TrackedFullSmoothPass_Buffer
(
bool bParallel |
Note: superclass has this: virtual void FullSmoothPass_Buffer(bool bParallel);. | |
| void | TrackedMoveVerticesParallel
(
TFunction< FVector3d(int, bool&)> NewVertexPosition |
Move all vertices in parallel. |
Overridden from FRemesher
| Type | Name | Description | |
|---|---|---|---|
| void | "Outer loop" for all remeshing operations | ||
| void | |||
| void | OnEdgeSplit
(
int EdgeID, |
Call the function above to enqueue edges in the ModifiedEdges set. |
Classes
| Type | Name | Description | |
|---|---|---|---|
| SettingState | We occasionally want to override the user-specified choices of edge operations to achieve some sub-step of a full remesh algorithm. |