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を使って行列演算をギリギリまでチューニングする方向もありかな?