mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2026-03-15 17:05:58 +08:00
Add MeshRasterizerOpenGL
Summary: Adding MeshRasterizerOpenGL, a faster alternative to MeshRasterizer. The new rasterizer follows the ideas from "Differentiable Surface Rendering via non-Differentiable Sampling". The new rasterizer 20x faster on a 2M face mesh (try pose optimization on Nefertiti from https://www.cs.cmu.edu/~kmcrane/Projects/ModelRepository/!). The larger the mesh, the larger the speedup. There are two main disadvantages: * The new rasterizer works with an OpenGL backend, so requires pycuda.gl and pyopengl installed (though we avoided writing any C++ code, everything is in Python!) * The new rasterizer is non-differentiable. However, you can still differentiate the rendering function if you use if with the new SplatterPhongShader which we recently added to PyTorch3D (see the original paper cited above). Reviewed By: patricklabatut, jcjohnson Differential Revision: D37698816 fbshipit-source-id: 54d120639d3cb001f096237807e54aced0acda25
This commit is contained in:
committed by
Facebook GitHub Bot
parent
36edf2b302
commit
cb49550486
@@ -8,7 +8,7 @@
|
||||
import copy
|
||||
import inspect
|
||||
import warnings
|
||||
from typing import Any, Optional, Tuple, Union
|
||||
from typing import Any, List, Optional, Tuple, Union
|
||||
|
||||
import numpy as np
|
||||
import torch
|
||||
@@ -432,3 +432,27 @@ def ndc_to_grid_sample_coords(
|
||||
else:
|
||||
xy_grid_sample[..., 0] *= aspect
|
||||
return xy_grid_sample
|
||||
|
||||
|
||||
def parse_image_size(
|
||||
image_size: Union[List[int], Tuple[int, int], int]
|
||||
) -> Tuple[int, int]:
|
||||
"""
|
||||
Args:
|
||||
image_size: A single int (for square images) or a tuple/list of two ints.
|
||||
|
||||
Returns:
|
||||
A tuple of two ints.
|
||||
|
||||
Throws:
|
||||
ValueError if got more than two ints, any negative numbers or non-ints.
|
||||
"""
|
||||
if not isinstance(image_size, (tuple, list)):
|
||||
return (image_size, image_size)
|
||||
if len(image_size) != 2:
|
||||
raise ValueError("Image size can only be a tuple/list of (H, W)")
|
||||
if not all(i > 0 for i in image_size):
|
||||
raise ValueError("Image sizes must be greater than 0; got %d, %d" % image_size)
|
||||
if not all(type(i) == int for i in image_size):
|
||||
raise ValueError("Image sizes must be integers; got %f, %f" % image_size)
|
||||
return tuple(image_size)
|
||||
|
||||
Reference in New Issue
Block a user