BlenderとCrazyBumpを使ってリアルな壁を作る

f:id:meokz:20141220230037j:plain

この記事はBlender Advent Calandar 2014の20日目の記事です。
前日の記事はmelrosecoolさん。

今回はCrazyBumpというシェアウェアを使ってリアルな床を作ります。

What is CrazyBump

CrazyBumpは画像から法線マップ、ディスプレイスメントマップ、光沢マップなどを作ってくれるソフトです。 マップを適用した3Dモデルをリアルタイムでぐりぐり回しながら、パラメータを調整できるのが特徴です。 シェアウェアですが30日間お試しで使えるみたいなので、それを使用してみます!

CrazyBumpのwebページ先のリンクから、CrazyBumpをDL&インストールしてください。

f:id:meokz:20141220003748j:plain

CrazyBumpの使い方

まずは、元となるテクスチャを用意します。CG Textures あたりから引っ張ってきましょう。今回用意したのはこんなテクスチャ。 f:id:meokz:20141220013513j:plain

CrazyBumpを起動し、Clcik this button to begin を選びます。 f:id:meokz:20141220013355j:plain

Open photograph from file をクリックし、画像ファイルを選択。 f:id:meokz:20141220013358j:plain

近い形状を選びましょう。今回は左を選択。 f:id:meokz:20141220013809j:plain

プレビュー画面とプロパティをいじれる画面が出てきます。 f:id:meokz:20141220013916j:plain

メインのウィンドウから、各種プロパティをいじれます。
項目は英語を読んでみてください。 タブから法線マップ、ディスプレイスメントマップ、光沢マップ 等の切り替えと項目の調整ができます。 f:id:meokz:20141220203412j:plain

プレビュー画面

左クリック+ドラッグでモデルを回転。
右クリック+ドラッグで照明の位置を移動します。

Optionメニューから 法線マップ、ディスプレイスメントマップ、光沢マップ 等の表示/非表示が切り替えれます。 「Ball」をクリックすると、モデルを他の形状に変更できます。

f:id:meokz:20141220015746p:plain

保存

「Tool」 → 「Preferences...」より、 NomalMapY-Axisの項目をDownからアップに変更。

保存ボタンを押し「Save All Textures...」を選択しましょう。 こんな感じで保存されました。

f:id:meokz:20141220203503j:plain

Blender

Blenderでの操作に入ります。
Blenderを起動し、平面にDiffuseシェーダとImageTextureを貼り付けます。 ImageTextureにDiffeseテクスチャ(元となった画像)を指定します。 平面にUVの設定を忘れないで下さいね。

f:id:meokz:20141220203606j:plain

このままでは、画像を貼り付けただけの平面に見えますね。

 法線マップ(ノーマルマップ)

続いて法線マップを適用します。法線マップとは、

direction(向き)を保存する画像です。法線の向きが画像の RGB値に直接入っています。直線に沿う面から離れたピクセルだけをシミュレートするよりもにはるかに正確で、任意の方向に動かされたピクセルを任意の方法でシミュレートできます。 Blender Wiki より

こんなやつですね。 f:id:meokz:20141220203637j:plain

ImageTextureに法線マップを指定。 「Vector」 → 「NormalMap」ノードを作成し、こんな感じに繋げましょう。

f:id:meokz:20141220203954j:plain

ディスプレイスメントマップ

次にディスプレイスメントマップを適用します。

ディスプレイスメントマッピングを使うと、テクスチャを入力にして、レンダリングされたジオメトリの頂点位置を操作することができます。陰影を歪ませて凹凸の魔法をかける法線マップやバンプマップ と違って、ディスプレイスメントマップは実際のメッシュに、本当の凸凹やしわ、隆起などを作ります。このため変形されたメッシュは影を作り、他のオブジェクトを遮り、その他本当のジオメトリができるあらゆることを行えますが、一方で動作に必要な頂点はずっと多くなります。 Blender wiki より

f:id:meokz:20141220203833j:plain

平面にDisplaceモデファイヤを適用します。 f:id:meokz:20141220204417p:plain

Texture: のNewをクリック。

f:id:meokz:20141220204237j:plain

Textureタブに移動し、MaterialをDisplaceにし、TypeをImage or Movie に。
Imageにディスプレイスメントマップを指定します。

f:id:meokz:20141220204451j:plain

これだけでは変化は起きませんね。Displaceモデファイアは直接メッシュを変形するので、平面の頂点数を増やしましょう。
EditモードでSubdivide。ショートカットは「W」です。

Subdivideしまくった結果。

f:id:meokz:20141220212520j:plain

DisplaceモデファイヤのStrengthを調整していい感じにしましょう。今回の場合、0.025くらい。 あと、ついでにSmoothをかけときましょう。

f:id:meokz:20141220212541j:plain

スペキュラマップ

最後にスペキュラマップを適用します。
スペキュラマップは、光沢を出すためのものです。 f:id:meokz:20141220212713j:plain

まずは、ノードエディタに移動し、GlossyシェーダとMixシェーダを追加しましょう。 f:id:meokz:20141220212737j:plain

スペキュラマップを指定したImageTextureを作成。 それをMixシェーダのFacに繋げます。強さを調整できるよう、その間に「Color」→「MixRGB」ノードをかまします。 もう片方のColorを黒にして、Facを調整しましょう。 f:id:meokz:20141220225518j:plain

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

オブジェクトの狭い空間ほど暗くすることで、よりリアルなソフトシャドウを生成します。 GI(グローバルイルミネーション)を表現する手法でもあるので、ランプの光が当たらない部分も柔らかく照らし出します。 http://cg.xyamu.net/Blender/entry232.html CG制作より

使うテクスチャはこれ f:id:meokz:20141220225541j:plain

ImageTextureを作成。 「Color → 「MixRGB」ノードを作成。モードをMultiplyに。 Diffeseテクスチャとアンビエントオクルージョン用のテクスチャを入力とし、出力をDiffuseシェーダに。 f:id:meokz:20141220225805j:plain

レンダリング

出来上がったノードがこちら。 f:id:meokz:20141220225824j:plain

んで、レンダリングしたもの f:id:meokz:20141220230037j:plain

参考までに、平面にテクスチャだけを適応したもの f:id:meokz:20141220230802j:plain

まとめ

某Andrewさんのこの動画を参考に、メモも兼ねて書きました。この動画に法線マップなどの詳細も説明されているので、英語わかる人はこっち見ちゃったほうが早いと思います。 明日の記事はRyoAwaさんです。よろしくお願いします。