Skip to content

Convert Mesh to Point Cloud

SUMMARY

Convert Mesh to Point Cloud generates a point cloud representation from a triangle mesh by sampling points on the mesh surface.

This Skill is primarily used for 6D pose estimation and registration, converting CAD or mesh models into point clouds so they can be aligned with real-world sensor data. By creating a point cloud with controlled density, it enables accurate correspondence-based registration and pose estimation pipelines.

Use this Skill when you want to prepare mesh models for 3D registration or 6D pose estimation in perception workflows.

The Skill

python
from telekinesis import vitreous

output_point_cloud = vitreous.filter_point_cloud_using_voxel_downsampling(
    point_cloud=input_point_cloud,
    voxel_size=0.01,
)

API Reference

Performance Note

Current Data Limits: The system currently supports up to 1 million points per request (approximately 16MB of data). We're actively optimizing data transfer performance as part of our beta program, with improvements rolling out regularly to enhance processing speed.

Example

Input Mesh

Output Point Cloud

Parameters: num_points=10000, sampling_method="poisson_disk", initial_sampling_factor=5, initial_point_cloud=None, use_triangle_normal=False.

The Code

python
from telekinesis import vitreous
from datatypes import datatypes, io
import pathlib

# Optional for logging
from loguru import logger

DATA_DIR = pathlib.Path("path/to/telekinesis-data")

# Load mesh
filepath = str(DATA_DIR / "meshes" / "gear_box.glb")
mesh = io.load_mesh(filepath=filepath)
logger.success(f"Loaded mesh with {len(mesh.vertex_positions)} vertices")

# Execute operation
point_cloud = vitreous.convert_mesh_to_point_cloud(
  mesh=mesh,
  num_points=10000,
  sampling_method="poisson_disk",
  initial_sampling_factor=5,
  initial_point_cloud=None,
  use_triangle_normal=False,
)
logger.success(
  f"Converted mesh with {len(mesh.vertex_positions)} vertices to point cloud"
)

Running the Example

Runnable examples are available in the Telekinesis examples repository. Follow the README in that repository to set up the environment. Once set up, you can run this specific example with:

bash
cd telekinesis-examples
python examples/vitreous_examples.py --example convert_mesh_to_point_cloud

The Explanation of the Code

First, we import the necessary modules from the Telekinesis SDK, including vitreous for 3D operations and io for data loading. Logging with loguru is optional but helps track workflow progress.

python
from telekinesis import vitreous
from datatypes import datatypes, io
import pathlib

# Optional for logging
from loguru import logger

Next, we load a 3D mesh from a .glb file using io.load_mesh. Logging the number of vertices provides a sanity check on the mesh data and ensures it’s ready for conversion.

python


DATA_DIR = pathlib.Path("path/to/telekinesis-data")

# Load mesh
filepath = str(DATA_DIR / "meshes" / "gear_box.glb")
mesh = io.load_mesh(filepath=filepath)
logger.success(f"Loaded mesh with {len(mesh.vertex_positions)} vertices")

Finally, we run the convert_mesh_to_point_cloud Skill. This samples points from the mesh surface to generate a point cloud representation. The poisson_disk sampling method ensures a more uniform point distribution, which is especially useful in 6D pose estimation and registration pipelines. The resulting point cloud can then be used for downstream tasks like alignment, detection, or collision checking in industrial robotics workflows.

python
# Execute operation
point_cloud = vitreous.convert_mesh_to_point_cloud(
  mesh=mesh,
  num_points=10000,
  sampling_method="poisson_disk",
  initial_sampling_factor=5,
  initial_point_cloud=None,
  use_triangle_normal=False,
)
logger.success(
  f"Converted mesh with {len(mesh.vertex_positions)} vertices to point cloud"
)

How to Tune the Parameters

Where to Use the Skill in a Pipeline

Alternative Skills

When Not to Use the Skill