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

 

選択したツール

続きを読む