SubstancePainter2017.1.0

f:id:hildsoft:20170623112304j:plain

新しいライセンス形態のSubstance Painter

6/20にSubstancePainterのメジャーナンバーではないバージョンアップが行われました。

以前アナウンスがあった通り、これまでのバージョンで区切りをつけるアップデート形式ではなく、随時機能追加を行っていくことになりました。

www.hildsoft.com

それに伴い、ソフト名も"Substance Painter 2"から"Substance Painter"になっています。

ソフト起動時に通知されていたバージョンアップのダイアログも出ませんので、今回はサイトからダウンロードする必要があります。

今回はソフト名が変わったからだと思いますので、恐らく次回のアップデートからは通知があるでしょう。

また、ライセンスキーも変更になっていますのでご注意ください。


ソフトの機能変更点

公式のニュースリリース

www.allegorithmic.com

ヘルプ

Version 2017.1 - Substance Painter - Allegorithmic Documentation

今回の大きな変更は2点、Substance Sourceプラグインの実装と、アセットの追加のようです。

Substance Sourceプラグイン

今まではWebブラウザでSubstance Sourceサイトにログインしてマテリアルをダウンロードしていましたが、 プラグイン実装でSubstance Painter上から直接ダウンロードすることができるようになりました。

直接Shelfに格納できるので、今までのようにファイルをダウンロードしてインポートするという手間が省けます。

使い方は今までと同様、メニューバーにあるSubstance Sourceのアイコンで開けます。Webブラウザの代わりにプラグインでダイアログが開きます。

アセットの追加

日本語や中国語のフォント、SF、幾何学、中世、ケルト風のアルファ画像、新しいフィルターなど、300近いアセットが追加されています。

標準の環境マップも修正されているようなので、少し黄色っぽく見える場合はそれが原因のようです。

パラメータで調整できるアルファ、フィルターが増えて作業の効率化ができそうです。

公開後にライブ配信された解説動画


What’s new in Substance Painter 2017.1

2017.2.0情報

www.hildsoft.com

Unityでクォータニオン(Quaternion)を扱うための基礎知識その2

  • Unityのクォータニオン
    • クォータニオンって何をするもの?
    • クォータニオンを構成するもの
    • オイラー角との関係
    • 回転方向
    • クォータニオンとオイラー角の回転は1:1対応じゃない
    • クォータニオンのもう一つの弱点

前の記事を見てない方はこちらを

www.hildsoft.com

以下は断りの無い限り回転角は度数法を使用し、単位は省略します。

Unityのクォータニオン

その1で、UnityでのGameObjectのクォータニオンを取る方法を説明し、加工するメソッドをざっと列挙しました。

大抵はこのメソッドを使ってやりたいことはできると思うのですが、もちろん例外も出てきます。

ただ単にメソッドを使うだけではなく、クォータニオンの使うための基本的な考え方ができるようになることを目指しています。

クォータニオンって何をするもの?

f:id:hildsoft:20170615213830p:plain

Unityではクォータニオンを回転処理に使っています。

クォータニオンは回転操作であり、回転の状態を示すものです。

回転の状態は、基準状態から回転させたものと考えることができるので、実質は回転操作とだけ考えれば大丈夫です。

その回転方法ですが、空間上のある軸(x,y,zの3次元ベクトル)の周りを、ある角度(θ)を回転させます。

上記の図はZ軸を回転軸として回転させています。

続きを読む

Unityでクォータニオン(Quaternion)を扱うための基礎知識その1

  • クォータニオンって何?
  • Unityでの位置情報
    • Transformコンポーネント
    • 実際の移動メソッド
    • transformクラスの取得方法
  • ベクトルとクォータニオン
    • ベクトルの取得
    • クォータニオンの取得
    • Vector2とVector3での違い
  • よく使うメソッドとプロパティ
    • Quaternion.LookRotation
    • Quaternion.Angle
    • Quaternion.Euler
    • Quaternion.Slerp
    • Quaternion.FromToRotation
    • Quaternion.identity

クォータニオンって何?

日本語では四元数といいます。

簡単に言うと複素数は平面(二次元)上の点を表すことができるように、クォータニオンは空間(三次元)上の点を表すことができます。

三次元なら要素数が3個あれば表現できるのではないかと思う方もいるかもしれませんが、確かに点を表すだけであれば3個で足ります。

二次元の場合は単純に要素数2個で足りるのですが、実数を2個ではなく虚数という概念を持ち出して複素数を用いるのは意味があるのです。
同様に三次元の場合は、四元数であるクォータニオンを使うことに意味があります。 この辺は数学の分野になるので興味のある方は調べてみてください。

いまいち理解できないのであれば、当面はクォータニオンの概念を応用することで、空間(3次元)で回転操作が簡単にできる。
くらいの認識でも十分です。

UnityではQuaternionというクラスがありますので、Vector3と組み合わせてどのように使えばいいかという方法さえ知っていればプログラムを書く上では問題ないと思います。

クォータニオンと3Dプログラムについて詳しく知りたい方は下記URLが参考になります。

https://www.dropbox.com/s/em7iqkax0771qb0/Unity%E9%81%93%E5%A0%B4%E3%82%B9%E3%83%9A%E3%82%B7%E3%83%A3%E3%83%AB%E5%8D%9A%E5%A4%9A-yasuhara.pdf?dl=0

http://marupeke296.com/DXG_No10_Quaternion.html

クォータニオンは直観的に扱えないので不便と思われがちですが、ジンバルロックの問題が発生しない、計算方法が容易などの利点があるため3Dを扱うゲームでは多くの場合クォータニオンを使用します。

続きを読む

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

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

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個ずつ調整することが多いでしょうから、必要な数だけ追加することになるでしょう。

まとめ

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

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

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

ボックスプリーツスカートのモデリング

ボックスプリーツスカートの作り方

f:id:hildsoft:20170523054516p:plain

こんな感じのものを作る方法です。

他にも効率が良い方法があるかもしれませんが、とりあえずこれで作れますという参考になれば幸いです。

よくあるプリーツスカートはこちらが参考になりました。

【モデリング】プリーツスカートの作り方 by KITA その他/動画 - ニコニコ動画

手順

f:id:hildsoft:20170523054823p:plain

円柱から作成します。

蓋部分は要らないので削除します。

2セット使いますので、蓋を消したらコピーを取っておいてください。


f:id:hildsoft:20170523054840p:plain

外側の生地を作ります。

隙間を作りながら側面を押し出します。

f:id:hildsoft:20170523055129p:plain

この隙間が外側生地の折り返しの隙間になりますので、好みに合わせて調整してください。


f:id:hildsoft:20170523055248p:plain

押し出した部分だけを使いますので、選択範囲を反転して不要部分を削除します。


f:id:hildsoft:20170523060911p:plain

今度は折り込まれる内側の生地を作ります。

コピーを取っておいたものを使って、同じように押し出します。

折り込まれる生地は外側の生地より少し小さめにしたいので、外側を押し出した時より長めに押し出して隙間を大きくします。


f:id:hildsoft:20170523055532p:plain

同様に不要部分を削除して、XY平面の大きさを調整して外側生地と内側生地の位置調整をします。


f:id:hildsoft:20170523055648p:plain

内側の生地を回転させて、外側の隙間部分に合うように調整します。

Mayaだと「Jキー」を押しながら回転させるとスナップが効きます。


f:id:hildsoft:20170523055629p:plain

内側と外側の生地のエッジを選択してブリッジでつないでいきます。

Mayaだと「Gキー」で同じ操作を繰り返しできるので、選択してGキーで繰り返していきます。


f:id:hildsoft:20170523055920p:plain

スカートの広がり具合を調整します。


f:id:hildsoft:20170523060132p:plain

エッジーループを作成して、メッシュサイズを調整します。

ここでエッジループを作成しておかないと、次の工程のマージ後ではループカットができなくなります。

(マージにより三角ポリゴンができるため)


f:id:hildsoft:20170523060100p:plain

この作業は必ずしもやらなければいけない物ではなく、内側でそのまま隠したり、ウエスト部分のループで隠すことも可能です。


f:id:hildsoft:20170523060433p:plain

上部だけをマージしたものと、3段目までマージしたものでは若干イメージが違ったものになります。


f:id:hildsoft:20170523060542p:plain

最後にウエスト部分を作成して部品としては完了です。

上部のエッジから垂直に押し出しするくらいで良いでしょう。

あとはキャラクターモデルに合わせて微調整をしていけばOKです。

SubstancePainterのファイルサイズが大きくなりすぎる問題

Substance Painterのファイルサイズがどんどん大きくなる

Substance Painterって使うごとにどんどんファイルサイズが大きくなっていきます。

というのも、非破壊が売りなので動作やリソースを全部保存しているからみたいですね。

なぜ全情報を保存しているのか

公式のヘルプより引用。

Projects are really big - Substance Painter - Allegorithmic Documentation

Everything you use in a Substance Painter project is included in the file :
・the source mesh
・the textures baked
・the materials (like substances)

Substance Painterプロジェクト内には、以下のファイルが含まれています。
・ソースメッシュ
・ベイクされたテクスチャ
・サブスタンスのようなマテリアル類

It makes the project completely autonomous but the downside is indeed a large file size. The decision to have everything embedded in the project file comes from the fact that everything is non destructive. It means that the projects “rebuilds” itself when you open it. If a single brush or material is missing from your shelf, the project will break and will not be able to correctly regenerate.

プロジェクトを完全に自動的に行うには、欠点としてファイルサイズの肥大化があります。 全てをプロジェクト内に埋め込むという決断は、全てを非破壊にすることに起因しています。 これは、プロジェクトを開いたときに"再構築"を行うことを意味しています。 シェルフから1つのブラシやマテリアルが無くなったら、プロジェクトは壊れ、正しく再構築することもできなくなってしまいます。

The high-poly meshes are not included in the project. They are just linked to the project.

ハイポリはプロジェクトに含まれません。これは、プロジェクトにリンクされるだけです。

削減方法

A way to reduce the filesize is to :
・Use the “clean” then “save” function in the file Menu to get rid of unused resources.
・Do a “Save As” from times to times to also get rid of additional unused data.
・Set your texture set to a low resolution, like 512, to reduce the disk footprint of the cached textures used for the visualization of the texture sets.

ファイルサイズを削減する方法
・"clean"を実行後、"save"をすることで、使用していないリソースを削除します。
・時折"Save as"を使うときも使用していないデータを削除します。
・テクスチャセットを512などの低解像度にすると、テクスチャセットを表示するために使用されるキャッシュデータを削減できます。

On Windows, the project file is protected from read/write access, therefore the size in the Windows Explorer can be incorrect until you close the project in Substance Painter.

Windowsでは、プロジェクトファイルは使用中に読み書き制限がかかるため、SubstancePainterを終了するまでエクスプローラー上では正常に表示されないかもしれません。

単純な立方体でテスト

f:id:hildsoft:20170516194304p:plain

6面構成のシンプルなキューブ状のメッシュでプロジェクトを作成して保存しました。

f:id:hildsoft:20170516194404p:plain

ファイルサイズが74MBになりました。

これをエクスプローラー上でコピーして同じファイルを作成しました。

f:id:hildsoft:20170516194539p:plain

1回ベイクすると74MB->82MBに

10回ベイクすると74MB->90MBに

それぞれ増加しましたが、save asで保存すると74MBまで戻りました。 clean実行で保存しても同じサイズになりました。

まとめ

どのマテリアルを使って塗っているのか、どのような設定(サイズやフローなど)で、どのようなストローク(描画)を行ったのかなどの情報をすべてプロジェクト内にコピー保存しているようです。

この辺の情報は削減するにも限界があるため、ペイントするときも気を付けるしかないですね。

たとえば、手描きでペイントするときに、描きミスった場合はundoなどで作業を戻す方が良いです。
マスクを黒で塗って白で消すなどの動作は情報をどんどん増やしていくことになります。

とはいえ、それもかなり沢山やった場合の話なので、それほど神経質になる必要は無さそうですが、情報は増えるので心がけは必要かと思います。

要らないデータを削除するには、メニューからcleanを実行するか、save asで別名保存するとある程度削減できます。

ちなみに、cleanを知らずにベイクしまくっていたファイルは、2.5GBから680MBまで小さくなりました。