Jonathan Lee

1. Cameras

1.1 360-degree GIF

cow render

1.2 Dolly Zoom

dolly zoom

2. Meshes

2.1 Tetrahedron

The mesh has 4 vertices and 4 triangle faces

tetrahedron

2.2 Cube

The mesh has 8 vertices and 12 triangle faces

cube

3. Re-texturing a mesh

For color1 I used green ([0., 1., 0.]) and for color2 I used red ([1., 0., 0.]).

cow color

4. Camera Transformations

R_relative and t_relative apply the transformation from the inital camera position (0,0,-3) to move it to the final desired camera position.

First we set R_relative to be the relative rotation from the inital camera orientation. Then we set t_relative to be the vector of the initial camera position in the new camera frame.

Pytorch FoVPerspectiveCameras(R=R, T=T) expects R and T to be transforms from world to camera. However, since pytorch3d operates on batches, they represent points using row vectors and right hand multiply by matrices. Therefore, they expect the rotation matrix to be transposed, so R_relative$=R_{cw}^T=R_{wc}$.

T_relative is the vector that when added to $t^w_{cw}=-R_{wc} t_{cw}$, we get the vector to the world origin from the camera coordinate frame.

View 1
View 2
View 3
View 4

5. Rendering Generic 3D Representations

5.1 Point Clouds from RGB-D Images

Point Cloud 1
Point Cloud 2
Combined Point Cloud

Since those GIFs play a little fast, here’s some renders of each point cloud at different viewing angles. Top row: point cloud 1. Middle row: point cloud 2. Bottom row: combined point cloud.

plant render grid

5.2 Parametric Functions

Torus:

torus

Trefoil knot (wiki):

trefoil

Klein bottle figure 8 immersion (wiki):

klein

5.3 Implicit Surfaces

Mesh vs Point Clouds

Meshes have the advantage of representing the entire surface as opposed to point clouds which are samples from the surface.

When rendering a mesh, the surface will appear solid, which makes it appealing for rendering opaque objects. They can also be made watertight for 3D printing and many assets online are available as meshes.

Point clouds have an advantage of being the direct output of many sensors (depth and lidar). They are also easy to manipulate (e.g. coloring and downsampling). However, point clouds can be sparse, which is not ideal for rendering.

Torus mesh:

torus mesh

Genus 2 mesh (wiki):

genus 2 mesh

6. Something Fun

I experimented with texturing meshes using a measure of curvature of the surface. I used trimesh.curvature.discrete_mean_curvature_measure to color the mesh using the discrete mean curvature measure of a sphere centered at each vertex.

Then I mapped the scalar curvature value to the range (color1, color2). For color1 I used green ([0., 1., 0.]) and for color2 I used red ([1., 0., 0.]). Negative curvature (green) indicates the surface is locally concave and positive curvature (red) indicates the surface is locally convex.

Cow curvature:

cow curvature

Moai Statue (free3d):

moai statue curvature

7. Sampling Points on Meshes

10 samples
100 samples
1000 samples
10000 samples
Original Mesh