Version 0.5.0
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
andrandom_quaternions
no longer have a potentially confusingrequires_grad
parameter. | commit - The call
pytorch3d.loss.mesh_laplacian_smoothing.laplacian_cot(meshes)
should now bepytorch3d.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
andCameras
) 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 aTextures
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