はじめに
「シェーディング」とは、3Dオブジェクトが光とどう反応するかを決める作業のことです
これには、マテリアル(素材の設定)やテクスチャ、ライト(光源)、シーンの環境設定などが含まれます
シェーディングの目的は、オブジェクトの見た目をリアルにすることです
「シェーダー」は、シェーディングを行うためのプログラムです
シェーダーは、マテリアルやテクスチャの情報を使って、オブジェクトが光とどう反応するかを計算し、その結果を画面に表示します
Blenderでは「シェーダー」を扱う際には主に「シェーダーエディタ」を使用します
マテリアルとテクスチャの役割
*マテリアルはオブジェクトの基本的な「質感」を提供し、テクスチャはその質感に具体的な「詳細」を加える役割を果たします
- マテリアルは、オブジェクトの基本的な「質感」を決めるものです。たとえば、光沢があるか、粗いか、金属っぽいかなどを設定します
*新規作成した時のデフォルトのマテリアル設定(プリンシプルBSDF)には、ベースカラー、光スペキュラー、粗さ、メタリックなどが含まれます - テクスチャは、マテリアルにパターンや詳細を追加するために使用される画像やプロシージャル(計算によって生成される)パターンです
これにより、オブジェクトの表面にリアリズムや特定の特徴(たとえば、木目、石の質感、布地の模様など)を加えることができます
UVマッピングで3Dオブジェクトのジオメトリに正確に適用されます
*そのためにはテクスチャを作成するために3DオブジェクトをUV展開/UVアンラッピング(3Dオブジェクトの表面を2Dイメージ空間に展開する)する必要があります
マテリアルとシェーダーの関係
オブジェクトに直接適用されるのはマテリアルです
シェーダーがマテリアルの見え方を計算して、最終的な見た目を決めます
テクスチャを使用しなくても、色とマテリアルのパラメーターだけでも十分な見た目を作成でき、その場合は、「シェーダーエディタ」を利用することなくマテリアルプロパティの操作だけで完結します
マテリアルプロパティ
マテリアルのプレビューを見るためにビューポートのシェーディングモードを切り替える必要があります
- 「マテリアルビュー」では、デフォルトでHDRI環境マップを使用してオブジェクトを照らします
これにより、ライティングを行わなくても、マテリアルの見た目をある程度リアルにプレビューできます
*シーンに明示的なライトが存在しなくても、オブジェクトは見える状態になります - 「レンダービュー」でシーンを表示する場合
*シーン内にライトがないとオブジェクトは暗闇になり、視覚的に確認することができません
*レンダービューは、最終的なレンダリング結果に最も近い見た目でシーンを表示します
使用しているレンダリングエンジン(CyclesやEeveeなど)の完全なライティングとシェーディングが適用され、マテリアルの正確な見た目やシャドウ、光の反射などを確認できます
マテリアルプロパティの操作
- マテリアルを適用したい3Dオブジェクトを選択
- プロパティエディタの「マテリアル」タブをクリック
- マテリアルがまだ設定されていない場合は、「新規」をクリックして新しいマテリアルを作成
*既にマテリアルが存在する場合は、そのマテリアルを編集するか、「リスト」から別のマテリアルを選択して適用できます
*またリストから適応したマテリアルを上書きして新しいマテリアルにする場合は新規のアイコンをクリックします - 部分的な適用:選択した面にのみそのマテリアルが適用
特定の面を編集モードで選択
「 + 」から新しいマテリアルスロットを追加
*マテリアルスロットは複数のマテリアルを割り当てるための機能で、一つのオブジェクトに対して異なる部分に異なるマテリアルを適用することができます
特定のマテリアルスロットを選んだ後、「割り当て」ボタンをクリックします。これにより、選択した面にのみそのマテリアルが適用されます。
基本的なマテリアルの属性
- ベースカラー
マテリアルの色を設定します
RGBは赤(Red)、緑(Green)、青(Blue)の三色の光の強度を組み合わせて色を表現
これらの値は0(黒)から1(白)の範囲で設定されます - スペキュラー
マテリアルがどれだけ光を反射するか
0(反射が弱く光沢が少ないマットな表面)から1(最強で光沢がある) - 粗さ
表面の微細なテクスチャや粗さを調整
0(鏡のように反射)から1(表面が粗く光がその表面から乱反射するためマットな外観) - メタリック
マテリアルが金属的かどうかを制御します
0(非金属)から1(金属) - 放射と放射の強さ
マテリアルが周囲にどれだけの光を放射するかを定義で、たとえば光るオブジェクトや発光体を作成する際に使用る
シェーダーエディタ
「シェーダーエディタ」はテクスチャを追加したり、より高度なマテリアルを作成するために使用するツールで、マテリアルやライティングに関するノードベースの作業を行うためのエディタです
マテリアルの作成や編集、テクスチャの適用、光の効果などをビジュアルプログラミング方式で直感的に扱うことができます
そもそも「ノードシステム」は視覚的なプログラミングインターフェースです
主要なノードの例
シェーダーノード:マテリアルを作成するために使用
コンポジットノード:レンダリング後の画像処理を行うために使用
テクスチャノード:画像やプロシージャルテクスチャ(画像ファイルを使用せずにプログラムによって計算)をシェーダーに取り込むために使用
*GLTF/GLB形式はプロシージャルテクスチャを直接サポートしていない
BlenderからGLTF/GLB形式にエクスポートしても反映されない
解決策として、プロシージャルテクスチャをベイクして静的な画像としてエクスポートし、その画像テクスチャをモデルに適用することになる
*Node Wranglerは作業を効率化するためのアドオン
Node Wranglerを有効にすることで、多くの便利なショートカットが利用可能になります
新しいマテリアルを作成した場合、デフォルトで「Principled BSDF」シェーダーノードが「マテリアル出力」ノードに接続された状態で表示される
*マテリアルプロパティと同じく、リストを表示して、マテリアルを変更したり、新規マテリアルを作成できます
シェーダーエディタの基本的な操作
- Shift + A でメニューを表示して必要なノードを追加します
- ノードの左側の丸が入力ソケット、右側の丸が出力ソケットで、基本的には同じ色のソケット同士を接続することが推奨されますが、一部の例外や自動変換がサポートされている場合もあります
*繋げたいノードとノードの間で左クリックすると自動でつながります - データは左側のノードから流れ始めて、右側にあるノードへと順番に流れていき、最終的に、結果をレンダリングするノードに到達します
*Ctrl + Shiftを押しながらノードをクリックすると、そのノードを直接マテリアル出力に繋ぎプレビューできる
主要なノードのカテゴリ
シェーダーノード
*マテリアルの表面の見た目を定義するために使用
- プリンシプルBSDF(Principled BSDF): 物理的に正確なレンダリングを目指した汎用的なシェーダーで、多くのマテリアルタイプをシンプルな設定で再現でる
- 放射(Emission):光を放出する材質を作成するためのシェーダーで、光源として機能させたいオブジェクトに使用
- Diffuse BSDF:光の拡散反射をシミュレートするシェーダーで、マットな表面に適してる
入力ノード
*シーンやオブジェクト、カメラなどからのデータを提供
例えば、テクスチャ座標やUVマップ、カメラの情報などが含まれます
- RGB:カラーピッカーを使用して任意の色を生成、マテリアルやテクスチャに色を加える際に使用
- テクスチャ座標 (Texture Coordinate):オブジェクトのテクスチャ座標を提供、テクスチャのマッピング方法を指定する際に使用
カラーノード
色の調整や変更を行うノードで、色の混合やグラデーションを作成するために使用
- Mix RGB:二つの色を混合
テクスチャノード
*画像テクスチャやプロシージャル(計算によって生成される)テクスチャをマテリアルに適用するために使用
- 画像テクスチャ:画像をテクスチャとして使用
- ノイズテクスチャ:ノイズパターンを生成
ベクトルノード
*ベクトルデータ(方向と大きさ)の操作に使用
- マッピング:テクスチャやその他のベクトルデータの位置、回転、スケールを変更する
- バンプ:オブジェクトの表面に凹凸をシミュレートするために使用
- ノーマル:サーフェスの法線を調整し、マテリアルに適用するために使用
コンバーターノード
データタイプや数値の形式を変換するために使用
- RGB to BW (RGBから白黒へ):カラー情報(RGB)を白黒のグレースケール値に変換
色の強度に基づいた明るさの情報を抽出 - カラーランプ:グラデーションの最初を使用して値を色に割り当てる
- ミックス:係数で値をミックスします
- Math (数学):二つの値に対して基本的な数学演算(加算、減算、乗算、除算など)をする
その他のカテゴリ
- 出力ノード (Output Nodes)
最終的なシェーディング結果を出力するために使用 - グループノード (Group Nodes)
複数のノードを一つのグループにまとめて、再利用可能なカスタムノードとして扱う
複雑なノードツリーを管理 - スクリプトノード (Script Nodes)
カスタムスクリプト(主にPython)を使用して特定の処理を行うためのノード
テクスチャノード
あらかじめ用意されているテクスチャや、外部からインポートしたテクスチャをマテリアルに適用する
基本的なテクスチャの適用
- テクスチャノードの追加
「テクスチャノード」を追加、例では「レンガテクスチャ」を使用 - テクスチャの接続
例ではテクスチャの「カラー」出力を、マテリアルの「プリンシプルBSDF」ノードの「ベースカラー」入力に接続
テクスチャの表示方法を細かく制御
Node Wranglerを有効にした状態で、テクスチャノードを選択し、「Ctrl + T」
自動的に「テクスチャ座標」ノードと「マッピング」ノードがテクスチャノードに接続されます
*生成された「テクスチャ座標」ノードと「マッピング」ノードを使用してテクスチャの表示方法を細かく制御します
- 「テクスチャ座標」ノードは、テクスチャを3Dオブジェクトの表面にどのようにマッピングするかを決定するために使用されるデータです
テクスチャ座標の主な種類- 生成:オブジェクトのバウンディングボックス(最小と最大の座標に基づく箱)を使用して生成される座標です
テクスチャはオブジェクトの形状に関わらず一様にマッピングされます - ノーマル:オブジェクトの各点における表面の法線ベクトルを基にしたテクスチャ座標です
環境マッピングなどの特定の効果に利用されます - UV:オブジェクトのメッシュに対して手動で設定された2Dのテクスチャマッピング
*UV展開を行っている状態
特定の形状にフィットさせたい場合に使用 - オブジェクト:オブジェクト自体の座標系を基にしたテクスチャ座標です
オブジェクトの位置、回転、スケールに影響される
- 生成:オブジェクトのバウンディングボックス(最小と最大の座標に基づく箱)を使用して生成される座標です
- 「マッピング」ノードは、、テクスチャの位置、スケール、回転を調整するために使用されます
バンプを使ってみる
*バンプマッピングは、オブジェクトの実際のジオメトリを変更することなく、光の影響によって表面に凹凸があるように見せる
- 「ベクトル」カテゴリから「バンプ」ノードを選択してシェーダーノードに追加
- 「テクスチャ」カテゴリから適用したいテクスチャノードを選択
*例えば「ノイズテクスチャ」など - テクスチャノードの「係数」出力をバンプノードの「高さ」入力に接続
*テクスチャの明暗が高さ情報としてバンプノードに渡る - バンプノードの「ノーマル」出力を、マテリアルのプリンシパルBSDFシェーダーの「ノーマル」入力に接続
備考
- 「係数」はその効果の大きさや比率を調整するために使われる数値で「0から1」の間の値
- 「ベクトル」は、大きさ(長さ)と方向を持つ量を表し、X、Y、Zの3つの成分を持ちます
3D空間においては、位置、速度、力などの属性を示すのに用いられます - 「ノーマル」は、特定の点における表面から垂直に伸びる方向を示すベクトルで、各成分(X, Y, Z)は、そのベクトルが指し示す方向に応じて-1から1の間の値を取ります
テクスチャ / UVマッピング
UVマッピングとは、3Dモデルの表面にテクスチャ(画像)を正しく貼り付けるための作業のことです
UVマッピングの一般的なフロー
- UV展開(3Dモデルを平面上に「開く」)
3Dモデルを作成した後、テクスチャを適用する前に行います
UVエディタを使用します - 画像テクスチャの適用
UV展開が完了した後、実際のテクスチャ画像をモデルに適用
シェーダーエディタを使用して、テクスチャノードを追加して設定します - テクスチャペイント(オプション)
UV展開が完了した後、モデルに直接テクスチャやディテールを描画することができます
*UVマッピング後、または既存のテクスチャを修正または詳細を追加する際に行うこともあります - マテリアルの見た目を細かく調整(オプション)
*光の反射や透明度、表面の質感など、テクスチャ以外のビジュアル効果をコントロールするために用います - マルチテクスチャとレイヤー(オプション)
複数のテクスチャを組み合わせて、より複雑でリアルな表現を可能にします
UV展開(UVエディタ)
*UVエディタは、主にUV展開の作業に使用され、3Dモデルの表面を2Dの画像にマッピングするための展開図(UVマップ)を作成・編集する際に利用します
テクスチャを適用したい3Dオブジェクトを選択し、エディットモードに切り替える
ちなみにデフォルトで用意されている基本メッシュ(例えば、立方体、球体、モンキーなど)はすでにUV展開が行われた状態になっているので、展開図が表示される
備考:展開図はオブジェクトデータプロパティの「UVマップ」に一覧表示される
展開図(UVマップ)の削除
- オブジェクトモードでオブジェクトを選択(削除したいUVマップを持つオブジェクトを選択)
- プロパティエディタの「オブジェクトデータ」プロパティ→「UVマップ」セクション
*オブジェクトに関連付けられている全てのUVマップがリスト表示されている - 削除したいUVマップをリストから選択し、マイナス(-)ボタンをクリック
複雑な形状のモデルをUV展開する場合は、歪みを確認するために「UVグリッド」の画像テクスチャをモデルに貼り付けて確認する
テスト用のテクスチャ画像(UVグリッド)を割り当ててみる
*「UVグリッド」は、一定の間隔で配置されたグリッド線で色分けされた画像で、モデルの表面にどのようにマッピングされているかを視覚的に確認できる
- UV展開の実施
作成したオブジェクトを選択し、Tabキーを押して編集モードに入ります
すべての面を選択し、「Uキー」を押して
手動アンラッピングは「展開」を選択
自動アンラッピングは「スマートUV投影」を選択 - 新規画像グリッドの作成
UVエディタに切り替え、「画像」メニューから「新規」を選択
「新規画像」ダイアログボックスで、画像の名前(例:「TestGrid」)、幅と高さ(例:1024×1024)、そして「生成タイプ」を「UVグリッド」にして、「OK」を押して新しい画像を作成 - テクスチャをマテリアルに割り当てる
シェーディングエディタに切り替え、Shift + A でメニューを表示して「テクスチャ」カテゴリを選択し、「画像テクスチャ」をクリックしてシーンに追加、
カラー出力をマテリアルの「プリンシパルBSDF」シェーダーノードの「ベースカラー」入力にドラッグ&ドロップして接続
マテリアルプレビューに切り替えて確認
重要
テクスチャ画像について
画像はUVエディタまたは画像エディタのどちらでも作成することが可能、作成した画像を選択してアクティブにします
テクスチャ画像は別途保存が必要です(Blenderプロジェクトファイル(.blendファイル)に自動的に組み込まれるわけではありません)
「画像」メニューから「名前を付けて画像を保存」、こまめに「保存」する
レンダープレビューでは保存しないと反映されない
*透明度をサポートする場合はPNGで保存する
UV展開の実施について
- 自動アンラッピング(スマートUV投影)
自動的にジオメトリを展開し、簡単なものには適していますが、上手くいかない場合も多いです - 手動アンラッピング(展開):最適化されたUVマップを作成するために手作業で展開を行いますが
通常、自分でUV展開する場合は、モデルにシームを割り当ててから「UV展開」します
*テスト用のテクスチャ画像(UVグリッド)を表示させて、グリッドの正方形が引き伸ばされないように確認しながらシームの位置を調整して割り当てる
「シーム」について
シームは、3Dモデルの表面を2D平面に展開するための境界線(どこで開くか)
- オブジェクトを選択し、エディットモードでシームを追加したいエッジを選択
- 「Ctrl + E」または右クリックでエッジメニューを開き「シームをマーク」を選択
- シームを削除する場合は「シームをクリア」を選択
シーム設定のコツ
- 人物や動物などのキャラクターモデリングでは、自然な体の折り目や衣服の縫い目など、実際の折り目に沿ってシームを配置する
- シームはテクスチャの境界となるため、可能な限りモデルの見えにくい部分に配置することで、テクスチャの継ぎ目が目立たないようにする
- 急な曲面の変化がある場所(モデルの形状が大きく変化する場所)に配置すると、展開時の歪みを減らすことができる
- 複雑な形状のモデルを扱う場合、シームを効果的に使用してモデルをよりシンプルな部分に分割し、2Dに展開しやすくする
*ループしているシームを利用することで、小さなセクションに分割できます
備考:展開図を作成する前にモディファイアを適用するかどうか
- サブディビジョンサーフェスなどのモディファイアはメッシュの細部を滑らかにします
UVマッピングを行う前にこれらの変更を確定することで、最終的な形状に基づいて正確なUVマップを作成できます
反対に、適用せずに展開図を作成することで、作業を軽量化できます - モデルにベンドやツイストなどの複雑な変形を加えるモディファイアを使用している場合、これらの変更をUV展開に反映させるには適用が必要です
- ミラーモディファイアを使用している場合、適用することで両側のメッシュが実際に生成され、それぞれ独立したUVマップを持つことができます
反対に、適応しない場合は、UVマッピング、マテリアル設定などがミラーリングされた側に自動的に適用されます - モディファイアを適用しないことで、後からでもモデルの変更が容易になります。UVマッピングの後でも、モデルの形状や構造に変更が必要になった場合に、簡単に調整が可能
UVアイランド(展開したときに形成される個別の断片)について
シームがループしている場合、つまりシームが完全に閉じている場合、そのループ内の面は独立したUVアイランドを形成します
- UVアイランド間には少し隙間(ギャップ)が必要です
隣接するUVアイランドのテクスチャが混ざり合うことを防ぎます - UVグリッドで作成した画像の正方形の面積が等しい場合、テクスチャの解像度が同じであることを意味します
UVエディタでUVアイランドを編集する
*UVアイランドの配置とサイズは、テクスチャの歪みを最小限に抑え、テクスチャ解像度を最適化するために重要です
- UVマップ上でのオブジェクトのアンラップが重なり合っている場合や、オブジェクトの一部がUVマップの外に出ている場合は修正する
- スケールのバランスの確認して修正する
- UVエディタでは頂点、エッジ、面以外に、UVアイランドの選択切り替えがあり
- UVの選択を同期(左側矢印のアイコン)
3DビューポートとUVエディタ間の選択を同期させる機能
3Dビューポートで選択された頂点、エッジ、または面がUVエディタに自動的に反映され、その逆も同様です
「Lキー」を押しながらマウスカーソルをアイランド上に置くと、カーソルの近くにあるアイランド全体を選択できます
UVアイランドを選択し、位置を移動したり、サイズを変更(スケール)したり、回転させたりできます
スケールを視覚的に確認するには
右上にあるアイコンを使用して、「ストレッチを表示」を「面積」に設定します
色の異なる部分をスケーリングして、全てが似たような色になるまで調整
テクスチャペイント
テクスチャペイントに必要な準備
- モデルにテクスチャをペイントする前に、UV展開が完了している必要があります
- ペイントする対象となる「テクスチャ画像」が必要です
基本的には新規画像を作成したり、既存の画像を開いたりして、その上にペイントすることになります
*新規画像作成時は解像度とアスペクト比を考慮して、一般的には「1024×1024」「2048×2048」がよく使用されます - テクスチャ画像をシーディングエディタでオブジェクトのマテリアルに割り当てる
「Texture Paintワークスペース」に切り替えると、
「3Dビューポート」は「テクスチャペイントモード」
「画像エディタ」の「ペイントモード」が表示され
3Dビューポートと画像エディタの両方のエディタでテクスチャペイントを行うことができます
*画像エディタ自体は、テクスチャペイントにも使用できますが、主に画像を表示したり、簡単な編集を行ったりするために使われます
注意:3Dビューポートで選択した部分が画像エディタで表示されますが、テクスチャペイント時にはみ出てペイントした部分も、UV画像には反映されるので、ペイントが意図しないUVアイランドにも影響を及ぼす可能性があります
- ブラシの半径を変更:Fキーを押したままマウスを左右に動かす
- ブラシの強さを変更:Shiftキー + Fキーを押したままマウスを左右に動かす
- スポイトツールを使用:Sキー
スポイトツール「Sキー」を使用する時の注意点
- 3Dビューポート内でスポイトツールを使用するとモデルの実際の表示色やライティングの影響を受けた色になる
- 画像エディタでスポイトツールを使用するとは、色情報のみ取得します