Rendering Basics with PyTorch3D

16-825 Learning for 3D: Assignment 1

Author

Ricky Yuan (rickyy)

Published

September 11, 2025

1. Practicing with Cameras (15 Points)

1.1. 360-degree Renders (5 points)

python -m starter.render_mesh --gif  

1.2 Re-creating the Dolly Zoom (10 points)

python -m starter.dolly_zoom

2. Practicing with Meshes (10 Points)

2.1 Constructing a Tetrahedron (5 points)

python -m starter.render_mesh --cow_path data/tetrahedron.obj --gif --gif_path images/tetrahedron.gif

The tetrahedron mesh should have 4 vertices and 4 faces.

2.2 Constructing a Cube (5 points)

python -m starter.render_mesh --cow_path data/cube.obj --gif --gif_path images/cube.gif

The cube mesh should have 8 vertices and 12 faces.

3. Re-texturing a mesh (10 points)

python -m starter.render_mesh --gif --gif_path images/retexture.gif --retexture

In this case, color1 = [0.0, 1.0, 1.0] and color2 = [1.0, 1.0, 0.0].

4. Camera Transformations (10 points)

python -m starter.camera_transforms

Original render

Transformation 1 (left): Rotate the camera –90° around Z axis

Transformation 2 (right): Translate by [0.0, 0.0, 2.0]

Transformation 3 (left): Translate by [0.5, -0.5, 0.0]

Transformation 4 (right): Rotate the camera 90° around Y axis and translate by [-3.0, 0.0, 3.0]

5. Rendering Generic 3D Representations (45 Points)

5.1 Rendering Point Clouds from RGB-D Images (10 points)

python -m starter.render_generic --render rgbd --num_views 48
  1. The point cloud corresponding to the first image.
  2. The point cloud corresponding to the second image.
  3. The point cloud formed by the union of the first 2 point clouds.

5.2 Parametric Functions (10 + 5 points)

python -m starter.render_generic --render parametric_torus --num_samples 1000
python -m starter.render_generic --render parametric_mobius_strip --num_samples 1000

Left: Torus, Right: Möbius Strip

5.3 Implicit Surfaces (15 + 5 points)

python -m starter.render_generic --render implicit_torus
python -m starter.render_generic --render implicit_ellipsoid

  • In addition, discuss some of the tradeoffs between rendering as a mesh vs a point cloud. Things to consider might include rendering speed, rendering quality, ease of use, memory usage, etc. (5 points)

Mesh: slower to render because of rasterization, but higher quality rendering with smooth and well-defined geometry. More complex to set up and use because it requires defining the mesh topology. Higher memory usage because it stores not only vertices but also faces and textures.

Point Cloud: faster to render because it can be done in a single pass without rasterization. Easier to set up and use because it only requires point positions and colors. Lower memory usage because it only stores vertices and colors.


6. Do Something Fun (10 points)

python -m starter.render_generic --render textured_mesh --image_size 512

I used a cottage model from here, and simulated a day-night cycle by changing the light color and location.

(Extra Credit) 7. Sampling Points on Meshes (10 points)

python -m starter.render_pc_from_mesh

Below are the original mesh rendering and the sampled points rendering for different number of points.

Original Mesh 10 points 100 points 1,000 points 10,000 points