Open3D 0.17 is out!

Open3D 0.17 Release Notes

We are happy to bring you the best Open3D yet! This is a "tick" release focused on resolving existing issues and eliminating bugs. We resolved over 150 issues for Open3D and Open3D-ML since the last release.

Here are the main highlights of this release:

  • Open3D now has support for differentiable rendering with Mitsuba.

Here we use Mitsuba to recover the albedo map from an input image for an object in Open3D. Example.

  • New lighter wheel (~105MB) for x86_64 Linux, which is suitable for systems without CUDA. Try it out with:
    pip install open3d-cpu.
  • The Open3D viewer app is now available for Windows. This version is unsigned, so expect Windows warnings.
  • Apple Silicon wheels now come with 3DML support.
  • Preview of distributed training with PyTorch for PointPillars on the Waymo dataset.
  • PointCloud partitioning with PCA.

Visualization and GUI

[New] Integration with Mitsuba.

  • Open3D geometries and materials seamlessly convert to Mitsuba's Principled BSDF:
    dataset =
    mesh =
    mesh_center = mesh.get_axis_aligned_bounding_box().get_center()
    mesh.material.material_name = 'defaultLit'
    mesh.material.scalar_properties['metallic'] = 1.0
    mesh.material.texture_maps['albedo'] =['albedo'])
    mesh.material.texture_maps['roughness'] =['roughness'])
    mesh.material.texture_maps['metallic'] =['metallic'])

mi_mesh = mesh.to_mitsuba('monkey')
img = render_mesh(mi_mesh, mesh_center.numpy())


* Also supports applying other Mitsuba BSDFs to Open3D geometries:
bsdf_rough_plastic = mi.load_dict({
    'type': 'roughplastic',
    'diffuse_reflectance': {
        'type': 'rgb',
        'value': [0.1, 0.1, 0.1]
    'alpha': 0.1,
    'int_ior': 'bk7',
    'ext_ior': 'air',
mi_mesh = mesh.to_mitsuba('monkey', bsdf=bsdf_rough_plastic)
img = render_mesh(mi_mesh, mesh_center.numpy())

See examples/python/visualization/ for more details.

Visualization and GUI (other updates)

  • [New] The Open3D viewer app is now available for Windows. This version is unsigned, so expect Windows warnings.

Screenshot 2023-03-10 151920

  • [New] Add draw_web CLI for remote visualization. Try it out with
    (remotehost) $ open3d draw_web --bind_all /path/to/3D/file and then open the browser to http://remotehost:8888
  • [New] Unprojection function in the ViewControl (contributed by @PieroV).
  • [New] Added interaction methods for Python ImageWidget (contributed by @MartinEekGerhardsen).
  • [Update] Updated customized_visualization tutorial (contributed by @ClarytyLLC).
  • [Update] Convert material properties when converting from legacy to tensor TriangleMesh.
  • [Fix] O3DVisualizer::RemoveGeometry() function vector subscript out of range (contributed by @UnadXiao).
  • [Fix] Fast check for 3D tensorboard data. Open3D does not delay Tensorboard startup for large run folders now.
  • [Fix] Fix scrolling direction bug for TextEdit (contributed by @cansik).
  • [Fix] VisualizerWithVertexSelection: Call selection_changed callback, when deselecting all points (Ctrl + R) (contributed by @micsc12).


  • [New] robust plane detection (contributed by @plusk01).
  • [New] Minimal bounding box computation for point clouds (contributed by @ligerlac).
  • [New] Added RemoveStatisticalOutliers to tensor PointCloud. (contributed by @yuecideng).
  • [New] Added ComputeTriangleNormals ComputeVertexNormals NormalizeNormals to tensor Trianglemesh. (contributed by @yuecideng).
  • [New] Added normals oriented functions to tensor PointCloud. (contributed by @yuecideng).
  • [New] Added tensor based OrientedboundingBox. (contributed by @yuecideng).
  • [New] Added tutorial for tensor based PointCloud.
  • [New] Enable python copy & deepcopy for tensor geometry. (contributed by @yuecideng).
  • [New] Added partitioning of point clouds and triangle meshes using PCA.

  • [New] Added a function to extract faces in a triangle mesh with a binary mask.


  • [New] UV MAPS Tutorial (contributed by @samliozge).

  • [Update] Added voting and ray jitter to RaycastingScene to improve robustness of signed distance queries.

  • [Update] Improved speed of CreateFromTriangleMeshWithinBounds() by > 100x (contributed by @Hodong-Hwang).

  • [Update] Added parallelization to UV atlas computation by partitioning the mesh.

  • [Update] Function CreateFromVoxelGrid is made static (contributed by @mjaein).

  • [Fix] Fixed wrong voxel center calculation in CreateFromTriangleMeshWithinBounds() (contributed by @plusk01).

  • [Fix] Replace Vectors from internal embree headers with Eigen.

  • [Fix] Use same beta value in SamplePointsPoissonDisk() as in the paper.

  • [Fix] Fix Python Image calculations (pybind Image::To argument order).

  • [Fix] Consistent face orientation for generated alpha shape.


  • [New] Tensor reconstruction system upgrade: make fragments (contributed by @theNded).
  • [Update] Added additional python bindings for RGBD odometry functionality (contributed by @jdavidberger).
  • [Update] release python GIL for generalized icp (contributed by @yuecideng).
  • [Fix] fix call to AdvancedMatching in FGR (contributed by @plusk01).
  • [Fix] Update ICP fitness and rmse value at the end of the loop (contributed by @bialasjaroslaw).


  • [Update] Add loading colors and uvs in tgeometry TriangleMesh IO.


  • [New] Support for arbitrary imports with Open3D submodules in Python. Now you can use any of the following and more:
    from open3d.t.geometry import TriangleMesh
    from import fixed_radius_search # pybind symbol
    from import KPFCNN             # Python code
    from open3d.visualization import gui  # pybind symbol
    from open3d.visualization import draw # Python code
    from open3d.visualization.gui import Color
    from open3d.visualization.rendering import Camera

    No need for awkward shortcuts such as:

    import open3d as o3d
    Tensor = o3d.core.Tensor
    Image = o3d.t.geometry.Image
  • [New] unary minus operator (contributed by @yxlao).
  • [Update] Replace license text with SPDX identifier.
  • [Fix] Fixed error when use CUDA_CALL without open3d namespace. (contributed by @yuecideng).
  • [Fix] Fixed multi-device CUDA switching bug. (contributed by @yxlao).
  • [Fix] MiniVec's constructor shall not call Device's constructor/destructor (contributed by @yxlao).
  • [Fix] Add neighbor search module to the documentation.

Build System

  • [New] The Open3D viewer app is now available for Windows.
  • [New] New lighter wheel (~100MB) for x86_64 Linux, which is suitable for systems without CUDA. Try it out with:
    pip install open3d-cpu.
  • [Update] Update imgui to latest version (contributed by @roehling).
  • [Update] Support CUDA 12.0 build. (contributed by @NobuoTsukamoto).
  • [Update] Add options to use system libraries for new dependencies (contributed by @roehling).
  • [Update] Hide un-needed DSO symbols in Linux and macOS.
  • [Update] Dependency upgrades for security fixes: civetweb, curl, zlib, libjpeg-turbo, wheel, setuptools, werkzeug, nbformat, ipywidgets, oathlib, certifi .
  • [Fix] Build with libomp 11.1 and package in macOS wheel for interoperability with PyTorch.
  • [Fix] Fix Mac build issue with ASSIMP.
  • [Fix] Wstringop-owerflow compilation error for GCC (contributed by @bialasjaroslaw).
  • [Fix] Support msgpack versions without cmake (contributed by @cielavenir).
  • [Fix] fix Python 3.8 cuda dll loading on Windows (contributed by @yxlao).
  • [Fix] More portable ARM system detection.
  • [Fix] Fix build compatibility with fmtlib 8 (contributed by @roehling).


  • [New] PointPillars Waymo distributed training model weights and docs.
  • [New] 3DML support with PyTorch and TensorFlow for Apple Silicon.
  • [Update] Update PyTorch to v1.13.1.
  • [Update] RandLaNet update_probs label smoothing logic (contributed by @mariusud).
  • [Fix] Update broken links (contributed by @Birkenpapier and @friendship1).

Known Issues [WIP]

  • The Python wheel may crash when run on Apple Silicon systems, especially on M2. (#5951)
  • The Windows app is unsigned, so expect warnings from the system.


We would like to thank all of our community contributors for their true labor of love for this release!

@bialasjaroslaw @Birkenpapier @cansik @cielavenir @ClarytyLLC @friendship1 @geppi @Hodong-Hwang @jdavidberger @johnthagen @ligerlac @mariusud @MartinEekGerhardsen @micsc12 @mjaein @NobuoTsukamoto @PieroV @plusk01 @roehling @samliozge @theNded @UnadXiao @yuecideng @yxlao

Also thanks to the many others who helped the Open3D community by reporting as well as resolving issues.

Open3D 0.16 is out!

Open3D 0.16 Release Notes

The fall brings a new "tock" release of Open3D, packed with new features and updates! Here are the highlights:

  • Open3D visualization now works on Google Colab, and CPU rendering is now easy to use on all Linux machines.
  • The visualizer has a new wireframe mode.
  • Many new geometry processing algorithms were added, including mesh clipping, hole filling, extrusion and generation of text meshes.
  • Added support for texture baking to create great looking 3D models.
  • The Open3D standalone viewer is now available for Apple Silicon.
  • Dependency version updates: Python 3.10, Tensorflow 2.8, PyTorch 1.12.

Google Summer of Code

Google Summer of Code 2022

Open3D had a successful Google Season of Code 2022 with many new features added, and more in the works for the next release. Here are the features that are part of this release:

Geometry processing algorithms for tensor-based geometry

[Contributed by @ZhengyuDiao]

  • [new] Geometry creation functions: create_arrow(), create_box(), create_cone(), create_coordinate_frame(), create_cylinder(), create_icosahedron(), create_mobius(), create_octahedron(), create_sphere(), create_tetrahedron(), create_torus().
  • [update] Improved support for reading / writing text format point cloud files in XYZ, XYZN, XYZI and XYZRGB formats.
  • [fix] Fix the png/jpg textures loading in glb (binary glTF) file.
  • [update] Tensor point cloud IO now uses float instead of double by default.

Open3D visualization on Google Colab

[Contributed by @FromBei-JingWithLove]

  • [new] draw_plotly method brings interactive 3D visualization for Open3D to Jupyter notebooks and cloud environments (e.g., Colab).
  • [new] Tutorial notebook demonstrating the various ways to use draw_plotly

Build System

  • [new] Open3D is now available for Python 3.10. Python 3.6 is no longer supported.
  • [new] C++ users can now link to the Open3D dynamic library through pkg-config files. There are available for Linux and macOS in the Open3D binary packages.
  • [new] Alpha support for SYCL devices (AlderLake integrated GPUs, Arc GPUs).
  • [fix] Windows and Visual Studio build fixes (contributed by @nigels-com, @jmherzog-de, @yuecideng)
  • [fix] Fixed build Error on Fedora 36 with GCC 12 (contributed by @NobuoTsukamoto)
  • [fix] Fix link error during build due to invalid LIBDIR in newer Debian systems (contributed by @bchretien)
  • [update] Improved support for building on Apple Silicon.
  • [update] Separate Python build (requirements_build.txt) and runtime (requirements.txt) dependencies. (with help from @johnthagen).
  • [update] Documentation can be built faster with the --parallel option.


  • [new] Enable pickling for tensor and tensor based geometry (contributed by @yuecideng).
  • [new] Random seed Open3D globally. Utility random number generation functions to ensure the global Open3D random seed is used.
    import open3d as o3d
    #include "open3d/utility/Random.h"
    int main() {
        using namespace open3d;
        utility::random::Seed(42);  // Globally seed.
        std::cout << utility::random::RandUint32() << std::endl;  // Simply get a random number.
        return 0;
  • [update] Faster creation of many small Tensors by using statically allocated memory for SizeVector.
  • [new] Add tensor minimum(), maximum() ops (contributed by @yuecideng).
  • [new] Add tensor Any(), All(), RemoveNonFinite()
  • [update] Support for int64 index dtype in NearestNeighborSearch (contributed bu @chrockey)
  • [update] The new datasets API is used throughout Open3D, including pipelines, examples and unit tests. New models with PBR materials (Helmet, Jesse monkey, crate and sword) are available. Add redwood indoor datasets (Augmented ICL-NUIM Dataset).
  • [update] Support RadiusSearch for EstimateNormals() for Tensor PointCloud (contributed by @yuecideng).


  • [update] Tensor geometry attributes can now be accessed by the easier dot notation, in addition to the previous dictionary notation. For example:
    pcd.point["colors"] is pcd.point.colors
    tmesh.triangle["normals"] is tmesh.triangle.normals

Geometry classes of the Tensor API also add new functionality based on VTK:

  • Mesh clipping along a plane
  • Extraction of slices from triangle meshes as line sets
  • Hole filling
  • Boolean operations between watertight meshes
  • A new algorithm for quadric decimation of triangle meshes
  • Linear and rotational extrusion
  • Generation of text meshes


Further, we add functionality for parametrising meshes with the UVAtlas library and added functions for baking vertex and triangle attributes to textures.


New operations for Tensor PointCloud:

  • ClusterDBScan, ConvexHull

  • Radius Outlier Filter, RemoveDuplicatedPoints, PaintUniformColor

  • FarthestPointDownSample, HiddenPointRemoval and SegmentPlane

  • Uniform and random down sample methods (contributed by @yuecideng).

  • FPFH features. (contributed by @yuecideng)

  • PointCloud boundary detection (contributed by @yuecideng)

    PointCloud Boundaries
    boundary_detection_in boundary_detection_out
  • [new] RemoveDuplicatedPoints() for PointCloud (Eigen API). (contributed by @scimad)

  • [new] Farthest point downsampling (Eigen API) (contributed by @yuecideng).

  • [update] Plane segmentation in point clouds is now multi-threaded. (Eigen API) (contributed by @yuecideng).

  • [update] Add SelectByIndex and minor improvement to SelectByMask (contributed by @yuecideng).

  • [new] Add Tensor AxisAlignedBoundingBox (contributed by @yuecideng).

  • [update] SelectPolygonVolume.CropInPolygon returns point indices.

  • [fix] Blocky / incomplete raycast output for larger voxel sizes fixed with EstimateRange() update (contributed by @jdavidberger).

  • [update] Allow setting of number of threads that are used for building a raycasting scene (contributed by @jjabo)


  • [new] Wireframe mode added to Open3D visualizer
  • [new] Support for Filament's bloom post-processing effects
  • [fix] Make sure float and uint16 texture formats work correctly
  • [fix] Fix bugs with point_width and line_width parameters in Material class

CPU rendering

  • [update] Easy to use out of the box CPU rendering for Linux. Pre-built Mesa CPU rendering library is provided in the Python wheel if the system Mesa library is too old or not in use. You can enable CPU rendering with the environment variable OPEN3D_CPU_RENDERING=true before importing Open3D in Python or running a C++ program. See the tutorial for full details.
  • [new] Updated CPU rendering works in Jupyter and Colab environments.


  • [update] Vertical and horizontal radio button groups. (contributed by @forrestjgq)
  • [new] Keypress event callback for windows. (contributed by @forrestjgq)
  • [fix] Fix mouse event filter issue in popup menu covered area (contributed by @forrestjgq)
  • [new] Added extra VisualizerWithVertexSelection point picking functions to python API (contributed by @d-walsh and @cansik)
  • [update] Support double click mouse event in WebRTC. (contributed by @forrestjgq)
  • [fix] Fix Point Clouds Getting Culled Prematurely.
  • [fix] Set correct default material (lit with flat shading) for triangle mesh with triangle normals.
  • [update] Add interface for get cropped geometry from VisualizerWithEditing class (contributed by @yuecideng).


  • [new] Open3D now implements a distortion and noise model from the Redwood dataset. This will enable you to simulate the output of realistic depth sensors.
Original With noise + distortion Difference
nd-original nd-after nd-diff
  • [fix] Fix gltf PBR model load regression when loading through ASSIMP.
  • [new] Read ply, stl, obj, off, gltf, glb, fbx file formats directly into a Tensor TriangleMesh.


  • [update] Update ICP interface to get iteration wise loss information.
  • [new] Online SLAM Example with Realsense sensor support, bagfile support, and saved dataset support.
  • [new] Legacy offline reconstruction C++ pipeline (contributed by @yuecideng)
  • [update] InitializePointCloudForColoredICP efficiency improvement. (contributed by @Xiang-Zeng)


  • [update] Upgrade PyTorch to v1.12 and TensorFlow to v2.8.2. With the new PyTorch version, Open3D PyTorch ops work directly with standard PyTorch wheels and custom wheels are not required any more.
  • [fix] Avoid logging.basicConfig in non-scripts (contributed by @ajprax)
  • [fix] filter_valid_label: force scores tensor onto the selected device (contributed by @ntw-au)
  • [fix] Ensure that a checkpoint is saved on the final training epoch (contributed by @ntw-au)
  • [fix] Handle nested dictionaries when merging configs (contributed by @ntw-au)
  • [fix] Fix moving zip files (contributed by @tejaswid)
  • [fix] Update RandLANet weights link (contributed by @Krupal09)
  • [fix] Getting rid of torch._six (for future PyTorch versions) (contributed by @krshrimali)


We would like to thank all of our community contributors for their true labor of love for this release!

@ntw-au, @jdavidberger, @Xiang-Zeng, @jamesdi1993, @brentyi, @jjabo, @jbotsch-fy, @scimad, @cansik, @NobuoTsukamoto, @theNded, @chunibyo-wly, @jmherzog-de, @luzpaz, @code-review-doctor, @d-walsh, @johnthagen, @pmokeev, @erbensley, @hanzheteng, @chrockey, @agrellRepli, @bchretien, @nigels-com, @forrestjgq, @equant, @naruarjun, @ajprax, @INF800, @ntw-au, @tejaswid, @Krupal09, @krshrimali

Also thanks to the many others who helped the Open3D community by reporting as well as resolving issues.

Open3D 0.15: more than 500+ issues addressed

Open3D 0.15 Release Notes

We are excited to bring you the best Open3D yet - version 0.15. Take a look below:

Starting from this release, we adopt a "tick-tock" model for balancing resolving issues vs. adding new features. In a nutshell, the "tick" releases are focused on resolving existing issues and eliminating bugs, while the "tock" releases mainly focus on developing new features. Open3D 0.15 is a "tick" release. We resolved over 500 issues for Open3D and Open3D-ML, as the infographic below illustrates.


Google Summer of Code 2022

Open3D has applied for the Google Summer of Code 2022 to increase community participation. Check out details and our project ideas here. Please help in making Open3D better for all.

Build System

  • [New] We now provide Open3D binary packages for C++ users. No need to “Build from Source” - just download a binary package for your Operating System and use it “out of the box”. See GitHub releases for v0.15 and getting started guides for the latest development package.
  • [New] Docker build tools to build ARM64 Linux wheels and multiple Python versions. See ARM64 build guide for more details.
  • [New] Pre-compiled Open3D wheel for ARM64 Linux and macOS. Improved Apple Silicon support. Install Open3D on ARM64 Linux and macOS with pip install open3d.
  • [Update] Open3D now builds with the new CXX11 ABI by default on Linux. Set -DGLIBCXX_USE_CXX11_ABI=OFF in cmake if you need the old ABI, e.g. to work with PyTorch / TensorFlow libraries.
  • [Update] Starting with version 0.15, Open3D Conda packages are no longer supported. Install Open3D with pip install open3d inside a Conda virtual environment.



  • [New] Dataset module for automatically downloading and managing example data. The following example demonstrates how to create a Dataset object, extract its path, and display it in the Open3D Visualizer:
    Open3D 0.15 Dataset Demo

    import open3d as o3d
    if __name__ == "__main__":
        dataset =
        pcd =
    #include "open3d/Open3D.h"
    int main() {
        using namespace open3d;
        data::EaglePointCloud dataset;
        auto pcd = io::CreatePointCloudFromFile(dataset.GetPath());
        return 0;

Command Line Interface (CLI)

  • [New] Open3D-dedicated Command Line Interface (CLI) for visualization and running Python examples. Below is a code snippet to get started with Open3D and its examples.

    # Install Open3D pip package
    pip install open3d
    # Print help
    open3d --help
    # List all runnable examples
    open3d example --list
    # Print source code of an example
    open3d example --show [category]/[example_name]
    # Run an example
    open3d example [category]/[example_name]
    # Run Open3D Viewer
    open3d draw
    # Open a mesh or point cloud file in Open3D Viewer
    open3d draw [filename]


  • [Update] Python examples directory has been refactored for better namespace consistency and new examples have been added.

Neighbor search

  • [Update] Updated neighbor search module. The neighbor search module is now equipped with highly optimized built-in implementations of all search methods (Knn, Radius, and Hybrid) supporting both CPU and GPU. Faiss build dependency is removed.

Visualization and GUI

  • [New] Introducing raw mode visualization. The raw mode automatically simplifies the lighting environment and object materials to make it easier to inspect the underlying geometry of point clouds and triangle meshes.
    Open3D 0.15 Raw Mode Demo
  • [New] Open3D new visualizer now features CPU Rendering based on Mesa’s LLVMpipe software OpenGL implementation. Interactive applications, demos, and Python scripts are all supported as well as off-screen rendering. This feature can also be used within Docker.

    • Method 1: LD_PRELOAD from the command line
      LD_PRELOAD=/home/open3d/development/mesa-21.3.4/ python examples/python/visualization/
    • Method 2: Preload library in Python

      import ctypes
      import open3d as o3d
      mesh ='/home/open3d/development/FlightHelmet/FlightHelmet.gltf')


  • [New] WidgetProxy and WidgetStack widgets allow the creation of user interfaces on the fly (contributed by @forrestjgq).
  • [New] Background color option for button widgets (contributed by @forrestjgq).
  • [New] Set maximum visible items in a list widget to prevent lists from growing too large (contributed by @forrestjgq).
  • [New] Function keys are now bindable (contributed by @forrestjgq).
  • [New] Support for specifying intrinsic projection matrix in the new visualizer.
  • [New] Add support for scaling 3D labels.
  • [Fix] Open3D for TensorBoard plugin does not need Open3D-ML now.
  • [Fix] Point picking, text input, and UI layout (contributed by @forrestjgq).


  • [Fix] Oriented Bounding Box
    • Fixed an issue where the orientation of the OrientedBoundingBox was mirrored.
    • [New] added a new parameter for robust oriented bounding box computation for degenerated point clouds.
  • [Fix] Convex hull meshes created from point clouds now have outward-pointing triangles.
  • [Update] Added a new parameter for robust convex hull computation.
  • [Update] TriangleMesh GetSelfIntersectingTriangles() and related functions like IsWatertight(), GetVolume(), etc. are now more than 4 times faster.
  • [Fix] Corrected an issue with io::AddTrianglesByEarClipping() where the algorithm could fail for concave polygons.
  • [New] New Python examples for reconstruction and voxelization.
  • [Fix] Improved logger performance.


  • [New] MIT-licensed implementation of RandLANet.
  • [New] Intel OpenVINO inference backend (contributed by @dkurt).
  • [Fix] Fixed an issue with S3DIS where the loss gets NaN after a few epochs.
  • [Fix] Fixed an issue with IoU calculation which fails for large point clouds while running inference in patches.
  • [Fix] Fixed an issue where the labels are not correctly ordered in the visualizer.
  • [New] Support for Images in Dataset Visualizer (contributed by @ajinkyakhoche).


We would like to thank all of our community contributors for their true labor of love for this release!

@ajinkyakhoche @ceroytres @chunibyo-wly @dkurt @forrestjgq @Fuhrmann-sep @jeertmans @junha-l @mag-sruehl @maxim0815 @Nicholas-Mitchell @nigels-com @NobuoTsukamoto @ntw-au @roehling @theNded

Also thanks to the many others who helped the Open3D community by reporting as well as resolving issues.

Open3D 0.14 is full of new features

Open3D 0.14 Release Notes

We are excited to present the new Open3D version 0.14!

In this release, you will find:

  • TensorBoard visualization
  • Upgraded GUI API
  • New RayCastingScene class
  • Improved Tensor performance
  • Improved I/O performance
  • New 3D learning models in Open3D-ML: Point Transformer and PVCNN
  • Improved interoperability with Numpy

Changes in Installation and Build system

  • Open3D now works with Python 3.9. We release Open3D pre-compiled Python packages in Python 3.6, 3.7 3.8, and 3.9.
  • Open3D 0.14 is the last version that supports conda installation. Starting from version 0.15, users will need to install Open3D with pip install open3d. We recommend installing Open3D with pip inside a conda virtual environment.
  • Git submodules are no longer required in Open3D. You can now clone Open3D with git clone without the --recursive flag. Also please note the updated Github URL.
  • Open3D will now build in Release mode by default if CMAKE_BUILD_TYPE is not specified. Python is no longer required for building Open3D for C++ users.
  • Open3D-ML is now recommended to be used along with PyTorch 1.8.2 and/or Tensorflow 2.5.2. Checkout Open3D-ML for more information.

Tensorboard Integration

Now you can use Open3D within Tensorboard for interactive 3D visualization! At a glance, you can:

  • Save and visualize geometry sequences and their properties. This enables interactive visualization and debugging of 3D data and 3DML model training.
  • Visualize 3D semantic segmentation and object detection with input data, ground truth, and predictions. In addition, any custom properties for a PointCloud, from scalar to vector, can be easily visualized.
  • Synchronize time steps and viewpoints during different runs. This helps debug and monitor the effect of parameter tuning.

Rich PBR materials


Object detection

tensorboard_objdet_full_2_vp9 webm

Semantic segmentation


To get started, write some sample geometry data to a TensorBoard summary with this snippet:

from torch.utils.tensorboard import SummaryWriter  # TensorFlow also works, see docs.
import open3d as o3d
from open3d.visualization.tensorboard_plugin import summary
from open3d.visualization.tensorboard_plugin.util import to_dict_batch
writer = SummaryWriter("demo_logs/")
cube = o3d.geometry.TriangleMesh.create_box(1, 2, 4)
colors = [(1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)]
for step in range(3):
    writer.add_3d('cube', to_dict_batch([cube]), step=step)

Now you can visualize this in TensorBoard with tensorboard --logdir demo_logs. For more details on how to use TensorBoard with Open3D, check out this tutorial.


Further enhancements have been added to the GUI viewer. Now you can:

  • Directly visualize tensor-based geometry classes including PointCloud, TriangleMesh, and LineSet.
  • Use physically based rendering (PBR) materials that deliver appealing appearance.
  • New default lighting environment and skybox improves visual appeal
  • Use all the functionality in Tensorboard!


import open3d as o3d
import open3d.visualization as vis
a_sphere = o3d.geometry.TriangleMesh.create_sphere(2.5, create_uv_map=True)
a_sphere = o3d.t.geometry.TriangleMesh.from_legacy(a_sphere)
# Compare this...
a_sphere.material = vis.Material('defaultLit')
a_sphere.material.texture_maps['albedo'] ='examples/test_data/demo_scene_assets/Tiles074_Color.jpg')
a_sphere.material.texture_maps['roughness'] ='examples/test_data/demo_scene_assets/Tiles074_Roughness.jpg')
a_sphere.material.texture_maps['normal'] ='examples/test_data/demo_scene_assets/Tiles074_NormalDX.jpg')
# With this!

A complete, complex demo scene can be found at examples/python/gui/


  • The Open3D Tensor class received a major performance boost with the help of Intel ISPC compiler and optimization for the contiguous code path.
    (See python/benchmarks/core for the benchmark scripts. For each operation, the geometric mean of run times with different data types is reported. The time is measured with an Intel i9-10980XE CPU.)
  • A major upgrade of Parallel HashMap is done. Now you can choose from multi-valued HashMap and HashSet depending your value types. A comprehensive tutorial is also available.
  • Linear Algebra performance have been optimized for small matrices, especially on 4x4 transformations.
  • Semantics for tensor and tensor-based geometry have been improved, especially on device selection.
  • Functions expecting a Tensor now accept Numpy arrays and Python lists. For example:

    import open3d as o3d
    import numpy as np
    mesh = o3d.t.geometry.TriangleMesh()
    mesh.vertex['positions'] = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0]], dtype=np.float32)
    mesh.vertex['colors'] = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]], dtype=np.float32)
    mesh.triangle['indices'] = [[0, 1, 2]]


  • We now support I/O from/to Numpy compatible .npz .npy formats for Open3D tensors and tensor maps. It is now easier to convert between Open3D geometry classes and Numpy properties.
  • We have improved I/O performance for tensor-based point cloud and triangle-mesh file-formats, including .ply, .pcd, .pts. Geometry loading time is hence improved for the stand-alone visualizer app.
  • We added support for material data to the MessagePack serialization format of the RPC module.


  • We introduce a new class RaycastingScene with basic ray intersections functions and distance transform for meshes, utilizing the award-winning Intel Embree library.

    Example code for rendering a depth map:

    import open3d as o3d
    import matplotlib.pyplot as plt
    # Create scene and add a cube
    cube = o3d.t.geometry.TriangleMesh.from_legacy(o3d.geometry.TriangleMesh.create_box())
    scene = o3d.t.geometry.RaycastingScene()
    # Use a helper function to create rays for a pinhole camera.
    rays = scene.create_rays_pinhole(fov_deg=60, center=[0.5,0.5,0.5], eye=[-1,-1,-1], up=[0,0,1],
                                   width_px=320, height_px=240)
    # Compute the ray intersections and visualize the hit distance (depth)
    ans = scene.cast_rays(rays)

    Distance transform generated with RaycastingScene:

    See the tutorials for more information (Ray casting, Distance queries).

  • Normal estimation for tensor PointCloud is supported with the tensor-compatible nearest neighbor search modules.

  • Customizable tensor-based TriangleMesh, VoxelBlockGrid, and LineSet are implemented that allow user-defined properties. For example:

    import open3d as o3d
    import open3d.core as o3c
    mesh = o3d.t.geometry.TriangleMesh()
    mesh.vertex["positions"] = o3c.Tensor([[0.0, 0.0, 1.0],
                                         [0.0, 1.0, 0.0],
                                         [1.0, 0.0, 0.0],
                                         [1.0, 1.0, 1.0]], dtype=o3c.float32)
    mesh.vertex["my_custom_labels"] = o3c.Tensor([0, 1, 2, 4], dtype=o3c.int32)
    mesh.triangle["indices"] = o3c.Tensor([[0, 1, 2], 
                                         [1, 2, 3]], dtype=o3c.int32)


  • We have enhanced point cloud registration (ICP) with a tensor interface:
    • Float64 (double) precision point cloud is supported for a higher numerical stability
    • Robust Kernels, including Huber, Tukey, and GM losses are supported for robust registration.
    • Colored-ICP is now supported in the unified tensor-based API.
    • See this tutorial for more details.
  • We also provide an initial tensor-based reconstruction system in Python, including
    • Customizable volumetric RGB-D integration;
    • Dense RGB-D SLAM with a GUI;
    • See this tutorial for more details.


The Open3D-ML library welcomes more state-of-the-art models and operators that are ready to use for advanced 3D perception, especially semantic segmentation, including

  • New state-of-the-art Point Transformer for Semantic Segmentation.
  • Highly Efficient Point-Voxel Convolution for Semantic Segmentation.
  • RaggedTensor integration that enables batch SparseConvolution and SparseConvolutionTranspose along with PyTorch.
  • Batched voxelization for fast point-voxel conversions.

Refer to the tutorial for training and inference on new models. (PyTorch TensorFlow).

Expreimental ARM64 builds

We hope you find Open3D 0.14.0 exciting and useful. Happy coding!

Remember that you can reach out with questions, requests, or feedback through the following channels:


We thank all the community contributors for this release!

(alphabetical order)

Open3D better than ever in our newest 0.13 release

Open3D 0.13.0 Release Notes

We welcome you to the 0.13.0 release of Open3D. This release is full of exciting new features with a strong emphasis in real-time pipelines, but also full of bug fixes and usability improvements. The big highlights of this release are as follows:

  • New real-time 3D reconstruction pipeline, featuring GPU and CPU support based on VoxelHashing.
  • New real-time point cloud registration algorithm, featuring a high-performance version of Iterative Closest Point (ICP).
  • New Neighbor Search module, introducing your favorite search algorithms such as KNN and RadiusSearch, with support for GPU and CPU devices through a common interface.
  • New web visualizer, which enables users to access the advanced rendering and visualization features of Open3D in your favourite web environments (remote and locally!), including Jupyter notebooks, Jupyter lab, and standalone web applications.
  • New 3D machine learning models and datasets, featuring PointRCNN for 3D object detection, SparseConvNets for point cloud semantic segmentation, and support for ScanNet and SunRGBD.
  • Upgraded GUI module, providing improved and more versatile versions of existing widgets, and new ones: ImageWidget and ToggleSwitch.
  • Upgraded build system, adding support for CUDA 11.

Real-time 3D reconstruction

We introduce a new CUDA accelerated pipeline including RGBD odometry, frame-to-model tracking, and volumetric integration.

Figure 1. Example of 3D reconstruction from an RGB-D sensor.


We introduce the tensor based real-time RGBD Odometry pipeline. In addition to the legacy Hybrid and Intensity based methods, we support the popular point-to-plane method.


We further accelerate volumetric integration and introduce fast ray casting for rendering.


Based on the accelerated RGBD odometry and raycasting, we present the fully functional VoxelHashing system. It performs dense volumetric reconstruction with fast frame-to-model tracking. We present an easy-to-use GUI that also shows real-time interactable surface reconstruction.


We have further enhanced our legacy offline reconstruction system by introducing the Simultaneous Localization and Calibration (SLAC) algorithm. This algorithm applies advanced dense multi-way registration along with non-rigid deformation to create highly-accurate reconstructions.

Real-time point cloud registration

We present a high-performance implementation of ICP using Open3D’ Tensor library. This module is one of the first on leveraging the new Neighbor search module and the newly crafted parallel kernels. This implementation brings support for multi-scale ICP, which allows us to do iterations on different resolutions in order to accelerate convergence while keeping computation low.

Figure 2. ICP registration of multiple point clouds from a driving dataset.

New Neighbor Search module

Neighbor search is at the core of many 3D algorithms. Therefore, it is critical to have access to a fast implementation able to execute a large number of queries in a fraction of a second. After months of development, the Open3D team is proud to present the new Neighbor Search module!

This module brings support for core search algorithms, such as KNN, Radius search, and Hybrid search. All these algorithms are provided with support for both CPU and GPU, through a common and easy-to-use interface. Write your code once and support multiple devices! Moreover, we have not sacrificed a single flop of computation, making this module one of the fastest neighbor search libraries ever created.

Web visualizer

The need for visualizing complex 3D data in web environments has surged considerably in the past few years, in part thanks to the proliferation of sensors like LIDAR and RGBD cameras. New use cases, such as online dataset inspection and remote visualization are now an integral part of many tasks, requiring the crafting of ad-hoc tools, which often are cumbersome to use.

Figure 3. Standalone visualization of a semantic segmentation model in a browser.

In order to improve this situation, we introduce our new web-based visualization module, which enables 3D visualization from any browsers and any location. This module lets users run advanced rendering and visualization pipelines, both remote and locally through your web browser. All the power of Open3D’ rendering engine --including support for PBR materials, multiple lighting systems, 3D ML visualization, and many other features--, are now supported in your browser. This module also includes a Jupyter extension for interactive web-based visualization! This new feature allows you to run compute-intensive 3D processing in a dedicated server while visualizing the results remotely on any device through your browser.

Figure 4. Visualization of a 3D model on a Jupyter notebook.

3D Machine Learning


In this release, we introduce a new point cloud semantic segmentation architecture based on a Sparse Convolution-based UNet model. This architecture leverages the new sparse convolution operators provided by Open3D, and achieves state of art performance for Semantic Segmentation on the ScanNet dataset. We have also added support for PointRCNN for the task of 3D object detection. To enable PointRCNN we have added new operators like furthest_point_sampling, three_interpolate, ball_query, which are available through Open3D for TensorFlow and Pytorch.

Figure 5. Example of 3D semantic segmentation using a SparseConvUNet model on ScanNet.

Figure 6. Example of 3D object detection using a PointRCNN on KITTI.

All these models are provided with their respective training and inference pipelines with support for TensorFlow and Pytorch. Pre-trained models are also provided (check out the following link).


This release brings the following datasets: Scannet and SunRGBD.


We now support all models on newer versions of TensorFlow (2.4.1) and PyTorch (1.7.1), on CUDA 11.0.

GUI and rendering modules

Open3D 0.13.0 brings a cascade of improvements and fixes to the renderer and GUI modules.

  • The camera can now be controlled with respect to a target object, and the pan-in/pan-out actions are smoother.
  • The render supports render targets.
  • The black screen issue in MacOS systems is now solved.
  • Support for a video widget
  • The background of the 3D scene widget can be updated with an image.
  • Camera objects can be visualized in the 3D scene.
  • Camera objects support intrinsic and extrinsic parameters.
  • Support for multiple fonts.
  • Support for a new ToggleSwitch widget.
  • New GUI/rendering examples for common tasks, such as data acquisition from RGBD sensors, 3D reconstruction, and registration, among others.

Build System

Our pip packages now include support for CUDA 11.0, PyTorch 1.7.1, and TensorFlow 2.4.1 to enable RTX 3000 series devices. Please, notice that we provide custom PyTorch wheels for Linux to work around an incompatibility between CUDA 11, PyTorch, and extension modules such as Open3D-ML.

This release also brings new improved support for CUDA on Windows. Users can now build CUDA accelerated Python wheels for Windows. Open3D is now built with security options enabled by default.

We hope you find Open3D 0.13.0 exciting and useful. Happy coding!

Remember that you can reach out with questions, requests, or feedback through the following channels:

The Open3D team



  • All visualization tools, such as draw_geometries will be deprecated in Open3D 0.14 in favor of the new O3DViewer.

Changes to Open3D

  • add ml deps for conda build (#2826)
  • tensorkey refactoring: pimpl and optional arguments (#2813)
  • Add file and line for error message (#2829)
  • color map optimization refactoring (#2832)
  • remove openmp macro guards for color map optimization (#2835)
  • easy way of initializing c++ tensor (#2796)
  • Add numerical operations to Tensor (#2848)
  • Implement np style arange for Tensor (#2849)
  • Refactor TSDF kernels (#2854)
  • core::Scalar class and refactor arange (#2857)
  • octree updates (#2833)
  • numpy-compatible tensor IO (#2859)
  • Upgrade zlib and libpng, use ExteralProject (#2878)
  • update mkl download links (#2882)
  • Python crash on Ubuntu (#2876)
  • refactoring: add pipelines/kernel folder (#2875)
  • Standarize To() and Copy() (#2877)
  • compile 3rd-party library in a separate step for arm64 CI (#2891)
  • Hardened security flags for building Open3D (#2883)
  • fix incompatible CUB include dir with CUDA 11 and later (#2913)
  • Jsoncpp with ExternalProject (#2907)
  • Python example of using a texture on a Material (#2935)
  • Add rendering for VoxelGrid and Octree to new renderer (#2932)
  • Enable RSUSB backend only on Linux. (#2923)
  • Added C++ example OffscreenRendering (#2914)
  • Lazy load renderer when creating window in case Python crashes before window becomes visible (#2819)
  • Fixed trackpad scrolling to be buttery smooth at slow speeds on macOS (instead of being very discrete-seeming) (#2964)
  • add tunable parameter to filter outliers in surface extraction (#2931)
  • Added close callback to window (#2958)
  • Mode For Light To Follow Camera (#2944)
  • Image processing Ops sample with IPP and NPP (#2898)
  • Added ability to set camera in open3d.visualization.draw() (#2936)
  • Mouse movement by spherical coordinates (#2962)
  • Refactored RPC interface to be more amenable to variation in visualizers (fixes add not updating) (#2970)
  • Optimised kernel for ICP (#2917)
  • Add support for FPS-style mouselook to visualizer (#2551)
  • maximize build space for ubuntu (#2986)
  • Minor typo in repr for OBB (#2987)
  • function for casting the tensor data pointer to a datatype (#2934)
  • Undo lazy creation of renderer on Windows; it fixed the hang on exit when a python exception is generated before the run() happens, but broke normal windows (#2996)
  • Add Image IO (#2955)
  • Implement ray casting for TSDF voxel grids (#2941)
  • Procedural Ground Plane (#2980)
  • Mousewheel dollies based on distance from center of rotation rather than size of model (#3011)
  • Update Mac build to use latest 1.9.11 Filament to fix illegal instruction error (#3013)
  • Fix arm64 CI out-of-time (#3020)
  • Add Ground Plane support to O3DViewer (#3014)
  • Recenter rotation to point on double-click (#2905)
  • Implement depth buffer read back (#3028)
  • Remove unnecessary include causing unwanted compile dependencies (#3030)
  • Update faiss_build.cmake (#2979)
  • Added python bindings for rendering::Camera (#3033)
  • PointRCNN ops (#3021)
  • add int16 dtype and tests (#3035)
  • enable ccache for cuda with CMAKE_CUDA_COMPILER_LAUNCHER (#3043)
  • Support updating tpointcloud with the same or fewer vertices as original (#3048)
  • Use RenderTargets For Scene Caching (#3031)
  • Add init pybind for Label3D (#3045)
  • Fix linking issue of Torch/TF Ops (#2957)
  • GCE CUDA Python tests (#3063)
  • Rearrange constructor so input missing "points" attribute reaches LogError (#3062
  • Make sure bounding box is non-empty (#3061)
  • Replace CMake GLOB and GLOB_RECURSE with file listing (#3059)
  • Add pybind param names to docstring for 'TSDFVoxelGrid.integrate' (#3058)
  • Support USE_SYSTEM_LIBREALSENSE flag. (#3057)
  • Faster FixedRadiusSearch and HybridSearch (#2821)
  • IPP/NPP image operators (#2972)
  • Add function to randomly downsample from pointcloud (#3050)
  • maximize build space (#3071)
  • Add 'd' suffix to non-system libpng compiled library discovery for non-MSVC Debug builds (#3067)
  • disable incompatible clang flags for now (#3080)
  • [FileSystem] Fix GetPathComponents and unit tests on Windows. (#3070)
  • Minor spell fix (#3081)
  • Add disconnection function to AzureKinectSensor (#3044) (#3082)
  • PointRCNN ops tf (#3075)
  • Set post-processing coniguration when copying View settings (#3083)
  • Fix crash if posted Window callback executes after Window is destroyed (#3084)
  • style-guide link update (#3086)
  • Update contribution_recipes.rst (#3088)
  • changed Registration unit-test to use RegistrationPermuteDevices (#3095)
  • LU, LU_with_ipiv, Det, Triu, Tril, Triul Ops (#2879)
  • Set position in constructor (#3096)
  • memory efficient hybrid search (#3073)
  • Implemented ability to render to a bitmap window and interact with UI (#3072)
  • Better error message if you don't initialize gui::Application before creating a window (#3103)
  • Added pybind for Camera::CopyFrom() (#3104)
  • Enable builds on Fedora. (#3102)
  • [CUDA] Fix memory leaks. (#3099)
  • Use UnownedPointer so Python doesn't retain a valid shared_ptr (#3106)
  • Tensor nested initializer list with recursion (#3055)
  • Fix window resize when Scene caching is enabled. (#3107)
  • delete some ssh keys to keep the profiles small (#3110)
  • Fixed crash when referencing submenus (#3114)
  • Enable builds on Fedora (FAISS, MKL, TBB) and fix output result of CMAKE. (#3118)
  • Added the double-click code from Window.cpp in #2905 that got clobbered by the WindowSystem refactor (#3119)
  • TransformConverter supports Float32 and Float64 (#3098)
  • Fix one frame blinking in Open3DViewer when layout changed or dialog box was closed (#3121)
  • benchmark links 3rd-party library (#3124)
  • Set byproducts for external projects. (#3138)
  • Open3D C++ example projects as separete repos (#3128)
  • gce disk size set to 48GB (#3169)
  • download test datasets from intel-isl/open3d_downloads (#3105)
  • Add ability to set center of rotation on SceneWidget, which is necessary for copying from a camera. (#3147)
  • Minor(?) fix (#3175)
  • Clone from specific commit instead of release branch (#3179)
  • fix docstrings for ML modules (#3160)
  • Add multi-window C++ and Python examples (#3167)
  • Expose rendering to a depth image to Python, makes resulting depth image range from 0 (near plane) to 1 (far plane) instead of simply returning the raw values from Filament's buffer (which are reversed), fixes widgets that aren't SceneWidget or a Layout not working if they are a top-level child. (#3178)
  • Fix incorrect coordinates for mouse events on Linux (#3177)
  • Added gui::ToggleSwitch (#3182)
  • Give Material::shader default value of "defaultUnlit" (#3184)
  • Add support for textures in TriangleMesh::operator+= (#3170)
  • TensorToEigenMatrix Ops. (#3163)
  • assigning scalar to r-value tensor of arbitrary shape (#3137)
  • t::PointCloud from RGBD image (#3113)
  • openblas x86_64 docker (#3195)
  • Updated copyrights to 2021 for gui (#3189)
  • Added an example for line width (#3194)
  • disable CreateFromRGBDImage for arm64 test (#3206)
  • Don't allow empty geometry to be added to scene (#3203)
  • upgrade scipy and cmake version (#3199)
  • Added pybinds for color grading enums, also changed property open3d.visualization.rendering.Open3DScene.get_view to view (it is a property, not a function) (#3193)
  • Fix for CreateFromRGBDImage test (#3207)
  • speed up arm64 build with docker and ccache (#3205)
  • [Windows] Fix linker errors and warnings. (#3151)
  • Fix ModuleNotFoundError when build with GCC10. (#3142)
  • Tensor-based RGBD Odometry (#3085)
  • t-ICP ComputeTransform major performance improvements. (#3019)
  • UV-Map for Box, Tetrahedron, Octahedron, Icosahedron (#3097)
  • Init voxeldownsample (#3144)
  • Fix compilation on Windows when building with CUDA. (#3036)
  • Added mouse events + convert point to world coordinates example (#3192)
  • Optimising Tensor RGBD Odometry. (#3213)
  • handle the invalid tetra warning (#3201)
  • SplitString returns tokens (#3223)
  • clean up ci_utils for arm64 (#3224)
  • less verbose tar print for arm docker (#3226)
  • optimised hybrid search, clear tree from master (#3218)
  • Added 3D labels to O3DVisualizer, added example (#3233)
  • Add ability to set layout minor axis size, moved render target drawing from Open3DScene to SceneWidget which is a little more straightforward and also puts the image in the proper z-level so that SceneWidget can be used in layouts (#3212)
  • Improves progress bar in Open3DViewer app, also fixes unlit material instead of lit (#3238)
  • refactor logging (#3241)
  • Adds ImageWidget and ability to efficiently change Scene background image (#3002)
  • Update to filament v1.9.19 for mac for multi-window fixes (#3251)
  • Fix spurious warning if a triangle mesh with no normals uses "default Unlit". Happens if you pick points (#3256)
  • Fix camera matrix getting pybinds not returning something that can be converted to a Python object (#3257)
  • Hashmap refactor (#3211)
  • Added camera visualization to LineSet (#3255)
  • Added header files for TriangleMeshModel to (#3261)
  • Update stdgpu dependency to latest upstream (#3265)
  • Use more sensible default color for point clouds with no per-vertex color (#3278)
  • T-Registration pybinds and python-tests. (#3112)
  • Fix memory leak in stdgpu hashmap backend (#3281)
  • Upgrade Tensor-based RGBD odometry (#3229)
  • UV Maps for Cone, Cylinder, Sphere added. (#3275)
  • get_is_open() for CollapsableVert widget (#3286)
  • Remove use of CMAKE_BUILD_TYPE. (#3164)
  • Support TGeometry Image At Low Level and In Image Widget (#3277)
  • simplify with graft (#3288)
  • Optimised CopyCPU and CopyCUDA for case when dst is contiguous and src has single element. [Fill] (#3136)
  • Added polygon picking (#3252)
  • Add post_redraw() to O3DVisualizer so that it can be used non-blocking (#3262)
  • Fixes crash/hang on exit if rendered to an image (#3273)
  • voxel_down_sample pybind for t::pointcloud (#3293)
  • Added italic, bold, and bold italic styles (#3298)
  • Tensor IsInf, IsNan, IsFinite (#3302)
  • Add remaining fixed-size integer dtypes (#3320)
  • Tensor Multi Scale ICP (#3285)
  • Fix many minor C++ documentation issues (#3326)
  • update docs-build dependencies (#3335)
  • Added tooltips (#3334)
  • Defer layout of dialog to ensure ImGUI context is valid for CalcPreferredSize (#3339)
  • Optimize TSDF-related operations (#3314)
  • Unify dispatch macros from CoreUtil.h and Dispatch.h (#3295)
  • Fix error message when no correct arguments are provided (#3292)
  • Add material property for supplying vertex colors in sRGB (#3340)
  • CUDA, TF, Pytorch version upgrade (#3049)
  • fix header include (#3344)
  • pass cuda inc dir to stdgpu to find thrust if cuda is not in a standard (#3343)
  • fix conditions for showing warning. drop pytorch version test. (#3355)
  • Remove attributes from pointcloud and trianglemesh (#3299)
  • fixed int64_t issue on mac (#3291)
  • Adjusted odd characters which were giving unicode charmap error (#3336)
  • Improve performance of stdgpu hashmap backend (#3346)
  • Add pybind for T PointCloud and fix associated bugs (#3345)
  • Shubhamagarwal12/tensor mesh io (#3221)
  • Update Linux and Windows platforms to Filament v1.9.19 (#3271)
  • Fix multiple VectorEdits in a UI not working (#3360)
  • Properly scale UInt8 colors when converting to Legacy Point Cloud (#3350)
  • Make tooltips prettier (#3348)
  • fix scalar boolean handling in pybind (#3362)
  • Fixed identically named Checkboxes and ToogleSwitches not working, removed use of stringstream in the rest (#3369)
  • Unqueue dead window events (#3370)
  • Make sure ResizeRenderer gets called on BitmapWindow (#3374)
  • Further improve performance of stdgpu hashmap backend (#3377)
  • simplify jsoncpp cmake (#3174)
  • [WebRTC] WebRTC library build scripts (#3349)
  • Move vertexmap/normalmap related functions to t::Image (#3318)
  • Revert "simplify jsoncpp cmake (#3174)" (#3386)
  • Don't add menus in Jupyter that are not meaningful (#3385)
  • Added ability to setup camera with extrinsic and intrinsic in new visualizer (#3338)
  • Increase warning level (#3357)
  • Clarify C++ standard in documentation (#3384)
  • Optimize RGBD odometry (#3323)
  • Python docs fix (#3373)
  • Add Docker minimal example to getting_started docs. Fix #3388 (#3396)
  • Introducing SLAC (#3108)
  • Voxel hashing GUI (#3363)
  • Fix screen turning black on resize in standalone viewer (#3394)
  • Tensor Registration Update (#3352)
  • SLAC Pybinds, Unit Tests, Documentation. (#3393)
  • add template parameters for input and output tensors in the cconv op (#3353)
  • RGBD Odometry Pybinds (#3359)
  • Tensor::Clip() simple implementation (#3266)
  • Fix filament byproducts and build from source. (#3375)
  • Fix CUDA builds on Windows. (#3380)
  • Replace templates with Scalar class (#3391)

Open3D 0.12.0, the last release of 2020

Open3D 0.12.0 Release Notes

Open3D 0.12.0 is out, and it comes with new 3D object detection pipelines and datasets, newest versions of some of your preferred classic tools, and many bug fixes.

Keep reading for a summary of the most relevant features introduced in this release:

Extensions to the Open3D-ML module

The previous release of Open3D introduced an exciting new module dedicated to 3D Machine Learning Open3D-ML, featuring support for 3D semantic segmentation workflows. In this release, we have extended Open3D-ML with the task of 3D object detection. This extension introduces support for new datasets, such as the Waymo Open dataset, Lyft level 5 open data, Argoverse, nuScenes, and KITTI. As always, all these datasets can be visualized out-of-the-box using our visualization tool, from Python or C++. The visualization tool is now equipped with the capability to render 3D bounding boxes along with all the previously existing modalities, e.g. semantic labels, XYZRGB, depth, normals, etc.

Open3D-ML features

PointPillars, the first of the many object detection models to come in the near future. To enable the implementation of PointPillars, we have added a set of new ML operators in Open3D, such as: grid_sampling, NMS, and IOU. These operators are available to the community and can be used to build new models, using our Python and C++ APIs.

import os
import as _ml3d
import as ml3d

cfg_file = "ml3d/configs/pointpillars_kitti.yml"
cfg = _ml3d.utils.Config.load_from_file(cfg_file)

model = ml3d.models.PointPillars(**cfg.model)
cfg.dataset['dataset_path'] = "/path/to/your/dataset"
dataset = ml3d.datasets.KITTI(cfg.dataset.pop('dataset_path', None), **cfg.dataset)
pipeline = ml3d.pipelines.ObjectDetection(model, dataset=dataset, device="gpu", **cfg.pipeline)

# run inference on a single example.
result = pipeline.run_inference(data)

We have also updated our model zoo, providing new pretrained models on KITTI for the task of 3D object detection, and new semantic segmentation models on Paris-Lille3D and Semantic3D.

Remember that all the tools provided in Open3D-ML are compatible with PyTorch and TensorFlow!

Support for RealSense SDK v2

RealSense sensors’ support has been upgraded to leverage the RealSense SDK v2. Users can now capture crisp 3D data from L515 devices. As part of this upgrade, we include support for Bag files format (RSBagReader), and direct streaming from sensors. These operations can now be done through a new sensor class: RealSenseSensor, offering a simple and intuitive way to control your sensors.

import open3d as o3d
bag_reader =
while not bag_reader.is_eof():
    im_rgbd = bag_reader.next_frame()
    # process im_rgbd.depth and im_rgbd.color

import json
import open3d as o3d
with open(config_filename) as cf:
    rs_cfg =

rs =
rs.init_sensor(rs_cfg, 0, bag_filename)
rs.start_capture(True)  # true: start recording with capture
for fid in range(150):
    im_rgbd = rs.capture_frame(True, True)  # wait for frames and align them
    # process im_rgbd.depth and im_rgbd.color



For further information, check this tutorial.

CORE and 3D reconstruction

Open3D 0.12 brings exciting CORE upgrades, including a new Neighbor Search module. This module supports typical neighbor search methods, such as KNN, radius search, and hybrid search, on both CPUs and GPUs, under a common interface!

Furthermore, we have created a new version of the TSDF integration algorithm accelerated on GPU. This version is able to achieve an outstanding computational performance, requiring between 2 and 4 ms to integrate a pair of frames.

New rendering functionalities

We have done an important effort over the last months to put out a modern, real-time, rendering API. This effort is still ongoing, and we are committed to bring top-tier rendering capabilities with a strong emphasis in performance, versatility, ease of use, and beauty. As part of our commitment, in this release we have added relevant extensions to this API:

  • Support for Screen-space reflections


  • Full programmatic support for headless rendering in Filament (for real)
box = o3d.geometry.TriangleMesh.create_box(2, 2, 1)
render = rendering.OffscreenRenderer(640, 480)
render.scene.add_geometry("box", box, grey)[0, 0, 0], [0, 10, 0], [0, 0, 1])
img = render.render_to_image()
  • Support for arbitrary camera intrinsic matrices: A small step for the Camera class; a very anticipated step by the Open3D community
Camera::SetProjection(const Eigen::Matrix3d& intrinsics,
                               double near,
                               double far,
                               double width,
                               double height)
  • Support for text rendering: Render text in 3D
Label3D::Label3D(const Eigen::Vector3f& pos, const char* text)
  • Full control over the color grading pipeline
class ColorGradingParams {
    ColorGradingParams(Quality q, ToneMapping algorithm);

    void SetTemperature(float temperature);
    void SetTint(float tint);
    void SetContrast(float contrast);
    void SetVibrance(float vibrance);
    void SetSaturation(float saturation);
    void SetChannelMixer(const Eigen::Vector3f& red,
                         const Eigen::Vector3f& green,
                         const Eigen::Vector3f& blue);
    void SetShadowMidtoneHighlights(const Eigen::Vector4f& shadows,
                                    const Eigen::Vector4f& midtones,
                                    const Eigen::Vector4f& highlights,
                                    const Eigen::Vector4f& ranges);
    void SetSlopeOffsetPower(const Eigen::Vector3f& slope,
                             const Eigen::Vector3f& offset,
                             const Eigen::Vector3f& power);

    void SetCurves(const Eigen::Vector3f& shadow_gamma,
                   const Eigen::Vector3f& midpoint,
                   const Eigen::Vector3f& highlight_scale);

Control shadow behaviors and post-processing effects:

class View
    void SetPostProcessing(bool enabled);
    void SetAmbientOcclusion(bool enabled, bool ssct_enabled);
    void SetAntiAliasing(bool enabled, bool temporal);
    void SetShadowing(bool enabled, ShadowType type);

Visualization and GUI: O3DViewer (beta)

The visualization module has been extended, using the new rendering capabilities and the GUI API, to create a unified visualizer displaying all the features contained in previous Open3D visualizers, e.g., camera animation, data selection, support for callbacks, and multiple shading modes.


This new visualizer, codename O3DViewer, will be the official visualization tool in Open3D starting in Open3D 0.14. At that time, previous visualizers will be deprecated.


We hope you find Open3D 0.12.0 exciting and useful. Happy coding!

Remember that you can reach out with questions, requests, or feedback through the following channels:

Find the full change log keep reading.

The Open3D team


  • All visualization tools, such as draw_geometries will be deprecated in Open3D 0.14 in favor of the new O3DViewer.
  • The Open3D 0.12 packages will be the last to support TensorFlow 2.3 and PyTorch 1.6 with CUDA 10.1. We will update to newer versions of these toolkits in the Open3D 0.13 packages. Note that this does not affect binary compatibility if Open3D is built from source.

Changes to Open3D-ML

  • Fixed infinte dataset iteration (#184)
  • Update readme and config files for parislille3d; align points for parislille3d (#180)
  • Disable data augmentation while testing. (#181)
  • Fixed absolute path bug (#182)
  • Add Data Augmentation (#178)
  • PointPillars bug fixes (#179)
  • Filter KITTI point cloud (#177)
  • Point pillars metrics (#172)
  • Add wide lines (#176)
  • Fix for changes in t::geometry (#173)
  • Added ShapeNet dataset (#157)
  • Added weight initialization (#174)
  • Update model zoo (#175)
  • New validation for torch (#169)
  • Point pillars train tf (#171)
  • Point pillars train (#170)
  • Readme randlanet semantic3d (#167)
  • Fixes for changes from TensorList to Tesor for t.geometry objects (#161)
  • Add Tensorflow model and inference pipeline. (#159)
  • Fix broken link to torch RandLA-Net Toronto 3d model (#163)
  • Add comments for visualize predictions (#151)
  • PointPillars inference pipeline (#153)
  • Link to kpconv parislille3d models in readme (#160)
  • Added Agroverse 3D Dataset (#155)
  • Change Bounding box class. (#149)
  • Add bounding boxes to visualizer (#140)
  • Add Download scripts (#145)
  • Add Lyft Dataset (#138)
  • Create sampler class for sampling point cloud idx and points idx (#135)
  • Add NuScenes dataset (#137)
  • Add Waymo Dataset (#136)
  • Add Kitti object detection dataset (#128)

Changes to Open3D

  • Added python bindings, improved descriptiveness of repr for bounding boxes, and added BG options to draw() (#2785)
  • Fix aspect ratios of background images in certain situations (#2783)
  • Add 3D Labels to SceneWidget (#2781)
  • ICP Point to Plane and Point to Point Registration and Example (#2743)
  • Make sure projection flags are always properly initialized (#2782)
  • RealSense sensor configuration, live capture and recording (#2748)
  • CUDA/CPU compatible TSDF integration (#2710)
  • Added animation callbacks (also some pybinds for rendering::Scene) (#2769)
  • Add ability to add mouse and key callbacks to SceneWidget in Python (#2776)
  • Expose Additional Filament features via View class (#2755)
  • Add support for SSR (via refraction material) (#2768)
  • Added compatible draw() function for external visualizer (#2772)
  • Add light entities to filament scene (#2771)
  • Fix memcpy issue for nms cuda (#2770)
  • Fix background not being drawn in some camera orientations (#2764)
  • Add shader for unlit with transparency (#2760)
  • RealSense SDK v2 (#2646)
  • Better picking, fixes crash removing last selection set (#2746)
  • Support multiple non-sun directional lights (#2759)
  • Add rpc interface to the new draw function (#2734)
  • Fix out of bounds memory access in ragged_to_dense op (#2751)
  • Enable HybridSearch on GPU (#2752)
  • Fix undefined reference in Debug build with gcc (#2744)
  • Expose Filament's Color Grading Controls (#2737)
  • O3DVisualizer can accept background images (#2735)
  • Fix build for BUILD_GUI=OFF SHARED_LIBRARIES=ON (#2745)
  • IoU op for BEV and 3D (#2742)
  • Add replacement for draw_geometries() (#2585)
  • Included missing header files (#2137)
  • Tensor transform pointcloud (#2704)
  • Added ability to set background image (#2701)
  • Modernize Hashmap (#2676)
  • Moved Line3D and Segment3D Transform implementation to cpp file (#2690)
  • Docs: Minor tweaks (README, bib ref, notebook instructions, some directives) (#2534)
  • Alt-Enter to toggle Fullscreen mode (#1939)
  • Faster mesh and pcd conversion (#2719)
  • Remove 16.04 kinect workaround (#2718)
  • Use assimp to load STL, enable ASCII read (#2506)
  • Fixes a second button with same name not working (#2696)
  • Add shader and supporting code for variable line width line sets (#2678)
  • Remove filament-only arm64 build (#2708)
  • Connect FixedRadiusSearch to NearestNeighborSearch (#2680)
  • Geometry stores Tensor instead of TensorList (#2692)
  • Update pybind11 and tinyobjloader version (#2703)
  • FixedRadiusSearch in core::nns (#2582)
  • Simplify macos dependencies (#2666)
  • Fix windows warning (as error) on master (#2691)
  • Fix warnings and link problems on windows for rpc interface (#2661)
  • Integration of Custom Filament Headless Backend (#2572)
  • RPC receiver for visualizer (#2182)
  • Added support for international characters in the GUI (#2655)
  • Cmake-3.17 required (#2665)
  • Build wheel with Kinect support on CI (#2648)
  • Write point cloud with custom attributes (#2594)
  • Convert to jupyter notebook (#2387)
  • Integrate Faiss to NearestNeighborSearch (#2400)
  • Update RANSAC (#2636)
  • Fix for implicit capture of this in cpp20 (#2638)
  • Nms op for pytorch and tensorflow (#2615)
  • Fixes for LGTM warnings (#2629)
  • Substitute set-env with environment files (#2631)
  • Modify shader to work with Filament's new inverse z buffer (#2626)
  • Voxelize op for torch and tensorflow (#2607)
  • Fix crash on exit if Python variable is assigned a Open3DScene (#2618)
  • Fixed shape check for faces and lines in SetMeshData (#2623)
  • Add function to Open3DScene to allow modifying one geometry's material, and to see if the scene has a geometry (#2612)
  • Create axis geometry on-demand when shown rather than with each geometry change (#2617)
  • Allow arbitrary pinhole camera (#2564)
  • Automatically cast int extents to the right type (#2590)
  • Log non-fatal errors in Visualizer as warnings instead of errors (#2579)
  • Update to match material handling of old OBJ file loader (#2576)
  • Add support for 4 channel (RGBA) color images to CreateFromRGBDImage (#2577)
  • Add pybind for triangle_material_ids (#2573)
  • Fix reading float from PCD, instead of float_t (#2563)
  • Fix string to boolean (#2574)
  • Fix reconstruction system (#2567)
  • Fixed incomplete function call. (#2562)
  • Change variable TriangleMeshSimplification.cpp (#2542)
  • Minor documentation fix (#2554)
  • Faiss Build Test (#2382)
  • Tensor ply read (#2377)
  • Give sheen a default value (i.e., don't leave it unitialized) (#2532)
  • Replace the non utf-8 char “” with "" (#2535)
  • Simplified install instructions for Open3D-ML (#2513)
  • Fix Open3DScene with no background color set not clearing on draw on macOS (#2530)
  • Added example to add geometry to a scene using the new GUI. (#2515)
  • Fixes bug for preloading libc++ and libc++abi in Python (#2527)
  • Allow Scene::AddGeometry to accept bounding boxes (#2520)
  • Add Filament 1.9.5 (#2517)
  • Remove accidental O(n^2) adding of geometries in draw_geometries resulting from a bad merge conflict resolution in d5b95454b (#2523)
  • Add robust kernel colorized icp (#2497) (Nacho)
  • Add miniconda build (#2477)
  • Add dummy texture coordinates for triangle meshes with no texture coordinates to avoid error messages. (#2514)
  • Fix z-buffering problem with labels/gradients in ml3d visualizer (#2512)
  • Better error msg for cuda mismatch (#2503)
  • Fix ambiguous transform (#2491)
  • Workflow dispatch fixes (#2500)
  • Test import of torch and tensorflow (#2496)
  • Fix deadlock with ml3d visualizer on macOS (#2502)
  • Removed shared_ptr as the pybind holder of GUI objects to prevent crashes caused by Python keeping the object alive after Filament resources are destroyed on the Python side. (#2501)
  • Change pybind's run() to not cleanup at the end. (#2499)
  • Added code to fix 'from' import statements in the ml namespaces (#2492)
  • Add MK docs pointer in readme and rst (#2486)
  • Rework Python API for creating windows to avoid crash on exit in some simple situations. (#2485)
  • Documentation build fix (Jupyter + Python visualization.{gui,rendering}) (#2484)

Open3D 0.11.0 is full of features

Open3D 0.11.0 Release Notes

We are excited to present Open3D 0.11.0!

Open3D 0.11.0 introduces a brand new 3D Machine Learning module, nicknamed Open3D-ML. Open3D-ML is an extension of your favorite library to bring support for 3D domain-specific operators, models, algorithms, and datasets. In a nutshell, users can now create new applications combining the power of 3D data and state-of-the-art neural networks! Open3D-ML is included in all the binary releases of Open3D 0.11.0.

Open3D-ML comes with support for Pytorch +1.4 and TensorFlow +2.2, the two most popular machine learning frameworks. The first iteration of this module features a 3D semantic segmentation toolset, including training and inference capabilities for RandlaNet and KPConv. The toolset supports popular datasets such as SemanticKITTI, Semantic3D, 3D Semantic Parsing of Large-Scale Indoor Spaces S3DIS, Toronto3D, and Paris-Lille-3D. Open3D-ML also provides a new model zoo compatible with Pytorch and TensorFlow, so that users can enjoy state-of-the-art semantic segmentation models without hassles.

We have endowed the new Open3D-ML module with a new data viewer tool. Users can now inspect their datasets and model’s predictions in an intuitive and simple way. This visualization tool includes support for Pytorch and TensorFlow frameworks and is fully customizable due to its Pythonic nature.

This viewer has been built upon the new visualization API, integrating the new Rendering and GUI modules. Thanks to the new visualization API, users can perform advanced rendering, fully programmatically from Python and C++. Users can also create slick GUIs with a few lines of Python code. Check out how to do this here.

The Open3D app has also been extended to include the following features:

  • Support for FBX and glTF2 assets
  • Full support for PBR models.

Open3D 0.11 includes for the first time support for Linux ARM (64-bit) platforms. This has been a long-time requested feature that finally made it into the release. You can now enjoy all Open3D features, including our new rendering and visualization pipelines in OpenGL-enabled ARM platform.

[Breaking] Please, notice that the API and the structure of Open3D have changed considerably after an intense refactoring process. You will need to update your code to use the new namespaces. Please, check the full changelog and the documentation for further information.

We hope you find Open3D 0.11.0 exciting and useful. Happy coding!

Remember that you can reach out with questions, requests, or feedback through the following channels:

The Open3D team


  • [Added]: Used to indicate the addition of new features
  • [Changed]: Updates of existing functionalities
  • [Deprecated]: Functionalities / features removed in future releases
  • [Removed]: Functionalities/features removed in this release
  • [Fixed]: For any bug fixes
  • [Breaking] This functionality breaks the previous API and you need to check your code

Installation and project structure

  • [Added] fetch Filament with CMake FetchContent (#2085)
  • [Added] speeds up compilation by caching 3rdparty downloads (#2155)
  • [Added] Show STATIC_WINDOWS_RUNTIME in cmake summary when configuring for Windows (#2176)
  • [Added] Move master releases to new bucket for lifecycle management (#2453)
  • [Added] added missing license header in ml module py files (#2333)
  • [Added] add vis namespace (#2394)
  • [Added] Devel wheels for users (#2429)
  • [Added] Build Filament on ARM64 (#2415)
  • [Changed] cmake: pickup python from PYTHON_EXECUTABLE or from PATH (#1923)
  • [Changed] avoid deduplication of the -gencode option (#1960)
  • [Changed] do not link main library when building the tf ops lib because of (#1981)
  • [Changed] do not use system jsoncpp (#2005)
  • [Changed] update Eigen to use the GitLab commit id (#2030)
  • [Changed] update formatter: clang-format-10, yapf 0.30.0 (#2149)
  • [Changed] disable CMP0104 warning (#2175)
  • [Changed] Build examples iteratively on Windows CI (#2199)
  • [Changed] simplify filament build-from-source (#2303)
  • [Changed] set cmake minimum to 3.15 to support generator expressions in (#2392)
  • [Changed] cmake 3.18 required for windows (#2435)
  • [Changed] ubuntu 20.04 build filament from source CI (#2438)
  • [Fixed] turobojpeg windows static runtime (#1876)
  • [Fixed] fix auto & warning (as error) for clang 10 (#1924)
  • [Fixed] Fix Eigen warning when using CUDA (#1926)
  • [Fixed] fix bug in import_3rdparty_library for paths without trailing '/' (#2084)
  • [Fixed] Fix tbb build (#2311)
  • [Fixed] Fix for cmake externalproject_add patch_command (#2431)
  • [Breaking] restructure project directory and namespace (#1970)
  • [Breaking] reorg: opend3d::gui -> open3d::visualization::gui (#1979)
  • [Breaking] change folder case (#1993)
  • [Breaking] Reorg: Added namespace 'rendering' for visualization/rendering (#2002)
  • [Breaking] remove voxel_pooling namespace (#2014)
  • [Breaking] reorg: remove hash_* namespaces (#2025)
  • [Breaking] Rename GLHelper namespace (#2024)
  • [Breaking] Removed visualization::gui::util namespace (#2013)
  • [Breaking] lower case "open3d/3rdparty" intall dir (#2083)
  • [Breaking] refactor pybind namespace (#2249)
  • [Breaking] renamed torch python namespaces (#2330)
  • [Breaking] Move geometry to open3d::t (#2403)
  • [Breaking] move io to open3d::t (#2406)

CORE features and applications

  • [Added] Add cleanup flag in TriangleMesh::select_by_index (#1883)
  • [Added] Orient normals using propagation on MST of Riemannian graph (#1895)
  • [Added] PointCloudIO: UnitTests and Benchmarks (#1891)
  • [Added] expose UniformTSDFVolume's origin in Python API (#1762)
  • [Added] open3d_show_and_abort_on_warning(Core) (#1959)
  • [Added] ml-module (#1958)
  • [Added] add make check-cpp-style, apply-cpp-style (#2016)
  • [Added] ml op test code and torch reduce_subarrays_sum op (#2050)
  • [Added] CUDA header as system header for CMake 3.16 (#2058)
  • [Added] scalar support to more binary ops (#2093)
  • [Added] Tensor api demo (#2067)
  • [Added] Initial tensor-based pointcloud (#2074)
  • [Added] support Tensor.item() in pybind (#2130)
  • [Added] MKL integration with tests (#2128)
  • [Added] Linear algebra module (#2103)
  • [Added] rpc visualization interface (#2090)
  • [Added] Pick the color for all voxels when creating a dense VoxelGrid. (#2150)
  • [Added] Assimp Base integration (#2132)
  • [Added] ISS(Intrinsic Shape Signature) Keypoint Detection Module (#1966)
  • [Added] ask assimp to build zlib (#2188)
  • [Added] initial tensor-based image class (#2161)
  • [Added] Enable CI on Ubuntu 20.04 (focal) with CUDA on GCE (#2308)
  • [Added] ARM CI (#2414)
  • [Added] initial support for tensor-based mesh (#2167)
  • [Added] pybind for tpoincloud (#2229)
  • [Added] Add pybind for Application::PostToMainThread, fix grammar error in comment (#2237)
  • [Added] Tensor for custom object data types (#2244)
  • [Added] Nearest Neighbor module (#2207)
  • [Added] torch wrapper for voxel pooling (#2256)
  • [Added] Support cuda memory cacher (#2212)
  • [Added] ml-contrib subsample library (#2254)
  • [Added] python binding of NN class (junha/nn pybind) (#2246)
  • [Added] contrib neighbor search for ML ops (#2270)
  • [Added] GCE GPU CI docker (PyTorch + cuDNN) (#2211)
  • [Added] Re-add multithreaded performance improvements to ClassIO (#2230)
  • [Added] torch continuous conv wrappers (#2287)
  • [Added] Support Float32 and Float64 neighbor search (#2241)
  • [Added] Layer interface for voxel_pooling op (#2322)
  • [Added] Fast compression mode for png writing (issue #846) (#2325)
  • [Added] Added pybinds for scene, fixed bug with Open3DScene and LOD (#2323)
  • [Added] NanoFlann Parallel Search (#2305)
  • [Added] XYZI format IO with tgeometry::PointCloud (#2356)
  • [Added] Support CPU/GPU hashmap (#2226)
  • [Added] OpenBLAS/LAPACK and support for ARM (#2205)
  • [Added] Added max error threshold (#2411)
  • [Added] Add function to compute the volume of a watertight mesh (#2407)
  • [Added] Ray/line to axis-aligned bounding box intersections (#2358)
  • [Added] IO wrapper for geometry::PointCloud -> t::geometry::PointCloud (#2462)
  • [Added] Nacho/robust kernels (#2425)
  • [Changed] adjust rtol to allow enough FP tolerance for OPENMP reordering; add .request to all import urllib (#1897)
  • [Changed] Refactor CMake buildsystem (#1782)
  • [Changed] Refactor pointcloud tests (#1925)
  • [Changed] expose poisson rec threads param (#2035)
  • [Changed] TensorList refactoring and comparison tensor ops (#2066)
  • [Changed] updated internal fields of conv layers to ease debugging (#2104)
  • [Changed] speeds up legacy pointcloud converter (#2216)
  • [Changed] Update TriangleMeshSimplification.cpp (#2192)
  • [Changed] object-oriented dtype (#2208)
  • [Changed] use pybind11's gil management (#2278)
  • [Changed] use link target torch_cpu for cpu builds (#2292)
  • [Changed] make 3rdparty_tbb depend on ext_tbb (#2297)
  • [Changed] Update camera.cpp (#2312)
  • [Changed] Delay cuSOLVER and cuBLAS init so exceptions are transferred to Python. (#2319)
  • [Changed] convert noncontiguous tensors instead of throwing an exception. (#2354)
  • [Changed] Refector some image tests failing on arm simulator (#2393)
  • [Changed] Ensure C++ and Python units tests always run (#2428)
  • [Removed] disable CreateFromPointCloudPoisson test for macos (#2054)
  • [Removed] Remove looking for X11 on macOS (#2334)
  • [Removed] Remove unused variable from SolveJacobianSystemAndObtainExtrinsicMatrix (#2398)
  • [Removed] Nacho/remove openmp guards (#2408)
  • [Fixed] fix coord frame origin bug (#2034)
  • [Fixed] fix utility::LogXX {} escape problem (#2072)
  • [Fixed] Release Python GIL for fast multithreaded IO (#1936)
  • [Fixed] PointToPlane and ColoredICP only require target normal vectors. Fix #2075 (#2118)
  • [Fixed] fixed radius search op for torch (#2101)
  • [Fixed] fix windows python dtype convert (#2277)
  • [Fixed] list pytorch device correctly for pytest (#2304)
  • [Fixed] Fix handling of 4 channel images on PNG export (#2326)
  • [Fixed] Fix for "symbol already registered" (#2324)
  • [Fixed] Slice out-of-range (#2317)
  • [Fixed] fix NanoFlannIndexHolderBase mem leak (#2340)
  • [Fixed] fix c_str() temp address warning (#2336)
  • [Fixed] fix required_gradient propagation for the offset parameter (#2350)
  • [Fixed] -bugfix for float extents for torch cconv layer (#2361)
  • [Fixed] Fix nvidia download error (#2423)
  • [Fixed] fix filament default CLANG_DEFAULT_CXX (#2424)

Rendering and visualization

  • [Added] App: add option to material combobox to restore to original values from file (#1873)
  • [Added] Add support for PNG with alpha channel (#1886)
  • [Added] GUI: implements image widget (#1881)
  • [Added] GUI: added threading and loading dialog to app (#1896)
  • [Added] Integrates point cloud I/O progress into app loading progress bar (#1913)
  • [Added] Adds menu option on macOS to make Open3D viewer default for file types (#2031)
  • [Added] Implements python bindings for gui namespace (#2042)
  • [Added] Added gui::TreeView widget (#2081)
  • [Added] Adds ability to set button padding (#2082)
  • [Added] gui::TreeView now supports arbitrary widgets for its cells (#2105)
  • [Added] Added FBX to Open3DViewer dialog (#2204)
  • [Added] GUI changes for Open3D-ML visualization (#2177)
  • [Added] Enable transparency for lit material (#2239)
  • [Added] Add shader for materials with transparency (#2258)
  • [Added] Unconditionally take base color from MATKEY_COLOR_DIFFUSE (#2265)
  • [Added] Added unlitGradient shader for colormaps and LUT (#2263)
  • [Added] Expose method to update vertex attributes (#2282)
  • [Added] Added ability to change downsample threshold in Open3DScene (#2349)
  • [Added] Faster Filament geometry creation for TPointCloud (sometimes up to 90%) (#2351)
  • [Added] Better algorithm for downsampling (#2355)
  • [Added] Add bounding-box-only mode for rotation. (#2371)
  • [Added] Add "__visualization_scalar" handling to FilamentScene::UpdateGeometry (#2376)
  • [Added] Enable python to render to image (#2413)
  • [Added] Added ability to set the preferred with of gui::NumberEdit (#2373)
  • [Added] Expose caching related functions in Python (#2409)
  • [Added] TPointCloud support for new Scene class (#2213)
  • [Added] Downsample point clouds with by using a different index array (#2318)
  • [Added] Added unlitSolidColor shader (#2352)
  • [Added] Added special name for TPointCloud rendering to create UV arrays from scalar on C++ side (#2363)
  • [Added] Add has_alpha to pybind for Material (#2383)
  • [Added Add alpha to baseColor of shader (and simplify some shader calculations) (#2396)
  • [Changed] update_progress callbacks for ReadPointCloud and WritePointCloud (#1907)
  • [Changed] only update single geometry in Visualizer::AddGeometry and Visualizer::RemoveGeometry (#1945)
  • [Changed] Updated Info.plist file for app to claim it edits and is the default type for the file associations. Also adds .pcd as a supported file type. (#2001)
  • [Changed] overload draw_geometries (#1997)
  • [Changed] Visualization refactor: Open3DViewer and rendering::Scene (#2125)
  • [Changed] Disable MTL file saving for OBJ files with no UVs and textures (issue #1974) (#2164)
  • [Changed] Upgrade Open3D to use Filament 1.8.1 (#2165)
  • [Changed] Improve UI responsiveness when viewing large models (#2384)
  • [Changed] Force scene redraw when layout changes (#2412)
  • [Fixed] Fix window showing buffer from last resize when a window is moved on macOS (#2076)
  • [Fixed] Fixed crash when create an autosizing window with no child windows (which would autosize to (0, 0), which doesn't go over well) (#2098)
  • [Fixed] Fixed hidpi on Linux (#2133)
  • [Fixed] Tell macOS that Python using GUI on macOS works like an app (#2143)
  • [Fixed] Fix GUI to build with Windows (#2153)
  • [Fixed] Model loading and rendering (#2194)
  • [Fixed] Fix rendering anomalies with ao/rough/metal texture (#2243)
  • [Fixed] Fix not being able to load any geometry (#2273)
  • [Fixed] fix screen rendering in offscreen mode (#2257)
  • [Fixed] Fix 'All' option in file dialog in (#2274)
  • [Fixed] Fix left side of checkboxes in a treeview on the left not being clickable (#2301)
  • [Fixed] Fix checkboxes in treeview not always redrawing when clicked (#2314)
  • [Fixed] Fix crash on Abandoned FBX model (#2339)
  • [Fixed] Fixes for UI anomalies caused by responsiveness changes (#2397)
  • [Fixed] Force redraw when menu visibility changes (#2416)
  • [Fixed] Fix Scene::SetBackgroundColor() not working if ShowSkybox() not previously called (#2452)
  • [Fixed] Caching Related Bug Fixes (#2451)
  • [Fixed] Clean up Filament to avoid crashes. (#2348)
  • [Removed] Eliminate union in MaterialParameter as it was being used incorrectly (#1879)

Documentation, tutorials, and examples

  • [Added] jupyter tutorial on compute_point_cloud_distance (#1884)
  • [Added] add cmake 3.12+ installation docs (#1914)
  • [Added] Docs updated for build with CUDA (#2055)
  • [Added] improved doc for ml layers and ops (#2296)
  • [Added] added documentation about the ml build options (#2401)
  • [Added] add docs for arm build (#2445)
  • [Changed] Update docker-gui.rst (#1868)
  • [Changed] Docs: disable multiprocessing for sphinx-build (#1951)
  • [Changed] doxygen: fix for reorg; cleanup namespaces (#1975)

Open3D 0.10.0 is out!

Open3D 0.10.0 Release Notes

We are proud to present the 0.10.0 release of Open3D!

For this release, the Open3D team set its focus on the theme of Visualization and Rendering. For starters, we upgraded Open3D rendering capabilities, adding a new real-time renderer based on Filament. This renderer brings support for spatially-varying BRDFs, the Cook-Torrance model, Image-Based Lighting, and Physically-based rendering, among many other improvements. Overall, this translates into a much better rendering quality, endowing 3D models of a higher realism and beauty.

[Warning] As a consequence, we are deprecating the traditional rendering system in favor of the new one. But do not panic, the new rendering system and the traditional system will live together until the 0.12.0 release of Open3D when it will be officially removed from the project.

In order to improve the process of 3D visualization, Open3D has incorporated a new GUI module. It was decided to base the new GUI module on the successful Dear ImGui project due to its compact size and the possibilities of its immediate mode. This new GUI module will help 3D developers to build tailored nice-looking graphical applications with minimum effort.

As an example of what can be done with the GUI module, the Open3D team has developed a new standalone application for 3D visualization, in combination with the new rendering engine. The Open3D 3D visualizer is the quickest and easiest way of making your models look outstanding! Try it yourself by downloading it here (MacOSX).

It is believed that one of the most critical aspects of an open-source project is the quality of its documentation. For this reason, in every release, the team makes a big effort to bring you documentation of the highest quality possible. On this occasion, we decided to upgrade our tutorials to make them interactive. This allows users to directly play and experiment with the concepts presented in each tutorial. The new tutorials, in Jupyter notebook format, can be found here.

Finally, the GPU support that many of you have been requesting has started to make its way into master. In this first step, Open3D brings experimental support for a new Tensor library, that can be transparently used in CPUs and GPUs. We will keep migrating the entire library step-by-step, so please be patient. Feel free to test it out and provide us with feedback.

We hope you find Open3D 0.10.0 useful. Happy coding!

Remember that you can reach out with questions, requests, or feedback through the following channels:

The Open3D team


  • [Added]: Used to indicate the addition of new features
  • [Changed]: Updates of existing functionalities
  • [Deprecated]: Functionalities / features removed in future releases
  • [Removed]: Functionalities/features removed in this release
  • [Fixed]: For any bug fixes
  • [Breaking] This functionality breaks the previous API and you need to check your code

Installation and project structure

  • [Added] Enable /bigobj flag for Windows debug build (#1660)
  • [Fixed] Fix brew link problem for python/tbb on OSX for CI (#1440)
  • [Fixed] Windows MSVC compilation warnings (#1663)
  • [Fixed] Typo in make docs (#1806)

CORE features and applications

  • [Added] GPU-enabled Tensor and TensorList (#1399)
  • [Added] Python binding for Tensor and Numpy/Pytorch I/O (#1455)
  • [Added] Added cache variables and code for selecting the gpu arch (#1478)
  • [Added] project_valid_depth_only option to [PointCloudFactory/CreatePointCloud] (#1402)
  • [Added] TensorList pybind (#1505, #1557)
    Thanks, iory
  • [Added] [voxel_down_sample_and_trace] Always return point references (#1406). Thanks, iory
  • [Added] Tensor binary element-wise ops (#1460)
  • [Added] Enable building docs for pure python submodules (#1520)
  • [Added] Option for using the triangle normal for sampled points (#1539)
  • [Added] added get_surface_area to pybind module (#1540)
  • [Added] 3rdparty library cutlass (#1551)
  • [Added] Tensor unary ops sqrt, sin, cos, neg, exp ops (#1532)
  • [Added] Tensor::To for type casting (#1533)
  • [Added] Python slice for Tensor class (#1545)
  • [Added] Proper pybind for Vector2dVector (#1623)
  • [Added] Log error in PointCloud::SegmentPlane() if there are less than ransac n points (#1637)
  • [Added] Tensor::Abs and python bindings (#1620)
  • [Added] Seed argument to mesh sampling functions (#1682) (#1683). Thanks, rowoflo
  • [Added] unified regular and advanced indexing for Tensor, and pybind (#1613)
  • [Added] boolean dtype, logical ops, comparision ops (#1652)
  • [Added] microbenchmark framework (#1696)
  • [Added] Speeds up compilation (#1722)
  • [Added] reduction op support for cpu and gpu (#1730)
  • [Added] support for building TensorFlow ops (#1780)
  • [Added] Tensor creation shortcuts and scalar value op (#1779)
  • [Added] Tensor::Fill explicit specialization, reduce number of outputs (#1801)
  • [Added] Tensor::NonZero and boolean mask advanced indexing (#1681)
  • [Changed] Update travis configuration to support clang-7 and gcc 7.4. (#1471)
  • [Changed] Update VoxelGrid::CarveSilhouette and VoxelGrid::CarveDepthMap to support only carving voxels that project to image (#1441) (#1457). Thanks, jkerfs
  • [Changed] Avoid cstdlib random generators in ransac for global registration (#1486). Thanks, sambarluc
  • [Changed] Boolean expression in GlobalOptimization.cpp (#1509). Thanks, scimad
  • [Changed] Give sensible name for python argument in visualizer.cpp (#1518). Thanks,
  • [Changed] Moved 3rdparty packages down a level to not pollute the include space (#1499). Thanks, tykurtz
  • [Changed] Suppress developer warning for OpenGL preferred library with CMAKE_VERSION>= 3.11 (#1628). Thanks, akashsharma02
  • [Changed] Update tinygltf submodule to fix a bug with exported attributes (#1711). Thanks, mosra
  • [Changed] Binary op output must fit in the output tensor (#1777)
  • [Changed] Changed center parameter in Scale and Rotate (#1774)
  • [Changed] use lowest instead of min for smallest value (#1827)
  • [Fixed] Fix number of edge not showing on verbose message (#1498). Thanks, scimad
  • [Fixed] Bug in update_geometry (#1501). Thanks, Forest75
  • [Fixed] PyTorch import segfault, set CXX_ABI (#1262)
  • [Fixed] Function names remove_non_finite_points and select_by_index (#1630)
  • [Fixed] Alpha shape pybind (#1624)
  • [Fixed] Some cameras are flipped (in the z-axis) when the bounding_box center of the scene is not visible (#1447). Thanks, pablospe
  • [Fixed] SyntaxWarning: replace 'is' with '==' for literals. (#1664). Thanks, hzxie
  • [Fixed] Bug in open3d::geometry::TriangleMesh::ClusterConnectedTriangles (#1669). Thanks, Akella17
  • [Fixed] VoxelGrid.voxels bug #1535 (#1688). Thanks, kosuke55
  • [Fixed] Issue #1689 (#1690). Thanks, akashsharma02
  • [Fixed] Windows warnings (as errors) (#1739)
  • [Fixed] Typos in several Geometry classes (#1773). Thanks, roehling
  • [Fixed] Windows Kinect compile issue (#1796)
  • [Fixed] get_xyz_from_pts interpolation (#1799)
  • [Fixed] colormap segfault and refactor (#1813)
  • [Fixed] Oriented bounding box GetPointIndicesWithinBoundingBox (#1798)

Rendering and visualization

  • [Added] Key callback action event to handle PRESS, RELEASE, REPEAT (#1313). Thanks, sammo2828
  • [Added] Filament integration (#1331, #1512, #1514, #1519, )
  • [Added] GUI module (#1451, #1481, #1495, #1430, #1434, #1435, #1565)
  • [Added] Standalone Visualization application (#1470, #1562, #1572, #1573, #1569, #1583, #1584, #1586, #1585, #1587, #1588, #1591, #1590, #1595, #1593, #1596, #1602, #1601, #1604, #1607, #1608, #1609, #1610, #1611, etc.)
  • [Added] Supports multiple textures in .obj file (#1517)
  • [Fixed] Headless Rendering with traditional system (#1695)

Documentation, tutorials, and examples

  • [Added] Jupyter tutorial for point cloud (#1631, #1640)
  • [Added] Make documentation buildable without Git source tree (#1772). Thanks, roehling
  • [Changed] Contributions guidelines (#1465)
  • [Changed] CPP documentation (#1541)
  • [Fixed] Typos fixed in compilation.rst and visualization.rst (#1476, #1477). Thanks, pauljurczak
  • [Fixed] Minor typo in compilation.rst (#1513). Thanks, scimad
  • [Fixed] Consistency in documentation filenames (#1511). Thanks, scimad
  • [Fixed] filename error in capture_your_own_dataset.rst tutorial (#1525). Thanks, scimad
  • [Fixed] Pass correct parameter into function update_geometry()(#1528). Thanks, Forest75
  • [Fixed] Fix bug in non_blocking_visualization.rst example (#1537). Thanks, scimad
  • [Fixed] Incorrect file name in a ReconstructionSystem document (#1699). Thanks, muskie82

Open3D 0.9.0 is ready!

Open3D 0.9.0 Release Notes

The Open3D team and the Open Source Vision Foundation are proud to present the 0.9.0 release of the Open3D library.

This release brings two exciting algorithms for processing point clouds and meshes: Poisson surface reconstruction and as-rigid-as-possible deformation. You can find a reference for how to use these algorithms in the following examples:

The problems related to headless mode rendering have also been solved in this release, among other bug fixes!

This is the last release of Open3D with support for Python 2.7.

On behalf of the Open3D team, we would like to thank our technical writer, Rohan Rathi and the Google season of docs organization for their help in the critical task of improving Open3D documentation. Your contribution has served to make Open3D more accessible to new users.

We are also happy to announce our new Discourse forum, which becomes the official way to discuss issues related to Open3D.

In an effort to improve our communication with the Open3D community and all the developers that use this library, we have created a new mailing list: Here developers and contributors can obtain first-hand information about the development progress of Open3D, the library’s roadmap, and information on how to proceed to implement new features. You can also join the mailing list via Google groups

Take a look at our documentation Open3D docs to see all the details, and send us feedback at You can also join our Discourse forum or the Discord network to participate in the development discussions.


The Open3D team


  • [Added]: Used to indicate the addition of new features
  • [Changed]: Updates of existing functionalities
  • [Deprecated]: Functionalities / features removed in future releases
  • [Removed]: Functionalities/features removed in this release
  • [Fixed]: For any bug fixes
  • [Breaking] This functionality breaks the previous API and you need to check your code

Installation and project structure

  • [Added] Add optional flag to script #1191
  • [Changed] Restructure to expose python package at top level #1251
  • [Changed] avoid duplicate -O3 flag at Release build #1280
  • [Changed] CMake Option to use system installed libjpeg-turbo #1294
  • [Fixed] fix link warning #1223
  • [Breaking] Upgrade compiler #1327
  • [Deprecated] Support for Python 2.7

CORE features and applications

  • [Added] Implement image flip functions #1186
  • [Added] Merge close vertices #1189
  • [Added] Support rendering textured triangle mesh #1194
  • [Added] Add some Python init functions to geometry classes #1228
  • [Added] Cluster TriangleMesh Connected Components #1272
  • [Added] Support for Large PTS File IO #1279
  • [Added] Deform TriangleMesh using as-rigid-as-possible #1312
  • [Added] Add geometry without resetting bounding box #1315 (Thanks sammo2828!)
  • [Added] Poisson Surface Reconstruction #1317
  • [Added] Implementation of Alpha Shapes #1320
  • [Added] New ClearGeometries for Visualizer #1338 (Thanks sammo2828!)
  • [Added] Added VisualizerWithVertexSelection #1390
  • [Changed] std::unordered_map for voxelgrid structure #1180
  • [Changed] New Mesh Class Structure #1184
  • [Changed] Warning if no normals in ColoredICP #1187
  • [Changed] Update type check for open3d PointCloud #1193
  • [Changed] TexturedTriangleMesh clean up #1208
  • [Changed] LogFatal to throw exception rather than exit() #1209
  • [Changed] OrientedBoundingBox parameter update and crop #1218
  • [Changed] Polish global optimization #1224
  • [Changed] Proper LogError and LogWarning #1237
  • [Changed] Refactor Image::Prepare() in RealSense.cpp #1277
  • [Changed] Expose get_rotation_matrixfrom* directly in open3d.geometry #1355
  • [Changed] Expose RenderOption.mesh_show_wireframe to Python API #1388 (Thanks sammo2828)
  • [Changed] Only update single geometry in Visualizer::AddGeometry and Visualizer::RemoveGeometry #1392 (Thanks sammo2828)
  • [Changed] Improve numeric stability of TriangleTriangle3d #1177
  • [Fixed] fopen wrapper to enable unicode paths in Windows #1190
  • [Fixed] Fix read_rgbd_image in #1192
  • [Fixed] Fix operator+ of AxisAlignedBoundingBox #1205
  • [Fixed] fixed maybe-uninitialized warning in TetraMesh.cpp #1212
  • [Fixed] Fast Global Registration does not populate fitness, inlier_rmse, and `corres #1001 #1221
  • [Fixed] fix control may reach end warning for VFatal #1222
  • [Fixed] fix control may reach end warning for VError #1288
  • [Fixed] Quick fix to colored icp #1292
  • [Fixed] fix write ply color values clamped #1306
  • [Fixed] osMesa headless rendering fixed #1358
  • [Fixed] Fix BPA memory leak #1363

Documentation, tutorials, and examples

  • [Changed] Improve docs for color map #1270 (Thanks RohanRathi)
  • [Changed] Improve docs for camera #1271(Thanks RohanRathi)
  • [Changed] Improve docs on Bounding Boxes for CPP api #1282 (Thanks RohanRathi)
  • [Changed] Update python bindings & add docs for Bounding Box #1319 (Thanks RohanRathi)
  • [Changed] Add script details in docs #1342 (Thanks RohanRathi)

Open3D 0.8.0 is here!

Open3D Version 0.8.0 (released 2019-09-06)

The Open3D team and the Open Source Vision Foundation are excited to share with the community Open3D 0.8.0!

Starting from this release, we'll be using the open3d package name instead of open3d-python on PyPI. You can now install Open3D with:

# Pip
pip install open3d

# Conda
conda install -c open3d-admin open3d

In this release, we bring support for the brand new Azure Kinect sensor. Users can enjoy the benefits of this RGB-D sensor through the simple Python and C++ APIs provided by Open3D.

We bring in a new geometry type, the Tetrahedral Mesh, which supports Delaunay triangulation from PointCloud, isosurface extraction to TriangleMesh and visualization. We also bring in two algorithm implementations, check out Ball Pivoting and DBSCAN.

As usual, we received many contributions from the community. Thank you all for your contribution and support! We also worked extensively on fixing issues brought up by the community. Please, have a look at our documentation Open3D docs to see all the details, and send us feedback at You can also join our Discord network to participate in the development discussions.

The Open3D team



  • [Added]: Used to indicate the addition of new features
  • [Changed]: Updates of existing functionalities
  • [Deprecated]: Functionalities / features removed in future releases
  • [Removed]: Functionalities/features removed in this release
  • [Fixed]: For any bug fixes
  • [Breaking] This functionality breaks the previous API and you need to check your code

Installation and project structure

  • [Added] Make include directories in Open3DConfig.cmake relative again #1025 (Thanks pezcode!)
  • [Changed] Replace libjpeg with libjpeg-turbo #1097
  • [Deprecated] libjpeg dependency #1097
  • [Fixed] empty bdist_wheel #1012  #970 #780 #905
  • [Fixed] master build error, fix yapf==0.28.0 #1071
  • [Fixed] Warning compile flags and fixing warning #1077

CORE features and applications

  • [Added] Expose CaptureDepthPointCloud to python interface #1014 (Thanks JackLangerman)
  • [Added] FileOBJ for TriangleMesh #1021
  • [Added] Option to remove NaN points in ReadPointCloud#1022
  • [Added] FileOFF for TriangleMesh #1035 (Thanks kongsgard)
  • [Added] DBSCAN clustering algorithm #1038
  • [Added] VoxelGrid Carving #1048
  • [Added] Add flags to the write triangle mesh methods #1051 (Thanks kongsgard)
  • [Added] function is_watertight() to TriangleMesh #1053  (Thanks kongsgard)
  • [Added] Triangulation by ear clipping #1060  (Thanks kongsgard)
  • [Added] FileGLTF for TriangleMesh #1082 (Thanks kongsgard)
  • [Added] Kinect recorder #1094
  • [Added] visualization of RGBD images #1107
  • [Added] Azure Kinect support with python interface #1118
  • [Changed] TriangleMesh Filter improvements, GetBounds improvements #1010
  • [Changed] Logging/Print #1069
  • [Removed] unary_function from hash_eigen #1023
  • [Removed] remove TSDFVoxelGrid class #1079
  • [Fixed] PointCloud EstimateNormals fix #1011
  • [Fixed] Check for mesh normals before saving STL file #1041 (Thanks kongsgard)
  • [Fixed] Set z_near_ close to 0 #1080
  • [Fixed] internal texture format in RGBDImageShader #1111
  • [Fixed] Control flows and improve performance #1112


Documentation, tutorials, examples and tests

  • [Added] Documentation to build docs #1036 (Thanks RohanRathi)
  • [Added] Support multiple documentation version in #1055
  • [Changed] Update file_io.rst #1020 (Thanks kongsgard)
  • [Changed] Python and C++ docs for Camera PinholeCameraIntrinsic #1039 (Thanks RohanRathi)
  • [Changed] getting_started.rst #1113
  • [Fixed] python unit test #1031
  • [Fixed] correct typo #1088 (Thanks JackLangerman)