1. 09 Apr, 2021 1 commit
    • 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
  2. 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
  3. 17 Mar, 2021 1 commit
    • Jeremy Reizenstein's avatar
      Tidy comments around imports · 8e1bcd55
      Jeremy Reizenstein authored
      Summary: Make black and isort stop disagreeing by removing some unneeded comments around import statements. pyre ignores are moved.
      
      Reviewed By: theschnitz
      
      Differential Revision: D27118137
      
      fbshipit-source-id: 9926d0f21142adcf9b5cfe1d394754317f6386df
      8e1bcd55
  4. 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
  5. 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
  6. 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
  7. 17 Dec, 2020 1 commit
    • Nikhila Ravi's avatar
      Texture Atlas sampling bug fix · 01759d8f
      Nikhila Ravi authored
      Summary: Fixes the index out of bound errors for texture sampling from a texture atlas: when barycentric coordinates are 1.0, the integer index into the (R, R) per face texture map is R (max can only be R-1).
      
      Reviewed By: gkioxari
      
      Differential Revision: D25543803
      
      fbshipit-source-id: 82d0935b981352b49c1d95d5a17f9cc88bad0a82
      01759d8f
  8. 15 Dec, 2020 1 commit
    • Nikhila Ravi's avatar
      Non Square image rasterization for pointclouds · 3d769a66
      Nikhila Ravi authored
      Summary:
      Similar to non square image rasterization for meshes, apply the same updates to the pointcloud rasterizer.
      
      Main API Change:
      - PointRasterizationSettings now accepts a tuple/list of (H, W) for the image size.
      
      Reviewed By: jcjohnson
      
      Differential Revision: D25465206
      
      fbshipit-source-id: 7370d83c431af1b972158cecae19d82364623380
      3d769a66
  9. 14 Dec, 2020 2 commits
  10. 11 Dec, 2020 1 commit
  11. 09 Dec, 2020 1 commit
    • Nikhila Ravi's avatar
      Non square image rasterization for meshes · d07307a4
      Nikhila Ravi authored
      Summary:
      There are a couple of options for supporting non square images:
      1) NDC stays at [-1, 1] in both directions with the distance calculations all modified by (W/H). There are a lot of distance based calculations (e.g. triangle areas for barycentric coordinates etc) so this requires changes in many places.
      2) NDC is scaled by (W/H) so the smallest side has [-1, 1]. In this case none of the distance calculations need to be updated and only the pixel to NDC calculation needs to be modified.
      
      I decided to go with option 2 after trying option 1!
      
      API Changes:
      - Image size can now be specified optionally as a tuple
      
      TODO:
      - add a benchmark test for the non square case.
      
      Reviewed By: jcjohnson
      
      Differential Revision: D24404975
      
      fbshipit-source-id: 545efb67c822d748ec35999b35762bce58db2cf4
      d07307a4
  12. 05 Nov, 2020 1 commit
    • Dave Schnizlein's avatar
      Add MeshRendererWithFragments class to also return fragments after rendering · 83fef0a5
      Dave Schnizlein authored
      Summary: Users want to be able to obtain the depth from the renderer. Current work-around requires running the rasterizer and extra time. This change creates a new renderer class that also returns the fragments from the rasterizer.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D24432381
      
      fbshipit-source-id: 6552e8a6bfee646791afb34bdb7452fbc4094aed
      83fef0a5
  13. 27 Oct, 2020 1 commit
    • Jeremy Reizenstein's avatar
      images for debugging TexturesUV · aa4cc0ad
      Jeremy Reizenstein authored
      Summary: New methods to directly plot a TexturesUV map with its used points, using PIL and matplotlib.
      
      Reviewed By: gkioxari
      
      Differential Revision: D23782968
      
      fbshipit-source-id: 692970857b5be13a35a3175dc82ac03963a73555
      aa4cc0ad
  14. 18 Oct, 2020 1 commit
    • Jeremy Reizenstein's avatar
      linter comment strictnesss · 30e4e891
      Jeremy Reizenstein authored
      Summary: The linter has become stricter about the indenting of comments and docstrings. This was accompanied by a codemod. In a few places we can fix the problem nicer than the codemod has.
      
      Reviewed By: gkioxari
      
      Differential Revision: D24363880
      
      fbshipit-source-id: 4cff3bbe3d2a834bc92a490469a2b24fa376e6ab
      30e4e891
  15. 15 Oct, 2020 1 commit
    • John Reese's avatar
      apply black 20.8b1 formatting update · 2d397236
      John Reese authored
      Summary:
      allow-large-files
      
      black_any_style
      
      Reviewed By: zertosh
      
      Differential Revision: D24325133
      
      fbshipit-source-id: b4afe80d1e8b2bc993f4b8e3822c02964df47462
      2d397236
  16. 06 Oct, 2020 1 commit
    • Georgia Gkioxari's avatar
      add texture vertex sampling functionality to textures · e651a429
      Georgia Gkioxari authored
      Summary: Enhance every texture type with `faces_verts_textures_packed` that allows users to query the texture of each vertex in mesh
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D24058778
      
      fbshipit-source-id: 19d0e3a244fa96aae462c47bf52e07dfd3b7c6f0
      e651a429
  17. 01 Oct, 2020 1 commit
    • Patrick Labatut's avatar
      Fix a few linting warnings · 8219a52c
      Patrick Labatut authored
      Summary: Fix a few linting warnings
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D20720810
      
      fbshipit-source-id: c5b6a25fdd7971cc8743b54bbe162464a874071d
      8219a52c
  18. 28 Sep, 2020 1 commit
  19. 24 Sep, 2020 1 commit
    • Nikhila Ravi's avatar
      Support for moving the renderer to a new device · 956d3a01
      Nikhila Ravi authored
      Summary:
      Support for moving all the tensors of the renderer to another device by calling `renderer.to(new_device)`
      
      Currently the `MeshRenderer`, `MeshRasterizer` and `SoftPhongShader` (and other shaders) are all of type `nn.Module` which already supports easily moving tensors of submodules (defined as class attributes) to a different device. However the class attributes of the rasterizer and shader (e.g. cameras, lights, materials), are of type `TensorProperties`, not nn.Module so we need to explicity create a `to` method to move these tensors to device. Note that the `TensorProperties` class already has a `to` method so we only need to call `cameras.to(device)` and don't need to worry about the internal tensors.
      
      The other option is of course making these other classes (cameras, lights etc) also of type nn.Module.
      
      Reviewed By: gkioxari
      
      Differential Revision: D23885107
      
      fbshipit-source-id: d71565c442181f739de4d797076ed5d00fb67f8e
      956d3a01
  20. 21 Sep, 2020 1 commit
    • Jeremy Reizenstein's avatar
      Fix TexturesUV doc · ea0e762c
      Jeremy Reizenstein authored
      Summary: Fix map size in the comment.
      
      Reviewed By: gkioxari
      
      Differential Revision: D23813431
      
      fbshipit-source-id: e0777beadd7473014c1b79ad9f850d10f3549599
      ea0e762c
  21. 09 Sep, 2020 1 commit
    • Steve Branson's avatar
      Fix softmax_rgb_blend() when mesh is outside zfar · f8ea5906
      Steve Branson authored
      Summary:
      This fixes two small issues with blending.py:softmax_rgb_blend():
        1) zfar and znear attributes are propagated from the camera settings instead of just using default settings of znear=1.0 and zfar=100.0
        2) A check is added to prevent arithmetic overflow in softmax_rgb_blend()
      
      This is a fix in response to https://github.com/facebookresearch/pytorch3d/issues/334
      where meshes rendererd using a SoftPhongShader with faces_per_pixel=1 appear black.  This only occurs when the scale of the mesh is large (vertex values > 100, where 100 is the default value of zfar).  This fix allows the caller to increase the value of cameras.zfar to match the scale of her/his mesh.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D23517541
      
      fbshipit-source-id: ab8631ce9e5f2149f140b67b13eff857771b8807
      f8ea5906
  22. 02 Sep, 2020 1 commit
  23. 27 Aug, 2020 1 commit
  24. 26 Aug, 2020 1 commit
    • Jeremy Reizenstein's avatar
      tutorial fixes. validate #cameras · 9aeb88b4
      Jeremy Reizenstein authored
      Summary:
      Update the installation cells to import torch.
      Replace use of deprecated Textures in deform tutorial.
      Correct the deform tutorial's idea of its own name.
      Fix typo in batched part of render_textured_meshes which meant only one mesh was being rendered with a batch of cameras.
      Add an error check in the rasterizer to make the error friendly from such a mistake elsewhere.
      
      Reviewed By: gkioxari
      
      Differential Revision: D23345462
      
      fbshipit-source-id: 1d5bd25db052f7ef687b7168d7aee5cc4dce8952
      9aeb88b4
  25. 25 Aug, 2020 2 commits
    • Jeremy Reizenstein's avatar
      amalgamate meshes with texture into a single scene · 909dc835
      Jeremy Reizenstein authored
      Summary:
      Add a join_scene method to all the textures to allow the join_mesh function to include textures. Rename the join_mesh function to join_meshes_as_scene.
      
      For TexturesAtlas, we now interpolate if the user attempts to have the resolution vary across the batch. This doesn't look great if the resolution is already very low.
      
      For TexturesUV, a rectangle packing function is required, this does something simple.
      
      Reviewed By: gkioxari
      
      Differential Revision: D23188773
      
      fbshipit-source-id: c013db061a04076e13e90ccc168a7913e933a9c5
      909dc835
    • Jeremy Reizenstein's avatar
      align_corners and padding for TexturesUV · e25ccab3
      Jeremy Reizenstein authored
      Summary:
      Allow, and make default, align_corners=True for texture maps. Allow changing the padding_mode and set the default to be "border" which produces more logical results. Some new documentation.
      
      The previous behavior corresponds to padding_mode="zeros" and align_corners=False.
      
      Reviewed By: gkioxari
      
      Differential Revision: D23268775
      
      fbshipit-source-id: 58d6229baa591baa69705bcf97471c80ba3651de
      e25ccab3
  26. 22 Aug, 2020 1 commit
    • Nikhila Ravi's avatar
      Tutorials textures updates and fix bug in extending meshes with uv textures · 90f6a005
      Nikhila Ravi authored
      Summary:
      Found a bug in extending textures with vertex uv coordinates. This was due to the padded -> list conversion of vertex uv coordinates i.e.                 The number of vertices in the mesh and in verts_uvs can differ
      e.g. if a vertex is shared between 3 faces, it can
      have up to 3 different uv coordinates. Therefore we cannot convert directly from padded to list using _num_verts_per_mesh
      
      Reviewed By: bottler
      
      Differential Revision: D23233595
      
      fbshipit-source-id: 0c66d15baae697ead0bdc384f74c27d4c6539fc9
      90f6a005
  27. 21 Aug, 2020 2 commits
    • Jeremy Reizenstein's avatar
      Fix batching bug from TexturesUV packed ambiguity, other textures tidyup · 9a50cf80
      Jeremy Reizenstein authored
      Summary:
      faces_uvs_packed and verts_uvs_packed were only used in one place and the definition of the former was ambiguous. This meant that the wrong coordinates could be used for meshes other than the first in the batch. I have therefore removed both functions and build their common result inline. Added a test that a simple batch of two meshes is rendered consistently with the rendering of each alone. This test would have failed before.
      
      I hope this fixes https://github.com/facebookresearch/pytorch3d/issues/283.
      
      Some other small improvements to the textures code.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D23161936
      
      fbshipit-source-id: f99b560a46f6b30262e07028b049812bc04350a7
      9a50cf80
    • Steve Branson's avatar
      Temporary fix for mesh rasterization bug for traingles partially behind the camera · 9aaba048
      Steve Branson authored
      Summary: A triangle is culled if any vertex in a triangle is behind the camera.  This fixes incorrect rendering of triangles that are partially behind the camera, where screen coordinate calculations are strange.  It doesn't work for triangles that are partially behind the camera but still intersect with the view frustum.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22856181
      
      fbshipit-source-id: a9cbaa1327d89601b83d0dfd3e4a04f934a4a213
      9aaba048
  28. 17 Aug, 2020 1 commit
  29. 30 Jul, 2020 1 commit
  30. 29 Jul, 2020 1 commit
    • Nikhila Ravi's avatar
      Texturing API updates · a3932960
      Nikhila Ravi authored
      Summary:
      A fairly big refactor of the texturing API with some breaking changes to how textures are defined.
      
      Main changes:
      - There are now 3 types of texture classes: `TexturesUV`, `TexturesAtlas` and `TexturesVertex`. Each class:
         - has a `sample_textures` function which accepts the `fragments` from rasterization and returns `texels`. This means that the shaders will not need to know the type of the mesh texture which will resolve several issues people were reporting on GitHub.
        -  has a `join_batch` method for joining multiple textures of the same type into a batch
      
      Reviewed By: gkioxari
      
      Differential Revision: D21067427
      
      fbshipit-source-id: 4b346500a60181e72fdd1b0dd89b5505c7a33926
      a3932960
  31. 21 Jul, 2020 1 commit
  32. 17 Jul, 2020 1 commit
    • Nikhila Ravi's avatar
      pyre and lint fixes · 4f78af61
      Nikhila Ravi authored
      Summary: Fixing several unused imports and pyre/linter warnings.
      
      Reviewed By: bottler
      
      Differential Revision: D22592491
      
      fbshipit-source-id: 463383b9b73a545949475044fb5c531712f8482c
      4f78af61
  33. 16 Jul, 2020 1 commit
    • Nikhila Ravi's avatar
      barycentric clipping in cuda/c++ · cc70950f
      Nikhila Ravi authored
      Summary:
      Added support for barycentric clipping in the C++/CUDA rasterization kernels which can be switched on/off via a rasterization setting.
      
      Added tests and a benchmark to compare with the current implementation in PyTorch - for some cases of large image size/faces per pixel the cuda version is 10x faster.
      
      Reviewed By: gkioxari
      
      Differential Revision: D21705503
      
      fbshipit-source-id: e835c0f927f1e5088ca89020aef5ff27ac3a8769
      cc70950f
  34. 13 Jul, 2020 1 commit
    • Justin Johnson's avatar
      CUDA kernel for interpolate_face_attributes · 26d2cc24
      Justin Johnson authored
      Summary: When rendering meshes with Phong shading, interpolate_face_attributes was taking up a nontrivial fraction of the overall shading time. This diff replaces our Python implementation of this function with a CUDA implementation.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D21610763
      
      fbshipit-source-id: 2bb362a28f698541812aeab539047264b125ebb8
      26d2cc24
  35. 30 Jun, 2020 1 commit
    • Nikhila Ravi's avatar
      mesh rasterizer settings fix · dd4a35cf
      Nikhila Ravi authored
      Summary:
      Fix default setting of `max_faces_per_bin` and update mesh rasterization benchmark tests.
      The previous setting of `max_faces_per_bin` was wrong and for larger mesh sizes and batch sizes it was causing a significant slow down due to an unecessarily large intermediate tensor being created.
      
      Reviewed By: gkioxari
      
      Differential Revision: D22301819
      
      fbshipit-source-id: d5e817f5b917fb5633c9c6a8634b6c8ff65e3508
      dd4a35cf