ジャンル雑多なゲーム・ゲーム制作関連の色々な情報を取り扱っているブログ。最近はBlenderについてが中心。
[Blender 2.8] 形を変えずに見た目を変える Part 2  [法線]

[Blender 2.8] 形を変えずに見た目を変える Part 2 [法線]

[Blender 2.8] メッシュの形状を変化させずに見た目を変える、法線(Normals)の設定や操作方法について

今回の記事は、『シェーディング』にとってなくてはならない重要な『法線』というものについての基礎知識から、設定・変更・編集の方法について取り上げさせていただきたいと思います。

※この記事は、連載記事となっております。この記事単体でも読める内容とはなっておりますが、『シェーディング』についてよくご存じない方は、前回の記事をご覧になることをオススメします。

前回の記事では、「『シェーディング』とは?」といった基礎的な知識を重点的に、基本となる「メッシュ全体の『シェーディング』の変更」と、「メッシュの一部だけ『シェーディング』を変更」する方法について取り扱わせていただきました。

今回は、実は前回省いてしまった『シェーディング』において重要な『法線』についての基礎知識から、更に、『法線編集』で『シェーディング』を別物のように変化させる方法についても、取り扱いたいと思います。

今回取り扱う内容も「知識」に重点を置いたものとなり、概要は以下のようになっております。

  • 『法線』自体の知識
  • 『シェーディング』と『法線』の関係
  • 『法線編集』についての知識
  • 『法線』の具体的な操作・編集方法
Blender データ転送 モディファイアー 3DCG モデリング 草 grass カスタム法線
『法線編集』前
Blender データ転送 モディファイアー 3DCG モデリング 草 grass カスタム法線
『法線編集』後

※2020年1月18日 加筆修正を行いました。
※2020年1月19日 加筆修正を行いました。
※2020年1月20日 加筆修正を行いました。
※2020年2月21日 加筆修正を行いました。
※2020年5月26日 画像の差し替えを行いました。

目次

『法線(Normals)』とは?

非常にざっくりとした説明になりますが、”法線(Normals)”とは、「線や面に対して垂直な方向を表すもの」で、光の反射や、衝突演算などで使われるものです。

ほとんどの3DCGソフトでもそうだと思いますが、Blenderではメッシュを作ればそこでもう自動で”法線”を計算してくれて、意識しなくても非常にクオリティの高い描画をしてくれるので、意識することが少ないかもしれません。

※ごく稀に、面が逆になった時に、「面の向きを外側に揃える([Shift]+[N])」を使ったりしますが、あまり無いので。

もっと厳密に、”法線”についてのあれこれを引っ張り出すと際限ないですし、何より私の能力的にも扱いきれませんので他のサイト様にお願いしまして、ここでは、

“法線”という物を、Blenderで活用・編集する方法

だけに絞ってご紹介します。(終わらなくなっちゃうので笑)

特に難しい計算などはやらないですし、大体はBlenderが自動でやってくれるので、気構えず気楽にいてください。

Memo: 3Dビュー上での『法線(Normals)』の表示方法

メッシュオブジェクトの”法線”については、[ビューポートオーバーレイ]のプルダウンメニューの中の[Normals]という項目にある各ボタンを操作すれば、各面・頂点などの法線を表す線を表示させてくれる機能があります。

目で見ることができれば、直感的にも分かりやすいかと思いますので、触って確かめてみてください。

ボタンは右から、それぞれ下記についての設定を操作出来るボタンとなっております。

  • 頂点法線の表示
  • 頂点での面法線
  • 面法線の表示

スライダーバーは、「法線の表示サイズ」を設定できます。

『シェーディング』と『法線』の関係とは?

『法線』というものを扱うのに1つだけ認識しておいてほしいのが、『シェーディング』と『法線』の関係です。

最初に2つの関係を言ってしまいますと、

『法線』は、『シェーディング』を行うのに、使うと格段に立体感が出る、『シェーディング』にとって大変重要な情報

というのが、「『シェーディング』と『法線』の関係」 です。

前回の「『シェーダー』とは?」の項では、次のようなことを書いたと思います。

「陰影付けや表面の質感や凹凸の設定、各画素の表示色の決定などを行うプログラム」の事を『シェーダー』と言い、『シェーダー』で一番良く使うものが『マテリアル』。

『マテリアル』にデフォルトで設定されている『シェーダー』タイプの『プリンシプルBSDF』を例にとってみると、この『ノーマル』という部分がその『法線(Normals)』です。

つまり、『シェーダー』に読み込まれる情報の1つが『法線』という訳です。

この『法線』は主に、「陰影付けにおいて立体感を出す」のために使われる情報です。

『シェーディング』の際に「どこに、どんな風に、陰影付けすれば立体感が出るか」を決める1つの要素として、『法線』という情報が使われる、という関係なので、『シェーディング』が『法線』を使わない場合もあります。

つまり、陰影の無い、立体感を無視した『シェーディング』ですね。

「『陰影付け』なのに『陰影の無い』とは…?」と思われるかもしれません。

※Blenderでは、一見『陰影の無い』シェーディングでも法線情報が使われてるかどうか、明確にはわかりませんでした汗 自動で法線が使われている可能性もあるので、あくまでそういう”イメージ”、として例に挙げます。

[3Dビューのシェーディング]の[ワイヤーフレーム]モードでの表示や、[ソリッド]モードで、[Lighting]を[フラット]に設定したような表示であれば、法線情報は必要ありません。

  • 3Dビューのシェーディング [ワイヤーフレーム]
Blender 3Dビューのシェーディング ワイヤーフレーム 3DCG モデリング
  • 3Dビューのシェーディング[ソリッド]モード>[Lighting]を[フラット]に設定した、Cubeの回転アニメーション
Blender ノーマル Normals 3Dビューのシェーディング Lightingフラット 3DCG モデリング

結論としましては、『シェーディング』は必ずしも『法線』を使わなくても出来るけど、使うと格段に立体感が出る物、というのが、「『シェーディング』と『法線』の関係」なわけです。

『法線(Normals)』編集の各操作方法について

先述の通り、法線の方向は、基本的にBlenderが自動で計算してくれるものです。ですが、その例外として、法線を編集する方法も用意されています。

Blender ノーマルメニュー 法線 Normals 3DCG モデリング
ショートカットキーからのノーマルメニュー表示 ([Alt]+[N])
Blender ノーマルメニュー 法線 Normals 3DCG モデリング
ヘッダメニューからのノーマルメニュー表示 ([メッシュ]>[ノーマル])

Blenderで法線を編集する方法には大きく分けて4つのタイプがあります。

  • 『面の向き』を操作する方法
  • 『カスタム法線』を使用して操作する方法
  • 各要素の『法線のベクトル情報』から操作する方法
  • 『面の強さ』を操作する方法

※これ以外にも、『データ転送』や『モディファイアー』を使用して編集する方法などもあるのですが、説明の都合上、今回はこの4タイプを取り扱わせていただきます。

操作項目一覧

項目名概要ショートカットキー
[反転]面(及び頂点)の法線方向を反転。
[面の向きを外側に揃える]法線方向を外側の向きに揃える。[Shift]+[N]
[面の向きを内側に揃える]法線方向を内側向きに揃える。[Shift]+[Ctrl]+[N]
項目名概要ショートカットキー
[面から設定] 面の法線から頂点のカスタム法線を設定する。
[回転…] 法マウスカーソルを操作して法線を編集する。 [R]→[N]
[ターゲットの方へ…] 任意のターゲットの方向へ法線を編集する。 [Alt]+[L]
[マージ] 頂点全ての法線をマージして1つの平均法線を作成する。
[分割] 面の法線を分割したカスタム分割法線を作成する。
[平均] 頂点の法線を平均化する。
項目名概要ショートカットキー
[ベクトルをコピー] 法線をバッファにコピー。
[ベクトルを貼り付け]バッファから法線を貼り付け。
[ベクトルをスムーズに]周囲の頂点の法線を元にカスタム法線をスムージング。
[ベクトルをリセット]バッファや選択中の法線をリセット。
項目名概要ショートカットキー
[面の強さで選択]指定した『面の強さ』の面を選択。
[面の強さで設定]『面の強さ』を変更。

『面の向き』とは?

この方法では、ただ単に、面の表裏の向きを反転させる操作を行います。

偶になってしまう面の反転を修正するのにも使うような、『法線編集』の中ではおそらく一番単純で身近な方法かと思われます。

私の過去の失敗例なのですが、1つ例として挙げますと、Part1の記事にも貼っていたこのツイートのグラスのモデルなのですが…

何か違和感を覚えませんか?

実は、これ、グラスの底部分の法線の方向が逆のままレンダリングしてしまって、気付かずそのまま画像貼ってツイートしちゃったものなのですorz

下の画像は、下から見上げた視点からのグラス底を、[ビューポートオーバーレイ]のプルダウンメニューの中の[面の向き]という項目にチェックを入れ、表向きの面を青、裏向きの面を赤で表示したものになります。

Blender 法線 normals 3DCG モデリング グラス
グラスモデル 底部分 下から見上げた視点
Blender オーバーレイを表示 面の向き
[ビューポートオーバーレイ]>[Geometry]>[面の向き] ([オブジェクトモード]表示ver)

直す前(←)と直した後(→)を比較してみると、こんな感じになります。

Blender 法線 normals 3DCG モデリング グラス
グラスモデル 底部分(法線が逆向きver)
Blender 法線 normals 3DCG モデリング グラス
グラスモデル 底部分(法線が正向きver)

という事でこの方法は、面の表裏が逆になってしまったときの修正という目的で使われるのがほとんどだと思われます。

Memo: 『スムーズシェード』に変えると、オブジェクトに変な線が出来てしまう場合の対処法

「『スムーズシェード』に変えると、オブジェクトで変な線が出る」場合、『面の向き』が一部逆向きになってしまっている事が原因である場合が多いように思います。

ごく稀に起こるのですが、特に何も可笑しなことしていないような所で、面の向きが逆向きで生成されてしまう事があります

『フラットシェード』では、特にそこまで目立った異変は出ないのですが、『スムーズシェーディング』にすると急に変な線が出る場合、これを一度確認してみて下さい。

Blender 法線 normals 3DCG モデリング グラス
Blender 法線 normals 3DCG モデリング グラス

『面の向き』の操作

[反転]

選択した面の法線方向を反転させます。

Blender 面の向き 法線 ノーマル Normals 3DCG モデリング  ico球
[反転]使用前
Blender 面の向き 法線 ノーマル Normals 3DCG モデリング ico球
[反転]使用後
[面の向きを外側に揃える]、 [面の向きを内側に揃える]

選択した面の法線を、メッシュオブジェクトの形状から再計算して、面の向きが外側(または内側)に向くように調整します。

内側・外側の方向は、隣接する面との角度によって決まります。

Blender 面の向き 法線 ノーマル Normals 3DCG モデリング ico球
使用前

また、[面の向きを外側に揃える]、 [面の向きを内側に揃える]いずれかの操作直後であれば、『オペレーターパネル』の[内側]という項目のチェック操作をすることで、揃える『面の向き』を反転させることが可能です。

Blender 面の向き 法線 ノーマル Normals 3DCG モデリング ico球
[面の向きを外側に揃える]使用後
Blender 面の向き 法線 ノーマル Normals 3DCG モデリング ico球
[面の向きを内側に揃える]使用後

『カスタム法線』とは?

『面の向き』を単純に反転させるのではなく、より複雑な『法線編集』をしたい場合には、『カスタム法線』というものを使います。

『カスタム法線』は、法線の方向を、自動で計算されるデフォルトとは違う方向に編集することによって、ある種”現実離れ”、あるいは”フェイク”的なシェーディングをする方法です。

ゲーム開発で用いられる手法で、低ポリオブジェクトのシェーディングをコントロールし、「より自然に見える表現」を実現するために使われます。(草や樹木などの低ポリオブジェクトに多く用いられます)。

Blender データ転送 モディファイアー 3DCG モデリング 草 grass カスタム法線
ローポリで作られた草(『カスタム法線』無しver)
Blender データ転送 モディファイアー 3DCG モデリング 草 grass カスタム法線
ローポリで作られた草(『カスタム法線』有りver)

『カスタム法線』を使用していない方は、影が草1本1本毎について全体的にバラついた印象なのに対し、『カスタム法線』を使用している方は、全体でひと塊のようにまとまって見えます。

Blenderでは、『面の角』ごと、『隣接面の角』ごと、または『頂点』ごとに『カスタム法線』設定が出来ます。

※[オブジェクトデータ]>[形状データ]では、[カスタム分割法線データ]に『カスタム法線』のデータも一緒くたの扱いをされているようですし、表記揺れなのか『分割カスタム法線』というものもみられるので、『カスタム法線』の正確な呼称について自身がありません。ここでは仮に、「『カスタム法線』を『隣接面の角』ごとに分割したものを『カスタム分割法線』」と定義させていただき、以降、そのように記述させていただきます。

『カスタム法線』のデータ削除方法

設定した『カスタム法線』を一から設定しなおしたい、または削除したい場合、『カスタム法線』のデータを削除する必要があります。

[プロパティエディター]>[オブジェクトデータ]>[形状データ]>[カスタム分割法線データをクリア]という項目をクリックすれば、『カスタム法線』のデータを削除することが出来ます。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング

Memo:『カスタム法線』と『自動スムーズ』

『カスタム法線』を使用するためには『自動スムーズ』を有効にする必要がありますが、『カスタム法線』に関する編集を行うツールのいずれかの操作を行うと、自動的に『自動スムーズ』が有効になります。

『自動スムーズ』 とは、1つのメッシュで『スムーズシェーディング』と『フラットシェーディング』を混在させたい時に使う機能です。

また、『自動スムーズ』は、シェーディング方法を切り替えるしきい値として『角度』を指定できますが、『カスタム法線』を使用した場合、この『角度』での指定が無効になります。

『シャープ』をマークした辺以外は全て、面間の角度に関係なく、スムーズとみなされます。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球

『シャープ』に関しまして、詳しくは↓の記事をご覧ください。

『カスタム法線』の操作

[面から設定]

選択した面の法線から、頂点の『カスタム法線』を設定します。

オプションとして『シャープ』をマークした辺を強調する事も可能です。このオプションを有効にした場合、[分割]したのと同じように『カスタム分割法線』が出来るようです。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[面から設定]使用前
Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[面から設定]使用後
Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[面から設定]使用後 [シャープ辺を維持]有効ver
[回転…]

選択した部分の法線を、マウスカーソルを操作して編集します。

Blender カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[ターゲットの方へ…]

選択した法線を、任意のターゲットの方向へ編集します。

対象となるターゲットは、キーで指定します。

このツールを選択すると、独自の編集モードみたいな感じになります。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球

ツール選択後、ヘッダーの表示が切り替わって、操作できるコマンド一覧と現在の状態が出てくるので、それを元に操作します。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング
コマンド操作内容
[Enter] or
[PadEnter] or
[マウス左ボタン]
確定
[Esc] or
[マウス右ボタン]
キャンセル
[M]マウスに向ける。有効である間、マウスカーソルの位置に法線の方向を変更し続ける。
[L]ピボットに向ける
[O]オブジェクトの原点に向ける
[R]法線をリセット
[Ctrl]+[マウス左ボタン]3Dカーソル位置をマウスカーソルの位置に変更&3Dカーソルに向ける
[Ctrl]+[マウス右ボタン]メッシュ選択&選択したメッシュアイテムに向ける
※メッシュの存在しないところでこの操作をすると、『マウスカーソルの位置に複製/押し出し』になってしまうので注意
[I]『法線の反転』切り替え。有効である場合、指定したターゲットの方向と逆向きの法線方向になる。
[S]『球体化』切り替え。有効である場合、各法線は、元の値とターゲットへの方向との間の補間になる。
[A]『整列』切り替え。有効である場合、全ての法線は、「選択した部分の中点からターゲットまで」のベクトルで統一される。
[マージ]

選択した頂点ですべての法線をマージし、全ての面に対して1つの平均法線を作成します。

言葉の意味合い的にもですが、[分割]の反対のような気がします。『カスタム分割法線』を『カスタム法線』にまとまめるのにも使えそうです。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[マージ]使用前
Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[マージ]使用後
[分割]

選択した頂点から『カスタム分割法線』を設定します。

『カスタム分割法線』とは、『カスタム法線』を面の数だけ分割したもので、その頂点に構成されている面毎の別々の法線を作成します。

[面から設定]から設定される『カスタム法線』の分割バージョンですね。

[分割]の、見た目にも分かりやすい[面から設定]との違いは、選択した中で『辺』が形成されていれば、もれなく『シャープ』がマークされるというところです。

『シャープ』に関しまして、詳しくは↓の記事をご覧ください。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[分割]使用前
Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[分割]使用後
[平均]

選択中の頂点の法線を平均化します。

平均化タイプが3種類あるようです。

  • カスタム法線
  • 面積
  • コーナー角度
Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング

例えば、[回転…]を使って適当に法線の方向を編集しておくとします。面積タイプと、コーナー角度タイプは、どちらもメッシュの面の情報から計算して、編集した法線方向が大体元の方向に戻るようです。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[平均]使用前
Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[平均](コーナー角度タイプ)使用後

カスタム法線タイプだけは、今の私の知識では変化を確認できませんでした汗

何か分かったら追記します…。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング

『法線のベクトル情報』とは?

選択した要素の『法線のベクトル』を使用して操作を行います。

ツールによっては『バッファ』を利用して、ベクトル情報をコピー・貼り付け、といったメッシュの要素間でのベクトル情報の受け渡しが出来ます。

(※ただし1度に扱えるベクトル情報1つずつのようです)

バッファとは、複数の主体がデータを送受信する際に、処理速度や転送速度の差を補うためにデータを一時的に蓄えておく記憶装置や記憶領域のこと。

引用元:バッファ(緩衝記憶装置)とは – IT用語辞典 e-Words

『法線のベクトル情報』の操作

[ベクトルをコピー]

単一の法線が選択されている場合、法線をバッファにコピーします。

今回は例えばこの位置の法線ベクトルをコピーしてみます。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[ベクトルを貼り付け]

選択した法線にバッファ内の法線を貼り付けます。

先程の[ベクトルをコピー]でバッファに保管したベクトルを取り出して、この位置のベクトルに貼り付けします。

オプションとして、[絶対座標]でベクトルを貼り付けることも可能なようです。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[ベクトルをスムーズに]

選択したカスタム法線を周囲の頂点の法線を元にスムージングします。

オプションの[係数]から”0″~”1″までの数値で、スムージングの度合いを指定できます。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[ベクトルをリセット]

バッファや選択中の要素の法線をデフォルトの状態にリセットします。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[ベクトルをリセット]使用前
Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球
[ベクトルをリセット]使用後

当然ですが、『バッファ』もリセットするので、[ベクトルをリセット]した後に[ベクトルを貼り付け]しても、ベクトル情報が残っていないので、貼り付けられません。

もし、もう一度[ベクトルを貼り付け]したい場合は、また[ベクトルをコピー]からやりなおす必要があります。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 法線編集 normals 3DCG モデリング ico球

『面の強さ』とは?

法線に影響を与える方法で、メッシュの『面』毎に設定できる『面の強さ』を操作する、という方法があります。

※『面の強さ』は『重み付き法線モディファイアー』と組み合わせて使うことでシェーディングに変化が出せます。

Blender 重み付き法線 モディファイアー 3DCG モデリング カスタム法線

メッシュの『面』毎に『面の強さ』を”弱”、”中”、”強”で設定し(デフォルトでは”中”)、シェーディングに影響を与えます。

頂点で交わる複数の法線を組み合わせる時、『面の強さ』が強い方の面の法線情報が、シェーディング時に優先されます。

『面の強さ』の操作

[面の強さで選択]

『面の強さ』を”弱”、”中”、”強”から指定し、その『面の強さ』を持つ面を選択状態にします。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 面の強さ 法線編集 normals 3DCG モデリング ico球
[面の強さで設定]

選択中の面の『面の強さ』を、”弱”、”中”、”強”の中から選んで変更できます。

Blender カスタム法線 カスタム分割法線 分割カスタム法線 面の強さ 法線編集 normals 3DCG モデリング ico球

『モディファイアー』を使った法線編集方法

法線を編集する機能を持つ『モディファイアー』をご紹介します。

  • 『重み付き法線モディファイアー』 … メッシュの[面]がそれぞれ保持する『面の強さ』を操作できます。
  • 『法線編集モディファイアー』 …法線の編集が可能です。
  • 『データ転送モディファイアー』 … 別のメッシュから法線をコピーすることが出来ます。
    ※今後詳しい解説記事を執筆予定です。

参考にさせていただいたサイト・ページ一覧

参考にさせていただいた書籍(マテリアルに関するオススメ書籍)

Blenderではありませんが、3DCGモデルに「法線編集」を施すという知識は、こちらの書籍から学ばせていただきました。


それ以外にも、私の中の「マテリアルの知識の基礎」はほとんどこちらの書籍で得た、と言っていい程、「マテリアルの基本~応用した実践的な事」までを学べる良書だと思います。

もし、Unreal Engine 4に興味があって、且つ、「マテリアルについて全くの初心者さん」である場合の、マテリアル学習”第一歩目”、としてもオススメの書籍です。

Blenderに関する記事や作品をまとめたページ作りました!

Pocket