Blender ウォッチング

無料の「Blender」で凹凸の少ないレリーフをリアルな立体に変えるテクニック

 本連載では、無料の高機能3Dモデリングツール「Blender」の使い方や関連情報を幅広くお伝えします。

こんな感じに変わります(予定)

 今回も引き続き、「Marigold Depth Estimation」を使用した、画像からの深度生成を活用してみます。

深度画像を調整できるようにしたい!

 前々回の記事で、Marigold Depth Estimation サイトから3Dモデルを色々出力した時に気づいたのですが、生成された深度の変化が近景と遠景で違いがあります。

 例えば以前に例としてあげたバラのモデルですが、下から覗くと葉の部分は厚みがある一方、近景の花びら部分はあまり立体的ではなく、圧縮されたようになっています。

バラのモデルの例。葉の部分は立体的だが、近景の花びらはほぼ平ら

 そのため、今回は「Marigold」のページからではなく、「Blender」で深度情報から同様の3Dモデルを作成し、深度を調整できるようにしてみたいと思います。

準備

 前々回の記事を参考に深度画像を作成し、「16ビットの白黒PNG形式」(~_depth_16bit.png)をダウンロードしておきます。解像度はデフォルトの[Recommended]を推奨します(「棘」が発生するため。詳しくは次回にて)。

デフォルトの設定で深度画像を生成し、「16ビットの白黒PNG形式」(~_depth_16bit.png)をダウンロードしておく

 実際に試してみたい方は、以下の画像をダウンロードしてください。

元画像(フルカラーJPEG)
深度画像(16ビット白黒PNG)

 「Blender」を立ち上げておきます。ちなみに今回、デフォルト立方体はそのままでOKなので、今まで心を痛めていた方も安心!

ジオメトリノードによるディスプレイスメント

 「ディスプレイスメント」とは、「移動」や「変位」を意味する単語ですが、3DCGでは主にテクスチャ画像でモデルの「頂点」を移動して変形する機能を指します。

 「Blender」にはこれを行う方法がいくつかありますが、今回は調整と応用のしやすさから、「ジオメトリノード」機能を使用することにします。

ジオメトリノードツリーの追加

  1. 画面上部の[ジオメトリノード]タブをクリックします。
  2. 画面下の「ジオメトリノードエディター」のヘッダーの[+ 新規]ボタンをクリックします。
画面上部の[ジオメトリノード]タブ(①)をクリックして新規ジオメトリノードツリーを追加し、画面下の「ジオメトリノードエディター」のヘッダーの[+ 新規]ボタン(②)をクリック

変形するグリッドの作成

 細分化した平面を深度情報で変形するため、前々回Webページから出力された3Dデータのように、「Blender」でも最初に深度画像と比率を合わせた「グリッド」を作成します。

  1. [追加]-[メッシュ]-[プリミティブ]-[グリッド]メニューで[グリッド]ノードを追加します。
  2. 最初にある[グループ入力]ノードと[グループ出力]ノードの間の線上に移動します。
  3. [グリッド]ノードの[サイズX][サイズY]に元画像の横と縦の比率を、[頂点X]、[頂点Y]に横と縦の各比率に「+1」した値を設定します。
・[追加](①)-[メッシュ]-[プリミティブ]-[グリッド]メニューを実行し、[グループ入力]ノードと[グループ出力]ノードの間の線上に移動。[グリッド]ノードの[サイズX][サイズY]に元画像の横と縦の比率、[頂点X]、[頂点Y]に横と縦の各比率に「+1」した値を設定する(②)

 [グループ入力]ノードとの線が切れますが、以降はこのノードを使いませんので気にしないでください。

メッシュ細分化ノードの追加

 グリッド設定でも細かくはできますが、比率を計算しつつ値を入れるのは面倒なので、細分化専用の[メッシュ細分化]ノードを追加します。

  1. [追加]-[メッシュ]-[処理]-[メッシュ細分化]メニューを実行し、[グリッド]ノードと[グループ出力]ノードの間の線上に割り込ませます。
  2. [レベル]を「6」にします。
[メッシュ]-[処理]-[メッシュ細分化]メニューを実行し、[グリッド]ノードと[グループ出力]ノードの間の線上に割り込ませ、[レベル]を「6」にする

変形用ノードの追加

 変形するグリッドができたので、次は深度画像で変形できるようにします。

位置設定ノードの追加

 変形は頂点の移動によって行うため、[位置設定]ノードを使用します。

  1. [追加]-[ジオメトリ]-[書込]-[位置設定]メニューを実行します。
  2. [メッシュ細分化]ノードと[グループ出力]ノードの間の線上に割り込ませます。
[追加]-[ジオメトリ]-[書込]-[位置設定]メニューを実行し、[メッシュ細分化]ノードと[グループ出力]ノードの間の線上に割り込ませる

深度画像([画像テクスチャ]ノード)の追加

 次に[画像テクスチャ]ノードを追加し、深度情報を[位置設定]ノードに渡すようにします。

 テクスチャとグリッドとの関連付けには「UV座標」を利用します。

  1. [追加]-[テクスチャ]-[画像テクスチャ]メニューで[画像テクスチャ]ノードを追加し、[メッシュ細分化]ノードの下に移動しておきます。
  2. 中の「フォルダーアイコン」をクリックし、深度画像を指定します。
[追加]-[テクスチャ]-[画像テクスチャ]メニューで[画像テクスチャ]ノードを追加し、[メッシュ細分化]ノードの下に移動、中の[開く]ボタンをクリックして深度画像を指定
  1. [画像テクスチャ]ノードの[ベクトル]ソケットを[グリッド]ノードの[UVマップ]ソケットに、[カラー]ソケットを[位置設定]ノードノードの[オフセット]ソケットにそれぞれつなげます。
  2. 「リピート」と表示されている項(端の処理)を「延長」に変更します。
[画像テクスチャ]ノードの[ベクトル]ソケットを[グリッド]ノードの[UVマップ]ソケットに、[カラー]ソケットを[位置設定]ノードの[オフセット]ソケットにそれぞれつなげ、[リピート]の項(端の処理)を[延長]に変更

深度による移動をZ軸に限定するノードを追加

 この時点でグリッドが斜めに変形しているはずですが、移動を[Z軸」に限定するため、「XYZ合成]ノードを追加します。

  1. [追加]-[ユーティリティ]-[ベクトル]-[XYZ合成]メニューを実行します。
  2. [画像テクスチャ]ノードと[位置設定]ノードの間の線上に割り込ませます。狭いですが、自動的に広がってくれます。
[追加]-[ユーティリティ]-[ベクトル]-[XYZ合成]メニューを実行し、[画像テクスチャ]ノードと[位置設定]ノードの間の線上に割り込ませる

 そして現在[画像テクスチャ]ノードの[カラー]ソケットとつながっている[XYZ合成]ノードの[X]ソケットをドラッグし、[Z]ソケットにつなぎ替えます。

現在[カラー]ソケットとつながっている[XYZ合成]ノードの[X]ソケットをドラッグして[Z]ソケットにつなぎ替える

終わりに

 とりあえず深度画像で変形できましたが、まだ形状が反転していますね。
 次回はこれを直して調整できるようにし、さらにマテリアルも設定します。

 ではまた。