光と陰の表現-補足:レイトレーシングと環境光

Submitted by juan on 2006, February 16 - 10:24.

 いわゆる3D-CGというのは、結構長い歴史があって、徐々に改良されてきました。僕が子供の頃はワイヤフレームで立体をあらわすのが精一杯だったので、陰線消去なども行われましたが、あくまで線であらわされたものでした。そのうち、ポリゴン面とスクリーンの作る角度によって明るさを変えて表示するという、ごく簡単なシェーディング技法が開発され、物が一応物として見えるレベルになりました。昔、この技法で作られた手のモデル(MITかどこかで作られたものだったと思う)がぐるぐる回転するデモンストレーションをTVで見て、感動した事を覚えています。今思えば、ポリゴンはカクカクしていて、色もないグレーの画像で、かなりしょぼい代物ではあったのですが。

 そういう、いわば理屈で物体の見え方を計算してしまおうという方法には、グーローシェーディング、フォンシェーディングなどがあります。これらの方法ではもともとは例えば投影される影は表示できませんし、ガラスによる屈折、金属への風景の映り込みといった事も表現できません。ただし、影は影で形を計算する事は可能ですし、金属への映り込みも風景を画像として貼り込むなどの方法で擬似的に表現する事は可能です。これらをうまく適用する事で、TV番組や、ビデオゲームなどで使うには十分リアルな画像を、短い時間で作る事が出来ます。

 これらの方法に対して、レイトレーシングというのは針穴写真機の原理を応用した、ある意味原始的な方法と言えます。この方法では、画面を構成するすべてのピクセルについて、光の進行方向を逆向きに辿って途中の物体での反射や屈折を計算し、最終的な色や明るさを決定します。これはそれこそ自然界で物体が見える仕組みをシミュレーションしているわけで、その発想の単純さとは裏腹に、非常にリアルな表現が可能です。レイトレーシングの登場はまさに衝撃的でした。なにしろ実際に光が物体にあたって見える仕組みをそっくり真似ているのですから。ある意味「完璧な」方法です。しかし、当時見た時、理論は完璧なはずなのに、なにか違和感を感じた人も多かったのではないでしょうか。実写とは違う、いわゆる「CGっぽい」という言葉がこのころから使われるようになりました。なまじリアルなだけに、微妙な違いが違和感になっているのです。レイトレーシングの原理は、考えてみれば完璧ではありませんでした。それは環境光を考慮しませんし、光の回折を表現できません。どんな場合でも陰はくっきりと投影されます。色の計算も光の周波数ではなく、三原色の合成であるため、プリズムによって虹が投影される事もありません。これらを行う事は理論的には不可能とは言えませんが、様々な理由(主に計算の複雑化のため)で端折られています。たとえば環境光は、物体にあたって乱反射した光が、他の物体にあたるために生じるものです。レイトレーシングは、基本的に一本の光の道を辿るもので、様々な光がまざってくる場合を計算するようにはなっていません。もしそれができるとしても、例えば統計力学の代わりに一つ一つの分子の運動を計算して、気体の振る舞いを求めようとするようなものになるでしょう。

 現代のレイトレーシングプログラムは、「環境光」を設定できるものがほとんどですが、これはきわめて荒い近似と言えます。環境光はあらゆる方向に均一に走っている光として考え、シーン全体に一定の明るさを加えています。そのため、陰になった部分の立体感は完全に飛んでしまいます。現実には、環境光にもそれを発する物体があり、距離による減衰もあり、決して一様にのっぺりした画像にはなりません。ここで例をあげてみましょう。

環境光のない画像
図1: 環境光のない画像

 図1は円筒及び三方の壁と床について、環境光の影響(ambient設定)を0にしたものです。円筒の陰の部分、及び壁に投影されている影は真っ黒になっています。
 *左においたガラス球に深い意味は在りません。なんつーか3D-CGのお約束ってことで(笑)。
環境光を少し効かせた画像
図2 環境光を少し効かせた画像

 図2では、ambient値を0.12にしています。このくらいの絵だと、わりとよくみるCG、という感じに仕上がっています。しかし、円筒の影の側はまったく均一に灰色が塗られているだけで、立体感はありません。試しに環境光の影響を0.5まで上げてみましょう。
明るい部屋
図3 明るい部屋

 シーン全体が随分明るくなりましたが、相変わらず円筒の右側はのっぺりとしたままです。一見光と陰の境目附近が暗くなっているように見えますが、これは目の錯覚で、実際に画像上の色を比べてみると同じ値になります。

 このようなレイトレーシング画像は、実際まだ「リアル」ではないのです。本来ならこれほど赤い壁に近付いた円筒は、右側を赤く照らされるでしょう (これは物体の表面特性によっても変わって来る事ですが)。このように物体本来の色がそのまま環境光によって明るくなると言う形にはならないはずです。

 では、環境光を実際の物体同士の位置関係から計算する、ラジオシティ法を使ってみましょう。

ラジオシティによる画像
図4 ラジオシティによる画像

 図4では、ambient値を0.12にしたうえで、ラジオシティを有効にしたものです。壁からの赤い光が円筒の右側をなだらかに照らし、立体感を出しています。さらに、壁自体が大きいため、赤い光は本来の光源によって作られる光と陰の境界を超えて回り込んでいます。

 3D-CGの技術は、理論面、ハード面の進歩により、どんどん変わってきています。ラジオシティなどは、ちょっと前まで研究室レベルの技術で、パソコンで行なえる計算ではありませんでしたが、ハードの進歩、効率的なアルゴリズムの開発などによって、今ではローエンドのソフトにも搭載されるようになりつつあります。

今回のサンプル画像はPOV-Rayというフリーのレンダラー(Ver3.1b5)を使用しました。ラジオシティのみならず、柔らかな陰を作る面光源、被写界深度を設定してピンぼけを出せるカメラ、ガラスなどを通った光が収束したりする効果を擬似的に計算する火線効果など、「あったらいいな」と思っていた機能がてんこもりのすぐれたソフトです。



>>>>基礎偏へ戻る


( categories: )