UMeshElementsVisualizer needs access to a mesh to generate it's data structures. However we may not be able to (or shouldn't) directly pass a pointer to UMeshElementsVisualizer. For example a UDynamicMeshComponent can expose it's internal mesh via a function ProcessMesh( TFunctionRef Func ). UMeshElementsVisualizer cannot directly call that function without knowing about the UDynamicMeshComponent, which we would like to avoid. So instead the client of UMeshElementsVisualizer provides a MeshAccessFunction that we can call with an internal function/lambda that UMeshElementsVisualizer internals will produce, that can be passed a const FDynamicMesh3& for processing (this is a ProcessDynamicMeshFunc). The job of the MeshAccessFunction is to call this ProcessDynamicMeshFunc on a FDynamicMesh3, which it may have direct access to, or it may get by calling (eg) UDynamicMeshComponent::ProcessMesh() internally.