ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Blender】Blender2.8のシェーダーエディタ(旧ノードエディタ)で画像を合成する

 最近Blender2.8のシェーダーエディタ(旧ノードエディタ)を触ってみています。

 今回はタイトルにある通りシェーダーエディタで画像を合成する方法です。

 では始めます。


1:合成する画像を用意する
 今回は以下の3つの画像を合成していきます。画像それぞれをダウンロードして名前を付けて保存してください。

・logo.png
f:id:rikoubou:20190723142321p:plain

・grid.png
f:id:rikoubou:20190729172211p:plain

・map.png
f:id:rikoubou:20190729172201p:plain


2:Blender2.8でシェーダーエディタに画像を読み込む
 画像の準備ができたのでBlenderでノードを組んでいきます。

 Blenderを起動させて出てくるデフォルトキューブを削除し、Planeを追加します。
f:id:rikoubou:20190729175232p:plain

 追加したPlaneを選択した状態で「Shading」タブを選択します。
f:id:rikoubou:20190729175423p:plain

 Shading画面になるので「New」ボタンをクリックしてPlaneにMaterialを追加します。
f:id:rikoubou:20190729175544p:plain

 ノードが追加されるので「Principled BSDF」をクリックで選択して「X」キーを押して削除します。

f:id:rikoubou:20190729175912p:plainf:id:rikoubou:20190729180030p:plain

 シェーダーエディタ上で「Shift + Aキー」から「Texture」→「Image Texture」を選択して追加します。
f:id:rikoubou:20190729180234p:plain

「Image Texture」のノードが追加されるので「Open」ボタンをクリックして画像を読み込みます。
f:id:rikoubou:20190729180519p:plain

 画像を読み込むと以下のようになります。
f:id:rikoubou:20190729180610p:plain
 
 同様にして他の画像についても「Image Texture」を追加して「Open」ボタンから画像を読み込みます。
f:id:rikoubou:20190729180902p:plain

 ちなみにこの状態で「Material Output」の「Surface」にそれぞれのノードの「Color」を繋げてやるとPlaneに画像が表示されます。
f:id:rikoubou:20190729181319g:plain

 これで画像の準備ができました。


3:Blender2.8のシェーダーエディタで画像を合成する
 ではこれらの画像をノードを使って合成していきます。

 シェーダーエディタ上で「Shift+Aキー」を押して「Color」→「MixRGB」を選択して追加します。
f:id:rikoubou:20190729181539p:plain

「Mix」のノードが追加されます。
f:id:rikoubou:20190729181749p:plain

「map.pngのColorをMixのColor1」に「grid.pngのColorをMixのColor2」に「grid.pngのAlphaをMixのFac」にそれぞれ繋ぎます。
f:id:rikoubou:20190729182012p:plain

 この状態で「Material Output」の「Surface」にMixの出力を繋ぐと以下のようにmap.pngの上にgrid.pngが合成された画像になります。
f:id:rikoubou:20190729182314p:plain

 さらにこの結果にlogo.pngも合成する場合も「MixRGB」ノードを追加して「Mixの結果を新たなMixのColor1」に「logo.pngのColorをMixのColor2」に「logo.pngのAlphaをMixのFac」に繋げばOKです。
f:id:rikoubou:20190729182831p:plain

 ちなみにすべてのノードの「AlphaとFac」を繋がない場合だと、以下のようにそれぞれの画像を不透明にした状態で混ざったような形になります。
f:id:rikoubou:20190729183105p:plain


 以上がシェーダーエディタで画像を合成する方法です。

 ノードをどう繋いだらどうなるというのが中々想像できないので難しい印象はありますが、ちょっとずつノードを理解できるようになりたいです。


・参考資料