Changelogs:
Highlights
The Kaolin 0.9 release include a reformat of the API and various improvment of the performance and the ergonomy of Kaolin.
A reformat was required to be able to have a maintainable, clean and reliable Kaolin in the long term.
Low level API
Mesh class contained too many attributes and methods that were too specific or unused or redundant.
Also given how quickly the field can shift to new methods, having a fixed class representation can be a constraint. We chose to focus on low-level functions with torch tensors as inputs / outputs, to favor reusability.
High-level representation will be added later once the common use cases get more easy to define.
Model Zoo
Maintainable and reliable Kaolin means a more compact library. We decided to move the model zoo out of Kaolin, this model zoo will have a dedicate repository, will rely on release of Kaolin, and so will be maintained separately.
Batching
Kaolin is now fully batched, by default with a fixed topology, but also (with limited support) representation for heterogenous structures using packed and padded approch, see [documentation](https://kaolin.readthedocs.io/en/v0.9.0/modules/kaolin.ops.batch.html) for more details.
We intend to provide more primitive ops for heterogenous structures.
Optimizations
We've been mostly focusing on GPU efficiency.
Among the optimizations, speedups are reported on:
- `kaolin.render.mesh.rasterization.dibr_rasterization(height, width, face_vertice_z, face_vertices_image, face_features, face_normals_z)` (~1.35x faster).
- GraphConv: added a functionality of pre-normalization of the adjacency matrix `kaolin.ops.gcn.GraphConv(node_feat, adj, normalized_adj=False)` (~1.85x faster).
- `kaolin.ops.mesh.check_sign(vertices, faces, points, hash_resolution)`: (~2.75x faster).
- `kaolin.ops.mesh.sample_points(vertices, faces, num_samples, areas)`: added a functionality of pre-computation of faces areas (~1.6x faster)
- `kaolin.ops.conversions.voxelgrids_to_cubic_meshes(voxelgrids, is_trimesh)` (~17x faster on cpu, >10000x faster on gpu)
- `kaolin.ops.voxelgrid.downsample(voxelgrids, scale)` (~6.2x faster on cpu, ~25x faster on gpu)
- `kaolin.ops.voxelgrid.fill(voxelgrids)` (~1.3x faster on cpu)
- `kaolin.ops.voxelgrid.extract_surface(voxelgrids)` (~6.9x faster on cpu, ~37x faster on gpu)
- `kaolin.ops.voxelgrid.extract_odms(voxelgrids)` (~250x faster on cpu, ~1276x faster on gpu)
- `kaolin.ops.voxelgrid.project_odms(odms, voxelgrids, votes)` (~125x faster on cpum ~882x faster on gpu)
We added a cuda implementation of lorensen's marching cube (used in `kaolin.ops.conversions.voxelgrids_to_trianglemeshes(voxelgrids, iso_value)`)
We added backpropagation to the triangle distance (used in `kaolin.metrics.trianglemesh.point_to_mesh_distance(pointcloud, vertices, faces)`) and side distance (used in `kaolin.metrics.pointcloud.sided_distance(p1, p2)`, `kaolin.metrics.pointcloud.chamfer_distance(p1, p2, w1, w2)`, `kaolin.metrics.pointcloud.f_score(gt_points, pred_points, radius, eps)`).
USD Visualization
We now provide importer and exporter to [Universal Scene Description](https://developer.nvidia.com/usd) files, see [the documentation](https://kaolin.readthedocs.io/en/latest/modules/kaolin.io.usd.html) for more information.
You can open those file using the Omniverse companion app, see Kaolin [Devpage](https://developer.nvidia.com/kaolin).
Contributors
In alphabetical order:
Wenzheng Chen
Sanja Fidler
Clement Fuji Tsang
Jason Gorski
Jean-Francois Lafleche
Rev Lebaredian
Jianing Li
Frank Shen
Masha Shugrina
Gavriel State
Jiehan Wang
Tommy Xiang