三次元描画エンジンの切り替え

三次元描画エンジン

Choreonoidではロボットや環境のモデルを三次元のコンピュータグラフィックス(3D-CG)として描画するための「描画エンジン」を備えています。

これについて、現在以下の2つの描画エンジンが利用可能です。

  1. OpenGL固定シェーダ描画エンジン
  2. GLSL描画エンジン

1は描画用APIであるOpenGLの古いAPIを使うものです。このAPIは20年以上前に策定されたもので、あまり高度な描画を行うことはできません。しかしながら、古いPC環境や、GPUの貧弱な環境、仮想マシン上で動かす場合などでも、利用できることが多いという利点があります。

2はOpenGLの新しいAPIを使うもので、GLSLというシェーディング言語を用いてより高度な描画を実現しています。また描画速度も速くなります。これは現在一般的なGPUであれば概ね利用することができますが、少し古いGPUやOSだったり、GPUドライバがオープンソース版だったりする場合に、完全には動作しないこともあります。また、仮想マシン上でもうまく動作しないことがあります。

Choreonoidはこれまで1を標準としてきましたが、今後2に移行していきたく思っています。現在では暫定的な措置として、デフォルトでは1を使用し、環境変数によって2に切り替えられるようにしています。

基本的には、2が正常に動作する環境であれば、2を使っていただくのがよいです。ただ、Choreonoidが起動しなかったり、描画がおかしくなるなど、うまく動かない部分があれば、1を使うようにしてください。

切り替え方法

描画エンジンの切り替えは、環境変数 "CNOID_USE_GLSL" を用いて行います。

この変数に1を設定しておけば、GLSL描画エンジンを使用します。固定シェーダ描画エンジンに戻したければ、環境変数の設定を解除してください。

注釈

実際にはこの環境変数に対して1ではなくても何らかの値が設定されていればGLSL描画エンジンが有効となります。0を設定したら無効になるというわけではないのでご注意ください。無効にする場合は環境変数自体を削除してください。

Ubuntuの場合

Choroenoidをコマンドラインから起動する際に、

CNOID_USE_GLSL=1 choreonoid ...

などとすれば、描画エンジンをGLSL版に切り替えることができます。この場合は起動の度に描画エンジンを選択できます。

あるいは、あらかじめ

export CNOID_USE_GLSL=1

と設定しておけば、その後起動されるChoreonoidではGLSL描画エンジンが使われます。

これをホームディレクトリの .profile などに記述しておけば、毎回設定しなくてもよくなります。

デフォルトの描画エンジンに戻す場合は

unset CNOID_USE_GLSL

などとしてください。

Windowsの場合

Windowsでもコマンドプロンプトを使えば上記と同様に切り替えることもできるかと思います。

ただしWindowsではコマンドプロンプトの使用は一般的ではないので、通常はシステムの設定として行っておくことになります。

Windows上での環境変数の設定方法は、 ソースコードからのビルドとインストール (Windows編)OpenRTMプラグイン の説明を参考にしてください。

推奨GPU

OpenGLを用いた描画は使用するGPUによって性能に顕著な差が出てきます。また、Linux上ではGPUによっては安定に動作しないこともあり得ます。現状で推奨できるGPUの種類は以下になります。

  • NVIDIA製のGeForce、Quadro等のGPU
  • 一番推奨できるGPUです。
  • Windows、Ubuntuの両方で、全く問題なく動作し、性能(描画速度)も申し分ないです。
  • Ubuntuで使用する場合は、後述するように別途プロプライエタリドライバをインストールする必要がありますが、このためのGUIツールが用意されており、比較的簡単にインストールを行うことができます。
  • Intel CPU内蔵GPU((HD Grraphics、UHD Graphics)
  • IntelのCore iシリーズ等のCPUに内蔵されているGPUです。こちらも動作についてはほぼ問題ありません。
  • 描画速度についてはNVIDIA製のGPUほど速くはありません。ただしあまり複雑なモデルを使用するのでなければ、十分実用的な性能を持っています。
  • Ubuntuにおいても標準のドライバがよく出来ており、Ubuntuをインストールしたままの状態で十分な性能を発揮できます。
  • 古い型番のものは影の描画がうまく動作しない場合があります。その場合は影の利用をオフにするようにしてください。

AMD製のRadeon等のGPUは現状のChoreonoidの描画コードでは問題がでることが多いため、使用を推奨できません。GPUの選択ができるのであれば、なるべくNVIDIA製がIntel製のGPUを使用するようにしてください。(※2020年7月28日追記:Choreonoidバージョン1.7ではこのような状況ですが、最新の開発版では描画コードを改善し、AMD製のGPUでもほぼ問題なく使えるようになりました。ただし1.7では状況は変わっていませんのでご注意ください。Radeonを使用する場合Choreonoidは最新の開発版をお使いください。)

WindowsにおけるGPUドライバのインストール

Windowsでは適切なドライバが標準でインストールされていることが多いため、通常はあまり気にしなくても大丈夫です。Choreonoidで三次元モデルの描画がうまくいかない場合は、ドライバが正しくインストールされているか確認するようにしてください。

Ubuntu LinuxにおけるGPUドライバのインストール

Linuxの場合はGPUドライバを別途インストールしなければならない場合があります。以下ではその方法についてGPUのタイプごとに説明します。

NVIDIA製のGeForceやQuadroといったGPUを搭載しているPCの場合、Ubuntu Linuxにデフォルトでインストールされるドライバはオープンソース版の "Nouveau" というものになります。これは残念ながら現状では3D描画のハードウェアアクセラレーションが十分に機能しないため、使用は推奨できません。

これに対して、NVIDIAが開発しているプロプライエタリ・ドライバを利用することができます。そちらはメーカーが自ら開発しているだけあって機能や性能は申し分なく、GPUの能力を最大限に利用することが可能です。

プロプライエタリ・ドライバの状態確認や導入は、Ubuntuの「ソフトウェアとアップデート」ツールを用いて行うことができます。このツールの「追加のドライバー」というタブにこの設定があります。(あるいは「追加のドライバー」というツールを単体で利用できる場合もあります。)

利用可能なドライバがある場合は「追加のドライバー」の領域に、

  • NVIDIA binary driver - version 375.29をnvidia-375から使用します(プロプライエタリ,検証済み)

といった表示が出ます。これをクリックして選択し、「変更の適用」を実行することで、ドライバがインストールされ、使えるようになります。候補が複数表示される場合は、なるべくバージョンの新しいものや、「検証済み」と記されているものを選択するようにします。

Intel CPU内蔵のHD Graphics、UHD GraphicsといったGPUは、Ubuntu Linuxでは標準のドライバが機能するようになっています。これはオープンソースのドライバになりますが、Intelも開発に関わっているようで、Windows版のドライバと比べても遜色は無いようです。逆にIntel製GPUについては、Linux用のプロプライエタリ・ドライバーは存在しません。

NVIDIA製GPUと同様に、AMD製のGPUでもオープンソース版とプロプライエタリ版の2つのドライバが利用可能です。それぞれ

  • AMDGPU (オープンソース版)
  • AMDGPU-PRO (プロプライエタリ版)

という名称がついています。

Ubuntuをインストール後に標準で利用可能となるるのは、はやはりオープンソース版のAMDGPUドライバです。これに対して、プロプライエタリ版のAMDGPU-PROは手作業でインストールします。インストール方法についてはAMDがリリースしている以下のドキュメントを参照してください。

なお、NVIDIA製のGPUと異なり、オープンソース版とプロプライエタリ版のドライバで、性能に関してそれほど顕著な違いはないようです。