トップ > レンダリング > Blender Renderでレンダリングしてみよう >
環境光で暗すぎる部分を明るくする(その2)

  

環境光を当てて暗い部分を明るくしてみよう(続き)

前の記事の『環境光で暗すぎる部分を明るくする』からの続きです。 この記事では、アンビエントオクルージョン(Ambient Occlusion)の機能を使ってみましょう。

アンビエントオクルージョンで環境光を表現してみよう

アンビエントオクルージョンは、環境光を表現するための計算手法です。

アンビエントオクルージョンの計算式は、物理的には正しくありません。 『開けた場所は明るいはず、隅や凹んだ場所・他の面で囲まれた場所は暗いはず』という計算を行っているだけの擬似的な環境光です。 アンビエントオクルージョンの計算式では、ランプの情報、つまり直接光の情報は一切参照していません。

ここでも、前の記事と同じように実験用シーンを元に解説します。 画面上部のプルダウンメニューの"File" -> "Open"を実行して実験用シーンのファイルを開きます。

  
実験用シーンは、レンダリング > Blender Renderでレンダリングしてみよう > 実験用シーンの作成で作成しました。 まだ作成していない場合は、そちらの記事を参考にして作成してください。
  
開いた実験用シーンを上書き保存しないよう注意しましょう。 Windows上(またはLinux上)でファイルをコピーしたものを開くのがいいかもしれません。

まずは、レイトレーシングを有効にする必要があります

1. レイトレーシングを有効にする
1. レイトレーシングを有効にする

上図のようにPropertiesウィンドウのレンダーパネル切替ボタンでレンダ関連のパネル群に切り替え、ShadingパネルにあるRay Tracingチェックボックスをオンにします。

  
おそらく初期設定でレイトレーシングは有効になっていると思います。 Blender 2.37からはレイトレーシングは初期設定で有効になっています。

標準レンダリングエンジンのBlender Renderはスキャンライン方式でレンダリングを行いますが、レイトレーシングも併用することができます。 レイトレーシングを併用することで、

  1. アンビエントオクルージョンによる擬似環境光
  2. 環境照明による擬似環境光
  3. 反射による映り込み
  4. 半透明による透過
  5. 他の物体による影

の機能が使えるようになります。

  
ワールドのGatherパネルにあるGather Methodを "Raytrace" から "Approximate" に切り替えると、レイトレーシングが無効でも『アンビエントオクルージョン』と『環境照明』の機能が使えるようになります。 ただし、近似値での計算となるため精度が落ちます。

続いて、仮想世界の色を設定します。

2. 仮想世界の色を設定
2. 仮想世界の色を設定

上図のようにPropertiesウィンドウのワールドパネル切替ボタン(ワールドパネル切替ボタン)でワールド関連のパネル群に切り替え、仮想世界の色を設定します。 WorldパネルのHorizon Colorに青色、Zenith Colorに緑色、Ambient Colorに赤色を設定し、さらにBlend Skyチェックボックスをオンにします。

なお、アンビエントオクルージョンには、Horizon Color と Zenith Colorの影響はありません。 何の影響もありませんが、『何の影響もない』ということを説明するため、あえて設定しました。

また、アンビエントオクルージョンは、Ambient Colorの影響も受けません。 名前は似ていますが関係ありません。

  
アンビエントオクルージョンでは環境光は白色として計算されます。 Ambient Colorの色ではありません。

続いて、アンビエントオクルージョンを有効にします

3. Ambient Occlusionチェックボックスをオンにする
3. Ambient Occlusionチェックボックスをオンにする

上図のようにAmbient Occlusionパネルの同名のチェックボックスをオンにし、Blend Modeの選択リストに "Add" を選択します。

では、レンダリングしてみましょう。 キーボードのF12キーを押してください。

4. レンダリング結果
4. レンダリング結果

上図のように写実的になりました。 アンビエントオクルージョンを使用しない場合と比べると段違いです。

ただし、気になることが2つほどあります

1つ目が、立方体やスザンヌや平面が赤色に染まっていることです。 アンビエントオクルージョンでは環境光は白色で計算されるはずなのに、Ambient Colorに設定した赤色の影響を受けています。

実はこれは、アンビエントオクルージョンの計算とは関係なく、Ambient Colorが最終的に加算されているだけの話です。 アンビエントオクルージョンの計算結果をもとにシェーダで陰影計算が行われ、その結果にAmbient Colorの色が加算されたのです

アンビエントオクルージョンの計算式の中に、Ambient Colorは登場しません

試しに、Ambient Colorを黒色に設定してレンダリングしてみましょう。

5. Ambient Colorを黒色に設定
5. Ambient Colorを黒色に設定

上図のようにWorldパネルのAmbient Colorに黒色を設定します。

では、レンダリングしましょう。 キーボードのF12キーを押します。

6. レンダリング結果
6. レンダリング結果

上図のようにAmbient Colorが黒色に設定されているにも関わらず環境光によって明るくなりました。 アンビエントオクルージョンはAmbient Colorは参照せず、環境光を白色で計算していることがわかります

では、Ambient Colorを赤色に戻しておきましょう。

7. Ambient Colorを赤色に設定
7. Ambient Colorを赤色に設定

上図のようにWorldパネルのAmbient Colorに赤色を設定します。

気になる点の2つ目は、画面向かって右上にあるランプ(ポイントライト)の明るさが反映されているように見えることです。 スザンヌの頭部左側(スザンヌから見て)や左耳の先端にはハイライトがかかっているように見えます。

8. スザンヌの頭部左側や左耳の先端のハイライト
8. スザンヌの頭部左側や左耳の先端のハイライト

これでは、『アンビエントオクルージョンの計算式では、直接光は考慮されない』という前提が崩れそうに思えます。

この疑問を解決するため、ランプ(ポイントライト)を削除してみましょう。

9. ポイントライトを削除する
9. ポイントライトを削除する

上図のようにポイントライトを削除します。

では、再度、レンダリングしましょう。 キーボードのF12キーを押してください。

10. レンダリング結果
10. レンダリング結果

上図のように相変わらず写実的です。 ただし、スザンヌの頭部左側や左耳の先端の明るいハイライト部分がなくなりました

このことから、ポイントライトを消す前のレンダリング結果には、やはりポイントライトからの直接光が反映されていたことがわかります。 ただし、『アンビエントオクルージョンの計算式では、直接光は考慮されない』という前提は崩れません

直接光は考慮せずにアンビエントオクルージョンの計算が行われ、その結果に直接光が加算されたものがシェーダに渡されているのです。

つまり、直接光とアンビエントオクルージョンの計算結果が加算されたものが入力となり、シェーダで陰影計算が行われているということがわかります

もうひとつ注目すべき点が、ランプが無くても陰影があるということです。 つまり、アンビエントオクルージョンはランプが無くても動作する、物理的には正しくない技法だということがわかります。

では、削除したポイントライトを戻しましょう。 キーボードのEscキーを押してレンダリング結果を閉じ、さらに、キーボードのCTRL+Zを押してランプの削除を取り消してください

  
キーボードのCTRL+Zによるランプの削除の取り消しを忘れずに実施してください。

もう少しアンビエントオクルージョンで色々試してみましょう。 次は、アンビエントオクルージョンの計算結果と直接光とのブレンド方法を変えてみます。 マニュアルでオススメされている "Multiply" にしてみましょう

  
In most cases, it is best to light a scene properly with Blender’s standard lamps, then use AO on top of that, set to Multiply, for the additional details and contact shadows.
 
- 引用元 -
https://www.blender.org/manual/render/blender_render/lighting/ambient_occlusion.html
11. Blend ModeをMultiplyにする
11. Blend ModeをMultiplyにする

上図のようにAmbient OcclusionパネルのBlend Modeの選択リストに "Multiply" を選択します。

では、レンダリングしてみましょう。 キーボードのF12キーを押してください。

12. レンダリング結果
12. レンダリング結果

上図のようにアンビエントオクルージョンをオフにした結果とあまり変わらないように見えます。 Blend Modeが "Add" の場合と比べると見劣りします。

マニュアルには、"Multiply" の動作は、

  
Ambient occlusion is multiplied over the shading, making things darker.
 
- 引用元 -
https://www.blender.org/manual/render/blender_render/lighting/ambient_occlusion.html

と記載されています。 陰影計算で乗算されるので、暗くなるという意味のようです。

また、

  
If Multiply is chosen, there must be other light sources; otherwise the scene will be pitch black.
 
- 引用元 -
https://www.blender.org/manual/render/blender_render/lighting/ambient_occlusion.html

とも記載されています。 ランプを配置しないと真っ暗になるということです。 乗算するというのですから、直接光が黒色(ゼロ)だと、確かに最終結果も黒色(ゼロ)になります。

では、ランプ(ポイントライト)を削除するとどうなるか確かめてみましょう。

13. ポイントライトを削除する
13. ポイントライトを削除する

上図のようにポイントライトを削除します。

では、再度、レンダリングしましょう。 キーボードのF12キーを押してください。

14. レンダリング結果
14. レンダリング結果

上図のように陰影の無い赤色で塗りつぶされました。 これは、Ambient Colorの色そのものです。 つまり、シェーダの陰影計算の結果は黒色で、そこにAmbient Colorの赤色が足されたということです。

ランプを配置しないと真っ暗になるというマニュアルの記述は正確でした。

現在の設定では、Ambient Colorが明るすぎて "Multiply" の実力がわかりません。 削除したポイントライトを戻し、Ambient Colorを暗くしてレンダリングし直してみましょう。

では、削除したポイントライトを戻しましょう。 キーボードのEscキーを押してレンダリング結果を閉じ、さらに、キーボードのCTRL+Zを押してランプの削除を取り消してください

  
キーボードのCTRL+Zによるランプの削除の取り消しを忘れずに実施してください。

では、Ambient Colorを暗くしましょう。

15. Ambient Colorを黒色に設定
15. Ambient Colorを黒色に設定

上図のようにWorldパネルのAmbient Colorに黒色を設定します。

では、レンダリングしてみます。 キーボードのF12キーを押します。

16. レンダリング結果
16. レンダリング結果

上図のように立方体の内部が暗くなっています。 アンビエントオクルージョンがオフの場合よりも暗いはずです

では、比較のためアンビエントオクルージョンをオフにしてレンダリングしてみましょう

17. Ambient Occlusionチェックボックスをオフにする
17. Ambient Occlusionチェックボックスをオフにする

上図のようにAmbient Occlusionパネルの同名のチェックボックスをオフにします。

では、レンダリングしましょう。 キーボードのF12キーを押してください。

18. レンダリング結果
18. レンダリング結果

上図のようにアンビエントオクルージョンがオンの時とは明らかに異なる結果になりました。

以下に、アンビエントオクルージョンがオンの場合とオフの場合のレンダリング結果を左右に並べて掲載します。

19. レンダリング結果の比較
19. レンダリング結果の比較

上図のようにアンビエントオクルージョンの "Multiply" では、立方体の内部が暗くなっているのがわかります。 また、平面の立方体の周囲もやや暗くなっています。

アンビエントオクルージョンのBlend Modeの使い分け

Blend Modeの "Add" は、直接光が当たらない部分を明るくします。 つまり、『環境光が当たって明るくなる』ことを表現するのに向いています。

このモードでは、Ambient OcclusionパネルのFactor(影響度)は小さな数値にするのがいいと思います。

一方、Blend Modeの "Multiply" は、隅や凹んだ場所・他の面で囲まれた場所を暗くします。 つまり、『環境光が当たらないため暗い』ことを表現するのに向いており、暗い部分を明るくすることには向いていません。

このモードでは、暗い部分を明るくするためのランプが必要になるでしょう。 ランプで暗い部分が少なくなるように照らし、アンビエントオクルージョンの "Multiply" で隅や凹んだ場所・他の面で囲まれた場所を暗くするという使い方がいいかと思います。

  
暗いシーンを土台に明るくするか、明るいシーンを土台に暗くするかによって使い分けるべきということです。
  
この記事の目的である『環境光で暗すぎる部分を明るくする』を実現できるのは、"Add" です。
  
開発側が想定しているのは、"Multiply" で暗くするという使い方なんだと思います。

次の記事へ

では、そろそろ一区切りします。 作業の続きは次の記事を参照してください

  
  

まとめ

アンビエントオクルージョンは環境光を表現するための計算手法で、物理的には正しくありませんが写実的な陰影になります。

Blend Modeには、"Add" と "Multiply" があり、"Add" は、直接光が当たらない部分を明るくします。 一方、"Multiply" は、隅や凹んだ場所・他の面で囲まれた場所を暗くします。

メニュー