1. 19 Sep, 2020 1 commit
  2. 14 Sep, 2020 1 commit
    • Amitav Baruah's avatar
      Add background color support to compositors · 872ff8c7
      Amitav Baruah authored
      Summary: Support rendering different color backgrounds for pointclouds for both compositors
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D23611043
      
      fbshipit-source-id: ab029650d51349340372c5bd66700e6577d48851
      872ff8c7
  3. 10 Sep, 2020 1 commit
    • Amitav Baruah's avatar
      Fix look_at corner case · eb517dd7
      Amitav Baruah authored
      Summary: When the camera is vertically oriented, calculating the look_at x-axis (also known as the "right" vector) does not succeed, resulting in the x-axis being placed at the origin. Adds a check to correctly calculate the x-axis if this case occurs.
      
      Reviewed By: nikhilaravi, sbranson
      
      Differential Revision: D23511859
      
      fbshipit-source-id: ee5145cdbecdbe2f7c7d288588bd0899480cb327
      eb517dd7
  4. 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
  5. 03 Sep, 2020 1 commit
    • David Novotny's avatar
      Camera alignment · 316b7778
      David Novotny authored
      Summary:
      adds `corresponding_cameras_alignment` function that estimates a similarity transformation between two sets of cameras.
      
      The function is essential for computing camera errors in SfM pipelines.
      
      ```
      Benchmark                                                   Avg Time(μs)      Peak Time(μs) Iterations
      --------------------------------------------------------------------------------
      CORRESPONDING_CAMERAS_ALIGNMENT_10_centers_False                32219           36211             16
      CORRESPONDING_CAMERAS_ALIGNMENT_10_centers_True                 32429           36063             16
      CORRESPONDING_CAMERAS_ALIGNMENT_10_extrinsics_False              5548            8782             91
      CORRESPONDING_CAMERAS_ALIGNMENT_10_extrinsics_True               6153            9752             82
      CORRESPONDING_CAMERAS_ALIGNMENT_100_centers_False               33344           40398             16
      CORRESPONDING_CAMERAS_ALIGNMENT_100_centers_True                34528           37095             15
      CORRESPONDING_CAMERAS_ALIGNMENT_100_extrinsics_False             5576            7187             90
      CORRESPONDING_CAMERAS_ALIGNMENT_100_extrinsics_True              6256            9166             80
      CORRESPONDING_CAMERAS_ALIGNMENT_1000_centers_False              32020           37247             16
      CORRESPONDING_CAMERAS_ALIGNMENT_1000_centers_True               32776           37644             16
      CORRESPONDING_CAMERAS_ALIGNMENT_1000_extrinsics_False            5336            8795             94
      CORRESPONDING_CAMERAS_ALIGNMENT_1000_extrinsics_True             6266            9929             80
      --------------------------------------------------------------------------------
      ```
      
      Reviewed By: shapovalov
      
      Differential Revision: D22946415
      
      fbshipit-source-id: 8caae7ee365b304d8aa1f8133cf0dd92c35bc0dd
      316b7778
  6. 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
  7. 22 Aug, 2020 3 commits
    • Eduardo Henrique Arnold's avatar
      Fix look_at_view_transform when object location is not (0,0,0) (#230) · d0cec028
      Eduardo Henrique Arnold authored
      Summary:
      The look_at_view_transform did not give the correct results when the object location `at` was not (0,0,0).
      
      The problem was on computing the cameras' location in world's coordinate `C`. It only took into account the camera position from spherical angles, but ignored the object location in the world's coordinate system. I simply modified the C tensor to take into account the object's location which is not necessarily in the origin.
      
      I ran unit tests and all but 4 failed with the same error message: `RuntimeError: CUDA error: invalid device ordinal`. However the same happens before this patch, so I believe these errors are unrelated.
      
      Pull Request resolved: https://github.com/facebookresearch/pytorch3d/pull/230
      
      Reviewed By: gkioxari
      
      Differential Revision: D23278126
      
      Pulled By: nikhilaravi
      
      fbshipit-source-id: c06e891bc46de8222325ee7b37aa43cde44648e8
      d0cec028
    • Nikhila Ravi's avatar
      Texture loading and rendering in ShapeNetCore and R2N2 data loaders · 778383ee
      Nikhila Ravi authored
      Summary:
      - Add support for loading textures from ShapeNet Obj files as a texture atlas.
      - Support textured rendering of shapenet models
      
      Reviewed By: gkioxari
      
      Differential Revision: D23141143
      
      fbshipit-source-id: 26eb81758d4cdbd6d820b072b58f5c6c08cb90bc
      778383ee
    • 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
  8. 21 Aug, 2020 3 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
    • Georgia Gkioxari's avatar
      camera refactoring · 57a22e73
      Georgia Gkioxari authored
      Summary:
      Refactor cameras
      * CamerasBase was enhanced with `transform_points_screen` that transforms projected points from NDC to screen space
      * OpenGLPerspective, OpenGLOrthographic -> FoVPerspective, FoVOrthographic
      * SfMPerspective, SfMOrthographic -> Perspective, Orthographic
      * PerspectiveCamera can optionally be constructred with screen space parameters
      * Note on Cameras and coordinate systems was added
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D23168525
      
      fbshipit-source-id: dd138e2b2cc7e0e0d9f34c45b8251c01266a2063
      57a22e73
  9. 17 Aug, 2020 2 commits
    • Georgia Gkioxari's avatar
      detach for meshes, pointclouds, textures · 7f2f95f2
      Georgia Gkioxari authored
      Summary: Add `detach` for Meshes, Pointclouds, Textures
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D23070418
      
      fbshipit-source-id: 68671124ce114c4495d7ef3c944c9aac3d0db2d8
      7f2f95f2
    • Nikhila Ravi's avatar
      Softmax blending small fix · 5852b74d
      Nikhila Ravi authored
      Summary:
      Small fix to the softmax blending function.
      
      To avoid overflow in the exponential for the softmax, the exponent is shifted by the maximum value. In the final calculation of the color there is a weighted sum between the pixel color and the background color - in order for the sum to be correct, the background color also needs to be handled in the same way witt the shifted exponent.
      
      Reviewed By: gkioxari
      
      Differential Revision: D23148301
      
      fbshipit-source-id: 86066586ee7d3ce7bd4a2076b12ce191fbd151a7
      5852b74d
  10. 07 Aug, 2020 3 commits
    • Luya Gao's avatar
      Return R2N2 voxel coordinates · 63ba74f1
      Luya Gao authored
      Summary: Return R2N2's voxel coordinates.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22462530
      
      fbshipit-source-id: a995cfa0957b2561eb3b0f4591cb1db42170bc68
      63ba74f1
    • Luya Gao's avatar
      Return R2N2 R,T,K · 326e4ccb
      Luya Gao authored
      Summary: Return rotation, translation and intrinsic matrices necessary to reproduce R2N2's own renderings.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22462520
      
      fbshipit-source-id: 46a3859743ebc43c7a24f75827d2be3adf3f486b
      326e4ccb
    • Jeremy Reizenstein's avatar
      fix graph_conv test · 5d944430
      Jeremy Reizenstein authored
      Summary: The recently added part of a test was assuming that the random gpu was gpu 0.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22948397
      
      fbshipit-source-id: 88107e19fc3118e763f95be43a614941176a08f9
      5d944430
  11. 05 Aug, 2020 1 commit
    • Jeremy Reizenstein's avatar
      gather_scatter on CPU · 7944d24d
      Jeremy Reizenstein authored
      Summary: CPU implementation of the graph convolution op.
      
      Reviewed By: nikhilaravi, gkioxari
      
      Differential Revision: D21384361
      
      fbshipit-source-id: bc96730e9727bb9aa1b0a232dcb82f0c0d12fe6b
      7944d24d
  12. 29 Jul, 2020 2 commits
    • 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
    • Jeremy Reizenstein's avatar
      smaller data in specular test · b73d3d6e
      Jeremy Reizenstein authored
      Summary: Reduce the size of the data in this test, so that on circleci it doesn't run out of memory when pytorch (1.6) is used.
      
      Reviewed By: gkioxari
      
      Differential Revision: D22801490
      
      fbshipit-source-id: 9591253c3d47430facd769a2c51a0b1722e0a305
      b73d3d6e
  13. 23 Jul, 2020 2 commits
    • Luya Gao's avatar
      Add BlenderCamera · 722c2b71
      Luya Gao authored
      Summary: Adding BlenderCamera (for rendering with R2N2 Blender transformations in the next diff).
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22462515
      
      fbshipit-source-id: 4b40ee9bba8b6d56788dd3c723036ec704668153
      722c2b71
    • Luya Gao's avatar
      Test R2N2 loads correct numbers of instances · 483e538d
      Luya Gao authored
      Summary:
      Sample/Get all views at the loading phase instead of returning phase;
      Load only views from the split instead of all 24 views;
      Test the numbers of views loaded are correct for each category.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22631414
      
      fbshipit-source-id: 1c5ce99fe2bdf6618c1aa0b69bb6899473376bc2
      483e538d
  14. 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
  15. 16 Jul, 2020 3 commits
    • Roman Shapovalov's avatar
      Bumping the threshold to allow leeway for CI testing randomness. · cdaac5f9
      Roman Shapovalov authored
      Summary:
      1. CircleCI tests fail because of different randomisation. I was able to reproduce it on devfair (with an older version of pytorch3d though), but with a new threshold, it works. Let’s push and see if it will work in CircleCI.
      2. Fixing linter’s issue with `l` variable name.
      
      Reviewed By: bottler
      
      Differential Revision: D22573244
      
      fbshipit-source-id: 32cebc8981883a3411ed971eb4a617469376964d
      cdaac5f9
    • 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
    • Nikhila Ravi's avatar
      C++/CUDA implementation of sigmoid alpha blend · bce396df
      Nikhila Ravi authored
      Summary:
      C++/CUDA implementation of forward and backward passes for the sigmoid alpha blending function.
      
      This is slightly faster than the vectorized implementation in Python, but more importantly uses less memory due to fewer tensors being created.
      
      Reviewed By: gkioxari
      
      Differential Revision: D19980671
      
      fbshipit-source-id: 0779055d2c68b1f20fb0870e60046077ef4613ff
      bce396df
  16. 14 Jul, 2020 6 commits
    • Luya Gao's avatar
      Return R2N2 renderings · dc08c305
      Luya Gao authored
      Summary: R2N2 returns R2N2's own renderings of ShapeNetCore models.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22266988
      
      fbshipit-source-id: 36e67bd06c6459773e6e5f654259166b579be36a
      dc08c305
    • Luya Gao's avatar
      Test rendering models for R2N2 · 5636eb61
      Luya Gao authored
      Summary: Adding a render function for R2N2.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22230228
      
      fbshipit-source-id: a9f588ddcba15bb5d8be1401f68d730e810b4251
      5636eb61
    • Luya Gao's avatar
      R2N2 skeleton · 49b4ce1a
      Luya Gao authored
      Summary: Skeleton of R2N2 that for now only returns verts and faces extracted from ShapeNetCore v1.
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22203656
      
      fbshipit-source-id: 00db6ac76bfdb76fdbc77a2087c34a3f0ff01e6a
      49b4ce1a
    • Luya Gao's avatar
      collate_batched_meshes for datasets · 22d8c333
      Luya Gao authored
      Summary: Adding collate_batched_meshes for datasets.utils: takes in a list of dictionaries and merge them into one dictionary (while adding a merged mesh to the dictionary).
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22180404
      
      fbshipit-source-id: f811f9a140f09638f355ad5739bffa6ee415819f
      22d8c333
    • Luya Gao's avatar
      Render objects in a batch by the specified model_ids, categories or idxs for ShapeNetBase · 22f2963c
      Luya Gao authored
      Summary: Additional functionality for renderer in ShapeNetCore: users can select which objects to render by specifying their model_ids, or users could choose to render several random objects in some categories, or users could specify indices of the objects in the loaded dataset. (currently doesn't support changing lighting, still investigating why lighting is causing instability in renderings)
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22179594
      
      fbshipit-source-id: 74c49094ffa3ea2eb71de9451f9e5da5053d356d
      22f2963c
    • Luya Gao's avatar
      Adding renderer for ShapeNetBase · 358e211c
      Luya Gao authored
      Summary: Adding a renderer to ShapeNetCore (Note that the lights are currently turned off for the test; will investigate why lighting causes instability in rendering)
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22102673
      
      fbshipit-source-id: a704756a1e93b61d5a879f0e5ee14ebcb0df49d7
      358e211c
  17. 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
  18. 09 Jul, 2020 1 commit
    • David Novotny's avatar
      Efficient PnP weighting bug fix · daf9eac8
      David Novotny authored
      Summary:
      There is a bug in efficient PnP that incorrectly weights points. This fixes it.
      
      The test does not pass for the previous version with the bug.
      
      Reviewed By: shapovalov
      
      Differential Revision: D22449357
      
      fbshipit-source-id: f5a22081e91d25681a6a783cce2f5c6be429ca6a
      daf9eac8
  19. 08 Jul, 2020 1 commit
  20. 03 Jul, 2020 1 commit
    • Georgia Gkioxari's avatar
      fix pts scale, save ply · 2f0fd601
      Georgia Gkioxari authored
      Summary:
      Fix:
      * Scaling of point clouds for scalars
      * save_ply compatible cat
      
      Reviewed By: nikhilaravi
      
      Differential Revision: D22298609
      
      fbshipit-source-id: abe94a5b64baf325587202d20adfc36912cc1478
      2f0fd601
  21. 02 Jul, 2020 1 commit
    • Nikhila Ravi's avatar
      making sorting for K >1 optional in KNN points function · 806ca361
      Nikhila Ravi authored
      Summary: Added `sorted` argument to the `knn_points` function. This came up during the benchmarking against Faiss - sorting added extra memory usage. Match the memory usage of Faiss by making sorting optional.
      
      Reviewed By: bottler, gkioxari
      
      Differential Revision: D22329070
      
      fbshipit-source-id: 0828ff9b48eefce99ce1f60089389f6885d03139
      806ca361
  22. 30 Jun, 2020 2 commits
    • 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
    • Nikhila Ravi's avatar
      fix default settings for point rasterization and update benchmark · 88f57938
      Nikhila Ravi authored
      Summary:
      Fixes the default setting of `max_points_per_bin` in `rasterize_points.py`. For large batches with large size pointclouds this was a causing the rasterizer to be very slow.
      
      Expanded the pointcloud rendering benchmarks to include larger size pointclouds and fixed cuda synchronization issue in benchmark.
      
      Reviewed By: gkioxari
      
      Differential Revision: D22301185
      
      fbshipit-source-id: 5077c1ba2c43d73efc1c659f0ec75959ceddf893
      88f57938