Blenderの3Dカーソル活用法

検証環境

Blender 2.79b(Windows10 64bit)

3Dカーソルとは

f:id:hildsoft:20181107154530j:plain

この画像の紅白の輪っか部分と十字状の黒い線でできたカーソルです。(オレンジの点は立方体の原点)

初期状態では左クリックで移動できます。

Blender始めた人は色々なサイトや本、動画講座などで、オブジェクトを生成する位置の基準点と習うと思います。


3Dカーソルの用途は

3Dカーソルの用途は、一言で言うと基準点です。

オブジェクトを生成したり、移動、回転、拡大縮小など、何かを行う際の基準点になります。(Mayaを使っている方はピボットと考えると分かりやすいかもしれません)

要は作業用に移動できる原点みたいなものですね。

具体例は後にまわしますが、使えると便利なのは間違いないのです。


移動方法にクセがある

3Dカーソルの移動方法はいくつかあります。

  • 左クリックでクリックした点に移動
  • Shift+Cでグローバル座標の原点に移動
  • Shift+Sでメニューを出して指定した場所に移動

が主な移動方法です。

個人的には左クリックは使いません、というか狙った位置に動かせないので使いこなせません。

他の方がどのように使用しているか気になったので、ツイッターでアンケートを取ってみました。

回答してくださった半数以上の方が左クリックでの移動を使っていないのですね。

何故左クリックが使いづらいかというと、3D空間上にある点を2D画面上で動かそうとしても次元が1つ不足して直線上のどこかにしか置けないのです。


左クリックでの3Dカーソル移動

f:id:hildsoft:20181107161826j:plain

3Dカーソルを原点に置き、スザンヌを作成しました。

次にこの平行投影の4視点のうち、右上のスザンヌを左クリックすると、3Dカーソルはどこに移動するでしょうか?

スザンヌの表面と思った方居ますか?

では、スザンヌをクリックせずに、空き領域をクリックした場合はどうなるでしょうか?

ここが直観的に分かりづらいので、3Dカーソルが使いづらいと思ってしまうのかもしれません。


では答え合わせです。


f:id:hildsoft:20181107162259j:plain

右上の画面でクリックした場所と、左上の赤い直線の線上(正確には平面上)の交点に移動します。

クリックしたカメラのビューポートの平面で、3Dカーソルが存在する平面上を移動するのです。

もちろん、カメラを回せば3Dカーソルは別の平面上を移動することになるのです。

そして何より、一つのカメラの位置では3Dカーソルの奥行きを調整できないのです。

恐らく左クリックで移動と回答された方は、直行するカメラをつかって2回クリックすることで位置調整をしているのではないかと思います。

今回の例だと、右上以外のカメラであれば、異なる視点のカメラのうち2つをクリックすることでクリックした位置に3Dカーソルを調整できます。


Shift+Sでの3Dカーソル移動

f:id:hildsoft:20181107164325j:plain

Shift+Sを押すと、スナップメニューが出てきます。

カーソルを移動させるものは、下の4つ。

  • カーソル → 選択物
  • カーソル → 原点
  • カーソル → グリッド
  • カーソル → アクティブ

です。

以下、個人的な仕様パターンも含めて効果を説明します。

選択物での移動は、現在選択している物の中心、複数選択して中心に移動させたい場合に使います。
複数配置したオブジェクトを回転させる中心を指定するときや、2点間の中点を指定するときに便利です。
指定した後にオブジェクトを作成したりすることも多々あります。

原点での移動は、Ctrl+Cでも同じことができます。
この場合はCtrl+Cと違い、カメラは移動しません。

グリッドでの移動は、現在の3Dカーソルをグリッド単位の近いところに移動させます。
グリッドに合わせて規則的な配置をしているときには微調整として使えますが、あまり使う機会はありません。

アクティブでの移動は、現在選択している物へ移動します。
選択物との違いは、複数選択していても、最後に選択したもの(アクティブな物)に移動します。
1つだけ選択している状態では、選択物での移動と同じなので、あまり使いません。

なので、スナップメニュー(Shift+S)でも使うのは選択物への移動がメインです。


そのほかの移動

先ほども少し触れましたが、Shift+Cで原点へ移動が可能です。

また、Nキーで表示される右側のシェルフにある3Dカーソル欄でも数値入力により移動可能です。


3Dカーソルの活用法

3Dカーソルの移動方法を整理したところで、活用法です。

最初の方に書きましたが、3Dカーソルは基準点です。

3D空間でオブジェクトを生成したり、規則的に動かす(移動、回転、拡大縮小する)場合は何かしらの基準点が必要になります。

大抵の場合はそのオブジェクトの原点や、アクティブポイントの原点を使いますが、それら以外の場合はダミーとなるオブジェクトを用意する必要があります。

そのダミーオブジェクトの生成位置を決めるために3Dカーソルを移動させるのです。(1回しか使用しない場合はダミーオブジェクトを作らなくてもokです)


原点の指定

ドアの開閉を行うモデルを例に挙げます。

f:id:hildsoft:20181107184432j:plain

ピッタリ作ると見づらかったので、ドアを少し小さめに作成しました。

壁とドアは親子関係を設定しています。

壁の原点は底面の中央、エッジの中央、四隅の頂点のいずれかを設定することが多いと思います。

この場合は線対称で作成していることと、原点を底面の中央にしているためメニューの[オブジェクト>適用>位置]で設定され、特に3Dカーソルを使用することはありません。

では、ドアの原点はどのように設定したらよいでしょうか?

f:id:hildsoft:20181107185147j:plain

編集モードで回転軸となる部分をイメージして、ループカットを挿入します。(ループカットで増やした頂点は後で消しても構いません)

この部分を選択し、スナップメニュー(Shift+S)からカーソル → 選択物をクリックして、3Dカーソルを回転軸の中央に設定します。

f:id:hildsoft:20181107185541j:plain

オブジェクトモードに戻り、[オブジェクト>トランスフォーム>原点を3Dカーソルへ移動]で3Dカーソルの位置に原点を移動します。

これにより、ドアを選択してZ軸回転をするだけでドアの開閉が出来るようになります。

原点はオブジェクトモードでしか設定できません。ですので編集モードの頂点などを指定して原点とすることはできないのです。

ここで一時的に3Dカーソルを指定して、原点位置を決定することができます。


f:id:hildsoft:20181107191505j:plain

他にも一時的なピボットとして使うこともできます。

操作したいものと別の基準点が必要になる時には3Dカーソルのことを思い出してみてください。


誤クリック対策

3Dオブジェクトは「元に戻す」が使えません。

基準点にするために、Shift+Sでの操作をメインに使っていますが、位置調整のために事前に何度かの操作をしているにもかかわらず誤クリックで移動してしまうのは厄介です。

しかし、3Dカーソルが視界に入って邪魔な場合があります。消したいけど消せないので、邪魔にならない所に避難させることがあります。

その辺の兼ね合いから、3Dカーソルを左クリックではなく、ctrl+shift+左クリックに変更しました。

参考にしてみてください。

ZBrushなどの3Dツールで曲面を滑らかにする方法

滑らかな曲面に戻したい

スカルプトや、ポリゴンモデリングで頂点数が多いモデルを修正する時って、気を付けていても不意に曲面に細かい凹凸ができていることってありますよね?

ZBrushでの基本的なスカルプト手法だとメッシュレベルがあるので、それを下げてコントロールすることが可能です。

しかし、2018になってからSculptrisProの導入など、ローレベルのメッシュを削除することもあり、ハイポリ状態での修正方法を探していました。

今回はこれを修正する方法の一つをメモっておきます。

3D界隈の知識が足りてないので業界では常識なのかもしれませんが、そこはご了承ください。


手法

曲面を手で修正するのは難しい

曲面や平面を手動で調整するのは難しいです。

平面であれば軸を調整してスケール0にする手法が一般的ですが、曲面の場合はこの手が使えません。

今回の手法では、サポートメッシュを使います。

ZBrushのスカルプト操作を例にしますが、他のDCCツールでのポリゴンモデリングにも応用できると思います。

要点は、扱えるレベルの頂点数まで下げるorプリミティブから変形などで理想となる形状に加工できるようにして、サポートメッシュを作成するということです。


概要

  1. ベースとなるメッシュをコピー
  2. 扱える頂点数まで減らす
  3. 少ない頂点数で滑らかに調整してサポートメッシュを作成
  4. サポートメッシュに沿わせる形で修正


その他の案

  • スムーズブラシを使う
     曲面に対してスムーズを行うと、どうしても線が残ってしまいがちで時間がかかりすぎるので除外。

  • Tool>Deformation>Polishを直接使う
     メッシュが細かすぎる場合は余り効果がないので除外。

  • SculptrisProの使用を諦めて従来のSubDivだけで行う
     ある意味正解ですけど、今回は使ってしまったor使いたいということを前提なので除外。


修正例

f:id:hildsoft:20180430135910j:plain

途中からSculptrisProを使用しているため、四角ポリゴンや△ポリゴン、密度差がかなり入っている上にハイポリゴンの状態です。

太ももの部分にある細かな凹凸をスムーズにします。

正面から見るとそれほど凹凸は目立たないのですが、斜め上から見ると光の加減で凹凸がはっきりわかる状態です。


手順詳細

サポートメッシュを作成する範囲を選択

f:id:hildsoft:20180430141402j:plain

スムーズをかけたい部分より大きめにマスクをかけます。

全体のコピーを取ると、この後使用するPolishやZremesherなどの機能で処理時間がかかるためです。

また、少し大きめにするのはPolish時に境界部分に縮みが発生するためです。


サポートメッシュのサブツール化

f:id:hildsoft:20180430142120j:plain

サポートメッシュの元となる部分を抽出します。

Tool>Subtool>Extractを使用し、マスク部分を厚み0、片面のみのメッシュでサブツール化します。


サポートメッシュのリトポロジー

f:id:hildsoft:20180430143205j:plain

マスクを解除し、Tool>Geometry>ZRemesherをかけます。

Target Polygons Countは滑らかにしたい形状に合わせて調整します。

今回は比較的大きい凹凸を含めて滑らかにしたいので、ポリゴン数をかなり落とします。

ポリゴン数が多い場合はそれほど滑らかにできないので、目的の形状に合わせて調整してください。


サポートメッシュの調整

f:id:hildsoft:20180430144408j:plain

Tool>Deformation>Polishを強さ1で、数回かけます。

ローポリゴンの状態でPolishをかけているので、スムーズになる凹凸のレベルが変わってきます。

この状態でPolishをかけることにより、微妙な凹凸を消してしまう事が目的です。

f:id:hildsoft:20180430145035j:plain

ここで最終的なフォルムがおおよそ分かるので、この段階で滑らかだと判断できるようなポリゴン数とPolish実行回数を調整してください。

また、この時点でブラシなどを使用して形状を整えることも可能です。


サポートメッシュのSubdivide

f:id:hildsoft:20180430150034j:plain

元のメッシュに転写するために、サポートメッシュにスムーズをかけます。

手法は二つあり、

  • Tool>Geometry>DivideでSmtオプションを使用して分割する
  • Smtオプション無しで分割の度にTool>Deformation>Polishをかける

それほど差は無いですが、若干の差はあるので形状によって使い分けても良いと思います。

今回はsmoothを使用して単純に分割しました。

転写範囲を調整

f:id:hildsoft:20180430151403j:plain

修正したいハイポリモデルのマスク範囲を調整します。

先ほどExtractする前にマスクをしているので、その範囲より小さく、適用したい部分だけマスクを残します。

リトポやsmoothをした影響で境界部分で段差ができてしまうので、適用する境界部分をTool>Masking>BlurMaskを数回適用してぼかします。

Extractする際に大きめにしたのも、ここでの影響を抑えるためです。


f:id:hildsoft:20180430151555j:plain

Tool>Masking>Inverseでマスク範囲を反転します。

Ctrl+ブランクエリアをクリックのショートカットを使う方が早いです。


転写

f:id:hildsoft:20180430152339j:plain

修正したいハイポリモデルをSubtoolで選択して、転写元の滑らかにしたSubtoolを可視状態にします。

安全のため、それ以外のSubtoolは不可視状態にしておくのが良いでしょう。

Tool>Subtool>Project>Projectionを実行します。

設定は初期値で大丈夫だと思いますが、モデル形状により上手く転写できない場合は設定を調整してみてください。


完成

f:id:hildsoft:20180430153208j:plain


f:id:hildsoft:20180430153214j:plain

それほどシルエットを崩さずに消したい凹凸部分だけ滑らかにすることができました。

スキニングするために先端のジョイント(ボーン)は必要か?

スキニングとジョイント(ボーン)の関係

3Dモデルを作成したら、ジョイント(ボーン)を作成してスキニング作業に入ると思います。

ジョイント(ボーン)の移動や回転を行うと、メッシュの頂点はウェイトの度合いに従って変形します。

つまり制御点であるジョイント(ボーン)の数は、
少なければ少ないほど操作や設定がしやすい代わりに細やかな表現ができず、
多ければ多いほど細やかな表現が可能になる代わりに操作や設定が困難になります。

ですので、多くても少なくても駄目で、必要に応じて適切な配置をする必要があります。

先端にジョイント(ボーン)がある場合と無い場合

人間や機械を考えると関節部分に配置するのが普通ですが、参考書などでスキニングを説明するときにモデルの先端までジョイント(ボーン)を配置していることがあります。

それが下図の左側のモデルですね。

f:id:hildsoft:20170605022833j:plain

もちろん人間の爪の先端に関節なんてありませんので、右側のように先端のジョイントを作らない場合が多いと思います。

作ることで何かができなくなるわけではないのですが、恐らく使わないことが多いでしょう。

それなら先端にジョイント(ボーン)を作ることにどのような意味があるのでしょうか。

回転により先端部分を持ち上げる

f:id:hildsoft:20170605022837j:plain

左のジョイント(ボーン)は下から2番目を、右のジョイント(ボーン)は一番下をそれぞれ60度回転させたものです。

回転させたジョイント(ボーン)の付近でへこみ具合に若干の差はありますが、ウェイトの調整である程度吸収できるため、それほど大きな差は出ません。

先端をねじる

f:id:hildsoft:20170605022840j:plain

左のジョイント(ボーン)の先端をねじることで、メッシュの先端を変形できます。

では、右側はジョイント(ボーン)が無いので同じことができないのかというと、

f:id:hildsoft:20170605022843j:plain

こちらもある程度近い形状にまでは変形できるんですね。


しかし、角度を変えてみるとわかるのですが、

f:id:hildsoft:20170605022848j:plain

右側のメッシュはジョイント(ボーン)より下のメッシュを一括に扱うためどうしても平面的(固定形状)になってしまうのです。


f:id:hildsoft:20170605080956j:plain

上図は直方体にして一番上のジョイント(ボーン)以外を45度ずつねじったものです。

形状によっては連続的にねじると差を顕著に感じられます。

錘状なら先端に行くほど細くなるので、ねじることでの差を感じられなくなるでしょう。

この誤差を気にしなければ、ねじりに関しては先端のジョイント(ボーン)は不要になります。

先端を伸ばす

f:id:hildsoft:20170605024416j:plain

これは決定的に異なります。

ジョイント(ボーン)が無ければ先端を伸ばすことはできません。

ジョイント(ボーン)の大きさを調整することで全体のサイズを変更させたい場合などは、移動ではなく拡大縮小操作になるのでメッシュも合わせて動くため問題ありません。

先端を伸ばすのは関節以外での用途

関節としてジョイント(ボーン)を使う場合には伸ばす動作はしないので気づきにくいですが、いわゆる「揺れ物」のような操作を行う場合に使うことが多いです。

ばねが代表的ですが、伸縮性のあるものは端から端までジョイント(ボーン)を設定する必要があります。そうしないと末端だけが伸び縮みしないことになります。

揺れ物でも髪や布のような殆ど伸縮性のないものについて末端のジョイント(ボーン)が必要になるかは、細かくねじる表現が欲しいかどうかくらいの認識で良いと思います。

質量の位置

ゲームなどでは子ジョイントの位置から親ジョイントの回転を制御することがあるため、末端までジョイントを入れることがあります。

この場合末端のジョイントはウェイトを持ち、振り子の重りのような意味合いを持ちます。

位置決定用

盾や武器などの設定位置など体の動きに合わせて位置が変わるような物のために先端にジョイント(ボーン)を使用することもあります。
これについては小物の位置や回転を調整するために必要になるので直観的に必要だと理解できるかと思います。

フェイシャル用のボーンは皮膚の位置を調整するもので、モーションキャプチャーなどで1個ずつ調整することが多いでしょうから、必要な数だけ追加することになるでしょう。

まとめ

先端にジョイント(ボーン)を入れるかどうかは、先端だけを変形させたいかどうかを一つの判断基準にすると良いです。

ジョイントを増やしても良いのであれば、ウェイト設定時の目印にもなるので追加してもいいかもしれません。
また、物理演算のために設定することがあります。

小物を配置するために必要なジョイント(ボーン)もあります。

SubstancePainterでアルファ付きのテクスチャが上手く表示されない

今作っているキャラクターのテクスチャをSubstancePainterで作ろうとしていて問題にぶつかってしまいました・・・。

 

完全には解決はしていないけど、情報共有のためにアップします。

 

BaseColorにペイントソフトで作ったテクスチャを設定したのですが、

このテクスチャにアルファ値を設定していて、Unityで透過表示できるか実験したところアルファ値が消えて完全に不透明になるか、画像のように全体が半透明になりました。

元のファイルに一部しか透過を入れていないので、その部分だけを透明になることを期待していたのですが、上手くいきませんでした。

f:id:hildsoft:20170120222928p:plain

 

続きを読む

UnityのRenderer、Mesh、Material、Shaderの関係

描画周りの基礎知識。

 

本格的に勉強するとなるとマニュアルを見ないといけないけど、使う分にはこの程度知っておけばいいかな。

 

それぞれの簡単な説明

Renderer(レンダラー)

MeshRenderer、SkinnedMeshRendererなどがある

ボーンで形状変更するかどうかくらいを覚えておけば最初は大丈夫

コンポーネント

オブジェクトを描画するためのメイン処理&データ管理

 

Mesh(メッシュ)

オブジェクトの形状データ

ポリゴンと呼ばれてるものとの認識で十分

Unity上で手動で修正を加えることは殆どない

 

Material(マテリアル)

メッシュが形状なのに対して、マテリアルは質感のデータ

リアル系では最近はPBR(Physically-Based Rendering)が増えている

テクスチャを保持するのはここ

 

Shader(シェーダー)

Unity5.0で大きく変わった

StandardShader使っておけばとりあえずok

メッシュやマテリアルを元に、最終的にどう表現するかを決定する

 

関係

Renderer

MeshとMaterialのコピーインスタンスを保持

通常はこちらを使用するが、sharedMesh、sharedMaterialはコピー元のデータなので使用する場合は注意が必要

MeshもMaterialも差し替え可能(差し替えた後は破棄も忘れずに)

 

Mesh

Rendererから参照される

 

Material

Rendererから参照される

Shaderを1個参照する

 

Shader

Materialのデータを参照するので、同じShaderでもMaterialによって描画変更可能

 

小規模ゲーム作成にオススメの3Dツール

3Dツールっていろいろあるし、使う理由も人それぞれなので一概にどれが良いってのは言えないんですね。

 

統合型ソフト1本あれば事足りる時代もあったみたいですが、最近ではこだわった作品になればなるほど、1つのツールで完了することは無いので、ソフトごとに得意なところを使い分けるのが一般的になってきているようです。

 

需要の一例として私の用意した環境と、選定したときの判断を含めてオススメとして紹介します。

 

前提となる条件

  • UnityやUE4を対象に小規模ゲームの素材を作るためのもの
  • 目先の目標達成だけではなく、今後も見据えて勉強コストは用意する

 

選択したツール

続きを読む