Raspberry Pi で軽く三次元 (2012/08/07)

話題に一貫性がありませんが、気にせず書いていきます。

今回は Raspberry Pi の X Window の描画性能を見てみるために、J3W を実行してみました。J3Wは3Dアプリケーションですが、Xlibだけで動作する軽いアプリケーションです。今回、Raspberry Pi で動作するように v.6.51 にバージョンアップしました。日本語の文字コードをutf-8に変更し、最近のg++コンパイラに合わせて修正しました。J3Wの詳細はこちらです。

J3Wに関しては、むかし Linux Japanに連載 (9回) した J3W の解説記事本文の PDF と記事中のリストのアーカイブを https://www.mztn.org/lj_code/index.html に置いています。記事全文がPDFでダウンロードできます。

準備

J3Wをコンパイルするために、Raspbian に開発環境をインストールします。 (以下の説明中で bash$ はコマンドプロンプトです。入力の必要はありません)

 bash$ sudo apt-get install g++
 bash$ sudo apt-get install xorg-dev

まず適当なディレクトリで j3w651.tar.gz を解凍(展開)します。

 bash$ tar zxf j3w651.tar.gz

j3w-651ディレクトリへ移動します。

 bash$ cd j3w-651

コンパイルは make の実行だけです。

 bash$ make

インストールはスーパユーザ(root)権限が必要です。 デフォルトでは /usr/local/bin にインストールされます。 /usr/local/bin 以下はディストリビューションの管理外なので勝手にコンパイル してインストールしても問題ありません。

 bash$ sudo make install

J3Wを削除する場合は,j3w651.tar.gzを展開したディレクトリと,/usr/local/bin/ にある j3cc, j3, j3c, j3dasm, j3w, j3opt.pl の6つのファイルを削除して下さい。

J3Wの使い方

J3Wは3Dアプリケーションのプログラムをjavaに似た言語(j3c)で作成し、コンパイル, アセンブル, 実行する必要があります。しかし多くのサンプルが j3w-651/j3d ディレクトリに用意されていますから、適当なサンプルを以下のように実行してください。

 bash$ j3w flight.j3d

簡単なフライトシミュレータが実行されます。コンソールに表示されるキーで操作できます。終了するには [ESC] キーを押してください。

結果

ソフトウェアによる描画ですが、何とかなめらかに動作しています。以下の表は700MHzのARMをCPUとするRaspberry Piと、昔々のMIPSベースのCPU(295MHz)を持つPlayStation2 のLinux(PS2 Linux)上でJ3Wを実行した時の速度(FPS)と比較してみました。PlayStation2の浮動小数点演算プロセッサは単精度なので、単精度の設定でコンパイルしたものです。

ファイル Paspberry Pi PS2 Linux
taco.j3d 17.99fps 4.22fps
pose.j3d 30.85fps 19.06fps
hand.j3d 29.44fps 18.03fps
tubo.j3d 17.00fps 7.74fps
flight.j3d 30.87fps 29.41fps

現状では、Raspberry Piはハードウェアによるアクセラレーションの無い Xサーバしかありません。Raspberry Pi上でブラウザを使用すると遅く感じるのは、遅いXサーバが原因です。Xのドライバがハードウェアアクセラレーションを使うようになると劇的に高速化されると思います。

TODO

Raspberry Piは送料を除くと2000円ほどのコンピュータですが、VFPやGPUを使えば十分な性能が発揮できそうです。 DirectX9版のJ3Wと同じように、OpenGL ES2のプログラムシェーダを使ってピクセル毎のシェーディングやテクスチャをサポートしていこうと思っています。アセンブラからVFPv2を使って行列演算をギリギリまでチューニングする方向もありかな?



続く...