トップ > 知っておきたい機能 > レンダリング >
レンダリングの基礎

  

レンダリングについて

ここまで、レンダリングについては簡単にしか説明していませんでした。 説明したことといえば、

  1. レンダリングとは、3次元の座標を与えられた物体を計算によって2次元の画像にすること
  2. ライトを光源にカメラを視点にして陰影の計算を行う
  3. マテリアルやテクスチャで物体の表面の質感・模様を計算する

という程度です。

Blenderで最も混乱しやすい部分がレンダリング周りだと感じます。 設定項目が多いことに加え、設定内容により、利用される設定項目と無視される設定項目が変化します。 そのため、とにかく理解しづらいのです。

また、Blenderは進化が速いため、ネットで調べた情報が通用しないということも珍しくありません。

そこで、ここからはBlenderのレンダリングについて基礎的なところからしっかりと解説することにしました。 Blender 2.8系 / 2.9系で使える内容しか記述していませんので安心してください

物理的な現象を完全に再現することはできない

最近の3DCGは、驚くほどの速さで進化しています。 時間をかけてレンダリングされたものの中には、本物と見分けがつかないような写実的な画像も見受けられます。

以前は、人間や動物・植物などの命あるものはまだまだ違和感を感じていましたが、最近では人間でさえも一見すると本物にしか見えない映像もあります

以下は、Chris Jones氏によって2014年に公開された作品です。

Ed - Chris Jones氏 -

これほど技術が進歩した3DCGの世界ですが、物理現象を完全に再現することはできていません。 なぜなら、光の反射・透過・屈折・吸収・回折・干渉などを正しく計算しようとすると膨大な計算量になるためです。

光が物体に当たると、光は同じ角度で反射するだけではなく、他の方向にも反射して広がります。 つまり、拡散するのです。 表面がなめらかな物体なら拡散は少なく、ザラザラした物体であれば多くが拡散します。 また、ガラスのように光を透過する物質であれば、光の透過や屈折も起こります。

光源から出た光の動きを物理的に追跡しようとすると、物体にぶつかった時点で、拡散・透過・屈折により追跡すべき対象が増えます。

仮に、光源から100万方向に光が広がっていると仮定して計算するとします。 その100万本の光線のそれぞれが、物体の表面にぶつかった時点で拡散しますが、ここでは1万倍に拡散するとしましょう。 100万本の光線が1度だけ物体の表面にぶつかっただけで、直後には追跡すべき光線は100億本になります

その後にさらに物体にぶつかると、さらに1万倍に増えるのです。 とても計算していられません。

擬似的な計算でいかに美しく見せるか

3DCGの歴史は、『物理的には正しくない計算で、どれだけリアルに見せるか』を追求してきた歴史かもしれません。

Blenderでも、2.7系まで標準レンダリングエンジンとして搭載されていたBlender Renderでは、物理的に正しくない計算が行われていました。

1. Blender 2.7系のマテリアル関連のパネル群
1. Blender 2.7系のマテリアル関連のパネル群

上図のようにBlender 2.7系のマテリアル関連のパネル群ではDiffuseパネルとSpecularパネルで拡散反射色と鏡面反射色を設定していました

光が物体にぶつかると、拡散して広範囲に反射します。 人間の目にある細胞がその反射した光を捉えらて色として認識します。 その色を『拡散反射色』で設定していました。

拡散反射
拡散反射

つまり、拡散反射色は、その物体の基本色のようなものです。 なお、この項目が存在することには、筆者は違和感は感じませんでした

問題は鏡面反射色です。 光が物体にぶつかると、入射角と同じ角度で反射します。 その反射した光の先に視点があれば、それを色として認識します。 つまり、ハイライトです。 そのハイライトの色を『鏡面反射色』で設定します。

鏡面反射
鏡面反射

筆者は、初めて3DCGソフトウェアに触れた時に、鏡面反射色という項目があることに違和感を感じました。 なぜなら、反射によるハイライトの色は、光源の強さと色、そして物体の表面の色によって計算されるのだと思っていたからです。

表面が赤色の物体に光源からの白色の光があたったという情報をもとに、3DCGソフトウェアが自動的に、やや赤味がかった白色のハイライトという色を導き出してくれてもいいのではないかと思ったのです。

しかし、現実には『鏡面反射色』という設定項目が用意されていました。 なんと、ハイライトの色を自分で指定しなくてはならなかったのです。

なぜかといえば、鏡面反射色を使うことで、軽い負荷でそれなりの結果を得られるからです。 物理的な再現はできないので、『擬似的な計算を行うための設定項目を用意して、それなりの画像を作りだそう』ということです。

Blender 2.8系 / 2.9系でも残されている擬似的な計算

では続いて、Blender 2.8系 / 2.9系でも残っている物理的に正しくない計算を見てみましょう。 具体的には、アンビエントオクルージョンという機能を使ってみます

Blenderの新規ファイルを元にして作業を行います。 トップバーのプルダウンメニューの"File" -> "New" -> "General" を実行して新規ファイルを開きましょう。

まずは、立方体のメッシュを削除します。 キーボードのXを押します。

1. Deleteを実行
1. Deleteを実行

上図のように"OK?"というタイトルのメニューが表示されますので、"Delete"を実行します。

2. 立方体のメッシュが削除される
2. 立方体のメッシュが削除される

上図のように立方体のメッシュが削除されます。

続いて、猿のメッシュを追加します。 キーボードのSHIFT+Aを押します。

3. Mesh -> Monkeyを実行
3. Mesh -> Monkeyを実行

上図のように"Add"というタイトルのメニューが表示されますので、"Mesh" -> "Monkey"を実行します。

4. 猿のメッシュが追加される
4. 猿のメッシュが追加される

上図のように猿のメッシュが追加されます。

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

5. レンダリング結果(標準設定)
5. レンダリング結果(標準設定)

上図のようにレンダリング結果が表示されます。 このように、Blender 2.8系以降の標準レンダリングエンジンであるEeveeでは、標準設定のままでもかなりキレイにレンダリングされます

続いて、本題であるアンビエントオクルージョンの機能を使ってみます。 まずは、Propertiesをレンダリング用のタブに切り替えます

6. Render Propertiesタブをクリック
6. Render Propertiesタブをクリック

上図のようにPropertiesのRender Propertiesタブをクリックします

7. Ambient Occlusionをオンにする
7. Ambient Occlusionをオンにする

上図のようにレンダリング関連の項目群が表示されますので、Ambient Occlusionパネルのチェックボックスをオンにします

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

8. レンダリング結果(アンビエントオクルージョンがオン)
8. レンダリング結果(アンビエントオクルージョンがオン)

上図のように陰影が強くなりました。 これは、Ambient Occlusionチェックボックスをオンにしたことで、アンビエントオクルージョンが有効になったためです

耳の内側を見ると変化がわかりやすいです。 耳の内側のアップを左右に並べて比較してみましょう。

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

上図のようにアンビエントオクルージョンをオンにしてレンダリングした方は耳の内側の陰が濃くなっています。

アンビエントオクルージョンとは、日本語では環境遮蔽と訳されます。 これは、次の記事で説明するグローバルイルミネーション(大域照明)を考慮した陰影の計算手法です。

では、アンビエントオクルージョンは物理的に正しい計算方法で陰影を計算しているのでしょうか。

残念ながら違います。 アンビエントオクルージョンは、物理的には正しくない計算で成り立っています。 そもそも、アンビエントオクルージョンは、光源の設定値すら参照していません。

Blenderの新規ファイルにはポイントライトが存在していますが、そのポイントライトの設定を見ていないのです。

アンビエントオクルージョンは、単純に、

  1. 対象の面の表側の半球の範囲に他の面がどのくらいあるかを調べる
  2. 他の面が多くあれば遮蔽されているはずだから暗くする

という計算を行っているだけです。 『開けた場所は明るいはず、隅や凹んだ場所・他の面で囲まれた場所は暗いはず』というだけの話です。 光源なんて考慮していないのです。

ではここで、アンビエントオクルージョンが光源を考慮していないことを確認してみましょう。 光源であるライトを削除してみます

10. ライト(ポイントライト)を削除する
10. ライト(ポイントライト)を削除する

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

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

11. レンダリング結果(ライト削除後)
11. レンダリング結果(ライト削除後)

上図のように光源であるライトがなくなったため暗くレンダリングされています。 ただし、光源がないにも関わらず耳の内側や口の中などに陰影がついています。 つまり、アンビエントオクルージョンは光源を考慮せずに陰影を計算していることがわかります。

このように、Blender 2.8系 / 2.9系でも物理的に正しくない機能は残されています。

ノンフォトリアリスティックレンダリングという需要もある

3DCGに求められるのは写実的なレンダリング(フォトリアリスティックレンダリング)だけではありません。 イラストの素材やアニメーションのための『ノンフォトリアリスティックレンダリング』と呼ばれるレンダリングにも需要があります

例えば、小学生向けに『パッションフルーツで緑のカーテンを作ろう』というパンフレットを作ることになり、そのイラストをBlenderで制作するとします。

イラスト素材をBlenderの標準設定でレンダリングしてしまうと以下のようになります。

1. 標準設定でのレンダリング
1. 標準設定でのレンダリング

上図のようにイラストにはふさわしくない中途半端な画像になりました。

続いてイラスト風にレンダリングしてみましょう。 陰影をくっきりさせてみます。

2. イラスト風にレンダリング
2. イラスト風にレンダリング

上図のように陰影をくっきりさせることでイラスト風になりました。

さらに、輪郭線を足してセルアニメーション風にレンダリングしてみます。

3. セルアニメーション風にレンダリング
3. セルアニメーション風にレンダリング

上図のように輪郭線を足すことでセルアニメーション風になりました。

このような写実的ではないレンダリングにも需要があります。 写実的にレンダリングする技術も、イラストやセルアニメーション風にレンダリングする技術も身に着けたいものです。

物理的に正しい計算を行うのが主流

現在のレンダリングの主流は、物理ベースレンダリング(PBR : Physically Based Rendering)と呼ばれる物理的に正しい計算を行うレンダリング方法です。 この方法では、光の反射、透過、屈折、吸収などが物理的に正しく計算されます。

これは、先ほど説明した『物理的な現象を完全に再現することはできない』という内容と矛盾しているように感じますが、矛盾しているわけではありません。 全ての物理現象は再現できないが、一部だけを再現し、その部分の計算式は物理的に正いものを使うという手法なのです。

つまり、物理的に正しくない『擬似的な計算』から、全ては再現できないが物理的に正しい『簡略化された計算』へと変わっているのです。

Blenderでの物理ベースレンダリング

Blender 2.61から、Cyclesという新たな物理ベースのレンダリングエンジンが搭載されました。 もちろん、Blender 2.8系 / 2.9系でもCyclesを利用することができます。 Cyclesを使用することでBlenderでも物理ベースのレンダリングを行うことができます。

また、Blender 2.8系から搭載されたEeveeも物理ベースのレンダリングエンジンです。 Cyclesはパストレーシング方式のレンダリングエンジンですが、Eeveeはラスタライズ方式のレンダリングエンジンです。

レンダリングエンジン 特徴
Eevee
(標準レンダリングエンジン)
・Blender 2.8系で登場
・高速
・高品質
Cycles ・Blender 2.61で登場
・低速
・超高品質
  
レンダリングエンジンについては後ほど、知っておきたい機能 > レンダリング > レンダリングエンジンについてで詳しく紹介します。
  

レンダリングの各処理

レンダリングとは、3次元の仮想世界にある物体を2次元の画像として投影する処理です。 ここでは、レンダリングを構成する各処理について簡単に説明します

座標変換

3次元の仮想世界にある物体の各座標が、仮想スクリーン上のどの位置に対応するかを計算する処理です。

座標変換
座標変換

つまり、最終的に完成する画像上のXY座標へ変換する処理です。

隠面消去

最終的に見えなくなる部分を描画対象から除外する処理です。 つまり、他の面によって隠れてしまう部分の消去です。

隠面消去
隠面消去

隠面かどうかの判断には色々な手法があります。

  
隠面消去の手法については後ほど、知っておきたい機能 > レンダリング > 様々なレンダリング方式で詳しく紹介します。

陰影計算(シェーディング)

光源や視点との位置関係および面の質感、他の面との相互作用を考慮して陰影を付けます。 写実的な結果が得られるかどうかを左右する重要な項目です。

陰影計算(シェーディング)
陰影計算(シェーディング)

シェーディングの計算を行う機能をシェーダと呼び、Blenderには22種類のシェーダが用意されています。

陰影の表現はシェーダによって決まります。 目的に応じて適切なシェーダを選択することが重要です

  
影を落とす付影処理(シャドウイング)とは区別されます。
  
Blenderの各シェーダについては後ほど、知っておきたい機能 > レンダリング > 各シェーダの紹介で詳しく紹介します。

表面処理(マッピング)

表面の模様や凹凸を表現する処理です。

表面処理(マッピング)
表面処理(マッピング)

表面の模様を表現するためのテクスチャマッピング、擬似的に凹凸を表現するためのバンプマッピング、正確に凹凸を表現するためのディスプレイスメントマッピング、周囲からの映り込みを表現するための環境マッピングなどがあります。

  

まとめ

現在の3DCGの技術では、全ての物理的現象を再現することはできません。 擬似的な計算や簡易的な計算で本物らしく見せています。

なお、ノンフォトリアリスティックレンダリングと呼ばれる、イラストやセルアニメーション風の非写実的なレンダリングにも需要があります。

レンダリング処理は、座標変換、隠面消去、陰影計算(シェーディング)、表面処理(マッピング)で構成されます。 陰影計算(シェーディング)の機能をシェーダと呼び、Blenderには様々な種類のシェーダが用意されています。

メニュー