[Blender]辺や面の情報(長さ・角度・面積)を表示する

辺や面の情報

Blenderでは辺の長さや面の面積を表示させることが可能です。

長さや面積がわかると楽な場面もありますので、必要な時には表示させてみましょう。

Nキーでプロパティパネルを出すと、MeshDisplay(メッシュ表示)にEdgeInfo(辺情報)とFaceInfo(面情報)という項目があります。

いずれもEditモード(編集モード)にて動作します。

チェックボックスは以下のような意味になります。

Eage Info
Length Edgeの長さ
Angle 選択した2辺のなす角度

Face Info
Area 面積
Angle 面の内角のそれぞれの角度

モデリング時に目検討ではなく数値的に捉えられるのは重宝します。この数値表示でちょっきりに合わせるのは少し苦労しますが、移動回転縮小の時にShiftキーで詳細動作モードを併用すると小刻みに編集できます。

[Blender]VertexBevel-頂点をベベルする

VertexBevel

Blenderではモデリングの時にBevel(ベベル)を使うことができます。

Bevelとは斜面という意味になるそうで、文字通り斜面をつくる機能です。

通常は辺を選択してctrl+Bでべべります。こんなふうに(EdgeBevel)。

辺のあった場所に新たにFace(面)が挿入されたような感じで、色んな所で使いドコロマックスです。

ctrl+Bの後VキーでVertexモード

でもこのBevel、実はVertex(頂点)にも適用できるって知ってました?

Vertexを選んでctrl+Bでベベりますが、このままではべべれません。

ctrl+Bの後に、Vキーを押してください

これでBevel機能のVertexモードがONになります。

その状態でマウスを動かすと…、おおVertexがべベッてる!!Bevel中にマウスホイールを動かすことで分割ができるのもEdgeBevelの時と同じです。

ちなみにVertexを複数選択してVertexモードにて個別にBevelを適用することも可能ですよ。

機械とかのモデリング時にはこのVertexBevelすごく重宝するのではないかと思います。

ぜひお試しください。

[Blender]3Dカーソルを活用する基本編

3Dカーソルはとても使える奴です

Blenderを触り始めた当初は3Dカーソルに対してどういう感想をもっていたでしょうか?

なんか邪魔なやつだなと思っていたのではないでしょうか?

何も設定していないBlenderだとマウス左クリックで3Dカーソルが動くだけでオブジェクトを操作できないのもトラウマになったものですよね。

3Dカーソルの位置にプリミティブオブジェクトが生成されるので、オブジェクトが生える場所くらいの認識の人もいるかもしれません。

でもこの3Dカーソル、かなり使える奴なんですよ。

3Dカーソルの位置決めの基本

Locationで数値入力

3Dカーソルはプロパティシェルフの3DCursor(3Dカーソル)メニューのLocation(位置)で場所を数値入力することが可能です。

基本的にはこのパラメータで位置を操作することができます。

ちょっきりな位置に3Dカーソルを移動させオブジェクトを生やしたいときはここで設定するといいかと思います。

3Dカーソルを原点に戻す

またShift+C3Dカーソルは原点に戻ります。つまりX:0 Y:0 Z:0に戻ってくれます。

もし変なところに3Dカーソルが飛んでしまったら、 Shift+Cと覚えておけばとりあえず原点に戻ってくれるのであせらずに済みます。

Originを任意の場所に移動させるために3Dカーソルを使う

Shift+Ssnap(スナップ)メニューのショートカットですが、このショートカットの中に3Dカーソルを移動させるメニューが存在しています。

以下の4つです。

  • Cursor to Selected  3Dカーソルを選択した要素の中心に移動
  • Cursor to Center 3Dカーソルを原点に移動
  • Cursor to Grid  3Dカーソルを直近のグリッドに吸着
  • Cursor to Active  3Dカーソルをアクティブな要素の中心に移動

でも3Dカーソルをいろいろ動かすことができたら何が嬉しいの?とお思いになる方もいるかもしれません。

それは3Dカーソルが「編集の中心点」になりえるからなのです。

BlenderではPivot Point(ピボットポイント・編集の中心点)が5つあります。どれも有用で使い道のあるものですが、そのなかの3DCursor(3Dカーソル)は3Dカーソルの性質上非常に自由度の高いPivot Pointを実現してくれます。

3Dカーソルを使ってOriginを移動させる手順

例えばロボットの関節を作っていたとします。関節は多くの場合そのオブジェクトのOrigin(原点)が軸となって表現されます。

つまり関節の折れ曲がる場所にOriginを移動させる必要があります。

これにはObjectモードでオブジェクトを移動させてOriginを任意の場所にもっていく方法もありますが、やはり手動だと思った通りの場所に移動させるのはなかなか大変です。

またOriginを移動させた後、Mesh(メッシュ)を相対的に移動させないといけなくなるので面倒ですよね。

そこで3Dカーソルを使ってOriginを移動させます。

今回の例では肘関節部分を想定しています。

肘関節を構成する二つのオブジェクトがあります。originは中途半端な場所にあります。

Editモードで中心となりえる要素を選択

いったんEditモード(編集モード)に入ります。

そして対象となる関節位置の点や辺や面などを選択します。

このとき選択するのは選択全体の中心が肘関節の回転軸の中心となる要素にします。

例では関節の円状部分の面を両外側それぞれ2か所ずつ選択しています。

選択した要素の中心を捉えることができるので、関節が傾いていても関係ありません。オブジェクトを動かすときのようにXYZ軸に悩まされることはありません。

3Dカーソルの移動

そしてShift+SにてCursor to Selectedを選択します。

すると3Dカーソルが選択した要素の中心に移動してくるはずです。

視点回転するなどして、正しい位置に3Dカーソルが来ているかを確認してください。

もし、正しい位置に3Dカーソルが移動しなかった場合は、選択要素をもう一度検討してみてください。多くの場合上下左右に対称的に要素を選択すると中心を捉えられるかと思います。

Originを3Dカーソルの位置に移動させる

確認してよければ、Objectモード(オブジェクトモード)に戻って、Ctrl+Shift+Alt+Cを押します。

このショートカットはSet Originメニュー(原点を設定メニュー)が表示されます。Originの移動のためのショートカットですね。

そしてOrigin to 3D Cursor(原点を3Dカーソルへ移動)を選択します。

そうすると3Dカーソルの位置にそのオブジェクトのOriginが移動するはずです。

回転軸を肘に移動させることができました。

ちゃんと肘関節のようにまげることができるようになりました。

まとめ

上述はObjectモードでの例ですが、もちろんEditモードでも3Dカーソルは大活躍します。

さらなる応用編は別な記事にまとめたいと思います。

[Blender]ハイポリモデルからローポリモデルにNormalMapをBakeする

NormalMapを活用する

ゲームキャラクターなどでは描画速度を確保するためになるべくポリゴンを削減したりします。

でもある程度の詳細度も欲しい…。そんな時には凹凸を疑似的に表現できるNormalMapが便利です。

その凸凹を画像に変換することを「焼き込み/Bake(ベイク)」と呼びます。NormalMap以外にも表面色や反射色などもBakeすることができます。

NormalMapはすこし複雑なのでいったん流れを整理したいと思います。例ではCyclesでの方法を紹介します。

これから行おうとしているのは「ハイポリモデルと同じ位置にあるローポリモデルのUVを使ってNomalMapをBakeする」という方法です。

大まかな流れは以下のようになります。

  • ハイポリモデル・ ローポリモデル を用意する
  • Bake先(NormalMapになる)画像を新規作成する
  • ローポリモデルのUV展開を行う
  • 新規作成した画像をNodeEditerのimageノードで指定しておく
  • ハイポリモデルとローポリモデルをできうる限り同じ位置にセット
  • Bakeする

NormalMapをBakeする工程

ハイポリモデル・ ローポリモデルを用意する

ハイポリモデルとはスカルプトなどで作った高解像度(多ポリゴン)モデルのことです。ローポリモデルは低解像度(少ポリゴン)モデルのことです。

ハイポリモデルとローポリモデルはどちらが先に存在していないといけないということはありませんので、作業上のやりやすさや効率などで各自の好みでよいかと思います。

今回は人の頭部のモデルを用意してみました。

マルチソリューションモデファイアを使ってローポリとハイポリを混在させた状態のモデルをBakeに用いることも可能ですがこれについては別記事でまとめたいと思います。

Bake先(NormalMapになる)画像を新規作成する

Bakeするには空の画像(でなくてもいいのですが)が必要です。

UV/imageEditer(UVイメージエディタ)にて新規画像を生成しておきましょう。画像サイズは各位のプロジェクトに合わせた大きさにしてください。

画像が大きければ詳細な結果が得られますが、それだけレンダリングにも時間が掛かりますので、そのへんはトレードオフになります。

画像はuntitleのままにしておかないで名前を付けておくと後々混乱しなくてよいでしょう。ここではnomalという名前にしました。

この段階ではまだ画像を保存する必要はありません。

新規作成した画像をNodeEditerのimageノードで指定しておく

画像を生成しただけではその画像がBake対象になってくれません。Bake対象にするためにNodeEditer(ノードエディタ)で画像を読み込む必要があります。

ローポリに対してマテリアルが存在する必要があります。もしマテリアルがまだ無い場合は生成してください。

NodeEditerのNew(新規)ボタンから生成すると楽でよいかと思います。

さらにNodeEditerにてTextrue(テクスチャ)からImage Textrue(画像テクスチャ)ノードを出します

そして先ほど生成した空の画像(nomalと名前を付けた)を指定します。

このノードはこの段階でどこかに繋ぐ必要はありませんが、後々NormalMapを指定するノードにするならNormalノードなどに接続しておくのも手です。

ローポリモデルのUV展開を行う

NormalMapのBakeはローポリモデルのUVをもとに実行されます。ですのでローポリモデルがUV展開データを持っていないとBakeはできません

UV展開データがない場合は「No Active UV layer found in the object ”XXXX”」というエラーがでてBakeが失敗します

UV展開作業はとてもつまらんですが、UV展開は品質に直結しますのでがんばりましょう…。

UV展開作業はUV/imageEditer画面で行っているかと思いますが、この段階でUV/imageEditer画面には先ほど生成した(nomalと名前を付けた)画像が表示されている状態にしておいてください。

こうしておくことでBakeの結果が表示されることになります。もし表示状態にしてなくてもエラーになるわけではありません。

もし同一マテリアル内で複数のImageTextrueノードで画像が読み込まれている場合はフォーカスされている(選択されている/ 枠が黄色になっている) ImageTextrueノードの画像にBakeが行われます。

複数のImageTextrueノードにフォーカス(選択状態)されている場合は、最後に選択されたもの(アクティブ状態/枠が黄色になっているもの)が対象になります。

画像が読み込まれているImageTextrueノードが一つしか無い場合は、フォーカスされていなくてもそのImageTextrueノードに読み込まれている画像がBake対象になります。

逆に新規画像は存在してるのにImageTextrueノードに読み込まれていない場合はエラーになります。

Bake前には必ずどのImageTextrueノードにフォーカスがあっているか確認してください。

オブジェクトに複数マテリアルが存在している場合

どうもそのオブジェクトに対して最初に作成されたマテリアルがBake対象になるようです。

複数のマテリアルが存在している状態でテストしてみましたが、マテリアルを切り替えてBakeすることはうまくいきませんでした。

なにか方法がありそうですが、今のところは不明です。

もちろんハイポリモデルはUV展開をする必要はありません。というかスカルプトしたモデルなんてUV展開したらパソコンが死んでしまうかも…。

ハイポリモデルとローポリモデルをできうる限り同じ位置にセット

ハイポリモデルの凹凸は同じような位置にあるローポリモデルにUVを介して転写されるようなイメージでBakeされます。

ですのでハイポリモデルとローポリモデルはできるだけ同じ位置にいなければなりません

同じ位置というのはOriginの位置だけを指すのではなく、形状もなるべく同じようになっていなくてはいけないということです。

あまりにもローポリにしてハイポリと形状がかけ離れすぎてしまった場合、うまく凹凸の位置が対応せずBakeの結果が空白(水色)になってしまうこともあります。

ですのでNormalMapで疑似的に再現できる高低には限度があることになります。

後述するRayDistanceである程度の調整はできますが、もし凹凸がうまくBakeできないならローポリモデルがちゃんとハイポリモデルに対応した形状になっているかを確認したほうが良いかと思います。

ハイポリの凹凸をできるだけ転写することのできる、なるべくポリゴンの少ないローポリモデルが理想です。そうはいってもなかなか難しいですけどね…。

Bakeする

さて準備が整ったらBakeをします。

Bakeの設定はプロパティパネルのBakeで行います。

BakeType(ベイクタイプ)

BakeTypeをNormalにします。

これで先ほど作った新規画像(nomalと名前を付けた)にNormalMapがBakeされることになります。

Space(スペース)

Spaceは法線に関しての設定です。デフォルトでTangentになっているかと思いますがそのままでOKです。

Swizzle(変換)

SwizzleはNormalMapの色要素をどの方向に対応させるかの設定です。

NormalMapではRGBの量で法線方向が表現されますので、このSwizzleを変えることでRGBが受け持つ方向をコントロールすることができます。

通常ではここも変更する必要はありません。

Margin(余白)

MarginはNormalMapのBakeされる範囲の設定です。0pxにするとUVの境界ぎりぎりまでしかBakeされません。これではローポリの場合継ぎ目が目立ったりしてしまうのであまりよろしくありません。

ですので特に理由がない場合はMarginは設定しておいた方がよいかと思います。デフォルトは16pxです。そのままでOKでしょう。

Selected to Active(選択→アクティブ)

Selected to Activeは今回のようにハイポリモデルとローポリモデルが別々なオブジェクトの場合にチェックします。

読んで字のごとくですが、「選択したオブジェクトからアクティブなオブジェクトへ」という意味です。

Blenderでは複数のオブジェクトを選択するとき、SelectedとActiveという状態が生まれます。

Selectedは選択されているものすべてを表し、Activeは選択されているものの中で一番最後に選択されたものを表します

このSelectedとActiveはObjectモードだけでなくEditモードでも必要になってくる概念なので覚えておきましょう。

今回のBakeの場合ではハイポリモデルを選択して、それからShiftを押しながらローポリモデルを選択するとハイポリモデルがSelectedとなりローポリモデルがActiveとなります。

ですのでローポリモデルを選択してからハイポリモデルを選択してActiveにしてBakeしようとすると、Bakeする対象がローポリからハイポリになってしまう上に、ハイポリにはUV展開データが存在しないのでエラーになります

Bakeの場合の選択は

ハイポリー→ローポリ

の順番であると覚えておくといいでしょう。

RayDistance(レイの距離)

RayDistanceは凹凸の再現性の調整です。高低をどこまで再現するかということです。

ハイポリモデルの凹凸の差が激しい場合、どんなにうまくローポリモデルを作っても、凹凸に追従できない場合もあるかもしれません。

その場合、ある程度RayDistanceの値を増やすことで凹凸の再現範囲が広がりBakeがうまくいく場合があります。

できるだけローポリモデルでハイポリモデルを追従するのが好ましいですが、最後の微調整はRayDistanceで行うと効率的かもしれません。

Cage(ケージ)

RayDistanceと排他的なのがCageです。

RayDistanceが値によって画一的に応答の再現度を調整するのにたいしてCageはオブジェクトを使って凹凸を再現する範囲を調整します。

Cageは檻とか籠とかという意味だと思いますが、まさにそのイメージかと思います。

ハイポリをCageに指定したオブジェクトで包むようにしてあげれば、そのオブジェクトの内側であれば凹凸を再現してくれるようになります。

ただCageになれるオブジェクトは制限があって、ローポリモデルと同じ枚数のFace(面)で構成されている必要があります。

ですのでCageはローポリモデルをコピーしてハイポリとローポリの形状が乖離している場所を見つけてその部分を包括するように頂点を編集する、というのがいいのではないかと思います。

うまく使えればローポリでポリゴンを節約したまま大きな凹凸も表現できるかもしれません。

Cage→Extrusion

CageのExtrusionはCage範囲の拡張です。 RayDistanceと意味は似ていると思います。Cageの範囲を微調整するプロパティです。

Clear(クリア)

ClearはBakeする毎に画像を初期化する設定です。いったんまっさらにしてからBakeするということですね。普通はチェックをつけたままでいいと思います。

シェーディングをSmoothに

最後に重要な設定があります。

ハイポリモデル、ローポリモデル双方のシェーディングをSmoothにしてください。

そうしないとポリゴンのカクカクが凹凸としてBakeされてしまいます。

人体や動物などはポリゴンのカクカクは好ましくないかと思うので、忘れずにSmoothにしてください。

もちろんロボットなどの直線的なモデルであえてポリゴンのカクカクが出るようにしたい場合はFlatシェーディングのままでOKです。

最終確認

さて確認です。

  • Bake先の画像を新規作成している?
  • UV/image Editer画面でBake先の画像を表示している?(Bake結果をすぐ確認するため)
  • ローポリモデルのUV展開済み?
  • ローポリにマテリアルが存在している?
  • そのマテリアルにTextrueImageノードにてBake先の画像が読み込まれており、かつそのノードが選択(またはアクティブ)状態になっている?
  • ハイポリモデル、ローポリモデルの位置合わせOK?
  • 必要であればCageモデル作る
  • BakeTypeはNormalになっている?
  • Selected to Activeにチェックはついている?
  •  

  • Cageモデルを使う場合はCageにチェックしている?
  • ハイポリモデルを選択して、そのあとshiftを押しながらローポリモデルを選択した?
  • Selected to Activeの状態になっている?
  • ローポリ、ハイポリのシェーディングをSmoothにした?(ポリゴンのカクカクが好ましくない場合)

Bakeを実行する

確認がOKでしたらBakeボタン(ベイク)を押しましょう。

ポリゴンの量によってBake結果に掛かる時間が変わるはずです。ハイポリモデルが詳細であればあるほど時間が掛かります。もちろんパソコンの性能によっても時間は左右されます。

一応プログレスバーがinfoに表示されますが、時間が掛かる場合は止まったまんまになったりあんまりあてになりません。気長に待ちましょう。(バージョン2.78以降はプログレスバーの挙動が修正されているそうです)

Bakeが終わると、UV/imageEditerに結果が表示されるかと思います。

変わった色の変な画像が出来上がっていることでしょう。この画像で凹凸を再現できるのかと思うと不思議なものです。

画像を見渡して、再現できていない場所などがないか(凹凸が存在する場所なのに水色一色になってしまっている場所)を確認します。

もし再現できていない箇所があるようでしたらRayDistanceの調整、Cageの使用、またはローポリモデルの編集も必要になるかもしれません。

なんどかやり直す羽目になってしまうかもしれませんが、良いモデルのためですので頑張りましょう。

失敗した例

無調整でのBake

実際に失敗した例を挙げておきます。先ほどのBakeではRayDistanceを0.00のままで行いました。そのBake結果が以下です。

確認すると、顔のほとんどの範囲がシアン一色になっているのがわかります。これは凸凹を拾うことができず結果的になんら凸凹をBakeできなかった部分となります。これではほとんどNormalMapとしては意味がありません。ちゃんと凸凹を拾うように調整する必要があります。

RayDistanceを調整したBake

今度はRayDistanceを0.1に設定してBakeしてみました。

先ほどと違い、ちゃんと顔の全面で凸凹の情報がBakeされていることがわかります。口の部分に一部平らになってしまっている部分がありますが、これは口の中に相当しますので特に問題ないでしょう。

オブジェクトの位置がずれたBake

オブジェクトの位置がずれるとどのようなことになるのか試してみた結果です。

ローポリモデルをX軸にずらして配置してみました。

その場合のBakeの結果がこちら。

ピカソですかね?盛大に失敗しているのがわかりますよね。

このように位置が狂っているとちゃんとしたBakeができませんので位置合わせは厳密に行ってください。

Smoothシェーディングを忘れた場合

SmoothシェーディングにしないとポリゴンのカクカクがBakeされると説明しましたが、以下のようになってしまいます。

ハイポリ、ローポリどちらともFlatシェーディングにしてBakeした結果です。

ポリゴンのカクカク(境目)がBakeされてしまっているのがお分かりになりますでしょうか?

これを失敗とするかどうかはコンセプトによるかと思いますが、多くの場合では好ましくはないと思います。

Bake結果を保存する

納得のいくNormalMapになったら、画像を保存しておきましょう。

BakeしたNormalMapを適用する

NormalMap画像をNormalMapとして適用するにはNormalMapノードが必要です。

TextrueImageノードに先ほどベイクしたNormalMap画像を読み込んで、Color出力コネクタをNormalMapノードのColor入力コネクタに繋ぎます。

NormalMapノードのNormal出力コネクタをDiffuseBSDFやGlossyBSDFなどのNormal入力コネクタに繋ぐとNormalMapがオブジェクトに適用されます。

NormalMapノードにはBakeで用いたUVMapを指定してください。またStrength(強さ)で凸凹の強さを調整できます。

レンダリングするなどして凹凸の再現性を確認してみてください。

実際に凹凸が付くわけではないので角度によってはのっぺりしてしまう場合もありますが、結構ちゃんと凹凸があるように見えるかと思います。

まとめ

やや長い記事になってしまいましたが、NormalMapのBakeの工程をお伝えすることができましたでしょうか?

実際に手順を覚えてしまえばたいして難しい作業ではありませんのでどしどし試してみてくださいね。

[Blender]レンダリングを簡単に確認する

レンダリングを簡単に確認する

どんな感じになったかな〜といちいちレンダリングするの面倒ですよね。

Blenderには幸い3Dビューにレンダリング後の状態を表示できる機能があります。

3DビューのViewPort Shading

3Dビューの下の方に、こんなメニューがありますよね。

これViewPort Shading(3Dビューのシェーディング)と言うんだそうですが、ここで3Dビューのシェーディングを選ぶことができます。

レンダリングレビューはRendered(レンダー)です。これを選択すると、画面を動かしたり、オブジェクトを動かしたり変更したりすると即レンダリングされ直されます

十分にマシンパワーがあれば、連続的にレンダリングの状態を確認することができ、とても便利です。まあマシンパワーがあればの話ですが…。

マシンパワーがなくても、3Dビューでとりあえずはレンダリングを確認することができるので便利でっす。

特にマテリアル設定時なんかは、結構レンダリングの状態を確認したいのではないかと思うので頻繁に切り替えています。

ショートカットもあるよ

いちいちメニューから切り替えるの面倒だなと思っていたら、ショートカットが設定されており、

shift+Z「Rendered」に切り替えることができるではないですか。

「Rendered」の状態でもう一度shift+Zを押すと、シェーディングが「solid」に戻ります。

これでマシンパワーの無い環境でも、モデリングしてはshift+Z、マテリアルを作ってはshift+Zで確認できます。

いちいちマウスで「Rendered」選ばなくていいのがとても便利ですよ!!

ぜひおすすめしたいshift+Z!!

もう知ってるって?そうですか…