19 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

MeshPart

Inherits from: TriangleMeshPart → BasePart → PVInstance → Instance → Object

MeshPart is a form of BasePart that includes a physically simulated custom mesh. Unlike with other mesh classes, such as SpecialMesh and BlockMesh, they are not parented to a BasePart but rather behave as a BasePart in their own right.

The mesh and texture of a MeshPart are determined by the MeshId and TextureID properties. For more information, see Meshes.

Inherits from: TriangleMeshPart

Memory category: BaseParts

Properties

NameType / ReturnsDescription
MeshPart.DoubleSidedbooleanDetermines whether to render both faces of polygons in the mesh.
MeshPart.HasJointOffsetbooleanDeprecated legacy flag associated with the part's JointOffset.
MeshPart.HasSkinnedMeshbooleanIndicates whether the mesh currently applied to the MeshPart contains skinning (bone and joint) data.
MeshPart.JointOffsetVector3Deprecated. An offset once used to position a skinned mesh's joints.
MeshPart.MeshContentContentThe mesh that is displayed on the MeshPart. Supports asset URIs and EditableMesh objects.
MeshPart.MeshIdContentIdThe asset URIs of the mesh that is displayed on the MeshPart. Reads and writes to MeshContent.
MeshPart.RenderFidelityRenderFidelityThe level of detail used to render the MeshPart.
MeshPart.TextureContentContentThe texture applied to the MeshPart. Supports asset URIs and EditableImage objects.
MeshPart.TextureIDContentIdThe texture applied to the MeshPart. Reads and writes to TextureContent.

Inherited from TriangleMeshPart

NameType / ReturnsDescription
TriangleMeshPart.CollisionFidelityCollisionFidelityDetermines the level of detail the part's physics will adhere to its mesh.
TriangleMeshPart.CollisionPrecisionfloatQuantifies how precise or performant a CollisionFidelity.Tunable collision geometry is, from 0 to 1.
TriangleMeshPart.FluidFidelityFluidFidelityDetermines the geometric representation used to compute aerodynamic forces and torques.
TriangleMeshPart.MeshSizeVector3The original size of the part's source mesh geometry, before any scaling applied through BasePart.Size.

Inherited from BasePart

NameType / ReturnsDescription
BasePart.AnchoredbooleanDetermines whether a part is immovable by physics.
BasePart.AssemblyAngularVelocityVector3The angular velocity of the part's assembly.
BasePart.AssemblyCenterOfMassVector3The center of mass of the part's assembly in world space.
BasePart.AssemblyLinearVelocityVector3The linear velocity of the part's assembly.
BasePart.AssemblyMassfloatThe total mass of the part's assembly.
BasePart.AssemblyRootPartBasePartA reference to the root part of the assembly.
BasePart.AudioCanCollidebooleanDetermines whether the part will physically interact with audio simulation, similar to CastShadow for lighting.
BasePart.BackParamAfloatDetermines the first parameter for the SurfaceType on the Back face of a part.
BasePart.BackParamBfloatDetermines the second parameter for the SurfaceType on the Back face of a part.
BasePart.BackSurfaceSurfaceTypeDetermines the type of surface for the back face of a part.
BasePart.BackSurfaceInputInputTypeDetermines the kind of input for the Back face of a part.
BasePart.BottomParamAfloatDetermines the first parameter for the SurfaceType on the Bottom face of a part.
BasePart.BottomParamBfloatDetermines the second parameter for the SurfaceType on the Bottom face of a part.
BasePart.BottomSurfaceSurfaceTypeDetermines the type of surface for the bottom face of a part.
BasePart.BottomSurfaceInputInputTypeDetermines the kind of input for the Bottom face of a part.
BasePart.BrickColorBrickColorDetermines the color of a part.
BasePart.brickColorBrickColor
BasePart.CanCollidebooleanDetermines whether a part may collide with other parts.
BasePart.CanQuerybooleanDetermines whether the part is considered during spatial query operations.
BasePart.CanTouchbooleanDetermines if Touched and TouchEnded events fire on the part.
BasePart.CastShadowbooleanDetermines whether or not a part casts a shadow.
BasePart.CenterOfMassVector3Describes the world position in which a part's center of mass is located.
BasePart.CFrameCFrameDetermines the position and orientation of the BasePart in the world.
BasePart.CollisionGroupstringDescribes the name of a part's collision group.
BasePart.CollisionGroupIdintDescribes the automatically set ID number of a part's collision group.
BasePart.ColorColor3Determines the color of a part.
BasePart.CurrentPhysicalPropertiesPhysicalPropertiesIndicates the current physical properties of the part.
BasePart.CustomPhysicalPropertiesPhysicalPropertiesDetermines several physical properties of a part.
BasePart.ElasticityfloatUsed to control the Elasticity of the part, but it no longer does anything.
BasePart.EnableFluidForcesbooleanUsed to enable or disable aerodynamic forces on parts and assemblies.
BasePart.ExtentsCFrameCFrameThe CFrame of the physical extents of the BasePart.
BasePart.ExtentsSizeVector3The actual physical size of the BasePart as regarded by the physics engine.
BasePart.FrictionfloatUsed to control the Friction of the part, but now it no longer does anything.
BasePart.FrontParamAfloatDetermines the first parameter for the SurfaceType on the Front face of a part.
BasePart.FrontParamBfloatDetermines the second parameter for the SurfaceType on the Front face of a part.
BasePart.FrontSurfaceSurfaceTypeDetermines the type of surface for the front face of a part.
BasePart.FrontSurfaceInputInputTypeDetermines the kind of input for the Front face of a part (-Z direction).
BasePart.LeftParamAfloatDetermines the first parameter for the SurfaceType on the Left face of a part.
BasePart.LeftParamBfloatDetermines the second parameter for the SurfaceType on the Left face of a part.
BasePart.LeftSurfaceSurfaceTypeDetermines the type of surface for the left face of a part.
BasePart.LeftSurfaceInputInputTypeDetermines the kind of input for the Left face of a part.
BasePart.LocalTransparencyModifierfloatDetermines a multiplier for BasePart.Transparency that is only visible to the local client.
BasePart.LockedbooleanDetermines whether a part is selectable in Studio.
BasePart.MassfloatDescribes the mass of the part, the product of its density and volume.
BasePart.MasslessbooleanDetermines whether the part contributes to the total mass or inertia of its rigid body.
BasePart.MaterialMaterialDetermines the texture and default physical properties of a part.
BasePart.MaterialVariantstringThe name of MaterialVariant.
BasePart.OrientationVector3Describes the rotation of the part in the world.
BasePart.PivotOffsetCFrameSpecifies the offset of the part's pivot from its CFrame.
BasePart.PositionVector3Describes the position of the part in the world.
BasePart.ReceiveAgefloatTime since last recorded physics update.
BasePart.ReflectancefloatDetermines how much a part reflects the skybox.
BasePart.ResizeableFacesFacesDescribes the faces on which a part may be resized.
BasePart.ResizeIncrementintDescribes the smallest change in size allowable by the Resize() method.
BasePart.RightParamAfloatDetermines the first parameter for the SurfaceType on the Right face of a part.
BasePart.RightParamBfloatDetermines the second parameter for the SurfaceType on the Right face of a part.
BasePart.RightSurfaceSurfaceTypeDetermines the type of surface for the right face of a part.
BasePart.RightSurfaceInputInputTypeDetermines the kind of input for the Right face of a part (-X direction).
BasePart.RootPriorityintThe main rule in determining the root part of an assembly.
BasePart.RotationVector3The rotation of the part in degrees for the three axes.
BasePart.RotVelocityVector3Determines a part's change in orientation over time.
BasePart.SizeVector3Determines the dimensions of a part (length, height, width).
BasePart.SpecificGravityfloatThe ratio of the part's density to the density of water determined by the BasePart.Material.
BasePart.TopParamAfloatDetermines the first parameter for the SurfaceType on the Top face of a part.
BasePart.TopParamBfloatDetermines the second parameter for the SurfaceType on the Top face of a part.
BasePart.TopSurfaceSurfaceTypeDetermines the type of surface for the top face of a part.
BasePart.TopSurfaceInputInputTypeDetermines the kind of input for the Top face of a part (+Y direction).
BasePart.TransparencyfloatDetermines how much a part can be seen through (the inverse of part opacity).
BasePart.VelocityVector3Determines a part's change in position over time.

Inherited from PVInstance

NameType / ReturnsDescription
PVInstance.OriginCFrameEditor-only property that reads and sets the world CFrame of the PVInstance's pivot, moving the entire instance when changed from the Studio Properties window.
PVInstance.Pivot OffsetCFrameEditor-only property that displays and edits the pivot's CFrame relative to the instance, moving only the pivot and leaving the instance in place.

Inherited from Instance

NameType / ReturnsDescription
Instance.ArchivablebooleanDetermines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published.
Instance.archivableboolean
Instance.CapabilitiesSecurityCapabilitiesThe set of capabilities allowed to be used for scripts inside this container.
Instance.IsInSandboxbooleanIndicates whether the instance is inside a sandboxed container.
Instance.NamestringA non-unique identifier of the Instance.
Instance.ParentInstanceDetermines the hierarchical parent of the Instance.
Instance.PredictionModePredictionModeReflects the client-side prediction mode applied to the instance under server-authoritative physics.
Instance.RobloxLockedbooleanA deprecated property that used to protect CoreGui objects.
Instance.SandboxedbooleanWhen enabled, the instance can only access abilities in its Capabilities list.
Instance.UniqueIdUniqueIdA unique identifier for the instance.

Inherited from Object

NameType / ReturnsDescription
Object.ClassNamestringA read-only string representing the class this Object belongs to.
Object.classNamestring

MeshPart.DoubleSided

This property determines whether to render both faces of polygons in the mesh. This is useful for meshes that are typically modeled as "cards" such as a leaf, hair, or cloth.

FieldValue
typeboolean
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryAppearance
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]

MeshPart.HasJointOffset

Deprecated. This property is deprecated and should not be used in new work.

Deprecated legacy property associated with a MeshPart's internal JointOffset. It is managed by the engine and cannot be set by scripts. Do not use it in new work.

FieldValue
typeboolean
tags["Hidden","Deprecated"]
security{"read":"None","write":"NotAccessibleSecurity"}
thread safetyReadSafe
categoryAppearance
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]

MeshPart.HasSkinnedMesh

Indicates whether the mesh currently applied to the MeshPart contains skinning (bone and joint) data, such as a mesh authored with an armature for skeletal deformation.

Defaults to false. The engine sets this automatically when a mesh is loaded (true when the mesh data includes joints), so scripts cannot set it.

FieldValue
typeboolean
tags["Hidden"]
security{"read":"None","write":"NotAccessibleSecurity"}
thread safetyReadSafe
categoryAppearance
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]

MeshPart.JointOffset

Deprecated. This property is deprecated and should not be used in new work.

Deprecated. A Vector3 offset once used to position a skinned mesh's joints. Defaults to 0, 0, 0 and is reset whenever a new mesh is applied to the part. Cannot be set by scripts; do not use it in new work.

FieldValue
typeVector3
tags["Hidden","Deprecated"]
security{"read":"None","write":"NotAccessibleSecurity"}
thread safetyReadSafe
categoryData
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]

MeshPart.MeshContent

The mesh that is displayed on the MeshPart. Supports asset URIs and EditableMesh objects.

Note that this property cannot be changed directly by scripts, as the collision geometry of the mesh cannot be recomputed in real time. See AssetService:CreateMeshPartAsync() as a method to create a new MeshPart from a given Content with a specified CollisionFidelity. MeshPart:ApplyMesh() can be used to overwrite the MeshContent, TextureContent, and collision geometry of an existing MeshPart.

FieldValue
typeContent
security{"read":"None","write":"NotAccessibleSecurity"}
thread safetyReadSafe
categoryAppearance
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]

MeshPart.MeshId

The asset URIs of the mesh that is displayed on the MeshPart. Reads and writes to MeshContent.

Note that this property cannot be changed directly by scripts, as the collision geometry of the mesh cannot be recomputed in real time. See AssetService:CreateMeshPartAsync() as a method to create a new MeshPart from a given Content with a specified CollisionFidelity. MeshPart:ApplyMesh() can be used to overwrite the MeshContent, TextureContent, and collision geometry of an existing MeshPart.

FieldValue
typeContentId
security{"read":"None","write":"NotAccessibleSecurity"}
thread safetyReadSafe
categoryAppearance
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]

MeshPart.RenderFidelity

This property determines the level of detail that the MeshPart will be shown in. It can be set to the possible values of the RenderFidelity enum.

The default value is Automatic, meaning the mesh's detail is based on its distance from the camera as outlined in the following table.

Distance From Camera Render Fidelity Example
Less than 250 studs Highest
250-500 studs Medium
500 or more studs Lowest
FieldValue
typeRenderFidelity
tags["NotReplicated"]
security{"read":"None","write":"PluginSecurity"}
thread safetyReadSafe
categoryAppearance
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]

MeshPart.TextureContent

The texture applied to the MeshPart. Supports asset URIs and EditableImage objects.

When this property is set to Content.none, no texture will be applied to the mesh.

local Workspace = game:GetService("Workspace")

local meshPart = Workspace.MeshPart
meshPart.TextureContent = Content.none  -- No texture

Note that the MeshContent property cannot be directly changed during runtime but the texture can.

Changing a Mesh Texture

Using the TextureContent property, the texture of a mesh can be changed without having to re-upload the mesh. To do this, a new image can be uploaded to Roblox with the desired texture. The original texture image file can be obtained by exporting the mesh using the Export Selection option in Studio. The image file will be saved alongside the exported .obj file.

The new texture can then be uploaded to Roblox as a decal and its asset URI can be applied to the mesh using the TextureContent or TextureID property.

TextureContent can also be set to reference an EditableImage that has not been published yet.

local AssetService = game:GetService("AssetService")
local Workspace = game:GetService("Workspace")

local meshPart = Workspace.MeshPart

local editableImage = AssetService:CreateEditableImageAsync(meshPart.TextureContent)
meshPart.TextureContent = Content.fromObject(editableImage)  -- Live updates

When TextureContent references an EditableImage, the texture will live update with any edits to the EditableImage object.

Making a Textured Mesh

A mesh can only be textured if the mesh has been UV mapped, referring to the practice of projecting a texture map onto a mesh. This cannot be done using Roblox Studio and must be done using an external 3D modeling application such as Blender.

FieldValue
typeContent
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryAppearance
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]

MeshPart.TextureID

The texture applied to the MeshPart. Reads and writes to TextureContent.

When this property is set to an empty string, no texture will be applied to the mesh.

local Workspace = game:GetService("Workspace")

local meshPart = Workspace.MeshPart
meshPart.TextureID = ""  -- No texture

Note that the MeshPart.MeshId property cannot be changed during runtime but the texture can. See TextureContent for details.

FieldValue
typeContentId
security{"read":"None","write":"None"}
thread safetyReadSafe
categoryAppearance
serialization{"can_load":true,"can_save":true}
capabilities["Basic"]

Methods

NameType / ReturnsDescription
MeshPart:ApplyMesh()Overwrites the MeshContent, TextureContent, and collision geometry properties of this MeshPart from the given source meshPart.

Inherited from BasePart

NameType / ReturnsDescription
BasePart:AngularAccelerationToTorqueVector3Returns the torque needed to achieve a given angular acceleration on this part's assembly, optionally accounting for gyroscopic effects.
BasePart:ApplyAngularImpulse()Apply an angular impulse to the assembly.
BasePart:ApplyImpulse()Apply an impulse to the assembly at the assembly's center of mass.
BasePart:ApplyImpulseAtPosition()Apply an impulse to the assembly at specified position.
BasePart:BreakJoints()Breaks any surface connection with any adjacent part, including Weld and other JointInstance.
BasePart:breakJoints()
BasePart:CanCollideWithbooleanReturns whether the parts can collide with each other.
BasePart:CanSetNetworkOwnershipTupleChecks whether you can set a part's network ownership.
BasePart:GetClosestPointOnSurfaceVector3Returns the closest point on the part's surface to the given point.
BasePart:GetConnectedPartsListReturns a table of parts connected to the object by any kind of rigid joint.
BasePart:GetJointsInstancesReturn all Joints or Constraints that is connected to this Part.
BasePart:GetMassfloatReturns the value of the Mass property.
BasePart:getMassfloat
BasePart:GetNetworkOwnerInstanceReturns the current player who is the network owner of this part, or nil in case of the server.
BasePart:GetNetworkOwnershipAutobooleanReturns true if the game engine automatically decides the network owner for this part.
BasePart:GetNoCollisionConstraintsInstancesReturns the enabled NoCollisionConstraint objects currently registered for this part in its physics world.
BasePart:GetRenderCFrameCFrameOBSOLETE. Returns a CFrame describing where the part is being rendered at.
BasePart:GetRootPartInstanceReturns the base part of an assembly of parts.
BasePart:GetTouchingPartsInstancesReturns a table of all BasePart.CanCollide true parts that intersect with this part.
BasePart:GetVelocityAtPositionVector3Returns the linear velocity of the part's assembly at the given position relative to this part.
BasePart:IntersectAsyncInstanceCreates a new IntersectOperation from the overlapping geometry of the part and the other parts in the given array.
BasePart:IsGroundedbooleanReturns true if the object is connected to a part that will hold it in place (eg an Anchored part), otherwise returns false.
BasePart:MakeJoints()Creates a joint on any side of the object that has a surface ID that can make a joint.
BasePart:makeJoints()
BasePart:ResizebooleanChanges the size of an object just like using the Studio resize tool.
BasePart:resizeboolean
BasePart:SetNetworkOwner()Sets the given player as network owner for this and all connected parts.
BasePart:SetNetworkOwnershipAuto()Lets the game engine dynamically decide who will handle the part's physics (one of the clients or the server).
BasePart:SubtractAsyncInstanceCreates a new UnionOperation from the part, minus the geometry occupied by the parts in the given array.
BasePart:TorqueToAngularAccelerationVector3Returns the angular acceleration that would result from applying a given torque to this part's assembly, optionally accounting for gyroscopic effects.
BasePart:UnionAsyncInstanceCreates a new UnionOperation from the part, plus the geometry occupied by the parts in the given array.

Inherited from PVInstance

NameType / ReturnsDescription
PVInstance:GetPivotCFrameGets the pivot of a PVInstance.
PVInstance:PivotTo()Transforms the PVInstance along with all of its descendant PVInstances such that the pivot is now located at the specified CFrame.

Inherited from Instance

NameType / ReturnsDescription
Instance:AddTag()Applies a tag to the instance.
Instance:childrenInstancesReturns an array of the object's children.
Instance:ClearAllChildren()This method destroys all of an instance's children.
Instance:CloneInstanceCreate a copy of an instance and all its descendants, ignoring instances that are not Archivable.
Instance:cloneInstance
Instance:Destroy()Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy() on all children.
Instance:destroy()
Instance:FindFirstAncestorInstance?Returns the first ancestor of the Instance whose Instance.Name is equal to the given name.
Instance:FindFirstAncestorOfClassInstance?Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className.
Instance:FindFirstAncestorWhichIsAInstance?Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstChildInstance?Returns the first child of the Instance found with the given name.
Instance:findFirstChildInstance
Instance:FindFirstChildOfClassInstance?Returns the first child of the Instance whose ClassName is equal to the given class name.
Instance:FindFirstChildWhichIsAInstance?Returns the first child of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstDescendantInstance?Returns the first descendant found with the given Instance.Name.
Instance:GetActorActor?Returns the Actor associated with the Instance, if any.
Instance:GetAttributeVariantReturns the value which has been assigned to the given attribute name.
Instance:GetAttributeChangedSignalRBXScriptSignalReturns an event that fires when the given attribute changes.
Instance:GetAttributesDictionaryReturns a dictionary of the instance's attributes.
Instance:GetChildrenInstancesReturns an array containing all of the instance's children.
Instance:getChildrenInstances
Instance:GetDebugIdstringReturns a coded string of the debug ID used internally by Roblox.
Instance:GetDescendantsInstancesReturns an array containing all of the descendants of the instance.
Instance:GetFullNamestringReturns a string describing the instance's ancestry.
Instance:GetStyledVariantReturns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified.
Instance:GetStyledPropertyChangedSignalRBXScriptSignalReturns an event that fires when the given style property changes on the instance.
Instance:GetTagsArrayGets an array of all tags applied to the instance.
Instance:HasTagbooleanCheck whether the instance has a given tag.
Instance:IsAncestorOfbooleanReturns true if an Instance is an ancestor of the given descendant.
Instance:IsDescendantOfbooleanReturns true if an Instance is a descendant of the given ancestor.
Instance:isDescendantOfboolean
Instance:IsPropertyModifiedbooleanReturns true if the value stored in the specified property is not equal to the code-instantiated default.
Instance:QueryDescendantsInstancesReturns an array containing all descendants of the instance that match the selector string.
Instance:Remove()Sets the object's Parent to nil, and does the same for all its descendants.
Instance:remove()
Instance:RemoveTag()Removes a tag from the instance.
Instance:ResetPropertyToDefault()Resets a property to its default value.
Instance:SetAttribute()Sets the attribute with the given name to the given value.
Instance:WaitForChildInstanceReturns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does.

Inherited from Object

NameType / ReturnsDescription
Object:GetPropertyChangedSignalRBXScriptSignalGet an event that fires when a given property of the object changes.
Object:IsAbooleanReturns true if an object's class matches or inherits from a given class.
Object:isAboolean

MeshPart:ApplyMesh

Overwrites the MeshContent, TextureContent, and collision geometry properties of this MeshPart from the given source meshPart.

Most of these properties are read-only and cannot be changed during runtime on their own directly. To keep MeshContent and physics data in sync, they must be updated together.

Copies the following properties:

Parameters

NameTypeDefaultDescription
meshPartInstanceThe source MeshPart whose MeshContent, TextureContent, and collision geometry (along with RenderFidelity, CollisionFidelity, FluidFidelity, and MeshSize) are copied onto this part. The object must be a MeshPart, otherwise the call throws an error.

Returns

TypeDescription
()
FieldValue
securityNone
thread safetyUnsafe
capabilities["Basic"]

Events

Inherited from BasePart

NameType / ReturnsDescription
BasePart.LocalSimulationTouchedFires on the local client when another part comes in contact with this part.
BasePart.OutfitChangedFires when the part's appearance changes due to a Shirt.
BasePart.StoppedTouchingFires on the local client when a part stops touching another part.
BasePart.TouchedFires when a part touches another part as a result of physical movement.
BasePart.TouchEndedFires when a part stops touching another part as a result of physical movement.

Inherited from Instance

NameType / ReturnsDescription
Instance.AncestryChangedFires when the Instance.Parent property of this object or one of its ancestors is changed.
Instance.AttributeChangedFires whenever an attribute is changed on the Instance.
Instance.ChildAddedFires after an object is parented to this Instance.
Instance.childAdded
Instance.ChildRemovedFires after a child is removed from this Instance.
Instance.DescendantAddedFires after a descendant is added to the Instance.
Instance.DescendantRemovingFires immediately before a descendant of the Instance is removed.
Instance.DestroyingFires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy().
Instance.StyledPropertiesChangedFires whenever any style property is changed on the instance, including when a property is set to nil.

Inherited from Object

NameType / ReturnsDescription
Object.ChangedFires immediately after a property of the object changes, with some limitations.