
Figure 1: 360-degree view of the cow.

Figure 2: Dolly Zoom effect on the cow.
4 vertices and 4 faces are required to build a tetrahedron.

Figure 3: 360-degree view of a tetrahedron.
8 vertices and 12 faces are required to build a cube because each square face must be divided in 2 triangles.

Figure 4: 360-degree view of a cube.
The colors used to re-texture the cow were:

Figure 5: 360-degree view of the cow with a different texture.

Figure 6: Cow rendered appling different transforms to the camera.

Figure 7: Point clouds rendered. Left: first image. Middle: second image. Right: union of the 2 point clouds.

Figure 8: 360-view of a torus point cloud by sampling its parametric function.

Figure 9: 360-view of a bagel point cloud by sampling its parametric function.

Figure 10: 360-view of a torus mesh defined by its implicit function.

Figure 11: 360-view of a genus 2 mesh defined by its implicit function.
Different rendering methods have their own advantages and drawbacks. Point cloud rendering does not define a continuous surface, which results in visual discontinuities. This issue can be mitigated by increasing the number of points, but doing so raises memory consumption and still does not fully achieve continuity. On the other hand, surface-based rendering provides continuity, but it requires more memory, as both vertices and faces need to be stored. Additionally, generating meshes from implicit surfaces involves voxelizing the space, meaning the mesh resolution depends on the voxel grid. Finally, working with meshes can be more complex than working with point clouds, particularly due to issues like face overlaps, ordering, and connectivity.
As a child, I spent countless hours editing Pro Evolution Soccer 6—considered by many the greatest soccer game ever made. I created custom kits, balls, player faces, and even stadiums. Back then, I had no formal knowledge of what I was doing—just curiosity and a lot of fun. Today, I can load PES6 data directly into Python and render Ronaldinho’s head—my favorite player—using PyTorch3D!

Figure 12: 360-view of Ronaldinho's head mesh from Pro Evolution Soccer 6 data using PyTorch3D.
The mesh has a higher vertex density in areas such as the tail and small structures due to the smaller face sizes, while regions with more regular surfaces—like the back and legs—have a lower vertex density. Applying random sampling to the mesh helps achieve a more balanced and uniform point cloud distribution.

Figure 13: Mesh rendered. Vertices from mesh. 10 points sampled from mesh. 100 points sampled from mesh. 1000 points sampled from mesh. 10000 points sampled from mesh.