Superdry Memorandom :-p

旧「superdry memorandum :-D」です

RenderScriptについてAndroidDeveloperBlogを読んでみた。

RenderScriptというGPUで高速描画処理をさせるグラフィックエンジンがあります。2.0時代からLiveWallpaperとかで@hideで使われていたようですが、Honeycombから大々的に一般開発者にもAPI公開されるもよう。そのRenderScriptの紹介がAndroid Developer Blogにのっていたので、てきとう翻訳してみました。

あんまり詳しくないので間違いは指摘してください。

RenderScriptはハイパフォーマンスな3Dレンダリングと演算処理をターゲットとした新しいAPIです。Android開発者へローレベルでかつ高性能なAPIを提供することが目的に用意されました。対象者はアプリの性能を最大まで伸ばしたいがそのためにできるだけ簡単な手段を探しているデベロッパーたちとなります。RenderScriptは3つの主要なツールを提供します。

バイス上でネイティブコードでも動かすようなパフォーマンスがでます。しかし今あるNDKとは違って、クロスプラットフォームに対応しています。RenderScriptの開発言語は拡張されたC99で、これは開発過程の間、デバイスに依存しない中間コードにコンパイルされて、アプリケーションパッケージとして吐き出されます。スクリプトはアプリ実行時に機械語コンパイルされデバイスに最適化されます。これは開発過程の間に、特定のマシンアーキテクチャを対象としなければいけないという問題を解決します。

RenderScriptはプラットホーム上の既存のハイレベルのレンダリングAPI/言語を置き換えることは想定してません。既存のAPIの能力をこえるぐらいの性能がシビアなコードに対し使ってください。

またCPUとGPUでどちらで実行するかは、ランタイムでデバイス上で決定されます。ハードウェアの能力を超えない限り、単純なスクリプトは作業量を計算されGPU上で実行されます。より複雑なスクリプトはCPU上で実行されます。また最適なGPUや他のアクセラレータがない場合、CPUは確実にスクリプトを処理するバック系としても機能します。

AndroidタブレットHDMI出力をキャプチャした上記の動画は、RenderScriptの演算例です。 動画では、約900のパーティクルに力を加えたような物理シミュレーションが示されています。演算スクリプトがそれぞれのフレームを実行し自動的に両方のコアのいい方をとっています。一旦物理シミュレーションが終了すると、二番目の描画スクリプトレンダリングを行います。ここでは新しいHoneycombタブレットに搭載されているデュアルA9sの性能を示しています。

HoneycombではRenderScriptのレンダラーとしてOpen GL ES 1.1 から 2.0 へ移行しています。これで、プログラマブルシェーダーのサポートや、3Dモデルのローディングやより効率的なアロケーション管理を追加してます。新しいコンパイラLLVMベースです。

上記のスクリーンショットgoogle社内のテストアプリからとったもので簡単なシーングラフのデモになります。これは再帰的なスクリプトで実装されています。このドロイド君はMayaで作られColladaファイルから変換されたA3Dファイルからロードされています。A3Dとはデバイス上でRenderscriptオブジェクトをストアするためファイルフォーマットになります。

技術的な詳細記事と簡単なサンプルコードは後ほど提供される予定です。