Learn
Engine Class
EditableMesh
Not Creatable

Summary
Properties
Methods
AddBone(boneProperties: Dictionary):number
AddColor(color: Color3,alpha: number):number
AddTriangle(vertexId0: number,vertexId1: number,vertexId2: number):number
Destroy():()
GetVertexFaceUV(vertexId: number,faceId: number):number
MergeVertices(mergeTolerance: number):Map
RaycastLocal(origin: Vector3,direction: Vector3):Tuple
RemoveBone(boneId: number):()
RemoveFace(faceId: number):()
ResetNormal(normalId: number):()
SetBoneCFrame(boneId: number,cframe: CFrame):()
SetBoneIsVirtual(boneId: number,virtual: boolean):()
SetBoneName(boneId: number,name: string):()
SetBoneParent(boneId: number,parentBoneId: number):()
SetColor(colorId: number,color: Color3):()
SetColorAlpha(colorId: number,alpha: number):()
SetFaceColors(faceId: number,ids: {any}):()
SetFaceNormals(faceId: number,ids: {any}):()
SetFaceUVs(faceId: number,ids: {any}):()
SetFaceVertices(faceId: number,ids: {any}):()
SetFacsBonePose(action: Enum.FacsActionUnit,boneId: number,cframe: CFrame):()
SetFacsCorrectivePose(actions: {any},boneIds: {any},cframes: {any}):()
SetFacsPose(action: Enum.FacsActionUnit,boneIds: {any},cframes: {any}):()
SetNormal(normalId: number,normal: Vector3):()
SetPosition(vertexId: number,p: Vector3):()
SetUV(uvId: number,uv: Vector2):()
SetVertexBones(vertexId: number,boneIDs: {any}):()
SetVertexBoneWeights(vertexId: number,boneWeights: {any}):()
SetVertexFaceColor(vertexId: number,faceId: number,colorId: number):()
SetVertexFaceNormal(vertexId: number,faceId: number,normalId: number):()
SetVertexFaceUV(vertexId: number,faceId: number,uvId: number):()
Inherited Members

API Reference
Properties
FixedSize
Read Only
Not Replicated
Roblox Security
Read Parallel
Capabilities: DynamicGeneration
EditableMesh.FixedSize:boolean

Methods
AddBone
Capabilities: DynamicGeneration
EditableMesh:AddBone(boneProperties:Dictionary):number
Parameters
boneProperties:Dictionary
Returns

AddColor
Capabilities: DynamicGeneration
EditableMesh:AddColor(
color:Color3, alpha:number
Parameters
color:Color3
alpha:number
Returns

AddNormal
Capabilities: DynamicGeneration
EditableMesh:AddNormal(normal:Vector3?):number
Parameters
normal:Vector3?
Returns

AddTriangle
Capabilities: DynamicGeneration
EditableMesh:AddTriangle(
vertexId0:number, vertexId1:number, vertexId2:number
Parameters
vertexId0:number
vertexId1:number
vertexId2:number
Returns

AddUV
Capabilities: DynamicGeneration
EditableMesh:AddUV(uv:Vector2):number
Parameters
Returns

AddVertex
Capabilities: DynamicGeneration
EditableMesh:AddVertex(p:Vector3):number
Parameters
Returns

Destroy
Capabilities: DynamicGeneration
EditableMesh:Destroy():()
Returns
()

FindClosestPointOnSurface
Capabilities: DynamicGeneration
EditableMesh:FindClosestPointOnSurface(point:Vector3):Tuple
Parameters
point:Vector3
Returns

FindClosestVertex
Capabilities: DynamicGeneration
EditableMesh:FindClosestVertex(toThisPoint:Vector3):number
Parameters
toThisPoint:Vector3
Returns

FindVerticesWithinSphere
Capabilities: DynamicGeneration
EditableMesh:FindVerticesWithinSphere(
center:Vector3, radius:number
Parameters
center:Vector3
radius:number
Returns

GetAdjacentFaces
Capabilities: DynamicGeneration
EditableMesh:GetAdjacentFaces(faceId:number):{any}
Parameters
faceId:number
Returns

GetAdjacentVertices
Capabilities: DynamicGeneration
EditableMesh:GetAdjacentVertices(vertexId:number):{any}
Parameters
vertexId:number
Returns

GetBoneByName
Capabilities: DynamicGeneration
EditableMesh:GetBoneByName(boneName:string):number
Parameters
boneName:string
Returns

GetBoneCFrame
Capabilities: DynamicGeneration
EditableMesh:GetBoneCFrame(boneId:number):CFrame
Parameters
boneId:number
Returns

GetBoneIsVirtual
Capabilities: DynamicGeneration
EditableMesh:GetBoneIsVirtual(boneId:number):boolean
Parameters
boneId:number
Returns

GetBoneName
Capabilities: DynamicGeneration
EditableMesh:GetBoneName(boneId:number):string
Parameters
boneId:number
Returns

GetBoneParent
Capabilities: DynamicGeneration
EditableMesh:GetBoneParent(boneId:number):number
Parameters
boneId:number
Returns

GetBones
Capabilities: DynamicGeneration
EditableMesh:GetBones():{any}
Returns

GetCenter
Capabilities: DynamicGeneration
EditableMesh:GetCenter():Vector3
Returns

GetColor
Capabilities: DynamicGeneration
EditableMesh:GetColor(colorId:number):Color3?
Parameters
colorId:number
Returns

GetColorAlpha
Capabilities: DynamicGeneration
EditableMesh:GetColorAlpha(colorId:number):number?
Parameters
colorId:number
Returns

GetColors
Capabilities: DynamicGeneration
EditableMesh:GetColors():{any}
Returns

GetFaceColors
Capabilities: DynamicGeneration
EditableMesh:GetFaceColors(faceId:number):{any}
Parameters
faceId:number
Returns

GetFaceNormals
Capabilities: DynamicGeneration
EditableMesh:GetFaceNormals(faceId:number):{any}
Parameters
faceId:number
Returns

GetFaces
Capabilities: DynamicGeneration
EditableMesh:GetFaces():{any}
Returns

GetFacesWithAttribute
Deprecated

GetFacesWithColor
Capabilities: DynamicGeneration
EditableMesh:GetFacesWithColor(colorId:number):{any}
Parameters
colorId:number
Returns

GetFacesWithNormal
Capabilities: DynamicGeneration
EditableMesh:GetFacesWithNormal(normalId:number):{any}
Parameters
normalId:number
Returns

GetFacesWithUV
Capabilities: DynamicGeneration
EditableMesh:GetFacesWithUV(uvId:number):{any}
Parameters
uvId:number
Returns

GetFaceUVs
Capabilities: DynamicGeneration
EditableMesh:GetFaceUVs(faceId:number):{any}
Parameters
faceId:number
Returns

GetFaceVertices
Capabilities: DynamicGeneration
EditableMesh:GetFaceVertices(faceId:number):{any}
Parameters
faceId:number
Returns

GetFacsCorrectivePose
Capabilities: DynamicGeneration
EditableMesh:GetFacsCorrectivePose(actions:{any}):Tuple
Parameters
actions:{any}
Returns

GetFacsCorrectivePoses
Capabilities: DynamicGeneration
EditableMesh:GetFacsCorrectivePoses():{any}
Returns

GetFacsPose
Capabilities: DynamicGeneration
EditableMesh:GetFacsPose(action:Enum.FacsActionUnit):Tuple
Parameters
Returns

GetFacsPoses
Capabilities: DynamicGeneration
EditableMesh:GetFacsPoses():{any}
Returns

GetNormal
Capabilities: DynamicGeneration
EditableMesh:GetNormal(normalId:number):Vector3?
Parameters
normalId:number
Returns

GetNormals
Capabilities: DynamicGeneration
EditableMesh:GetNormals():{any}
Returns

GetPosition
Capabilities: DynamicGeneration
EditableMesh:GetPosition(vertexId:number):Vector3
Parameters
vertexId:number
Returns

GetSize
Capabilities: DynamicGeneration
EditableMesh:GetSize():Vector3
Returns

GetUV
Capabilities: DynamicGeneration
EditableMesh:GetUV(uvId:number):Vector2?
Parameters
uvId:number
Returns

GetUVs
Capabilities: DynamicGeneration
EditableMesh:GetUVs():{any}
Returns

GetVertexBones
Capabilities: DynamicGeneration
EditableMesh:GetVertexBones(vertexId:number):{any}
Parameters
vertexId:number
Returns

GetVertexBoneWeights
Capabilities: DynamicGeneration
EditableMesh:GetVertexBoneWeights(vertexId:number):{any}
Parameters
vertexId:number
Returns

GetVertexColors
Capabilities: DynamicGeneration
EditableMesh:GetVertexColors(vertexId:number):{any}
Parameters
vertexId:number
Returns

GetVertexFaceColor
Capabilities: DynamicGeneration
EditableMesh:GetVertexFaceColor(
vertexId:number, faceId:number
Parameters
vertexId:number
faceId:number
Returns

GetVertexFaceNormal
Capabilities: DynamicGeneration
EditableMesh:GetVertexFaceNormal(
vertexId:number, faceId:number
Parameters
vertexId:number
faceId:number
Returns

GetVertexFaces
Capabilities: DynamicGeneration
EditableMesh:GetVertexFaces(vertexId:number):{any}
Parameters
vertexId:number
Returns

GetVertexFaceUV
Capabilities: DynamicGeneration
EditableMesh:GetVertexFaceUV(
vertexId:number, faceId:number
Parameters
vertexId:number
faceId:number
Returns

GetVertexNormals
Capabilities: DynamicGeneration
EditableMesh:GetVertexNormals(vertexId:number):{any}
Parameters
vertexId:number
Returns

GetVertexUVs
Capabilities: DynamicGeneration
EditableMesh:GetVertexUVs(vertexId:number):{any}
Parameters
vertexId:number
Returns

GetVertices
Capabilities: DynamicGeneration
EditableMesh:GetVertices():{any}
Returns

GetVerticesWithAttribute
Deprecated

GetVerticesWithColor
Capabilities: DynamicGeneration
EditableMesh:GetVerticesWithColor(colorId:number):{any}
Parameters
colorId:number
Returns

GetVerticesWithNormal
Capabilities: DynamicGeneration
EditableMesh:GetVerticesWithNormal(normalId:number):{any}
Parameters
normalId:number
Returns

GetVerticesWithUV
Capabilities: DynamicGeneration
EditableMesh:GetVerticesWithUV(uvId:number):{any}
Parameters
uvId:number
Returns

IdDebugString
Capabilities: DynamicGeneration
EditableMesh:IdDebugString(id:number):string
Parameters
Returns

MergeVertices
Capabilities: DynamicGeneration
EditableMesh:MergeVertices(mergeTolerance:number):Map
Parameters
mergeTolerance:number
Returns
Map

RaycastLocal
Capabilities: DynamicGeneration
EditableMesh:RaycastLocal(
origin:Vector3, direction:Vector3
Parameters
origin:Vector3
direction:Vector3
Returns
Code Samples
EditableMesh:RaycastLocal()
local AssetService = game:GetService("AssetService")
local Workspace = game:GetService("Workspace")
-- Initialize EditableMesh in space
local editableMesh = nil
local success, errorMsg = pcall(function()
editableMesh = AssetService:CreateEditableMeshAsync(Content.fromUri("rbxassetid://ASSET_ID"))
end)
local meshPart = nil
if success and editableMesh then
meshPart = AssetService:CreateMeshPartAsync(
Content.fromObject(editableMesh),
{ CollisionFidelity = Enum.CollisionFidelity.Hull }
)
meshPart.Parent = Workspace
else
warn(errorMsg)
end
-- Function that will cast a ray from the given point, returning the world point of the hit and the UV coordinate
local function castRayFromCamera(meshPart: MeshPart, editableMesh: EditableMesh, viewportPoint: Vector3)
if not meshPart then
return
end
-- Calculate how much the object is being scaled in each dimension
local renderScale = meshPart.Size / meshPart.MeshSize
-- Create ray from camera along the direction of a clicked point
local ray = Workspace.CurrentCamera:ViewportPointToRay(viewportPoint.X, viewportPoint.Y)
-- Convert to object space to use with RaycastLocal()
local relativeOrigin = meshPart.CFrame:PointToObjectSpace(ray.Origin) / renderScale
local relativeTarget = meshPart.CFrame:PointToObjectSpace(ray.Origin + ray.Direction * 100) / renderScale
local relativeDirection = relativeTarget - relativeOrigin
local faceId, point, barycentricCoordinate, vertId1, vertId2, vertId3 =
editableMesh:RaycastLocal(relativeOrigin, relativeDirection)
if not faceId then
-- Didn't hit any faces
return
end
-- Compute the hit point in world space
local worldHitPoint = meshPart.CFrame:PointToWorldSpace(point * renderScale)
-- Get the UVs on the face
local uvId1 = editableMesh:GetVertexFaceUV(vertId1, faceId)
local uvId2 = editableMesh:GetVertexFaceUV(vertId2, faceId)
local uvId3 = editableMesh:GetVertexFaceUV(vertId3, faceId)
local uv1 = editableMesh:GetUV(uvId1)
local uv2 = editableMesh:GetUV(uvId2)
local uv3 = editableMesh:GetUV(uvId3)
-- Interpolate UVs within the face based on the barycentric coordinate
local u = (barycentricCoordinate.x * uv1.x) + (barycentricCoordinate.y * uv2.x) + (barycentricCoordinate.z * uv3.x)
local v = (barycentricCoordinate.x * uv1.y) + (barycentricCoordinate.y * uv2.y) + (barycentricCoordinate.z * uv3.y)
return worldHitPoint, Vector2.new(u, v)
end

RemoveBone
Capabilities: DynamicGeneration
EditableMesh:RemoveBone(boneId:number):()
Parameters
boneId:number
Returns
()

RemoveFace
Capabilities: DynamicGeneration
EditableMesh:RemoveFace(faceId:number):()
Parameters
faceId:number
Returns
()

RemoveUnused
Capabilities: DynamicGeneration
EditableMesh:RemoveUnused():{any}
Returns

ResetNormal
Capabilities: DynamicGeneration
EditableMesh:ResetNormal(normalId:number):()
Parameters
normalId:number
Returns
()

SetBoneCFrame
Capabilities: DynamicGeneration
EditableMesh:SetBoneCFrame(
boneId:number, cframe:CFrame
):()
Parameters
boneId:number
cframe:CFrame
Returns
()

SetBoneIsVirtual
Capabilities: DynamicGeneration
EditableMesh:SetBoneIsVirtual(
boneId:number, virtual:boolean
):()
Parameters
boneId:number
virtual:boolean
Returns
()

SetBoneName
Capabilities: DynamicGeneration
EditableMesh:SetBoneName(
boneId:number, name:string
):()
Parameters
boneId:number
name:string
Returns
()

SetBoneParent
Capabilities: DynamicGeneration
EditableMesh:SetBoneParent(
boneId:number, parentBoneId:number
):()
Parameters
boneId:number
parentBoneId:number
Returns
()

SetColor
Capabilities: DynamicGeneration
EditableMesh:SetColor(
colorId:number, color:Color3
):()
Parameters
colorId:number
color:Color3
Returns
()

SetColorAlpha
Capabilities: DynamicGeneration
EditableMesh:SetColorAlpha(
colorId:number, alpha:number
):()
Parameters
colorId:number
alpha:number
Returns
()

SetFaceColors
Capabilities: DynamicGeneration
EditableMesh:SetFaceColors(
faceId:number, ids:{any}
):()
Parameters
faceId:number
ids:{any}
Returns
()

SetFaceNormals
Capabilities: DynamicGeneration
EditableMesh:SetFaceNormals(
faceId:number, ids:{any}
):()
Parameters
faceId:number
ids:{any}
Returns
()

SetFaceUVs
Capabilities: DynamicGeneration
EditableMesh:SetFaceUVs(
faceId:number, ids:{any}
):()
Parameters
faceId:number
ids:{any}
Returns
()

SetFaceVertices
Capabilities: DynamicGeneration
EditableMesh:SetFaceVertices(
faceId:number, ids:{any}
):()
Parameters
faceId:number
ids:{any}
Returns
()

SetFacsBonePose
Capabilities: DynamicGeneration
EditableMesh:SetFacsBonePose(
action:Enum.FacsActionUnit, boneId:number, cframe:CFrame
):()
Parameters
boneId:number
cframe:CFrame
Returns
()

SetFacsCorrectivePose
Capabilities: DynamicGeneration
EditableMesh:SetFacsCorrectivePose(
actions:{any}, boneIds:{any}, cframes:{any}
):()
Parameters
actions:{any}
boneIds:{any}
cframes:{any}
Returns
()

SetFacsPose
Capabilities: DynamicGeneration
EditableMesh:SetFacsPose(
action:Enum.FacsActionUnit, boneIds:{any}, cframes:{any}
):()
Parameters
boneIds:{any}
cframes:{any}
Returns
()

SetNormal
Capabilities: DynamicGeneration
EditableMesh:SetNormal(
normalId:number, normal:Vector3
):()
Parameters
normalId:number
normal:Vector3
Returns
()

SetPosition
Capabilities: DynamicGeneration
EditableMesh:SetPosition(
vertexId:number, p:Vector3
):()
Parameters
vertexId:number
Returns
()

SetUV
Capabilities: DynamicGeneration
EditableMesh:SetUV(
uvId:number, uv:Vector2
):()
Parameters
uvId:number
Returns
()

SetVertexBones
Capabilities: DynamicGeneration
EditableMesh:SetVertexBones(
vertexId:number, boneIDs:{any}
):()
Parameters
vertexId:number
boneIDs:{any}
Returns
()

SetVertexBoneWeights
Capabilities: DynamicGeneration
EditableMesh:SetVertexBoneWeights(
vertexId:number, boneWeights:{any}
):()
Parameters
vertexId:number
boneWeights:{any}
Returns
()

SetVertexFaceColor
Capabilities: DynamicGeneration
EditableMesh:SetVertexFaceColor(
vertexId:number, faceId:number, colorId:number
):()
Parameters
vertexId:number
faceId:number
colorId:number
Returns
()

SetVertexFaceNormal
Capabilities: DynamicGeneration
EditableMesh:SetVertexFaceNormal(
vertexId:number, faceId:number, normalId:number
):()
Parameters
vertexId:number
faceId:number
normalId:number
Returns
()

SetVertexFaceUV
Capabilities: DynamicGeneration
EditableMesh:SetVertexFaceUV(
vertexId:number, faceId:number, uvId:number
):()
Parameters
vertexId:number
faceId:number
uvId:number
Returns
()

Triangulate
Capabilities: DynamicGeneration
EditableMesh:Triangulate():()
Returns
()

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.