Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
[go: Go Back, main page]

Sentimental Horizon
1/17 センチメンタル水平線





あの日見た平線


 初めて海を見たのはいくつの時だっただろう。

 たしかそれをハッキリと海だと認識したのは、子どものころ、実家の長岡から上越市の親戚の家へ柏崎経由で車に揺られている時だった。

 ゴツゴツした岩間の曲がりくねった道を抜けると、唐突に青い広い、とてつもなく広い海が、僕の眼前に広がった。遠く霞んで見える佐渡が島と、その白く力強い波間に、子供ながら強い畏れを抱いたものだ。

 またこんな話もある。日曜大工好きだった親父が、テーブルをこしらえるときに小さな銀色の箱をテーブルの天板に乗っけていた。銀色の箱の真ん中はくり貫かれていて、ガラスのようなもので覆ってあった。中には緑色の液体が入っていて、2本の目盛り線がひいてあるだけの、なんとも奇妙な箱だった。
 僕がなにをしているのか聞くと、親父は答えた。

 「この箱は水平器といって、テーブルがピタリと平らになっているかどうか計るためのものなんだ」

 そしてこの水平というのは、海の一番向こう側と同じぐらい平らだってことを教えてくれた。僕は海という、とても遠く果てしなく広いものと同じ性質を、このちっぽけな銀色の箱が持っていることに感動した。


 北海道には、地の果てまで見渡せる広い高原があるらしいが、残念ながら僕が実際に「地の果て」を経験したのはそのくらいである。

 さて、現在もっともよく知られている説では、地球は球形に近い形をしていることになっている。だから、実際の地平線や水平線というのは、せいぜいが地球という球体にあてた面との接線に過ぎないのだろう。しかもとても微小な。

 ランドスケープそのものの議論に一応ケリをつけたところで、次なるテーマは地平線の描画である。

 地平線を背景とするならば、ランドスケープ自体は前景と呼ぶのがふさわしいだろう。

 ここで議論するのは現実の水平線ではなく、架空の水平線である。それはランドスケープが現実の岩や土ではなく、単なる数値で高度を表しただけの高度平面(ハイトフィールド)だったのと同じような意味で、だ。


 今回扱うのは無限に遠い地平線である。決して誰もそこへ到達することはできないくらい遠いところにある地平線だ。

 いかに優秀でそして高度なランドスケープをもってしても、ランドスケープは自らが持つ性質故に決して無限遠までそれを描画することができない。なぜか?ランドスケープは有限なポリゴンで表現されるからである。

 無限遠まで描画するためには、無限のポリゴンが必要なのである。

 しかし、擬似的な手法を用いることによってきわめて正確に無限遠の水平線を描画することができる。

 簡単にいえば、無限遠の平面が、最終的な二次元の画面にはどのように映るかを計算すればいいのだ。


 この問題を理解するためには、まず無限遠とはどういうことかを理解する必要がある。
 実は、3Dプログラミングを語る際に無限遠ということの理解は不可欠である。3Dプログラマに耳慣れた例を挙げれば、無限遠の平面とは平行光線とよく似た性質を持っている。

 平行光線とは、もともと太陽光のことを指す言葉だった。(厳密には嘘だが)どこへ行っても平行な角度で光があたるという科学的事実に基づいてモデリングされたのが平行光源なのである。


 それは要するにどういうことか、簡単な話、(真に)無限遠まで平面が続くのであれば、観測点の位置は無意味だということである。


 ようやくすれば左の図のようになる。
 観測者が、まったく同じ方向をみているとすれば、A,B,Cのいずれの地点から観測したとしても、結果は同じである。

 そして地平線の描画は、この原理を忠実に利用することで実現することができる。

 要するに、カメラフレームの位置情報を無視することが必要である。

 次に、位置が関係なくなるということは、逆に言えば観測者が地面に埋まっていても良いということでもある。



 観測者が地面に埋まっているということは、視野ピラミッドは必然的に右図のようになる。

 これで僕の思うツボだ。

 こうすると、地平線とはすなわち視野ピラミッドの前面(スクリーン面)が y=0 で定義される無限平面との交線ということになるからである。


 すると問題は一気に簡略化する。

 もはや答えは見えたことと思うが、地平線を描画したければ、このスクリーン面の各々の辺の(絶対座標系における)y座標が負であるか正であるかを調べていき、負の頂点がすなわち地面に潜っている頂点、正の頂点が空に向かっている頂点ということになる。

 あとは、そうして求めた水平線を基準に、グラデーションをかけるなりなんなりすれば良いのである。

 今回はサンプルということで、実際にこの原理を使って水平線を求めるまでをプログラムし、ランドスケープサンプルに付け加えてみた。これに少し書き加えれば、立派な地平線の完成である。

 いままではあまり使わなかったであろう「C」キーと「V」キーで画面を左右に傾け、この方式を体感していただきたい。


 Click Here to Download






オーバーテクノロジーへの


 ところでグランツーリスモ。評判が良いので調布にあるファミコン屋をしらみつぶしに探したんだが見つからず、新宿まで足を伸ばしてもすべてSOLD OUT。仕方が無いので「マイホームみらの」五巻とレボリューターのローターセットを買って帰ってくる(これで3個めだ)。

 残念ながら購入することはできなかったが、運よくゲーム画面を見ることができた。
 なるほど。なかなかスゴイ。ウワサの環境マッピングもきちんとしているようである。むろん、それ以前に車体の挙動計算もきちんとやっているようだが。

 僕が見たのは夜のシーンだったので、環境マッピングらしきものは白っぽり光しかなかったのだが、もし他のシーンでも必ず環境マッピングは白っぽい、または光っているようにみえるというのなら、種明かしができる。

 元来、環境マッピングはそれほど特殊でも新しいやり方でもない。基本的には球状のテクスチャをただ貼り付けるだけである。ただし、物体の姿勢によって貼り付く場所がかわるので、あたかも光が映り込んでいるように見えるというだけである。

 現在の技術で、完璧な映り込みの表現は、難しい。とくに対象が不定形の車のような複雑なものだとなおさらだ。

 完全な平面ならば、少し色調を落としてy軸を反転させて描画するというやり方が昔からあるが、車には不向きである。

 グランツーリスモの場合、PlayStationもののせいか環境マップのテクスチャも相当粗かったので一概にはいえないが、おそらくはいったん普通にテクスチャ付きで描画したあと、その上からADDモードで環境マップテクスチャを描画しているのだろう。白く光るだけでよいのならそれで十分なはずである。ただし、白以外もきちんと映り込むとなると今度は実際に映り込んでいるところを見てみないとなんとも言えないが、金属光沢を出す程度の目的ならば、ADDモードで十分なのではないだろうか。

 小耳に挟んだ噂によると、このゲームには例のOh!Xの連載・・「ハードコア3Dエクスタシー」の二人が関わっているらしい(というかスタッフロールに出てくるらしい)。この連載、人気も高かったようだが、3D野郎としてはいささか附に落ちない表現が多かった。特に、シェーディングを「高速に」実行するため、オイラー座標系を変換する必要が生じ、わざわざ特殊な変換をかけるあたりなどは笑うしかないほどブザマだったが、あれをバイブルにしている人も結構いるのであまり悪く言えないのが残念だ。

 しかしいったいどうして座標系というものをそれほど複雑怪奇に考えなくてはいけないのか。3Dなんていうのは、掛け算と足し算と日本語(できれば英語)がわかれば誰でも簡単に扱えるものなのである。

 まぁあの連載(というかOh!Xの廃刊)からだいぶ時間も経つことだし、いまさらまさかそんな馬鹿なことはしていないとは思うが、PlayStationの3D関数系はハナから誤解と勘違いで構成されているのでますます誤解が有らぬ方向へ行ってしまったのではないか少々不安である。

 余談はさておき、現在あるハードウェアで実質的に不可能とされる、もしくは誰もやったことがないことに挑戦するという姿勢は、手放しで賞賛されるべきものであろう。そして彼らはやってくれたのだ。PlayStationという、比較的「枯れた」ハードウェアで奇跡(というのは大袈裟かもしれないが)を起こしてくれたのである。

 そう、そのことこそがゲームプログラマたるものの真の使命なのである。


 さて、DirectX6によって、今までは不可能だったフォン・シェーディングとバンプマッピングに対応するようになる。

 このことは、今までのゲーム開発に大きな変革をもたらすだろうか?それはわからない。しかし、この二つの導入によって、従来は不可能だった表現が可能になったことは厳然たる事実である。

 たとえば、バンプマッピングひとつとったとしても、現在はフラクタル化により、近傍でのポリゴン数を増大させてディティールを上げているプログレッシブ・ランドスケープのような方式は、もともと粗いポリゴンでランドスケープ全体を造形し、近傍はバンプマッピングによって細かい起伏を表現するようなものに変わるだろう。バンプマッピングポリゴン1枚の描画速度が、グーローシェーディングポリゴン16枚に優る速度に達するのならば(たぶん達するが)、その方法の方が有効といえるかもしれないし、もしくはよりディティールを細かくする役に立つことだろう。

 しかし、それはごく普通に誰でもができることであり、今更それをやったからといって誰も驚くことのない、つまらないことである。

 グランツーリスモのような、見るものを驚かせる技術・・・・オーバーテクノロジーを産み出すには、そのような陳腐な発想では駄目なのだ。

 ある技術があったとして、それをそのまま使っては駄目である。たとえばADDモードを光輝の表現に使うのは、当たり前である。それに細工して、環境マッピングにすることに異議があるわけだ。

 今だって、ゲームにバンプマッピングが使えないかというと、そうではない。海外のゲームでは既にずっと以前からゲーム内の動かない物体(壁や背景など)のテクスチャはCGでレンダリングされたものである(「洋ゲー」の画面が美しいと言われる所以はここだ)。

 テクスチャマッピングの登場によって、いくつもの新しい表現が可能になったのと同じように、フォンシェーディング/バンプマッピングの登場によって、また新たな表現が可能になることだろう。そして、その革命を起こすのは、我々ゲームプログラマなのである。

 最近だと、3D野郎会で話題になったglclockに心を打たれた。特に、モーションブラーの表現が素晴らしいのである(残念ながらスピードは格段に遅くなってしまうが)。

 次のリアリズムはモーションブラーかもしれない。本気でそう思わせるほど期待感を誘うのである。

 というわけでまた次回