137 Commits

Author SHA1 Message Date
Jeremy Reizenstein
b64fe51360 join_meshes_as_batch
Summary: rename join_meshes to join_meshes_as_batch.

Reviewed By: nikhilaravi

Differential Revision: D20671293

fbshipit-source-id: e84d6a67d6c1ec28fb5e52d4607db8e92561a4cd
2020-03-30 11:27:41 -07:00
Jeremy Reizenstein
27eb791e2f fix recent lint
Summary: Flowing of compositing comments

Reviewed By: nikhilaravi

Differential Revision: D20556707

fbshipit-source-id: 4abdc85e4f65abd41c4a890b6895bc5e95b4576b
2020-03-30 06:17:27 -07:00
Patrick Labatut
d57daa6f85 Address black + isort fbsource linter warnings
Summary: Address black + isort fbsource linter warnings from D20558374 (previous diff)

Reviewed By: nikhilaravi

Differential Revision: D20558373

fbshipit-source-id: d3607de4a01fb24c0d5269634563a7914bddf1c8
2020-03-29 14:51:02 -07:00
Patrick Labatut
eb512ffde3 Enable black + isort fbsource linter
Summary:
Enable `black` + `isort` (via `pyfmt`) i.e. `BLACK` fbsource linter.

NOTE: the `BLACK` fbsource linter (and `black` itself) is (by design) ***not*** configurable. This forces aligning the existing options used by the tools invoked in `dev/linter.sh` (for 3rd party developers) with `BLACK` fbsource linting. Without this reconciliation, the different linters (used internally or by 3rd party developers) would simply conflict with each other resulting in artificial back-and-forth changes (for instance line width which `BLACK` forces to 88 characters).

Reviewed By: nikhilaravi

Differential Revision: D20558374

fbshipit-source-id: 614fa00664f8eb9d2de7438c29b807dfbf36ad20
2020-03-29 14:51:02 -07:00
Jeremy Reizenstein
37c5c8e0b6 Linter, deprecated type()
Summary: Run linter after recent changes. Fix long comment in knn.h which clang-format has reflowed badly. Add crude test that code doesn't call deprecated `.type()` or `.data()`.

Reviewed By: nikhilaravi

Differential Revision: D20692935

fbshipit-source-id: 28ce0308adae79a870cb41a810b7cf8744f41ab8
2020-03-29 14:02:58 -07:00
Patrick Labatut
3061c5b663 Fix saving / loading empty OBJ files
Summary:
OBJ files without vertices or faces should be allowed:
- an OBJ with only vertices can represent a point cloud
- an OBJ without any vertex or face is just empty
- an OBJ with faces referencing inexistent vertices has invalid data

Reviewed By: gkioxari

Differential Revision: D20392526

fbshipit-source-id: e72c846ff1e5787fb11d527af3fefa261f9eb0ee
2020-03-28 08:14:00 -07:00
Justin Johnson
870290df34 Implement K-Nearest Neighbors
Summary:
Implements K-Nearest Neighbors with C++ and CUDA versions.

KNN in CUDA is highly nontrivial. I've implemented a few different versions of the kernel, and we heuristically dispatch to different kernels based on the problem size. Some of the kernels rely on template specialization on either D or K, so we use template metaprogramming to compile specialized versions for ranges of D and K.

These kernels are up to 3x faster than our existing 1-nearest-neighbor kernels, so we should also consider swapping out `nn_points_idx` to use these kernels in the backend.

I've been working mostly on the CUDA kernels, and haven't converged on the correct Python API.

I still want to benchmark against FAISS to see how far away we are from their performance.

Reviewed By: bottler

Differential Revision: D19729286

fbshipit-source-id: 608ffbb7030c21fe4008f330522f4890f0c3c21a
2020-03-26 13:40:26 -07:00
Nikhila Ravi
02d4968ee0 website small fixes
Summary: Small website fix.

Reviewed By: bottler

Differential Revision: D20672621

fbshipit-source-id: b787e626f732a8abdd92c29e5e4e8bbe27bc7e2f
2020-03-26 11:02:31 -07:00
Jeremy Reizenstein
81a4aa18ad type() deprecated
Summary:
Replace `tensor.type().is_cuda()` with the preferred `tensor.is_cuda()`.
Replace `AT_DISPATCH_FLOATING_TYPES(tensor.type(), ...` with `AT_DISPATCH_FLOATING_TYPES(tensor.scalar_type(), ...`.
These avoid deprecation warnings in future pytorch.

Reviewed By: nikhilaravi

Differential Revision: D20646565

fbshipit-source-id: 1a0c15978c871af816b1dd7d4a7ea78242abd95e
2020-03-26 04:01:41 -07:00
Jeremy Reizenstein
e22d431e5b data() deprecated
Summary: replace `data()` with preferred `data_ptr()`, avoiding some deprecation warnings in future pytorch.

Reviewed By: nikhilaravi

Differential Revision: D20645738

fbshipit-source-id: 8f6e02d292729b804fa2a66f94dd0517bbaf7887
2020-03-26 03:21:48 -07:00
Jeremy Reizenstein
8fa7678614 fix CPU-only hiding of cuda calls
Summary: CPU-only builds should be fixed by this change

Reviewed By: nikhilaravi

Differential Revision: D20598014

fbshipit-source-id: df098ec4c6c93d38515172805fe57cac7463c506
2020-03-24 05:04:32 -07:00
Jeremy Reizenstein
595aca27ea use assertClose
Summary: use assertClose in some tests, which enforces shape equality. Fixes some small problems, including graph_conv on an empty graph.

Reviewed By: nikhilaravi

Differential Revision: D20556912

fbshipit-source-id: 60a61eafe3c03ce0f6c9c1a842685708fb10ac5b
2020-03-23 11:36:38 -07:00
Jeremy Reizenstein
744ef0c2c8 suggest up to date python
Summary: By accident I think, we have been nudging people to install python 3.6. Using 3.8 is fine.

Reviewed By: nikhilaravi

Differential Revision: D20597240

fbshipit-source-id: 7fb778f1b84746db28b6eef763564af5c5fffcd7
2020-03-23 09:20:42 -07:00
Georgia Gkioxari
03f441e7ca run lint
Summary: Run `/dev/linter.sh` to fix linting

Reviewed By: nikhilaravi

Differential Revision: D20584037

fbshipit-source-id: 69e45b33d22e3d54b6d37c3c35580bb3e9dc50a5
2020-03-21 17:58:15 -07:00
Nikhila Ravi
6d34e1c60d Tutorial updates
Summary:
Add a note about the difference between naive and coarse-to-fine rasterization to all the rendering tutorials.

Update the render pointclouds tutorial to wget the data file.

Reviewed By: gkioxari

Differential Revision: D20575257

fbshipit-source-id: a2806b9452438f97cb754f87e011c6e32e2545e4
2020-03-20 18:26:49 -07:00
Georgia Gkioxari
6c48ff6ad9 replace view with reshape, check for nans
Summary: Replace view with reshape, add check for nans before mesh sampling

Reviewed By: nikhilaravi

Differential Revision: D20548456

fbshipit-source-id: c4e1b88e033ecb8f0f3a8f3a33a04ce13a5b5043
2020-03-19 19:31:41 -07:00
Olivia
53599770dd Accumulate points (#4)
Summary:
Code for accumulating points in the z-buffer in three ways:
1. weighted sum
2. normalised weighted sum
3. alpha compositing

Pull Request resolved: https://github.com/fairinternal/pytorch3d/pull/4

Reviewed By: nikhilaravi

Differential Revision: D20522422

Pulled By: gkioxari

fbshipit-source-id: 5023baa05f15e338f3821ef08f5552c2dcbfc06c
2020-03-19 11:23:12 -07:00
Patrick Labatut
5218f45c2c Add pattern linter for project names
Summary: Add pattern linter for PyTorch3D and SlowFast, this will suggest typo fixes whenever the wrong case is accidentally used.

Reviewed By: wanyenlo

Differential Revision: D20498696

fbshipit-source-id: 1a3f4702bd0dbe06e81d0f301b3ea38ea62e7885
2020-03-18 11:39:31 -07:00
Georgia Gkioxari
eeb6bd3b09
Merge pull request #114 from nikhilaravi/fixup-T64213310-master
Re-sync with internal repository
2020-03-18 10:39:17 -07:00
Nikhila Ravi
3d3b2fdc46 Re-sync with internal repository 2020-03-18 10:35:27 -07:00
Dave Greenwood
2480723adf create extrinsic from eye point (#65)
Summary:
Create extrinsic parameters from eye point.
Create the rotation and translation from an eye point, look-at point and up vector.
see:
https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluLookAt.xml

It is arguably easier to initialise a camera position as a point in the world rather than an angle.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/65

Reviewed By: bottler

Differential Revision: D20419652

Pulled By: nikhilaravi

fbshipit-source-id: 9caa1330860bb8bde1fb5c3864ed4cde836a5d19
2020-03-17 17:04:19 -07:00
Patrick Labatut
c9742d00b0 Enable spelling linter for Markdown, reStructuredText and IPython notebooks
Summary: Enable spelling linter for Markdown, reStructuredText and IPython notebooks under `fbcode/vision/fair`. Apply suggested fixes.

Reviewed By: ppwwyyxx

Differential Revision: D20495298

fbshipit-source-id: 95310c7b51f9fa68ba2aa34ecc39a874da36a75c
2020-03-17 16:33:20 -07:00
Nikhila Ravi
3901dbe4de website updates
Summary:
A few small website updates:

- changed the tutorials to point to the `stable` tag on github so we don't have to update the website each time we want to run them!
- changed the colab button
- re ran notebook cells to update the images for textured meshes

Once these fixes are landed I can build and publish the website.

Reviewed By: bottler

Differential Revision: D20484836

fbshipit-source-id: 603a05e752f631c60d1a3abb9adeb1b9b451ab98
2020-03-17 13:08:21 -07:00
Patrick Labatut
25d2e2c8b7 Use a consistent case for PyTorch3D
Summary: Use a consistent case for PyTorch3D (matching the logo...): replace all occurrences of PyTorch3d with PyTorch3D across the codebase (including documentation and notebooks)

Reviewed By: wanyenlo, gkioxari

Differential Revision: D20427546

fbshipit-source-id: 8c7697f51434c51e99b7fe271935932c72a1d9b9
2020-03-17 12:48:43 -07:00
Nikhila Ravi
5d3cc3569a Rendering texturing fixes
Summary:
Fix errors raised by issue on GitHub - extending mesh textures + rendering with Gourad and Phong shaders.

https://github.com/facebookresearch/pytorch3d/issues/97

Reviewed By: gkioxari

Differential Revision: D20319610

fbshipit-source-id: d1c692ff0b9397a77a9b829c5c731790de70c09f
2020-03-17 08:58:40 -07:00
Jeremy Reizenstein
f580ce1385 Fix BUILD_VERSION for conda
Summary: D20426113 made a mistake, in that it added a dev tag to all conda builds. This makes the simplest fix, which is to never have the dev tag.

Reviewed By: nikhilaravi

Differential Revision: D20468541

fbshipit-source-id: adc71b58d59356834d33f65a75cf8ba84359bc74
2020-03-16 11:43:37 -07:00
Jeremy Reizenstein
fa81953380 test_build
Summary: Ensure copyright header consistency and translation unit name uniqueness.

Reviewed By: nikhilaravi

Differential Revision: D20438802

fbshipit-source-id: 9820cfe4c6efab016a0a8589dfa24bb526692f83
2020-03-16 07:54:56 -07:00
Nikhila Ravi
20e457ca0e [pytorch3d[ padded to packed function in struct utils
Summary: Added a padded to packed utils function which takes either split sizes or a padding value to remove padded elements from a tensor.

Reviewed By: gkioxari

Differential Revision: D20454238

fbshipit-source-id: 180b807ff44c74c4ee9d5c1ac3b5c4a9b4be57c7
2020-03-15 09:35:58 -07:00
Jeremy Reizenstein
4d3c886677 Version number in one place in the code.
Summary:
This isn't the whole task, but it gets the version number into far fewer places.

The doc / website are separate.

Reviewed By: nikhilaravi

Differential Revision: D20426113

fbshipit-source-id: 5810d1eca58b443fcd5f46991dc2f0f26adedbd8
2020-03-13 04:40:20 -07:00
Jeremy Reizenstein
2361845548 squared distance in comments
Summary: Comments were describing squared distance as absolute distance in a few places.

Reviewed By: nikhilaravi

Differential Revision: D20426020

fbshipit-source-id: 009946867c4a98f61f5ce7158542d41e22bf8346
2020-03-13 04:35:25 -07:00
Patrick Labatut
d91c1d365b Add more complex mesh I/O benchmarks
Summary: Add more complex mesh I/O benchmarks: simple yet non-trivial procedural donut mesh

Reviewed By: nikhilaravi

Differential Revision: D20390726

fbshipit-source-id: b28b7e3a7f1720823c6bd24faabf688bb0127b7d
2020-03-13 04:31:25 -07:00
Patrick Labatut
327868b86e Add utility function to tesselate a torus
Summary: Add utility function to tesselate a torus, to be used in more complex mesh I/O benchmarks

Reviewed By: bottler

Differential Revision: D20390724

fbshipit-source-id: 882bbbe9cac81cf340a34495b9aa66e3c1ddeebc
2020-03-13 04:31:25 -07:00
Patrick Labatut
098554d323 Use more realistic number of vertices / faces in benchmarks
Summary: Use more realistic number of vertices / faces in benchmarks: in typical meshes, |F| ~ 2 |V| (follows from Euler formula + triangles as faces)

Reviewed By: nikhilaravi

Differential Revision: D20390722

fbshipit-source-id: d615e5810d6f4521391963b2573497c08a58db80
2020-03-12 10:39:45 -07:00
Patrick Labatut
94fc862ff7 Simplify mesh I/O benchmarking methods
Summary: Rename mesh I/O benchmarking methods: always (re-)create file-like object and directly return a lambda

Reviewed By: nikhilaravi

Differential Revision: D20390723

fbshipit-source-id: b45236360869cccdf3d5458a0aafb3ebe269babe
2020-03-12 10:39:45 -07:00
Patrick Labatut
797e468e45 Rename mesh I/O benchmarks and associated methods
Summary:
Rename mesh I/O benchmarks and associated methods:
- add `simple` qualifier (benchmark on more realistic mesh data to be added later)
- align naming between OBJ and PLY
- prefix with `bm_` to make the benchmarking purpose clear(er)

Reviewed By: nikhilaravi

Differential Revision: D20390764

fbshipit-source-id: 7714520abfcfe1125067f3c52f7ce19bca359574
2020-03-12 10:39:45 -07:00
Patrick Labatut
3c71ab64cc Remove shebang line when not strictly required
Summary: The shebang line `#!<path to interpreter>` is only required for Python scripts, so remove it on source files for class or function definitions. Additionally explicitly mark as executable the actual Python scripts in the codebase.

Reviewed By: nikhilaravi

Differential Revision: D20095778

fbshipit-source-id: d312599fba485e978a243292f88a180d71e1b55a
2020-03-12 10:39:44 -07:00
Nikhila Ravi
d01e722849 Fix coordinate system conventions in point cloud renderer
Summary:
Applying the changes added for mesh rasterization to ensure that +Y is up and +X is left so that the coordinate system is right handed.

Also updated the diagram in the docs to indicate that (0,0) is in the top left hand corner.

Reviewed By: gkioxari

Differential Revision: D20394849

fbshipit-source-id: cfb7c79090eb1f55ad38b92327a74a70a8dc541e
2020-03-12 07:48:29 -07:00
Nikhila Ravi
32ad869dea Update point cloud rasterizer to support heterogeneous point clouds
Summary:
Update the point cloud rasterizer to:
- use the pointcloud datastructure (rebased on top of D19791851.)
- support rasterization of heterogeneous point clouds in the same way as with Meshes.

The main changes to the API will be as follows:
- The input to `rasterize_points` will be a `Pointclouds` object instead of a tensor. This will be easy to update e.g.
```
points = torch.randn(N, P, 3)
idx2, zbuf2, dists2 = rasterize_points(points, image_size, radius, points_per_pixel)

points = torch.randn(N, P, 3)
pointclouds = Pointclouds(points=points)
idx2, zbuf2, dists2 = rasterize_points(pointclouds, image_size, radius, points_per_pixel)
```

- The indices output from rasterization will now refer to points in `poinclouds.points_packed()`.
This may require some changes to the functions which consume the outputs of rasterization if they were previously
assuming that the indices ranged from 0 to P where P is the number of points in each pointcloud.

Making this change now so that Olivia can update her PR accordingly.

Reviewed By: gkioxari

Differential Revision: D20088651

fbshipit-source-id: 833ed659909712bcbbb6a50e2ec0189839f0413a
2020-03-12 07:48:29 -07:00
Roman Shapovalov
cae325718e Old-style string formatting fails when passed a tuple.
Summary: When the error occurs, another exception is thrown when tensor shape is passed to the % formatting. I have found all entries for `msg %` and fixed potential failures

Reviewed By: nikhilaravi

Differential Revision: D20386511

fbshipit-source-id: c05413eb4867cab1ddc9615dffbd0ebd3adfcaf9
2020-03-11 11:17:58 -07:00
Jeremy Reizenstein
fb97ab104e getitem for textures
Summary: Make Meshes.__getitem__ carry texture information to the new mesh.

Reviewed By: gkioxari

Differential Revision: D20283976

fbshipit-source-id: d9ee0580c11ac5b4384df9d8158a07e6eb8d00fe
2020-03-11 07:45:44 -07:00
Jeremy Reizenstein
5a1d7143d8 post-release v0.1.1 updates.
Reviewed By: nikhilaravi

Differential Revision: D20218481

fbshipit-source-id: b153282cc30ad75de970c89ae64526b6be62ee95
2020-03-09 06:37:50 -07:00
Georgia Gkioxari
112d32eaf0 Add more DR citations
Summary: Add more DR citations

Reviewed By: nikhilaravi

Differential Revision: D20330205

fbshipit-source-id: 4fb95d422371ae9ff5cdc2693736e36799201477
2020-03-08 14:53:22 -07:00
Jeremy Reizenstein
cf8e667b61 version 0.1.1
Summary: Bumping the version number to 0.1.1 and thereby documenting all the places where the version number currently appears in the code.

Reviewed By: nikhilaravi

Differential Revision: D20067382

fbshipit-source-id: 76a25ed1d4036f51357e4ae3e0f07de32ad114ae
v0.1.1
2020-03-07 12:42:43 -08:00
Nikhila Ravi
15c72be444 Fix coordinate system conventions in renderer
Summary:
## Updates

- Defined the world and camera coordinates according to this figure. The world coordinates are defined as having +Y up, +X left and +Z in.

{F230888499}

- Removed all flipping from blending functions.
- Updated the rasterizer to return images with +Y up and +X left.
- Updated all the mesh rasterizer tests
    - The expected values are now defined in terms of the default +Y up, +X left
    - Added tests where the triangles in the meshes are non symmetrical so that it is clear which direction +X and +Y are

## Questions:
- Should we have **scene settings** instead of raster settings?
    - To be more correct we should be [z clipping in the rasterizer based on the far/near clipping planes](https://github.com/ShichenLiu/SoftRas/blob/master/soft_renderer/cuda/soft_rasterize_cuda_kernel.cu#L400) - these values are also required in the blending functions so should we make these scene level parameters and have a scene settings tuple which is available to the rasterizer and shader?

Reviewed By: gkioxari

Differential Revision: D20208604

fbshipit-source-id: 55787301b1bffa0afa9618f0a0886cc681da51f3
2020-03-06 06:51:05 -08:00
Georgia Gkioxari
767d68a3af pointcloud structure
Summary:
Revisions to Poincloud data structure with added normals

The biggest changes form the previous version include:
a) If the user provides tensor inputs, we make no assumption about padding. Padding is only for internal use for us to convert from list to padded
b) If features are not provided or if the poincloud is empty, all forms of features are None. This is so that we don't waste memory on holding dummy tensors.

Reviewed By: nikhilaravi

Differential Revision: D19791851

fbshipit-source-id: 7e182f7bb14395cb966531653f6dd6b328fd999c
2020-03-04 13:16:43 -08:00
Nikhila Ravi
ba11c0b59c Blending fixes and test updates
Summary:
Changed `torch.cumprod` to `torch.prod` in blending functions and added more tests and benchmark tests.

This should fix the issue raised on GitHub.

Reviewed By: gkioxari

Differential Revision: D20163073

fbshipit-source-id: 4569fd37be11aa4435a3ce8736b55622c00ec718
2020-02-29 17:52:05 -08:00
Nikhila Ravi
ff19c642cb Barycentric clipping in the renderer and flat shading
Summary:
Updates to the Renderer to enable barycentric clipping. This is important when there is blurring in the rasterization step.

Also added support for flat shading.

Reviewed By: jcjohnson

Differential Revision: D19934259

fbshipit-source-id: 036e48636cd80d28a04405d7a29fcc71a2982904
2020-02-28 21:30:33 -08:00
takiyu
f358b9b14d Fix squared distance for CPU impl. (#83)
Summary:
`PointLineDistanceForward()` should return squared distance. However, it seems that it returned non-squared distance when `v0` was near by `v1` in CPU implementation.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/83

Reviewed By: bottler

Differential Revision: D20097181

Pulled By: nikhilaravi

fbshipit-source-id: 7ea851c0837ab89364e42d283c999df21ff5ff02
2020-02-25 14:00:00 -08:00
Dave Greenwood
a0f3dc2d63 allow changes to background_color in BlendParams (#64)
Summary:
BlendParams background_color is immutable , type hint as a sequence allows setting new values in constructor.
Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/64

Reviewed By: bottler

Differential Revision: D20068911

Pulled By: nikhilaravi

fbshipit-source-id: c580a7654dca25629218513841aa16d9d1055588
2020-02-24 13:44:02 -08:00
Jeremy Reizenstein
4233c32887 cpu wheel builds for linux and mac
Reviewed By: nikhilaravi

Differential Revision: D20073426

fbshipit-source-id: fce83c9b63d630de1e6ebe2ff4790f29d11b65cc
2020-02-24 13:38:09 -08:00