# Point clouds

Front readme image Front readme image

In this example we demonstrate how to compute a depth map with raytracing and how to unproject it into a point cloud. The point cloud is computed from the view of the second camera pose (right image) and is visualized using red dots. ## Usage Execute in the Blender-Pipeline main directory: ``` blenderproc run examples/advanced/point_clouds/main.py examples/resources/camera_positions examples/resources/scene.obj examples/basics/basic/output ``` * `examples/resources/camera_positions`: text file with parameters of camera positions. * `examples/resources/scene.obj`: path to the object file with the basic scene. * `examples/basics/basic/output`: path to the output directory. ## Visualization Visualize the generated data: ``` blenderproc vis hdf5 examples/advanced/point_clouds/output/0.hdf5 ``` ## Implementation First we are computing a depth image via raytracing using the camera pose set to keyframe #1. ``` depth = bproc.camera.depth_via_raytracing(bvh_tree, 1) ``` Alternatively, one could also use the renderer to render a depth image: ``` data = bproc.renderer.render() depth = data["depth"][1] ``` We now unproject the depth image again, resulting in a point cloud. The point cloud contains one point per pixel. ``` points = bproc.camera.pointcloud_from_depth(depth, 1) points = points.reshape(-1, 3) ``` To visualize the point cloud, we create a mesh with vertices set from the point cloud. To be able to see the points in the final rendering, we add geometry nodes which add a sphere mesh to each point. ``` point_cloud = bproc.object.create_from_point_cloud(points, "point_cloud", add_geometry_nodes_visualization=True) ```