「Java FAQ(What's New)」の安藤幸央氏が、CoolなプログラミングのためのノウハウやTIPS、筆者の経験などを「Rundown」(駆け足の要点説明)でお届けします。(編集局)
7月20日から26日にかけて、アメリカ南部テキサス州サンアントニオにて、コンピュータグラフィックス(CG)に関する世界最大の学会(展示会を併設)である「SIGGRAPH 2002」が開催されました。
今年のトレンドはHDRI(High Dynamic Range Images)、NPR(Non-Photorealistic Rendering)、布、炎や水のシミュレーションといったものでした。一方、劇場映画で駆使されているCG技術、『スターウォーズ エピソードII』『スパイダーマン』『タイムマシン』『ブレイド2』といった最新映画のCG技術やテクニックを紹介するセッションも大変人気がありました。
HDRI(High Dynamic Range Images)のダイナミックレンジとは、CGオブジェクトの最も明るい部分と最も暗い部分の範囲のことを示します。現実の世界のダイナミックレンジは非常に幅があります。明るい光源を見つめたときや、ろうそくの光で照らされた薄暗い室内を想像してみてください。コンピュータのディスプレイはあまりにも幅の広い明るさと暗さを完全に表現することができません。暗すぎる部分は黒くつぶれ、明るすぎる部分は白く飛んでしまうのです。現実世界の強い光の情報を記録し、この光を使用してCGオブジェクトを照らすことで、とてもリアルで実写映像と違和感のないCG映像の制作が可能となります。SIGGRAPHではHDRI関連の論文発表や、テクニックの紹介、製品に組み込まれた新機能の紹介などが多く見受けられました。
NPR(Non-Photorealistic Rendering)とは写真的ではないCG映像の作画技術を総称した呼び名です。CG映像というと、一般的に現実かと見まごうばかりの映像を制作することを目的としているように思われています。しかし、それだけではなく手書き風のCG画像、漫画風、水墨画風、ペンでスケッチしたような画像をコンピュータで生成するためのさまざまなテクニックが研究されています。
CG画像を生成するには大きく分けて2つのアプローチがあります。映画やテレビCMなどで用いられるCGは膨大な計算時間をかけてソフトウェアレンダリングを行い写実的な画像を作成します。もう一方の手法として、ゲーム機やパソコンのゲーム画面に見られるような、実時間で画像を生成し表示するリアルタイムグラフィックスの世界があります。
今回のSIGGRAPHで強く感じたのは、ソフトウェアレンダリングと、リアルタイムグラフィックスの境目が小さくなり、お互いの技術が近接してきたことです。NVIDIA、ATIといったグラフィックスチップ(ボード)メーカーが次々とハイパワーの新チップ、新技術を投入してきています。数年前までは膨大な計算時間をかけなければ生成できなかった画像がリアルタイムであっという間に見ることができるようになってきたのです。
「NVIDIA Cg(C for graphics)」はNVIDIA が先日発表したグラフィックスエフェクトを手軽に記述するための言語です。Microsoft Visual C++に組み込み、シームレスな環境で使えるToolKit(SDK)が提供されています。
以前からもNVIDIA GeFORCEチップ用の拡張命令を駆使すると頂点シェーディングやピクセルシェーディングなどを用いることができ、羽毛や草などのリアルな表現が可能でした。しかしそのためにはアセンブラを用いた呪文のようなハードウェアに密着したマシンコードを記述しなければなりませんでした。Cgは一部技術者しか書くことのできないようなものではなく、同様のグラフィックスエフェクトをC言語風のコードで記述できるようにしたものです。以下のコードは、プラスチックの質感をもった球を描くためのサンプルコードです。従来のNVIDIA GeFORCEチップ用の拡張命令で記述したもの、Cgで記述したものを比較してみましょう。
------------------------------------ NVIDIA GPU 用マシンコードによる記述 ------------------------------------ RSQR R0.x, R0.x; MULR R0.xyz, R0.xxxx, R4.xyzz; MOVR R5.xyz, -R0.xyzz; MOVR R3.xyz, -R3.xyzz; DP3R R3.x, R0.xyzz, R3.xyzz; SLTR R4.x, R3.x, {0.000000}.x; ADDR R3.x, {1.000000}.x, -R4.x; MULR R3.xyz, R3.xxxx, R5.xyzz; MULR R0.xyz, R0.xyzz, R4.xxxx; ADDR R0.xyz, R0.xyzz, R3.xyzz; DP3R R1.x, R0.xyzz, R1.xyzz; MAXR R1.x, {0.000000}.x, R1.x; LG2R R1.x, R1.x; MULR R1.x, {10.000000}.x, R1.x; EX2R R1.x, R1.x; MOVR R1.xyz, R1.xxxx; MULR R1.xyz, {0.900000, 0.800000, 1.000000}.xyzz, R1.xyzz; DP3R R0.x, R0.xyzz, R2.xyzz; MAXR R0.x, {0.000000}.x, R0.x; MOVR R0.xyz, R0.xxxx; ADDR R0.xyz, {0.100000, 0.100000, 0.100000}.xyzz, R0.xyzz; MULR R0.xyz, {1.000000, 0.800000, 0.800000}.xyzz, R0.xyzz; ADDR R1.xyz, R0.xyzz, R1.xyzz; ------------------------------------ サンプル:NVIDIA Cg Shader による記述 ------------------------------------ COLOR cSpec = pow(max(0, dot(Nf, H)), phongExp).xxx; COLOR cPlastic = Cd * (cAmbi + cDiff) + Cs * cSpec;
2つのコードはどちらもプラスチック質感の白い球体を表現するためのコードです(これら質感表現を記述したコードは、シェーダと呼ばれます)。Cgによる記述の方が圧倒的に分かりやすく、さまざまな効果を試行錯誤していくのに役立つことでしょう。Cg ToolKitに含まれるCg CompilerはCg言語で書かれたコードをハードウェアに適したマシンコードに変換してくれます。
Cg ToolKitは現在Windows用、Linux用が公開されているのみです。NVIDIAより近日中にオープンソースとして公開するとのアナウンスがありました。今後より多くの環境で使われていくことが予想されます。
Cgによってさまざまな表現を手軽に得ることができるようになりました。しかし、Cg が本領を発揮するのはNVIDIAが次に予定している「NV30」というチップからだといわれています。NV30からはグラフィックスチップで展開されるシェーダ内で分岐・ループが可能になり、より柔軟性のある記述が可能となるそうです。
今回のSIGGRAPHでATIの数々のデモは大変注目を浴びていました。なぜなら、数年前エレクトリックシアターで話題になったソフトウェアレンダリングの作品がリアルタイムで動いていたからです。
デモの1つ“Rendering with Natural Light(Paul Debevec)”は、1998年のSIGGRAPHのエレクトリックシアター、論文発表で大変注目を浴び、HDRIの一分野を築いたものです。
また、昨年のSIGGRAPH エレクトリックシアター入選作品“Pipe Dream”のモーションブラーをリアルタイム表現したデモも好評でした。
ATIではRenderMonkeyというシェーダ記述用の専用ツールを用意し、グラフィックスエフェクトを記述しやすい環境を提供していくそうです。
リアルタイムレンダリング、ハードウェアレンダリングの勢いはNVIDIA、ATIだけではありませんでした。3DLabsはOpenGLの次の規格であるOpenGL 2.0の推進に注力しており、OpenGL 2.0で規定されるシェーディング記述の標準化を取りまとめています。SGIはOpenGL Shaderにより、複雑なマルチパスレンダリングを手軽に記述できる言語を提供しています。リアルタイムグラフィックスAPIであるOpenGL Performerに組み込んで柔軟に使えるようにしていくそうです。また、学術系でもスタンフォード大学、ユタ大学をはじめとしてリアルタイムレンダリングの研究が盛んになってきているようです。
コンピュータ言語がアセンブラからC言語へ、そしてより高次元の言語へ進化してきたように、コンピュータグラフィックスに関しても同じような流れが見られます。
ムーアの法則によると「半導体の性能と集積密度は、18カ月ごとに2倍になる」といわれています。一方、グラフィックス専用チップの性能はそれ以上の2.4倍の速度で進化しているそうです。少なくとも現状、数年間は、CPUの進化に依存するよりも、グラフィックス専用チップの性能進化に頼った方が良い結果が期待できるということです。
従来膨大な時間をかけなければ表現できなかった屈折や反射の効果、コップに入った水を通り抜ける光の集光効果などがリアルタイムに表示できる技術の供給が目の前まで迫っています。
ハリウッド映画並みのCGの世界が、家庭のゲーム機やデスクトップパソコン環境で見られる日も近いかもしれませんね。
次回は9月23日の公開予定です。
安藤幸央(あんどう ゆきお)
1970年北海道生まれ。現在、株式会社エヌ・ケー・エクサ マルチメディアソリューションセンター所属。フォトリアリスティック3次元コンピュータグラフィックス、リアルタイムグラフィックスやネットワークを利用した各種開発業務に携わる。コンピュータ自動彩色システムや3次元イメージ検索システム大規模データ可視化システム、リアルタイムCG投影システム、建築業界、エンターテインメント向け3次元 CG ソフトの開発、インターネットベースのコンピュータグラフィックスシステムなどを手掛ける。また、Java、Web3D、OpenGL、3DCG の情報源となるWebページをまとめている。
ホームページ:
http://www.gimlay.org/~andoh/java/
所属団体:
OpenGL_Japan (Member)、SIGGRAPH TOKYO (Vice Chairman)
主な著書
「VRML 60分ガイド」(監訳、ソフトバンク)
「これがJava だ! インターネットの新たな主役」(共著、日本経済新聞社)
「The Java3D API仕様」(監修、アスキー)
Copyright © ITmedia, Inc. All Rights Reserved.