Summary:
Copypasting the docstring:
```
Split a mesh into submeshes, defined by face indices of the original Meshes object.
Args:
face_indices:
Let the original mesh have verts_list() of length N.
Can be either
- List of length N. The n-th element is a list of length num_submeshes_n
(empty lists are allowed). Each element of the n-th sublist is a LongTensor
of length num_faces.
- List of length N. The n-th element is a possibly empty padded LongTensor of
shape (num_submeshes_n, max_num_faces).
Returns:
Meshes object with selected submeshes. The submesh tensors are cloned.
Currently submeshing only works with no textures or with the TexturesVertex texture.
Example:
Take a Meshes object `cubes` with 4 meshes, each a translated cube. Then:
* len(cubes) is 4, len(cubes.verts_list()) is 4, len(cubes.faces_list()) is 4,
* [cube_verts.size for cube_verts in cubes.verts_list()] is [8, 8, 8, 8],
* [cube_faces.size for cube_faces in cubes.faces_list()] if [6, 6, 6, 6],
Now let front_facet, top_and_bottom, all_facets be LongTensors of
sizes (2), (4), and (12), each picking up a number of facets of a cube by specifying
the appropriate triangular faces.
Then let `subcubes = cubes.submeshes([[front_facet, top_and_bottom], [], [all_facets], []])`.
* len(subcubes) is 3.
* subcubes[0] is the front facet of the cube contained in cubes[0].
* subcubes[1] is a mesh containing the (disconnected) top and bottom facets of cubes[0].
* subcubes[2] is a clone of cubes[2].
* There are no submeshes of cubes[1] and cubes[3] in subcubes.
* subcubes[0] and subcubes[1] are not watertight. subcubes[2] is.
```
Reviewed By: bottler
Differential Revision: D35440657
fbshipit-source-id: 8a6d2d300ce226b5b9eb440688528b5e795195a1
Summary:
Sort a mesh's vertices in alphabetical order, and resort the face coords accordingly. Textured meshes are not supported yet, but will be added down the stack.
This, togehter with mesh equality, can be used to compare two meshes in a way invariant to vertex permutations, as shown in the unit tests.
We do not want the submeshing mechanism to guarantee any particular vertex order, leaving that up to the implementation, so we need this function for testing.
Reviewed By: bottler
Differential Revision: D35440656
fbshipit-source-id: 5a4dd921fdb00625a33da08b5fea79e20ac6402c
Summary: Adding a mesh equality operator. Two Meshes objects m1, m2 are equal iff their vertex lists, face lists, and normals lists are equal. Textures meshes are not supported yet, but will be added for vertex textures down the stack.
Reviewed By: bottler, nikhilaravi
Differential Revision: D35440655
fbshipit-source-id: 69974a59c091416afdb2892896859a189f5ebf3a
Summary:
The default behavior of Meshes (with verts=None, faces=None) throws an exception:
```
meshes = Meshes()
> ValueError: Verts and Faces must be either a list or a tensor with shape (batch_size, N, 3) where N is either the maximum number of verts or faces respectively.
```
Instead, let's default to an empty mesh, following e.g. PyTorch:
```
empty_tensor = torch.FloatTensor()
> torch.tensor([])
```
this change is backwards-compatible (you can still init with verts=[], faces=[]).
Reviewed By: bottler, nikhilaravi
Differential Revision: D35443453
fbshipit-source-id: d638a8fef49a089bf0da6dd2201727b94ceb21ec
Summary:
Added L1 norm for KNN and chamfer op
* The norm is now specified with a variable `norm` which can only be 1 or 2
Reviewed By: bottler
Differential Revision: D35419637
fbshipit-source-id: 77813fec650b30c28342af90d5ed02c89133e136
Summary: A new type of auto-expanded member of a Configurable: something of type Optional[X] where X is a Configurable. This works like X but its construction is controlled by a boolean membername_enabled.
Reviewed By: davnov134
Differential Revision: D35368269
fbshipit-source-id: 7e0c8a3e8c4930b0aa942fa1b325ce65336ebd5f
Summary:
Try again to solve https://github.com/facebookresearch/pytorch3d/issues/1144 pickling problem.
D35258561 (24260130ce) didn't work.
When writing a function or vanilla class C which you want people to be able to call get_default_args on, you must add the line enable_get_default_args(C) to it. This causes autogeneration of a hidden dataclass in the module.
Reviewed By: davnov134
Differential Revision: D35364410
fbshipit-source-id: 53f6e6fff43e7142ae18ca3b06de7d0c849ef965
Summary: Aid reflection by adding the original declared types of replaced members of a configurable as values in _processed_members.
Reviewed By: davnov134
Differential Revision: D35358422
fbshipit-source-id: 80ef3266144c51c1c2105f349e0dd3464e230429
Summary: Use logging instead of printing in the internals of implicitron.
Reviewed By: davnov134
Differential Revision: D35247581
fbshipit-source-id: be5ddad5efe1409adbae0575d35ade6112b3be63
Summary: This might make the implicitron tests work better on RE.
Reviewed By: davnov134
Differential Revision: D35283131
fbshipit-source-id: 4dda9684f632ab6e9cebcbf1e6e4a8243ec00c85
Summary:
ListConfig and DictConfig members of get_default_args(X) when X is a callable will contain references to a temporary dataclass and therefore be unpicklable. Avoid this in a few cases.
Fixes https://github.com/facebookresearch/pytorch3d/issues/1144
Reviewed By: shapovalov
Differential Revision: D35258561
fbshipit-source-id: e52186825f52accee9a899e466967a4ff71b3d25
Summary:
Previously, dtypes were not propagated correctly in composed transforms, resulting in errors when different dtypes were mixed. Even specifying a dtype in the constructor does not fix this. Neither does specifying the dtype for each composition function invocation (e.g. as a `kwarg` in `rotate_axis_angle`).
With the change, I also had to modify the default dtype of `RotateAxisAngle`, which was `torch.float64`; it is now `torch.float32` like for all other transforms. This was required because the fix in propagation broke some tests due to dtype mismatches.
This change in default dtype in turn broke two tests due to precision changes (calculations that were previously done in `torch.float64` were now done in `torch.float32`), so I changed the precision tolerances to be less strict. I chose the lowest power of ten that passed the tests here.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/1141
Reviewed By: patricklabatut
Differential Revision: D35192970
Pulled By: bottler
fbshipit-source-id: ba0293e8b3595dfc94b3cf8048e50b7a5e5ed7cf
Summary: Allow things like `renderer:Optional[BaseRenderer]` in configurables.
Reviewed By: davnov134
Differential Revision: D35118339
fbshipit-source-id: 1219321b2817ed4b26fe924c6d6f73887095c985
Summary: To ensure that tests outside implicitron/ don't use implicitron, split the test for recursive includes in to two. License header checking is not needed here any more.
Reviewed By: shapovalov
Differential Revision: D35077830
fbshipit-source-id: 2ebe7436a6dcc5d21a116434f6ddd08705dfab34
Summary:
Before the fix, running get_default_args(C: Callable) returns an unstructured DictConfig which causes Enums to be handled incorrectly. This is a fix.
WIP update: Currently tests still fail whenever a function signature contains an untyped argument: This needs to be somehow fixed.
Reviewed By: bottler
Differential Revision: D34932124
fbshipit-source-id: ecdc45c738633cfea5caa7480ba4f790ece931e8
Summary: Using the API from D35012121 everywhere.
Reviewed By: bottler
Differential Revision: D35045870
fbshipit-source-id: dab112b5e04160334859bbe8fa2366344b6e0f70
Summary: We often want to iterate over frames in the sequence in temporal order. This diff provides the API to do that. `seq_to_idx` should probably be considered to have `protected` visibility.
Reviewed By: davnov134
Differential Revision: D35012121
fbshipit-source-id: 41896672ec35cd62f3ed4be3aa119efd33adada1
Summary: Fix assumption that face indices are signed in the PLY file, as reported in #1104.
Reviewed By: nikhilaravi
Differential Revision: D34892598
fbshipit-source-id: a8b23bfac1357bdc11bbbf752098319142239804
Summary: As reported in https://github.com/facebookresearch/pytorch3d/pull/1100, a rasterizer couldn't be moved if it was missing the optional cameras member. Fix that. This matters because the renderer.to calls rasterizer.to, so this to() could be called even by a user who never sets a cameras member.
Reviewed By: nikhilaravi
Differential Revision: D34643841
fbshipit-source-id: 7e26e32e8bc585eb1ee533052754a7b59bc7467a
Summary: As reported in https://github.com/facebookresearch/pytorch3d/pull/1100, _num_faces_per_mesh was changing in the source mesh in join_batch. This affects both TexturesUV and TexturesAtlas
Reviewed By: nikhilaravi
Differential Revision: D34643675
fbshipit-source-id: d67bdaca7278f18a76cfb15ba59d0ea85575bd36
Summary:
1. changed IsInsideTriangle in geometry_utils to take in min_triangle_area parameter instead of hardcoded value
2. updated point_mesh_cpu.cpp and point_mesh_cuda.[h/cu] to adapt to changes in geometry_utils function signatures
3. updated point_mesh_distance.py and test_point_mesh_distance.py to modify _C. calls
Reviewed By: bottler
Differential Revision: D34459764
fbshipit-source-id: 0549e78713c6d68f03d85fb597a13dd88e09b686
Summary: Small fix by adjusting the area `eps` to account for really small faces when computing point to face distances
Reviewed By: bottler
Differential Revision: D34331336
fbshipit-source-id: 51c4888ea46fefa4e31d5b0bb494a9f9d77813cd
Summary: Lower the epsilon value in the IoU3D calculation to fix small numerical issue from GH#1082
Reviewed By: bottler
Differential Revision: D34371597
fbshipit-source-id: 12443fa359b7755ef4ae60e9adf83734a1a295ae
Summary: Fix tests which depended on output tensors being identical to input ones, which now fail in main PyTorch branch because of some change in autograd. The functions still work in-place.
Reviewed By: patricklabatut
Differential Revision: D34375817
fbshipit-source-id: 295ae195f75eab6c7abab412c997470d8de8add1
Summary:
Modified the compositor background color tests to account for either a 3rd or 4th channel. Also replaced hard coding of channel value with C.
Implemented changes to alpha channel appending logic, and cleaned up extraneous warnings and checks, per task instructions.
Fixes https://github.com/facebookresearch/pytorch3d/issues/1048
Reviewed By: bottler
Differential Revision: D34305312
fbshipit-source-id: 2176c3bdd897d1a2ba6ff4c6fa801fea889e4f02
Summary:
Add a test for Transform3d.stack, and make it work with composed transformations.
Fixes https://github.com/facebookresearch/pytorch3d/issues/1072 .
Reviewed By: patricklabatut
Differential Revision: D34211920
fbshipit-source-id: bfbd0895494ca2ad3d08a61bc82ba23637e168cc
Summary: Move this simple layer from the NeRF project into pytorch3d.
Reviewed By: shapovalov
Differential Revision: D34126972
fbshipit-source-id: a9c6d6c3c1b662c1b844ea5d1b982007d4df83e6
Summary:
When there is no "usemtl" statement in the .obj file use material from .mtl if there is one.
https://github.com/facebookresearch/pytorch3d/issues/1068
Reviewed By: bottler
Differential Revision: D34141152
fbshipit-source-id: 7a5b5cc3f0bb287dc617f68de2cd085db8f7ad94
Summary: Implements a utility function to convert from 2D coordinates in Pytorch3D NDC space to the coordinates in grid_sample.
Reviewed By: shapovalov
Differential Revision: D33741394
fbshipit-source-id: 88981653356588fe646e6dea48fe7f7298738437
Summary: Migrate away from NDCGridRaysampler and GridRaysampler to their more flexible replacements.
Reviewed By: patricklabatut
Differential Revision: D33281584
fbshipit-source-id: 65f8702e700a32d38f7cd6bda3924bb1707a0633
Summary:
Function to join a list of cameras objects into a single batched object.
FB: In the next diff I will remove the `concatenate_cameras` function in implicitron and update the callsites.
Reviewed By: nikhilaravi
Differential Revision: D33198209
fbshipit-source-id: 0c9f5f5df498a0def9dba756c984e6a946618158
Summary:
convert_to_tensors_and_broadcast had a special case for a single input, which is not used anywhere except fails to do the right thing if a TensorProperties has only one kwarg. At the moment AmbientLights may be the only way to hit the problem. Fix by removing the special case.
Fixes https://github.com/facebookresearch/pytorch3d/issues/1043
Reviewed By: nikhilaravi
Differential Revision: D33638345
fbshipit-source-id: 7a6695f44242e650504320f73b6da74254d49ac7
Summary:
The following snippet should work in more cases.
point_cloud = Pointclouds(
[pcl.points_packed() for pcl in point_clouds],
features=[pcl.features_packed() for pcl in point_clouds],
)
We therefore allow features and normals inputs to be lists which contain some (but not all) Nones.
The initialization of a Pointclouds from empty data is also made a bit better now at working out how many feature channels there are.
Reviewed By: davnov134
Differential Revision: D31795089
fbshipit-source-id: 54bf941ba80672d699ffd5ac28927740e830f8ab
Summary: Update all FB license strings to the new format.
Reviewed By: patricklabatut
Differential Revision: D33403538
fbshipit-source-id: 97a4596c5c888f3c54f44456dc07e718a387a02c
Summary:
Moved `HarmonicEmbedding` function in core PyTorch3D.
In the next diff will update the NeRF project.
Reviewed By: bottler
Differential Revision: D32833808
fbshipit-source-id: 0a12ccd1627c0ce024463c796544c91eb8d4d122
Summary:
Added a custom `__getitem__` method to `CamerasBase` which returns an instance of the appropriate camera instead of the `TensorAccessor` class.
Long term we should deprecate the `TensorAccessor` and the `__getitem__` method on `TensorProperties`
FB: In the next diff I will update the uses of `select_cameras` in implicitron.
Reviewed By: bottler
Differential Revision: D33185885
fbshipit-source-id: c31995d0eb126981e91ba61a6151d5404b263f67
Summary: Function to join a list of pointclouds as a batch similar to the corresponding function for Meshes.
Reviewed By: bottler
Differential Revision: D33145906
fbshipit-source-id: 160639ebb5065e4fae1a1aa43117172719f3871b
Summary: Fix some comments to match the recent change to transform_points_screen.
Reviewed By: patricklabatut
Differential Revision: D33243697
fbshipit-source-id: dc8d182667a9413bca2c2e3657f97b2f7a47c795
Summary:
A small numerical fix for IoU for 3D boxes, fixes GH #992
* Adds a check for boxes with zero side areas (invalid boxes)
* Fixes numerical issue when two boxes have coplanar sides
Reviewed By: nikhilaravi
Differential Revision: D33195691
fbshipit-source-id: 8a34b4d1f1e5ec2edb6d54143930da44bdde0906