<!--
{
  "availability" : [
    "iOS: 27.0.0 -",
    "iPadOS: 27.0.0 -",
    "visionOS: 27.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "RealityKit",
  "identifier" : "/documentation/RealityKit/ClothBodyComponent/visualMesh",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Property",
  "symbol" : {
    "kind" : "Instance Property",
    "modules" : [
      "RealityKit"
    ],
    "preciseIdentifier" : "s:22RealityFoundationCloth0C13BodyComponentV10visualMesh0aB008LowLevelG0CSgvp"
  },
  "title" : "visualMesh"
}
-->

# visualMesh

The dynamically deforming visual mesh of the cloth body, which you may read but not modify.

```
var visualMesh: LowLevelMesh? { get }
```

## Discussion

This visual mesh will always be nil at first.
The visual mesh becomes non-nil if the entity is part of a simulation and has a [`ModelComponent`](/documentation/RealityKit/ModelComponent) whose mesh is not a [`LowLevelMesh`](/documentation/RealityKit/LowLevelMesh).
This is a dynamically deforming version of the mesh stored in the [`ModelComponent`](/documentation/RealityKit/ModelComponent), and overrides the rendering.

The visual mesh is updated on the GPU after each simulation update. Subscribe to
[`ClothSimulationEvents.AfterUpdate`](/documentation/RealityKit/ClothSimulationEvents/AfterUpdate) to know when new data is available.
To read the mesh contents on the GPU, encode your work using the scene’s `commandQueue`
to ensure proper synchronization with the simulation’s GPU writes.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)