1. 09 Feb, 2021 2 commits
    • Nikhila Ravi's avatar
      update readme for v0.4 · 17468e28
      Nikhila Ravi authored
      Summary: Add link to v0.4 after it has been tagged.
      
      Reviewed By: bottler
      
      Differential Revision: D26286000
      
      fbshipit-source-id: b75893e668a18122c64aa989b6f4d150c99831be
      17468e28
    • Jeremy Reizenstein's avatar
      version number for 0.4.0 · 3c15a6c2
      Jeremy Reizenstein authored
      Summary: Update PyTorch3D version number
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D26257778
      
      fbshipit-source-id: 62a37669c51ec56d21f71b5619a1a821ae2a8e98
      3c15a6c2
  2. 08 Feb, 2021 3 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
    • Nikhila Ravi's avatar
      Utils for converting rasterization fragments of clipped meshes back to unclipped · 39f49c22
      Nikhila Ravi authored
      Summary:
      This diff adds utils functions for converting rasterization fragments of the clipped mesh into fragments expressed in terms of the original unclipped mesh.
      
      The face indices and barycentric coordinates are converted in this step. The pixel to triangle distances are handled in the rasterizer which is updated in the next diff in the stack.
      
      Reviewed By: jcjohnson
      
      Differential Revision: D26169539
      
      fbshipit-source-id: ba451d3facd60ef88a8ffaf25fd04ca07b449ceb
      39f49c22
  3. 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
  4. 05 Feb, 2021 3 commits
    • Jeremy Reizenstein's avatar
      update notebooks for s3 wheels · db6fbfad
      Jeremy Reizenstein authored
      Summary: Prepare the tutorial notebooks to use wheels from S3 when run on colab.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D26226932
      
      fbshipit-source-id: 1f9366c3fb4ba195333a5d5dfa3f6876ea934508
      db6fbfad
    • Jeremy Reizenstein's avatar
      Build wheels for s3 · e0753f0b
      Jeremy Reizenstein authored
      Summary: For Linux, instead of uploading wheels to PyPI which will only work with one particular version of PyTorch and CUDA, from the next release we will store a range of built wheels on S3.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D26209398
      
      fbshipit-source-id: 945a6907b78807e1eedb25007f87f90bbf59f80e
      e0753f0b
    • Jeremy Reizenstein's avatar
      Missing copyright · 3463f418
      Jeremy Reizenstein authored
      Summary: Fix missing copyright header in __init__.py file.
      
      Reviewed By: davnov134
      
      Differential Revision: D26275931
      
      fbshipit-source-id: 965c9cf17383aa27d35d549754ebd99ae7c25f47
      3463f418
  5. 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
  6. 03 Feb, 2021 1 commit
  7. 02 Feb, 2021 12 commits
    • David Novotny's avatar
      Readme · 51de308b
      David Novotny authored
      Summary: Adds the readme file.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25684459
      
      fbshipit-source-id: f1aaa621a2a67c98d5fcfe33fe9bbfea8f95b537
      51de308b
    • David Novotny's avatar
      Testing script · 2628fb56
      David Novotny authored
      Summary: Implements the test script of NeRF.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25684450
      
      fbshipit-source-id: 739169d9df706795814912bb9a15e2e65ac92df8
      2628fb56
    • David Novotny's avatar
      Generation of test camera trajectories · dc28b615
      David Novotny authored
      Summary: Implements methods for generating trajectories of test cameras.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D26100869
      
      fbshipit-source-id: cf2b61a34d4c749cd8cba881e97f6c388e57d1f8
      dc28b615
    • David Novotny's avatar
      Main training script · 9751f1f1
      David Novotny authored
      Summary: Implements the training script of NeRF.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25684439
      
      fbshipit-source-id: 8b19b6dc282eb6bf6e46ec4476bb0f13a84c90dd
      9751f1f1
    • David Novotny's avatar
      NeRF training stats logger. · 5b749118
      David Novotny authored
      Summary: Implements the `Stats` class that handles logging of the training statistics.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25684430
      
      fbshipit-source-id: 920a1c65917ab5d047988494d92173da60cfd64b
      5b749118
    • David Novotny's avatar
      NeRF dataloader. · 06668483
      David Novotny authored
      Summary: Implements the dataloader for NeRF.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25684424
      
      fbshipit-source-id: 4f7092ce23135bd418186833a087e243433babc7
      06668483
    • David Novotny's avatar
      Radiance field renderer · eb908487
      David Novotny authored
      Summary: Implements the main NeRF model class that controls the radiance field and its renderer
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25684419
      
      fbshipit-source-id: fae45572daa6748c6234bd212f3e68110f778238
      eb908487
    • David Novotny's avatar
      Implicit function · bf633ab5
      David Novotny authored
      Summary: Implements the radiance field function of NeRF
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25684413
      
      fbshipit-source-id: 4bf6dd5d22e6134a09f7b9f314536ec16670f737
      bf633ab5
    • David Novotny's avatar
      Harmonic embedding · 1e82341d
      David Novotny authored
      Summary: Implements the positional embedding of NeRF
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25684406
      
      fbshipit-source-id: 9f3b657babacff48bd6a0497d7a859607ffa5f89
      1e82341d
    • David Novotny's avatar
      NeRF Raysampler · 7cbda3ec
      David Novotny authored
      Summary: Implements the NeRF raysampler.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25684403
      
      fbshipit-source-id: 616a60f047c79479f60a6a75d214f87cbfb06d28
      7cbda3ec
    • David Novotny's avatar
      NeRF Raymarcher · fba419b7
      David Novotny authored
      Summary: An initial NeRF diff which sets up the folder structure and implements the raymarching algorithm of NeRF.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25623990
      
      fbshipit-source-id: ac6b05a9b866358bd4bbf44858f06859d8a6ebd1
      fba419b7
    • Edgar Riba's avatar
      fixes docstring rendering in estimate_normals (#530) · f4f3d403
      Edgar Riba authored
      Summary:
      adds missing spaces in the `estimate_normals` docstrings
      
      Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/530
      
      Reviewed By: bottler
      
      Differential Revision: D26008667
      
      Pulled By: nikhilaravi
      
      fbshipit-source-id: 88cccd7e777fa2df0aea15c087db9e7fb634d93f
      f4f3d403
  8. 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
  9. 26 Jan, 2021 1 commit
  10. 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
  11. 22 Jan, 2021 5 commits
    • Penn's avatar
      Fix dimension check (#524) · e58a730e
      Penn authored
      Summary:
      Fixes the assertion that `p1` and `p2` have the same last dimension. The issue was that `D` is set to equal `p2.size(2)`, and then `D` is compared to `p2.size(2)`. The fix instead compares `D` to `p1.size(2).
      
      Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/524
      
      Reviewed By: bottler
      
      Differential Revision: D26008688
      
      Pulled By: nikhilaravi
      
      fbshipit-source-id: e32afe9da127d81b1a411d3c223b539a7400597b
      e58a730e
    • imlixinyang's avatar
      Update generate_cow_renders.py (#529) · 2ee11c78
      imlixinyang authored
      Summary:
      Typo fixed.
      
      Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/529
      
      Reviewed By: bottler
      
      Differential Revision: D26008651
      
      Pulled By: nikhilaravi
      
      fbshipit-source-id: 76d5baadba7bcd3577397adb842e964ee4490b7d
      2ee11c78
    • Jeremy Reizenstein's avatar
      Up vector for plotly · 8eba1684
      Jeremy Reizenstein authored
      Summary: We previously did not send an `up` vector in to plotly when visualization_cameras is supplied. This meant the image would have the default orientation instead of the correct one. Now we use the library function `camera_to_eye_at_up` to calculate the plotly position, which includes the `up` vector.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25981183
      
      fbshipit-source-id: abec72b349f3a5519209e0e6c0518133c3750807
      8eba1684
    • 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
  12. 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
  13. 20 Jan, 2021 2 commits
    • Jeremy Reizenstein's avatar
      lint · 4711665e
      Jeremy Reizenstein authored
      Summary: Fix recent lint.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D25900168
      
      fbshipit-source-id: 6b6e8d35b68c8415ef305dc4719f43eda9316c8f
      4711665e
    • Christoph Lassner's avatar
      Fix #501. · 154ace4b
      Christoph Lassner authored
      Summary: Gradient calculation flags were not properly routed through the Python interface. This diff fixes this. In particular, gradients for focal length (only if no other camera gradients were calculated) and opacity were not calculated as required.
      
      Reviewed By: gkioxari
      
      Differential Revision: D25921202
      
      fbshipit-source-id: 22cbae3bda886d81bb95878f0be45c2ddd29934c
      154ace4b
  14. 11 Jan, 2021 2 commits
    • Jeremy Reizenstein's avatar
      Do not set ccbin in torch 1.7.x · b24d89a2
      Jeremy Reizenstein authored
      Summary:
      PyTorch versions 1.7.0 and 1.7.1 are between https://github.com/pytorch/pytorch/pull/43931 and https://github.com/pytorch/pytorch/pull/47404. In this gap, PyTorch always copies CC to nvcc_args, like PyTorch3D does. Newer nvcc versions are not happy with `-ccbin` being specified twice, even if it is specified twice the same. We update PyTorch3D so that it doesn't supply `-ccbin` in these cases.
      
      Also tweak the detection of the current ccbin so that it is aware that `-ccbin foo` and `-ccbin=foo` are equivalent.
      
      Reviewed By: theschnitz
      
      Differential Revision: D25825468
      
      fbshipit-source-id: b04e7718cf01820649518eedda99c399c732e8af
      b24d89a2
    • David Novotny's avatar
      Volume / NeRF notebook links in README.md · da7884ce
      David Novotny authored
      Summary: Adds links to notebooks implementing the Volume / NeRF fitting.
      
      Reviewed By: gkioxari
      
      Differential Revision: D25849756
      
      fbshipit-source-id: 05d7d40589a8559c9bcc43e0d2e22c49f5a92dfd
      da7884ce
  15. 07 Jan, 2021 3 commits
    • Jeremy Reizenstein's avatar
      PLY pointcloud loading · 95707fba
      Jeremy Reizenstein authored
      Summary:
      Allow PLY files to not contain faces. Allow loading pointclouds with color, at least encoded according to the way of some cloudcompare examples.
      
      TODO: Allow vertex normals to be read, and allow vertex colors to be written. Make the return type of load_ply something more user friendly, like a dict.
      
      Noticed in https://github.com/facebookresearch/pytorch3d/issues/209
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22573314
      
      fbshipit-source-id: 72ba1f7c6417f5dfc83f2ebf359eff017057635c
      95707fba
    • Jeremy Reizenstein's avatar
      Read heterogenous nonlist PLY properties as arrays · 3b9fbfc0
      Jeremy Reizenstein authored
      Summary:
      In the original implementation, I had considered PLY properties where there are mixed types of elements in a property to be rare and basically unimportant, so the implementation is very naive.
      
      If we want to support pointcloud PLY files, we need to handle at least the subcase where there are no lists efficiently because this seems to be very common there.
      
      Reviewed By: nikhilaravi, gkioxari
      
      Differential Revision: D22573315
      
      fbshipit-source-id: db6f29446d4e555a2e2b37d38c8e4450d061465b
      3b9fbfc0
    • Jeremy Reizenstein's avatar
      add existing mesh formats to pluggable · 89532a87
      Jeremy Reizenstein authored
      Summary: We already have code for obj and ply formats. Here we actually make it available in `IO.load_mesh` and `IO.save_mesh`.
      
      Reviewed By: theschnitz, nikhilaravi
      
      Differential Revision: D25400650
      
      fbshipit-source-id: f26d6d7fc46c48634a948eea4d255afad13b807b
      89532a87