Pyrender Test

[1]:
%pip install pyrender trimesh
# a newer version of pyopengl is needed: https://github.com/EvelynFan/FaceFormer/issues/7#issuecomment-1092615864
# split the pip install command, to avoid pip otherwise backtracking to really old packages to satisfy all constraints at the same time.
%pip install "pyopengl>=3.1.4" pyopengl_accelerate
Requirement already satisfied: pyrender in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (0.1.45)
Requirement already satisfied: trimesh in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (4.3.2)
Requirement already satisfied: freetype-py in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (from pyrender) (2.4.0)
Requirement already satisfied: imageio in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (from pyrender) (2.34.1)
Requirement already satisfied: networkx in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (from pyrender) (3.3)
Requirement already satisfied: numpy in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (from pyrender) (1.26.4)
Requirement already satisfied: Pillow in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (from pyrender) (10.3.0)
Requirement already satisfied: pyglet>=1.4.10 in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (from pyrender) (2.0.15)
Requirement already satisfied: PyOpenGL~=3.1.0 in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (from pyrender) (3.1.7)
Requirement already satisfied: scipy in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (from pyrender) (1.13.0)
Requirement already satisfied: six in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (from pyrender) (1.16.0)
Note: you may need to restart the kernel to use updated packages.
Requirement already satisfied: pyopengl>=3.1.4 in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (3.1.7)
Requirement already satisfied: pyopengl_accelerate in /home/docs/checkouts/readthedocs.org/user_builds/spanag-rtd-tutorial/envs/latest/lib/python3.10/site-packages (3.1.7)
Note: you may need to restart the kernel to use updated packages.
[2]:
!git clone https://github.com/mmatl/pyrender
Cloning into 'pyrender'...
remote: Enumerating objects: 1308, done.
remote: Counting objects: 100% (151/151), done.
remote: Compressing objects: 100% (87/87), done.
remote: Total 1308 (delta 67), reused 132 (delta 59), pack-reused 1157
Receiving objects: 100% (1308/1308), 28.43 MiB | 46.21 MiB/s, done.
Resolving deltas: 100% (765/765), done.
[3]:
import os
# The osmesa backend is used for reliable, CPU based rendering. Set to 'egl' if you're feeling lucky, or read the pyrender docs about other options.
# Also make sure libosmesa is installed on your system, of course.
os.environ['PYOPENGL_PLATFORM'] = 'osmesa'
[4]:
import numpy as np
import trimesh
import pyrender
import matplotlib.pyplot as plt
fuze_trimesh = trimesh.load('pyrender/examples/models/fuze.obj')
mesh = pyrender.Mesh.from_trimesh(fuze_trimesh)
scene = pyrender.Scene()
scene.add(mesh)
camera = pyrender.PerspectiveCamera(yfov=np.pi / 3.0, aspectRatio=1.0)
s = np.sqrt(2)/2
camera_pose = np.array([
   [0.0, -s,   s,   0.3],
   [1.0,  0.0, 0.0, 0.0],
   [0.0,  s,   s,   0.35],
   [0.0,  0.0, 0.0, 1.0],
])
scene.add(camera, pose=camera_pose)
light = pyrender.SpotLight(color=np.ones(3), intensity=3.0,
                           innerConeAngle=np.pi/16.0,
                           outerConeAngle=np.pi/6.0)
scene.add(light, pose=camera_pose)
r = pyrender.OffscreenRenderer(400, 400)

[5]:
for i in range(10):
    color, depth = r.render(scene)
plt.figure()
plt.subplot(1,2,1)
plt.axis('off')
plt.imshow(color)
plt.subplot(1,2,2)
plt.axis('off')
plt.imshow(depth, cmap=plt.cm.gray_r)
plt.show()
_images/pyrender_5_0.png
[6]:
!rm -rf pyrender