Skip to content

Version 0.5.0

Compare
Choose a tag to compare
@bottler bottler released this 05 Aug 14:51

This release includes several very significant bug fixes and performance improvements as well as some new features for rendering, dataloading and visualization. Please read the breaking changes carefully and update your code accordingly for this new PyTorch3D version.

Breaking changes

  • This commit changes the cameras objects and will affect you if (a) you use a cameras object with non-square images, (b) you call the transform_points_screen method, (c) you initialise a cameras object in screen space, i.e. you have been specifying image_size. See here for more details on the changes and how to update your code.
  • The functions random_rotations, random_rotation and random_quaternions no longer have a potentially confusing requires_grad parameter. | commit
  • The call pytorch3d.loss.mesh_laplacian_smoothing.laplacian_cot(meshes) should now be pytorch3d.ops.cot_laplacian(meshes.verts_packed(), meshes.faces_packed()) | commit

New deprecations

  • The function so3_exponential_map deprecated in favor of new function so3_exp_map | commit

New features

  • Cameras can be defined and used regardless of coordinate system conventions. They can be defined in NDC or screen space and are converted appropriately to interface with the PyTorch3D renderers according to their conventions | commit
  • The standard mesh laplacian calculation has been added and now all three laplacians (standard, cot, norm) live in pytorch3d.ops.laplacian_matrices | commit
  • RayBundles can be viewed in plotly_vis | commit
  • Support for the OFF file format for loading meshes | commit
  • Experimental support for loading some glTF files | commit
  • PLY format now supports mesh vertex colors, i.e. TexturesVertex | commit
  • Saving a mesh to an OBJ file can include TexturesUV data | commit
  • User can now specify vertex normals explicitly on a Meshes object | commit
  • Pointcloud normals and mesh vertex normals can now be saved to and loaded from PLY files
  • New rotate_on_spot function to relatively rotate a camera position | commit
  • New AmbientLights object for ambient-only lighting | commit
  • Updated the alpha channel in the hard_rgb_blend function to return the mask of the pixels which have overlapping mesh faces | commit
  • Camera conversions from and to OpenCV cameras
  • SE3 exponential and logarithm maps | commit
  • TensorProperties classes (e.g. Pointclouds and Cameras) now have a cuda() function. | commit

Internal-facing new features

  • New linearly extrapolated acos function | commit
  • New custom 3x3 determinant calculation | commit
  • New function Meshes.has_verts_normals | commit
  • Features for enhanced type safety

Bug fixes

  • Fix to cotcurv method of the mesh_laplacian_smoothing | commit
    When a Transform3D is constructed without specifying the device but with tensor data input (e.g. a rotation matrix), it will now default to the device of the tensor. | commit
  • Fix to frustrum culling when z_clip_value=None | commit
  • Fix to mesh rendering when frustrum culling culls everything | commit
  • Mesh renderer stability with very small faces | commit
  • Transform3d.to() now works to change dtype without changing device | commit
  • Multiple issues with shape broadcasting in lighting, shading and blending | commit
  • Rendering a nonsquare image when the H and W are not integer multiples commit
  • Fix to pulsar non-square image rendering | commit
  • Pulsar cameras now more reliably match PyTorch3D ones | commit
  • Pulsar gradient now calculated when no other gradient is needed | commit
  • TensorProperties classes (e.g. Pointclouds and Cameras) will always remember their device if the default cuda device changes. | commit
  • Now matrix_to_quaternion is correct for rotations by 180˚ | commit
  • In tutorials: updates for changes to PyTorch | commit (avoiding gradients) and numpy | commit. Load tutorial utils correctly on Colab | commit
  • Fix to subsampling multiple large pointclouds for plotly visualization | commit
  • Fix bug when join_batch is used to join meshes with TexturesVertex | commit
  • PLY files with uint8 colors are now scaled correctly | commit
  • Fix save_ply with noncontiguous faces | commit
  • Fix to ShapeNet dataloader: works when not loading textures, install will not miss the json files | commit
  • Calling extend() with a user’s subclass of a Textures object respects the subclass (#618) | commit
  • TexturesUV.join_scene works with any number of channels | commit
  • Documentation updates for Volume renderer and RayBundle

Small improvements including speedups

  • Improved so3 functions to make gradient computation stable | commit
  • Mesh normal consistency speedup | commit
  • Add error checks when texture objects are inconsistent with their meshes | commit
  • Speedup checking density bounds in volume renderer | commit
  • More validation of a list of texture maps | commit
  • Transform3D avoids gradient calculation when checking rotation matrix | commit
  • Avoid recalculating normals when a mesh is scaled or translated
  • When TexturesUVs have a list of maps and some are identical, a subsequent join_scene will detect this and not duplicate the data | commit