1. 08 Jun, 2021 1 commit
    • Jeremy Reizenstein's avatar
      cuda 11 problems with test_normal_consistency · 7204a4ca
      Jeremy Reizenstein authored
      Summary:
      One test hits problems with CUDA 11.1 and pytorch 1.8. This seems to be a known bug, so we just run that test on the cpu in the problematic cases.
      
      Note - the full test run is much slower with cuda 11.1 than 10.2, but this is known.
      
      Reviewed By: patricklabatut
      
      Differential Revision: D28938933
      
      fbshipit-source-id: cf8ed84cd10a0b52d8f4292edbef7bd4844fea65
      7204a4ca
  2. 04 Jun, 2021 2 commits
  3. 26 May, 2021 4 commits
    • Jeremy Reizenstein's avatar
      Experimental glTF reading · ed6983ea
      Jeremy Reizenstein authored
      Summary: Experimental data loader for taking the default scene from a GLB file and converting it to a single mesh in PyTorch3D.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25900167
      
      fbshipit-source-id: bff22ac00298b83a0bd071ae5c8923561e1d81d7
      ed6983ea
    • Jeremy Reizenstein's avatar
      ambient lighting · 0e85652f
      Jeremy Reizenstein authored
      Summary:
      Specific object to represent light which is 100% everywhere. Sometimes lighting is irrelevant, for example when viewing a mesh which has lighting already baked in.
      
      This is not primarily aiming for a performance win but I think the test which has changed might be a bit faster.
      
      Reviewed By: theschnitz
      
      Differential Revision: D26405151
      
      fbshipit-source-id: 82eae55de0bee918548a3eaf031b002cb95e726c
      0e85652f
    • Jeremy Reizenstein's avatar
      rotate_on_spot · 61e38de0
      Jeremy Reizenstein authored
      Summary: Function to relatively rotate a camera position. Also document how to relatively translate a camera position.
      
      Reviewed By: theschnitz
      
      Differential Revision: D25900166
      
      fbshipit-source-id: 2ddaf06ee7c5e2a2e973c04d7dee6ccb61c6ff84
      61e38de0
    • Jeremy Reizenstein's avatar
      Deduplicate texture maps when joining · e12a0813
      Jeremy Reizenstein authored
      Summary:
      If you join several meshes which have TexturesUV textures using join_meshes_as_scene then we amalgamate all the texture images in to a single one. This now checks if some of the images are equal (i.e. the tensors are the same tensor, in the `is` sense; they have the same `id` in Python) and only uses one copy if they are.
      
      I have an example of a massive scene made of several textured meshes with some shared, where this makes the difference between fitting the data on the GPU and not.
      
      Reviewed By: theschnitz
      
      Differential Revision: D25982364
      
      fbshipit-source-id: a8228805f38475c796302e27328a340d9b56c8ef
      e12a0813
  4. 07 May, 2021 3 commits
    • Jeremy Reizenstein's avatar
      avoid running tests twice · 0ca839cc
      Jeremy Reizenstein authored
      Summary: Avoid test files explicitly importing TestCase objects from each other, because doing so causes the tests to be discovered twice by unittest discover. This means moving a few static functions out of their classes. I noticed this while trying to fix failures from yesterday.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28194679
      
      fbshipit-source-id: ac6e6585603bd4ef9c098cdd56891d94f8923ba6
      0ca839cc
    • Jeremy Reizenstein's avatar
      test_meshes numeric fixes · e3624b4e
      Jeremy Reizenstein authored
      Summary:
      A couple of tests are failing in open source after my changes yesterday because of numerical issues calculating normals. In particular we have meshes with very few vertices and several faces, where the normals should be zero but end up non-negligible after F.normalize. I have no idea why the different environments produce different results, so that the tests are passing internally.
      
      An example. Consider a mesh with the following faces:
      ```
      tensor([[4, 0, 2],
              [4, 1, 2],
              [3, 1, 0],
              [1, 3, 1],
              [3, 0, 1],
              [4, 0, 0],
              [4, 0, 2]])
      ```
      At vertex 3, there is one zero-area face and there are two other faces, which are back-to-back with each other. This vertex should have zero normal. The open source calculation produces a small but nonzero normal which varies unpredictably with changes in scale/offset, which can cause test failures.
      
      In this diff, the main change is to increase the number of vertices to make this less likely to happen. Also a small change to init_mesh to make it not generate a batch of empty meshes.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28220984
      
      fbshipit-source-id: 79fdc62e5f5f8836de5a3a9980cfd6fe44590359
      e3624b4e
    • Daisy's avatar
      Handle header has no newline or space after OFF. (#665) · 5241b7dd
      Daisy authored
      Summary:
      Allow a line like `OFF10 10 10` as the start of an OFF file. Such things apparently occur in ModelNet40.
      
      This resolves https://github.com/facebookresearch/pytorch3d/issues/663.
      
      Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/665
      
      Test Plan: New test
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D28180006
      
      Pulled By: bottler
      
      fbshipit-source-id: 7f474c6a262e32da012217e09f76e8672a7f0278
      5241b7dd
  5. 04 May, 2021 6 commits
    • Jeremy Reizenstein's avatar
      PLY load normals · 6fa66f55
      Jeremy Reizenstein authored
      Summary: Add ability to load normals when they are present in a PLY file.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D26458971
      
      fbshipit-source-id: 658270b611f7624eab4f5f62ff438038e1d25723
      6fa66f55
    • Jeremy Reizenstein's avatar
      has_verts_normals for Meshes · 66b97a0c
      Jeremy Reizenstein authored
      Summary: Add ability to ask a Meshes if it already has normals. If it does, then requesting normals will not trigger a calculation. MeshesFormatInterpreters will therefore be able to decide whether to save normals.
      
      Reviewed By: theschnitz, nikhilaravi
      
      Differential Revision: D27765261
      
      fbshipit-source-id: 7c87dbf999d5616d20f5eb2c01039ee5ff65a830
      66b97a0c
    • Jeremy Reizenstein's avatar
      Allow setting verts_normals on Meshes · 2bbca5f2
      Jeremy Reizenstein authored
      Summary: Add ability to set the vertex normals when creating a Meshes, so that the pluggable loaders can return them from a file.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D27765258
      
      fbshipit-source-id: b5ddaa00de3707f636f94d9f74d1da12ecce0608
      2bbca5f2
    • Jeremy Reizenstein's avatar
      avoid recalculating normals for simple move · 502f15ac
      Jeremy Reizenstein authored
      Summary: If offset_verts_ is used to move meshes with a single vector, the normals won't change so don't need to recalculate. I am planning to allow user-specified vertex normals. This change means that user-specified vertex normals won't get overwritten when they don't need to be.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D27765256
      
      fbshipit-source-id: f6e4d308ac9ac023030325cb75a18d39b966cf88
      502f15ac
    • Jeremy Reizenstein's avatar
      PLY color scaling · e9f4e0d0
      Jeremy Reizenstein authored
      Summary: When a PLY file contains colors in byte format, these are now scaled from 0..255 to [0,1], as they should be
      
      Reviewed By: gkioxari
      
      Differential Revision: D27765254
      
      fbshipit-source-id: 526b5f5149d5e8cbffd7412b411be52c935fa4ad
      e9f4e0d0
    • Jeremy Reizenstein's avatar
      PLY TexturesVertex loading · 6c3fe952
      Jeremy Reizenstein authored
      Summary:
      Include TexturesVertex colors when loading and saving Meshes to PLY files.
      
      A couple of other improvements to the internals of ply_io, including using `None` instead of empty tensors for some missing data.
      
      Reviewed By: gkioxari
      
      Differential Revision: D27765260
      
      fbshipit-source-id: b9857dc777c244b9d7d6643b608596d31435ecda
      6c3fe952
  6. 20 Apr, 2021 1 commit
  7. 13 Apr, 2021 1 commit
    • Jeremy Reizenstein's avatar
      lint fixes · c18ee9d4
      Jeremy Reizenstein authored
      Summary: Lint after recent changes.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D27682328
      
      fbshipit-source-id: 285d159010d886e4e97902995adbdff875fd3c19
      c18ee9d4
  8. 09 Apr, 2021 4 commits
    • Jeremy Reizenstein's avatar
      spelling · 124bb5e3
      Jeremy Reizenstein authored
      Summary: Collection of spelling things, mostly in docs / tutorials.
      
      Reviewed By: gkioxari
      
      Differential Revision: D26101323
      
      fbshipit-source-id: 652f62bc9d71a4ff872efa21141225e43191353a
      124bb5e3
    • Rong Rong (AI Infra)'s avatar
      Allow tests to be run on GPU with remote execution · c2e62a50
      Rong Rong (AI Infra) authored
      Summary: Test path special case
      
      Reviewed By: bottler
      
      Differential Revision: D27566817
      
      fbshipit-source-id: c7b3ac839908c071f1378a37b7013b91ca4e8b18
      c2e62a50
    • Rong Rong (AI Infra)'s avatar
      Get rid of duplicate test data directory initialization · dd834392
      Rong Rong (AI Infra) authored
      Summary: Simplify finding the data directories in the tests.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D27634293
      
      fbshipit-source-id: dc308a7c86c41e6fae56a2ab58187c9f0335b575
      dd834392
    • Rong Rong (AI Infra)'s avatar
      Extract finding directories for test data · 1216b576
      Rong Rong (AI Infra) authored
      Summary: Make common functions for finding directories where test data is found, instead of lots of tests using their own `__file__`  while trying to get ./tests/data and the tutorials data.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D27633701
      
      fbshipit-source-id: 1467bb6018cea16eba3cab097d713116d51071e9
      1216b576
  9. 08 Apr, 2021 1 commit
    • Jeremy Reizenstein's avatar
      Fix flake exceptions · 24ee2790
      Jeremy Reizenstein authored
      Summary: flake8 no longer respects the black fmt:off message, so include specific line-length exclusion.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D27624641
      
      fbshipit-source-id: adcdb6f55b382fbf252eede3f3ddeda0621da883
      24ee2790
  10. 23 Mar, 2021 1 commit
    • Jeremy Reizenstein's avatar
      CI fixes · cc08c6b2
      Jeremy Reizenstein authored
      Summary:
      Update `main` build to latest CircleCI image - Ubuntu 2020.04.
      
      Avoid torch.logical_or and logical_and for PyTorch 1.4 compatibility.
      
      Also speed up the test run with Pytorch 1.4.0 (which has no ninja) by not setting NVCC_FLAGS for it.
      
      Reviewed By: theschnitz
      
      Differential Revision: D27262327
      
      fbshipit-source-id: ddc359d134b1dc755f8b20bd3f33bb080cb3a0e1
      cc08c6b2
  11. 11 Mar, 2021 1 commit
    • Jeremy Reizenstein's avatar
      Use old style isfinite · ff9c6612
      Jeremy Reizenstein authored
      Summary: Avoid using the newish member function isfinite. We use torch.isfinite instead for torch 1.4.0 compatibility.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D26946672
      
      fbshipit-source-id: 853c3716f40061152f1ea54a39eb60b565de7c2c
      ff9c6612
  12. 24 Feb, 2021 1 commit
    • Nikhila Ravi's avatar
      Bug fix for case where aspect ratio is a float · 13429640
      Nikhila Ravi authored
      Summary:
      - Fix the calculation of the non square NDC range when the H and W are not integer multiples.
      - Add test for this case
      
      Reviewed By: gkioxari
      
      Differential Revision: D26613213
      
      fbshipit-source-id: df6763cac602e9f1d516b41b432c4d2cfbaa356d
      13429640
  13. 12 Feb, 2021 1 commit
  14. 11 Feb, 2021 2 commits
  15. 08 Feb, 2021 2 commits
    • Nikhila Ravi's avatar
      CUDA/C++ Rasterizer updates to handle clipped faces · 340662e9
      Nikhila Ravi authored
      Summary:
      - Updated the C++/CUDA mesh rasterization kernels to handle the clipped faces. In particular this required careful handling of the distance calculation for faces which are cut into a quadrilateral by the image plane and then split into two sub triangles i.e. both sub triangles can't be part of the top K faces.
      - Updated `rasterize_meshes.py` to use the utils functions to clip the meshes and convert the fragments back to in terms of the unclipped mesh
      - Added end to end tests
      
      Reviewed By: jcjohnson
      
      Differential Revision: D26169685
      
      fbshipit-source-id: d64cd0d656109b965f44a35c301b7c81f451cfa0
      340662e9
    • Nikhila Ravi's avatar
      Updates to cameras and rasterizer to infer camera type correctly · 838b73d3
      Nikhila Ravi authored
      Summary: Small update to the cameras and rasterizer to correctly infer the type of camera (perspective vs orthographic).
      
      Reviewed By: jcjohnson
      
      Differential Revision: D26267225
      
      fbshipit-source-id: a58ed3bc2ab25553d2a4307c734204c1d41b5176
      838b73d3
  16. 06 Feb, 2021 1 commit
    • Nikhila Ravi's avatar
      Utils for clipping mesh faces partially behind the image plane · 23279c5f
      Nikhila Ravi authored
      Summary:
      Instead of culling faces behind the camera, partially clip them if they intersect with the image plane.
      
      This diff implements the utils functions for clipping.
      
      There are 4 cases for the mesh faces which are all handled:
      
      ```
      Case 1: the triangle is completely in front of the clipping plane (it is left
              unchanged)
      Case 2: the triangle is completely behind the clipping plane (it is culled)
      Case 3: the triangle has exactly two vertices behind the clipping plane (it is
              clipped into a smaller triangle)
      Case 4: the triangle has exactly one vertex behind the clipping plane (it is clipped
              into a smaller quadrilateral and divided into two triangular faces)
      ```
      
      Reviewed By: jcjohnson
      
      Differential Revision: D23108673
      
      fbshipit-source-id: 550a8b6a982d06065dff10aba10d47e8b144ae52
      23279c5f
  17. 04 Feb, 2021 1 commit
    • Jeremy Reizenstein's avatar
      Disable random-dependent tests · cd9786e7
      Jeremy Reizenstein authored
      Summary:
      These two tests fail (with non-small differences) when the seed is changed or if certain environmental changes are made. We disable them pending investigation.
      
      A small change to the tolerance at the failing assertion doesn't help. The change in common_testing helps diagnose this.
      
      Reviewed By: shapovalov
      
      Differential Revision: D26233419
      
      fbshipit-source-id: 357afc1786825256c9bade101fb15707e4dea5ed
      cd9786e7
  18. 28 Jan, 2021 2 commits
    • Jeremy Reizenstein's avatar
      Mesh normal consistency when no faces intersect · e42b0c4f
      Jeremy Reizenstein authored
      Summary: Corner case where there's nothing to do in this function.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D26073476
      
      fbshipit-source-id: eb061683ffe35c1ffa8384c422a1557a636d52cd
      e42b0c4f
    • Jeremy Reizenstein's avatar
      Mesh normal consistency when many faces intersect · 7f62eacd
      Jeremy Reizenstein authored
      Summary: We were double counting some pairs in some cases. Specifically if four or more faces share an edge, then some of them were getting double counted. This is a minimal tweak to avoid that.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D26073477
      
      fbshipit-source-id: a40032acf3044bb98dd91cb29904614ef64d5599
      7f62eacd
  19. 25 Jan, 2021 1 commit
    • Jeremy Reizenstein's avatar
      textures device consistency · d173a2f8
      Jeremy Reizenstein authored
      Summary: Ensure that `mesh2 = mesh.to(device)` doesn't change the device of `mesh.textures`.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25978610
      
      fbshipit-source-id: 0558cd62132965d8693ebeea05e42b8c1d16cfbf
      d173a2f8
  20. 22 Jan, 2021 2 commits
    • Jeremy Reizenstein's avatar
      (eye, at, up) extraction function · cf9bb7c4
      Jeremy Reizenstein authored
      Summary:
      Plotly viewing from a specific camera location requires converting that location in to an (eye, at, up) specification. There may be other reasons to want to do this as well. I create a separate utility function for it.
      
      I envisage more such utility functions for manipulating camera information, so I create a separate camera_utils.py file for such things.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25981184
      
      fbshipit-source-id: 0947bf98b212676c021f2fddf775bf436dee3487
      cf9bb7c4
    • Jeremy Reizenstein's avatar
      Allow single offset in offset_verts · ddebdfbc
      Jeremy Reizenstein authored
      Summary:
      It is common when trying things out to want to move a whole mesh or point cloud by the same amount. Here we allow the offset functions to broadcast.
      
      Also add a sanity check to join_meshes_as_scene which it is easy to call wrongly.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25980593
      
      fbshipit-source-id: cdf1568e1317e3b81ad94ed4e608ba7eef81290b
      ddebdfbc
  21. 21 Jan, 2021 1 commit
    • Jeremy Reizenstein's avatar
      devices for transform3d · d60c52df
      Jeremy Reizenstein authored
      Summary: Make `to` on Transform3D carry its member _transforms.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25978611
      
      fbshipit-source-id: 12b39e7a657f28d59ca60800bf9f4193a2c08197
      d60c52df
  22. 20 Jan, 2021 1 commit
    • Jeremy Reizenstein's avatar
      lint · 4711665e
      Jeremy Reizenstein authored
      Summary: Fix recent lint.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25900168
      
      fbshipit-source-id: 6b6e8d35b68c8415ef305dc4719f43eda9316c8f
      4711665e