推奨: NSDT エディタを使用して、プログラム可能な 3D シーンをすばやく構築します
Pyrender は、物理ベースのレンダリングと視覚化のための純粋な Python (2.7、3.4、3.5、3.6) ライブラリです。Khronos の glTF 2.0 仕様を満たすように設計されています。
Pyrender は軽量で、インストールが簡単で、使いやすいです。直感的なシーン ビューア用のオフスクリーン レンダラーが付属しており、ヘッドレス サーバーでの GPU アクセラレーションによるレンダリングをサポートしているため、機械学習アプリケーションに最適です。完全なチュートリアルについてはユーザー ガイドを確認するか、Github でこのリポジトリをフォークしてください。
ヘッドレス サーバーを使用している場合は、EGL (GPU アクセラレーション レンダリングの場合) または OSMesa (CPU のみのソフトウェア レンダリングの場合) を使用する必要があります。OSMesa を使用している場合は、OSMesa が正しくインストールされていることを確認してください。詳細については、「Pyrender に OSMesa を使用させる」を参照してください。
モデルが gltf 形式でない場合は、オンライン ツールNSDT 3DConvertを使用して、他の形式の 3D モデルを GLTF に変換できます。
1. pyrender バックエンドを選択します
シーンのジオメトリ、カメラ、ライトを設定したら、OffscreenRenderer を使用してレンダリングできます。Pyrender は 3 つのオフスクリーン レンダリング バックエンドをサポートしています。
- Pyglet、ビューアを実行するのと同じエンジン。これにはアクティブなディスプレイ マネージャーが必要なため、ヘッドレス サーバーでは実行できません。これはデフォルトのオプションです。
- OSMesa、ソフトウェアレンダラー。
- EGL。ディスプレイ マネージャーを使用せずに GPU アクセラレーションによるレンダリングを可能にします。
OSMesa または EGL を使用する場合は、Pyrender またはその他の OpenGL ライブラリをインポートする前に、PYOPENGL_PLATFORM 環境変数を設定する必要があります。これはコマンドラインから実行できます。
PYOPENGL_PLATFORM=osmesa python render.py
または、Python スクリプトの先頭で次のようにします。
# Top of main python script
import os
os.environ['PYOPENGL_PLATFORM'] = 'egl'
EGL のハンドルは egl、OSMesa のハンドルは osmesa です。
2.レンダラーを実行する
環境変数を適切に設定した後、シーンを作成し、ウィンドウの幅、ウィンドウの高さ、点群ポイントのサイズを使用して OffscreenRenderer オブジェクトを構成します。
>>> r = pyrender.OffscreenRenderer(viewport_width=640,
... viewport_height=480,
... point_size=1.0)
次に、OffscreenRenderer.render() 関数を呼び出すだけです。
>>> color, depth = r.render(scene)
これは、シーンのメイン カメラからレンダリングされた (w,h,3) チャネル浮動小数点カラー イメージと (w,h) 浮動小数点深度イメージを返します。
RenderFlags のフラグ オプションを使用し、ビットごとの OR 演算を行うことで、レンダリング プロセスをカスタマイズできます。たとえば、次のコードはアルファ チャネルを使用してカラー イメージをレンダリングし、すべてのディレクショナル ライトのシャドウ マップを有効にします。
>>> flags = RenderFlags.RGBA | RenderFlags.SHADOWS_DIRECTIONAL
>>> color, depth = r.render(scene, flags=flags)
オフスクリーン レンダラーの使用が完了したら、別のレンダラーを実行したり、同じシーンのビューアを開いたりする前に、オフスクリーン レンダラーを閉じる必要があります。
>>> r.delete()