《挑戦》「iPhone」で無理矢理リアルタイムレイトレーシングをやってみました。

                  

最新技術に触れて行こうと思って、思いついたのがコレです(笑)
何かを挑戦していく事って大事ですよねぇー。と、今回はこの企画「iPhoneでリアルタイムレイトレーシング」ができるのかを挑戦してみました。制作したソースコードも公開しているのでご自由にお使いくださいな。

はい!表紙。

今だかつて実用化されていない、スパコン並みの計算力が必要とされる「リアルタイムレイトレーシング」。iPhoneではどうなるのだろうか…。

まずは、リアルタイムレイトレーシングとは何なの?という方に簡単にご説明します。リアルタイムレイトレーシングとは、レイトレーシング法と呼ばれる3Dコンピュータグラフィックス画像を描く手法の一つを用いてリアルタイム、要するにアニメーションを可能したことです。レイトレーシング法は3D空間で光線追跡し現実世界を仮想的にシミュレートする計算手法で、非常に現実的な表現ができ写真と間違うリアルさを可能にします。1979年に描画の手法として考案されたが膨大な計算量が必要な手法であり、21世紀になっても完全なレイトレーシングはできませんでした。しかし、2010年現在、ようやくマルチコアやGPUの高速処理が可能となったプロセッサの登場で一般的に広がる可能性がある技術として注目を浴び始めています。
さらに詳しい説明は「Wikipedia:レイトレーシング」

続いて、原理をイメージで表すとこんな感じです。
1画素毎にレイ(線)を出して色の合成や屈折や反射を行ったうえ最終の色を特定するわけですね。

そんな素晴らしいリアルタイムレイトレーシングを、今回モバイル端末(iPhone 3GS)でできるかを、私「Cap5ule」が挑戦してみました。

<開発環境>

開発パソコンOS:Mac OS X 10.6(Snow Leopard)
開発ツール:Xcode 3.2.4
SDK:iOS SDK 4.1
デバイス:iOS 4.1搭載のiPhone 3GS、又はiPhone 4

レイトレーシングを行うのにプログラマブルシェーダに対応している必要があります。デバイスでは「PowerVR SGX535 GPU」を搭載する端末で「iPhone 3GS」と「iPhone 4」のみとなっています。対応するOSが「iOS 4.1」なのは、とりあえず最新版だからです。(苦笑)

<制作する時の注意点>

・ PCなどで使うOpenGLのシェーダ「GLSL」ではなく、あくまでもモバイル向け「GLSL ES」なのでシェーダの書き方は若干異なる。
・ プログラムをビルドし、起動した時にしばらく黒い画面が続くが、バグだとは思わないこと、シェーダコンパイルに時間がかかるため。正常にコンパイルした時には、画面の色を変えるなどしてテストすると良い。

私は、この2つのせいで時間を取られましたよ。ちなみに時間短縮のため今回は、シェーダ部分を日本屈指のscener、kiokuさんの4K Procedural Gfx Monitorにレイトレーシングのコードをお借りしました!

<ビルド完了!起動!(結果)>
おぉー動いたーと感動しました!が、重い!重すぎる…。 Xcodeのデバッグツール「Core Animation」を使用してfpsを調べたところ平均2fpsでした。リアルタイムとは言い難いですが、動いたので大満足です。

さらにiPhoneシミュレータを使って…。

※画像をクリックして拡大表示

それでも、動作が重い…。う~ん結果としては、動作しますが、実用化はできませんといったところです。ただ、モバイル向けCPUが進化していくなら将来可能となるかもしれません。楽しみです。

<ソースコード「iPhone_Raytracing」>

iPhone_Raytracing.zip(30.3KB) をダウンロード
  ※1 申し訳ございませんが、説明書などは入っていません(汗)
  ※2 ご自由にお使い頂けます。

<謝辞>

リアルタイムレイトレーシングを行うための技術を参考させていただいた上、ソースコードもお借りしました。誠にありがとうございました。
・ kioku@SystemK様 「4K Procedural Gfx Monitor」
  Website:http://kioku.sys-k.net/4kgfxmon/

以上です。ありがとうございました。
次回は何に挑戦してみようか・・・。皆様の要望も受け付けておりますので!

About the author

運営・代表者です。 よろしくです。