# Blenderでお手軽フォトリアル ## 前書き この記事は<a href="https://adventar.org/calendars/3516">デジクリ アドベントカレンダー</a>の11日目の記事です。 デジクリについては<a href="http://digicre.net/">こちら</a>。 本記事はフリーの3DモデリングソフトのBlenderを用いて、**できるだけ簡単で低コストになんかそれっぽいフォトリアルなレンダリングをしよう**という手順書である。基本的な使い方やモデリングについての解説は一切行わない。 本記事内ではフリーで配布されている素材を使用します、製作者様に感謝しましょう。(製作者様ありがとうございます) ### 用意するもの ・PC (本記事ではmacOSを使用。WindowsやLinuxでも可。) ・Blender 2.79 ## 実践 ### ワールド設定 早速Blenderをインストールして起動しよう。日本語化、選択の左クリック化など最初にやった方がいいことが多くあるが本記事では省略する。 まずはレンダーをPBRに対応している「Cyclesレンダー」に変更しよう。これはフォトリアルなグラフィック制作に向き、レイトレを行う非リアルタイムなレンダラである。 次に背景を設定するために「Properties」エディター>「World」タブ>「Surface」で「Use node」をクリックして、現れた項目の「Color」の右にある「・」をクリックし、「environment Texture」を選択する。 今回は<a href="https://hdrihaven.com/">HDRI Haven</a>から「Georgentor」というHDRIテクスチャを使わせていただく。 ![](https://i.imgur.com/EPx4SDP.png) ここで一旦3Dビューに適当なメッシュを配置してから「F5」キーで透視投影に変更し「Shift + Z」でビューレンダしてみよう。天球に背景が貼り付けられる。また光の情報も含まれているため自然な光を用いることができる。 ![](https://i.imgur.com/ywpqKYd.jpg) ### マテリアル設定 Blenderでは(多くの3DCGソフトでは)モデルの質感をマテリアルという単位で設定する。 Blender2.79には「Principled BSDF」という有能ノードが搭載されており、これはPBRレンダリングを行うために必要な各パラメータへノードを繋げるだけでPBRが行える。 もとからあった「Diffuse BSDF」を削除し、 「Shift + A」 > 「Shader」 > 「Principled BSDF」 でPrincipled BSDFを追加して、「Material Output」へ繋げよう。 ![](https://i.imgur.com/pKMb1Zm.png) 本記事では「Principled BSDF」の主要なパラメータのみ簡単に説明する。いろいろ変えて感覚をつかもう。 Base Color : 物理法則としては誤りな説明だが、簡単に言うと色。 Metallic : 反射を0~1で設定。1が金属質。本来は1か0のみだが別に守らなくてもいい。 Roughness : 物質表面の粗さ。0~1で、細かい~粗い。 Transmission : 透過。0~1で、透過なし~透明。 IOR : Transmissionが0より大きいときの屈折率。初期値1.450はガラス、水なら1.333。 ## テクスチャの設定 3Dモデルへ貼り付けるテクスチャを用意する。なお今回は箱をX軸に伸ばし、周りにベルトを巻いただけの簡単な箱のモデルを用いる。 ![](https://i.imgur.com/vp8T7I2.png) テクスチャは本来は描き起こしたり写真から作成したりプロシージャルに生成したりするが、今回は汎用的に使用できるテクスチャを配布しているサイトから使わせていただく。 ・<a href="https://texturehaven.com/">Texture Haven</a>の「<a href="https://texturehaven.com/tex/?c=wood&t=old_planks_02">old_planks_02</a>」 ・<a href="https://cc0textures.com/">CC0 Textures</a>の「<a href="https://cc0textures.com/view.php?tex=Leather01">Leather #01</a>」 テクスチャをダウンロードしたら、先程のノードエディタへテクスチャをドラッグ&ドロップで突っ込む。 あとはそれぞれを適切なノードへとつなぐ。テクスチャ名は基本的にファイル名後半に「〜_normal.png」や「〜_rough.png」のようについているのでそれぞれnormalやroughnessへとつなぐ。 マテリアルを作成する。注意すべき点はノーマルマップで、ノーマルマップ適用時は「Non-Color Data」に設定してから、「Normal Map」ノードを介して「Principled BSDF」の「Normal」へとつなぐ。 ![](https://i.imgur.com/kzEG7JC.png) 木箱と革ベルトのマテリアルを作成したら一度レンダリングしてみる。 ![](https://i.imgur.com/gaV5uOU.png) これだけでもかなりリアルな質感だが、地面から浮いているように見えるため、次はこれに影を追加する。 それぞれマップについて簡単に説明すると、ノーマルマップは面の法線情報を調整するマップである。もっと直感的に言うと面の向きを変えるのである。画像のRGBの要素それぞれにXYZ軸へ向きをずらす様になっている。結果擬似的な凹凸が見られるようになる。 ラフネスマップは面の粗さを指定するためにある。 ## シャドウキャッチャーの追加 シャドウキャッチャーとはズバリ影だけを描画してくれるものである。 対象のモデルの下に大きな板ポリを1枚配置する。 板ポリを選択し、「Properties」エディター>「Object」タブ>「Cycles Setting」で「Shadow Catcher」にチェックを入れる。 ![](https://i.imgur.com/WBfrchY.png) 再度レンダリングしてみる。 まだ完全に背景と溶け込んでいるとは言えないが、影が落ちることで先程よりは自然になっている。 ![](https://i.imgur.com/sSr9aXC.png) ## カメラの設定 カメラの設定を行う。カメラは標準でワールドに1つ用意されているが、もし消してしまったなら「Shift+A」>「Camera」で再度追加できる。 カメラの設定は、カメラを選択した状態のときに表示されるタブを開き行う。 カメラ設定で今回操作するのは主に焦点距離とセンササイズ、クリッピングだけである。焦点距離とセンササイズについては「焦点距離 センサーサイズ 計算」なんて検索すれば実際のカメラについて詳しい話が見つかるはずであるが、今回は感覚として**画角を設定できるところ**と思っていればよい。 クリッピングはカメラが描画する距離の設定で、この範囲外のオブジェクトはレンダリングされない。 ![](https://i.imgur.com/t37HlE9.png) ## カラーマネジメントの設定 カラーマネジメントとは簡単にフィルターをかけたり、カーブによる色の調整が可能な機能である。 「Properties」エディター>「Scene」タブ>「Color Management」で設定を行う。 主に操作をするのは露出とガンマ値、ビューとルックである。 カーブを理解していると簡単に説明できるのだが、露出はカーブ全体を操作して画面全体の明るさを調整する。ガンマ値はカーブの最大値と最小値は動かさずにカーブの中間値を操作して画面の明るさを調整する。 ビューの設定で使うのはデフォルトかFilmicのどちらかになると思われる。 Filmicはよりフォトリアルな画作りに向いているとのことであるがカラーグレーディング処理を行うことが前提のようで、カラーグレーディング未処理のレンダリング時の色味は薄い。明るいところの白飛びがしづらい。 ルックの設定では、現実のカメラの色味を再現するようなフィルタ処理がかけられる。 簡単にインスタとかにありそうな雰囲気にできる。 以上の設定を適当に行った結果が以下である。 露出0.3、ガンマ値0.9、ルックをKodak Portra 160VCと設定した。 ![](https://i.imgur.com/IgWcDZC.png) ## レンダリング解像度とサンプリング数の設定 レンダリング解像度は出力される画像の解像度であり、サンプリング数とはレイトレーシング(厳密にはパストレーシング)を行う際のサンプルの数である。 パストレーシングやレイトレーシングとは簡単に言うと、レイという線を飛ばしてそれがオブジェクトにどのように当たったかの情報をもとにレンダリングを行う手法である。現実世界では無数の光が反射を繰り返しているが、コンピュータで無数の計算を行うことは実質的に不可能であるため、どの程度計算を行うのかを設定するのがこのサンプル数である。使う側としては**上げるときれいになるがレンダリングは遅くなる**という認識があればいい。 複雑な形状になればなるほどサンプル数を高くしないとノイズが増えてしまう。 今回サンプルとして使っているようなオブジェクト1つの場合には512程度でも十分である。 ## コンポジットの設定 ここまで設定したらあとは画像のコンポジット処理について超簡単に解説する。 Blenderでは画像(映像)の後処理は「Composite Node」という機能でノードで調整が可能である。 まずはここまでの設定を行ったデータをレンダリングする。 サンプル例 |解像度|サンプル数| |---|---| |1920*1080|256| 次にノードエディタを開き、コンポジットメニューを開き、「Use Node」にチェックを入れる。 ![](https://i.imgur.com/p1mCO73.png) 今回は被写界深度のボケとグレアのフィルタ2つを適用させる。 「Shift+A」>「Filter」>「Glare」でグレアのノードを、「Shift+A」>「Filter」>「Defocus」でぼけのノードを追加する。 グレアはカラー情報、ボケにはカラー情報と深度情報が必要なのでノードを順番に接続する。 ![](https://i.imgur.com/wJaTBUJ.png) グレアによりレンズに入る強い光による偏光が生じ、またフォーカスを箱に当てることで後ろがぼやけている。 ボケを入れた理由は、HDRIを用いた際に高解像度(8Kなど)のものを用いると非常に重くなる。そのため2K程度の低解像度テクスチャを用い、被写界深度でぼかせばごまかせるからである。 ![](https://i.imgur.com/2hTJm2B.jpg) ## おわり 終わり!閉廷!…以上!皆解散! 普通の操作はわかる前提でかなりざっくりと書いたので質問などあったら私のTwitterにお願いします。 身内の方はSlackなどで聞いてくれても大丈夫です。 <a href="https://twitter.com/sueomura">@sueomura</a>