Google Colaboratory가 3D CG 렌더링 애플리케이션에도 너무 유능한 경우

공동체 는 Google이 기계 학습의 교육·연구 용도에 무상 제공하고 있는 것으로 친숙한 웹 서비스입니다만, 그 훌륭한 계산기 파워를 살릴 수 있는 것은 기계 학습만은 아니다.
이론보다 증거. 다음은 Colaboratory의 Blender에서 렌더링한 1920*1080의 출력 결과입니다(참고: 모델은 Blender 공식 사이트에 게시되며 CC0 라이센스를 준수합니다)


이 1장의 렌더링에 필요한 시간은 28초. 실제 Jupyter 샘플은 여기에서 공개하고 있습니다.이므로 지금 시도해 볼 수 있습니다.

샘플에도 있지만, Colaboratory에서 blender를 설치하는 것은 다음 명령입니다. apt 명령 한 번으로 갈 수있는 것이 훌륭합니다.
!apt install blender libboost-all-dev libgl1-mesa-dev

그리고 블렌더의 백그라운드 모드를 사용하는 실행 스크립트는 다음과 같습니다. E 옵션으로 렌더러를 지정하고 있으며 여기를 "CYCLES"로 설정하면 Path Tracing으로 전환됩니다.
!blender -b BMW27GE.blend -noaudio -o ./test_ -E BLENDER_RENDER-x 1 -f 1

Blender 자체는 Python 코드로 자동 제어할 수 있습니다만, 불행히도 그 제어 모듈인 blenderpy 가 Colab에 인스톨 할 수 없었습니다. 설치에 사용한 명령은 다음과 같습니다.
!pip install bpy

자주 README를 읽으면, Windows만의 대응이라고.

I have not tested this for platforms other than Windows at the moment. More to come soon.

만약 blenderpy가 제대로 인스톨 되면, GPU 렌더링의 검증등이 가능한 만큼 유감입니다. 만약 대체안을 아시는 분이 있으면, 교수 받을 수 있으면 기쁩니다.

또한 Colab에서는 OpenGL ES에 의한 GPU 렌더링도 실은 가능합니다. Pyrender을 설치하면 Python에서만 모델 로드에서 드로잉까지 작성할 수 있습니다.
!pip install pyrender

glb(glTF의 바이너리 포맷) 형식의 파일을 읽어들여, Pyrender 로 표시한다 Jupyter 샘플 공개 . 샘플 코드를 아래에 발췌해 둡니다. 이곳은 GPU에만 순간적으로 그려져 있습니다.

# Render offscreen -- make sure to set the PyOpenGL platform
import os
os.environ["PYOPENGL_PLATFORM"] = "egl"
import numpy as np
import trimesh
import pyrender

# Load the FUZE bottle trimesh and put it in a scene
tri_scene = trimesh.load('pyrender/examples/models/WaterBottle.glb')
scene = pyrender.Scene.from_trimesh_scene(tri_scene)


# Set up the camera -- z-axis away from the scene, x-axis right, y-axis up
camera = pyrender.PerspectiveCamera(yfov=np.pi / 6.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)

# Set up the light -- a single spot light in the same spot as the camera
light = pyrender.SpotLight(color=np.ones(3), intensity=3.0,
                               innerConeAngle=np.pi/16.0)
scene.add(light, pose=camera_pose)

# Render the scene
r = pyrender.OffscreenRenderer(640*2, 480*2)
color, depth = r.render(scene)

# Show the images
import matplotlib.pyplot as plt
plt.figure(figsize=(16, 12))
plt.axis('off')
plt.imshow(color)

공동체, 설마 블렌더가 정상적으로 움직일 것이라고 생각하지 않았기 때문에 놀랍습니다. 그 밖에도 여러가지 가능성이 있을 것 같네요.

좋은 웹페이지 즐겨찾기