background

シャドウマップ・その前置き。

2006年09月04日(Mon)

毎回このTipsを読んで頂いている方には申し訳ないが、今回からの内容は3DCGを
趣味として楽しまれている方には不要の知識であり、ハッキリ言って
理解する必要もないものだと思う。なぜなら自分は一つのアプリケーションにおいて、
個々の機能はブラックボックスであるべきだと考えているからだ。
どのような操作をすればどのような結果が得られるのか、その動作がわかっていれば
使用者が中の挙動まで考慮する必要はない。ただ、その機能が抱える性質と問題について、
「なぜそうであるのか」を説明するには、やはり中身を説明するのが一番手っ取り早い。
その意図でもって今回からシャドウマップによる影の描画の、基本的な原理について説明する。
ナナメ読みののち、Poserの中の人も大変なんだな~、とでも思ってもらえればありがたい。
 
Poserでは、影を描画するために「影の奥行きマップ」か「レイトレース影」の2種類の影か、
または「環境閉塞」という特殊なシェーダを使用する。このうちレイトレース影と環境閉塞は
レイトレーシングを使用するため、最もよく使用されるのは影の奥行きマップだろう。
このネーミング、自分的にどうにもアレなので、以下統一してシャドウマップと呼ぶことにする。
ソフトによってはデプスシャドウとか呼ばれたりもしている。
なぜマップでデプス(深度)なのか、そのうち明らかになるだろう。
 
■陰と影
 
陰影という言葉がある。陰と影、どちらもカゲと発音するが、それぞれ違うものを指している。
陰は光が当たらない暗い部分、影は光の当たる部分と遮られた部分の境界が作り出すカタチだ。
英語ならば陰はShadeで影はShadow。シェーディングとは陰による明暗をつける作業だ。
Poserなら、影なしレンダで暗くなっている部分が陰、影有りレンダで描画されるのが影。
 
119-1

CGで影を描画するのは、陰を付けるよりも厄介だ。なぜなら陰は距離や大きさ、
色や角度といった「ライトとオブジェクト自身の情報」だけで描画できるが、
影はシーン内の全てのオブジェクトのどの部分がライトから遮られているのか、
またはその部分からライトが見えるのかどうかを計算しなければいけないからだ。
 
■Zという値
 
3DCGでは、しばしばZ値とかZデプスとかいう単語が使われる。Zとは何か。
Poserに慣れてきた方にはもうおわかりだろう。X軸移動と言えば横移動。Y軸回転は縦軸回転。
3DCGでZと言えば、奥行きのことである。特にZ値とかZデプス(深度)とかいう時は、
プレビュー画面(視点)から見た奥行きのことを差す。
プレビュー画面は左から何ピクセル/上から何ピクセルという位置情報の他に、
そこに写っているオブジェクトがどれぐらい後ろにあるのか、という情報を持っているのだ。
表示メニューの「距離感を出す」オプションは、その情報を利用して空気を着色している。
 
Z値を算出する原理はとても単純だ。
まず、画面サイズと同じ縦横のサイズを持ったZバッファというメモリを用意する。
そしてポリゴンを1枚ずつ計算し、その結果のうちから色の情報を画面に、
奥行き(視点からの距離)の情報をZバッファの同じ位置に書き込む。
 
119-2

また別のポリゴンを計算し、その奥行きの値をZバッファに保存された同じ位置の値と比較する。
新しいポリゴンがZバッファに保存された値より遠くにあれば破棄し、
近くにあれば画面とZバッファを上書きする。
 
119-3

そしてこれを全ポリゴンの分繰り返すと、陰面消去された画像とZ値が得られるというわけだ。
 
119-4

原理がとても単純なので、これは既にハードウェアレベルでサポートされている。
プレビュー描画をハードウェア(OpenGL)/ソフトウェア(SreeD)どちらに切り替えても、
ワイヤーフレーム(陰面消去)以上の表示でカメラやフィギュアをグリグリと動かせるだろう。
これは、上記のような計算がリアルタイムで行われているということを意味する。
Poserの中の人もグラフィックボードの中の人も頑張り屋さんなのである。
そしてシャドウマップによる影の描画は、このZバッファを利用するところから
始まるのである(あー、やっとつながった)。
 
というわけで続きはまた次回。
 
■頂いたコメント■


コメント:(sannzi)
今日は思わずうなりたいほど素晴らしかったです。
今まで影無にしても何でフィギュアに陰が付くんだとおバカな事で不思議がっていました。
フィギュアに付くのは影ではなく陰だったんですね。
Z値算出の原理も良くわかりました。
普段不満を持ちがちな我がパソコンを見直してしまいました。
ついでにVueでレンダすると自動的に作成されるZデプス画像の正体も大分ハッキリしました。
Z値をグレースケールで表した、つまり3Dデータを持った画像と思って間違いないようです。
一度だけマスクを作るのに便利そうで使ったことはあったんですが本当のところ何に使うのか調べてみようと思います。

コメント:(linkinpark)
とても参考になりました、非常に明確でわかりやすかったです。

コメント:(miketama)
人生の光と影…
いやっ! 正確には「人生の光と陰」と言うべきなのだ!…という勉強になりました。
私、Poserでレンダするとき、いつも「影の投影」をオフにしちゃってます。だってその方が速くレンダリングできるんだもん! …人生の陰影を理解できない朴念仁でございます (^_^;)

コメント:(Kyotaro)
>sannziさん
そうなんですよね~。影なしでも暗いところは、実際にライトが当たっていないのでちゃんと垂直にライトを当ててやらないといけないです。陰と影を区別すると、絵がまた変わってくると思います。
Z値の説明は伝わるかどうかが心配だったのですが、ちょっと安心しました。
パソコンも、見えないところで色々頑張っているんです(笑)
たまに空回りしますけど……(←冗談になってない)
Zデプスの画像は、Photoshopでレンズぼかしをかけたりとか、レンダ後に他のソフトでエフェクトをかけるために出力できるようになっているものが多いようです。実際に何に使うかは、その人のアイデア次第ではないでしょうか(^^
 
>linkinparkさん
いらっしゃいませ(^^
お役に立てたみたいで何よりです。また参考になるような事が書けるように頑張ります。
 
>miketamaさん
人生の光と陰……むしろ光陰矢の如し、ですね(^^
影をレンダするかどうかは、人それぞれでいいと思いますよ~。miketamaさんの作品はコマ数も豊富ですし、室内描写も多いですから、かえってさっぱり無くて良いんじゃないでしょうか。
でもたま~に1コマだけ使ってみたりなんかすると、意外な効果になるかも…?(^^;




Menu

Profile

Kyotaro

確定名:Kyotaro
ネタを探しているらしい。

Categories

Calendar

05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

Comments

Archives

Track back

RSS feed

Links

Search

※2011年4月6日のサーバ障害の為、エントリのアドレスが以前のものからズレています。当Blogのエントリにリンクを張っておられた方は、お手数ですがアドレスのご確認をお願い致します。

※Internet Explorer非推奨。