background

アンビエント・オクルージョン

2006年11月05日(Sun)

ライティングのまとめ、最後に取り上げるのはアンビエント・オクルージョンだ。Poserでは環境閉塞という名前で呼ばれているが、この微妙な翻訳はPoserだけのものなので、3DCGで一般的な「アンビエント・オクルージョン(Ambient Occlusion、以下AO)」と呼ぶことにする。直訳すると「環境光の遮断」というところだろうか。

AOは正確にはライティングに関わる技術ではなく、拡散IBLライトの回のクイズで答えたようにマテリアル(材質設定)の一種である。ただ、拡散IBLライトを使用する時には必須といっても過言ではないので、ここで基本的な使い方をまとめておくことにする。

AOを使うには二通りの方法がある。まずは基本的な、マテリアルとしての使い方から。

まずはマテリアルルームに入り、AOを適用したいマテリアルを選択して、ウィンドウ右のWacro「環境閉塞のセットアップ」をクリックする。すると現在選択しているマテリアルの拡散値と鏡面値に「環境閉塞」というノードが接続され、レンダリングオプションの「レイトレーシング」のチェックが(手動設定の場合)ONに変更される。

127-1

とりあえず、そのままテストレンダしてみよう。AOを適用したマテリアルの、周囲が狭くなっている箇所に影が落ちているはずだ。

127-2

このように、AOは「狭くなっている部分を自然に暗くする」という材質設定である。Wacroを使用せずにAOを適用する場合は、新規ノード>ライト>レイトレース>環境閉塞でノードを作成し、拡散値と鏡面値に接続しよう。代替拡散色や代替鏡面色に何らかのノードを接続している場合は、そちらの入力にもAOノードを接続してAOの計算結果を反映させるようにしておくといい。

127-3

それでは、AOがどのようにして周囲を「狭い」と判別しているのか、その仕組みを見てみよう。

レイトレーシングを使用しているとき、カメラの視点から画面の各ピクセルに向かってレイ(視線)が飛ばされる。そのレイはAOの適用されているオブジェクトに衝突すると、その地点から半球状のランダムな方向に、サンプル用のレイを数本飛ばす。サンプルレイは設定された一定の距離を進み、その間に何らかのオブジェクトに衝突すると「障害物アリ」だと判断する。そして、サンプルレイがどれだけ障害物アリになったかでその地点の密集度を判断し、その狭い分だけを黒く塗りつぶすのだ。そしてこれを画面に映る全てのピクセルについて繰り返す。

127-4

ここで、最大距離はサンプルレイが探索の為に進む距離(単位は環境設定による)、サンプルはレイの衝突地点から飛ばすサンプルレイの本数である。サンプルを増やすと精度は向上するが、当然レンダリング時間は伸びるので注意しよう。強度は塗りつぶす強さで、値を1にするとサンプルレイが全て「障害物アリ」になったときその地点を完全な黒色に塗りつぶす。

ここで注意したいのが前回説明した非平面ポリゴンとレイバイアスである。非平面ポリゴン上で上記のような障害物判定を行うと、Poserのレイトレースは非平面ポリゴン自身を障害物だと判断してしまうので、すべて「障害物アリ」、つまり強度が1なら真っ黒に塗りつぶされてしまうことになる。そこで、レイバイアスでレイが非平面の谷間を脱出するまでサンプルレイを飛ばさないように設定してやるのだ。

127-5

レイバイアスの単位も自分が環境設定で設定している単位による。距離は非平面を脱出できるぐらいあれば充分である。あまり大きく設定しすぎると、サンプルレイを飛ばす基準位置が本当に判定しなければならない障害物より遠ざかってしまう。ノイズが発生しない距離でなるべく小さめにするといいだろう。

127-6

マテリアルルームでAOを設定する場合、品質を細かくセッティングできるのが利点だが、逆に適用したいマテリアルに全てにノードを追加しなければならないので結構な手間になる。特に拡散IBLライトを使用すると、全ての材質に影を落とす必要が出てくるのでこれがかなり面倒臭い。そういうときは、マテリアルではなくライトにAOを設定する。

127-7

ライトの特性パレットで環境閉塞のチェックをONにすると、マテリアル設定に関わらず全てのオブジェクトにAOの効果が適用される。この時、最大距離、レイバイアス、そしてサンプル数はシーンAOオプションダイアログで、強度は上のダイヤルで設定する。

AOをライトに適用する場合、計算はライトごとに行われるのでAOの適用されたライトが当たらない部分にはAOの効果は適用されない。だからといってシーン内にやたらと多くのライトを読み込み、そのすべてにAOを適用するとレンダリング時間が飛躍的に増大するので、その場合はマテリアルで適用するようにしよう。

ライトの特性パレットでAOを適用するメリットは、すべてのオブジェクトに対する設定を一括で指定できるところだ。ただし、シーン内のオブジェクトの大きさに差がある場合、最大距離やレイバイアスをどのオブジェクトに合わせるかで効果はガラリと変わってしまう。小さいオブジェクトに合わせると大きなオブジェクトには不十分だし、大きなオブジェクトに合わせると小さなオブジェクトには暗過ぎるばかりか、非平面ポリゴンがある場合にはノイズを回避できなくなる。

また、ライトとマテリアルの両方でAOを適用した場合、効果は二重に適用されてしまう。レイバイアスや最大距離を似たような数値で設定すると、暗くなり過ぎるので気をつけよう。逆に拡散IBLライトを使用する時など、ライトのAOは背景小道具のような大きなオブジェクトを基準に数値を設定し、人物の服や目鼻など小さなパーツの陰影はマテリアル側のAOで描画するなど、効果的に使い分けるといいだろう。

また、ライトにAOを適用した場合、あまり効果を適用したくない部分(特に髪など非常に入り組んだところ)まで懇切丁寧に計算するので、レンダリング時間がとてつもなくかかってしまうことになる。もし、髪の毛などどうしてもAOを適用したくないオブジェクトがあるのなら、そのオブジェクトの特性パレットで「レイトレースで表示」のチェックを外してしまうのも有効だ。

「レイトレースで表示」のチェックが外れているオブジェクトはレイからは見えなくなり、あらゆるレイトレーシング計算の対象外になる。

127-8

ただ、例えば髪の「レイトレースで表示」のチェックを外した場合、当然頭皮なども髪が存在しないものとしてAOの判定を行うので、若干リアリティは低下するだろう。また、影にレイトレースシャドウを使用している場合は、影も落とさなくなってしまうので要注意。


さて、長らく続いたライティングのまとめも今回で一応終わりということになる。もちろん新しく知ったネタや未検証だった部分など、今までと同じく思い出したように取り上げることもあるだろうが、まずはこれで一区切り。

とりあえず一通りのことは網羅できたと思うが、少しはお役に立てただろうか。まだまだ自分も未熟だし、出来ない手法、解明できていない現象、伝えきれていない言葉が山のように残っている。それでも、何かほんの少しでも誰かの絵作りに影響を与えられたなら、そして喜んでもらえたのなら、こんなに幸せなことはないと思う。

果たして。

これがもともとレタッチTipsの前フリだったなんて、今更誰が信じるだろうか(爆)

■頂いたコメント■

スポンサーサイト







Menu

Profile

Kyotaro

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

Categories

Calendar

10 | 2006/11 | 12
- - - 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非推奨。