SubstancePainterで正しいcurvatureをベイクする

Category : CGTips · No Comments · by 9月 9th, 2019

curvatureとはどんなデータか?

curvatureとは曲率を表すデータです。
曲率に従って決まり、グレーの値は平坦であることを表し、暗くなるほど凹面、明るくなるほど凸面であることを表します。

曲率を表すので正しく生成できれば以下のような挙動になります。

  • 平面は全ての箇所で全く曲面がないのでニュートラルなグレーになります。
  • 球体は全ての箇所で均質な曲率ですので偏りのない明るさになります。(ニュートラルなグレーよりも明るいです)
  • 角丸キューブの場合、エッジが曲がり始めると一定の曲率になりますが、角は3面に曲がるのでより曲率が高いため明るくなります。
  • 小さい球体はより鋭い曲面といえるので、小さいほど明るくなります。

ベイクの準備

では実際にベイクを行いたいと思います。
正しくベイクするためにモデルのUVと頂点の法線の設定を行います。
ローポリゴンのエッジが90度のメッシュになる場合、ハードエッジの設定にしてUVを切り離す必要があります。この設定によってUVの向きが異なるが箇所を違う値をベイクできるようになり、Normalのシームが出なくなります。
ベイクする際のUVと頂点法線の設定はリンク先の画像がわかりやすいです。

https://forum.substance3d.com/index.php?topic=16416.0

今回はテストなので比較的シンプルな角丸キューブを作りますが、 すこしだけいじわるをしてUVは斜めに傾けておきます。

ベイク設定

データができたのでベイクしてみます。
デフォルト設定ですがで、データが単純なこともあり、Curvature以外はおおむね問題ないです。

問題のcurvatureですが、UV境界に均一な線が入ってしまいます。

ここからが本題です。なぜこんな線が入るのでしょうか?どうやったらこの線はなくなるのでしょうか?

この線の正体はCurvature Baker parameterのEnable SeamとSeams Intensityの設定です。Enable SeamがONになっているとき、Seams Intensityの強さで線を描画します。

Enable Seamのチェックを外すことで線は消えますが、やや隙間が目立ちます。そういった場合にはCommon ParameterのDilation Widthでベイクしたときの延長の幅を変えることで緩和されます。

もしくはSeams Intensityの値をいい感じに設定してなじませることで緩和することもできます。

そもそも、なぜ隙間なくベイクできないのでしょうか?

それはSustancePainterのCurvatureのベイクが、ローポリとベイクされたNormalを使った簡易的な処理だからです。

Enable Seamは癖のあるパラメーターですが、デフォルトでONになっているのは、エッジのシーム付近は角になることが多いので、ベイクの甘さをこれで誤魔化すためについているものだと思います。

SubstanceDesignerを使用する

ちなみにおなじSubstanceシリーズのSubstanceDesignerにはcurvatureのベイクの設定が二種類あります。

ひとつはCurvatureで、こちらの設定はSubstancePainterと同じものです。(ただし、より明示的にNormalMapを指定する必要があります)
もうひとつはCurvatureMap from Meshというもので、こちらはハイポリを使用してベイクを行うため、より正しくベイクを行うことができます。 角の明るさもはっきりと出ていますね!

CurvatureMap from Meshは便利ですが、万能というわけでもないようで、球体をベイクした際にはシワのようなものが出てしまいました。こちらはまだパラメーターを追いきれていないのですが、UVの変形度合いに影響するようです。( CurvatureMap from Mesh についての説明が、なぜかマニュアルに載っていないんですよね…)

SubstancePainterのフィルタの作成手順

Category : CGTips · No Comments · by 9月 4th, 2019

おひさしぶりですこんにちは。
今回はSubstancePainterのフィルターの作成手順について書きます。

SubstancePainterのフィルターを作れるツール

SubstancePainterのフィルター、ジェネレーター、シェイプなどもデータの形式はsbsarです。
これはSubstanceDesignerで作られたファイルですが、アーカイブされているのでノードを編集/閲覧することはできません。SubstanceDesignerとSubstancePainter、Achemistで使用することはできます。

SubstancePainterのフィルターとジェネレーターの違い

似たような機能ですが、意識していないと混乱するのでまとめておきます。

フィルターとは、主にマスク情報に対して使い、下のエフェクト(マスク情報)に対して影響を及ぼすものです。例としてブラーなどが挙げられます。

ジェネレーターとは、メッシュのトポロジに基づいてマスクを生成する機能です。マニュアルにはこのように書いているのですが、もう少し正確に言うとベイクされた各種マップを基にマスクを生成する機能です。そのため正しく使うにはあらかじめべいくを行う必要があります。例としてDrippingRustなどがあげられます。

フィルターの作り方

フィルタを作るには新しいグラフを作るときのテンプレートからPainterFilterを選びます。Emptyを選び、自分で作ることもできるのですが、プリセットで必要なノードが用意されているので使うと便利です。

作成すると下の画像のようにinputとoutputのノードが配置されたグラフが現れます。
inputで下のエフェクトを受け取り、outputで出力されるので、この間に処理を加えるとフィルターとして機能します。

今回は簡単に下のエフェクトに応じて星を表示するだけの機能を作ります。
TileSamplerを作りTileInput1にStarノードで作った星をつなぎ、PatternDistributionMapにPerlinNoiseをつなぎます。PerlinNoiseは後でInputに差し替えますが、確認のためにおいています。このままではTileSamplerでInputやPatternDistributionMapを使用してくれないので、PatternやPatternDistributionInputの設定を変更します。

設定ができたら、今後はある程度の調整機能を持たせたいので、 Scaleの設定などをExposeしましょう。Exposeした値はSubstancePainterから変更できます。

パラメーターのExposeができたらTileSamplerのPatternDistributionMapにInputをつなぎなおします。

最後に書き出し設定です。Explorerで.sbsarファイルとしてパブリッシュします。

出来上がったフィルターをSubstancePainterにインポートします。ドラッグするとダイアログが現れるので、種類はFIlterを選んでください。テスト中はインポート先をCurrentSessionにしておくとよいでしょう。

さっそく使ってみましょう。
何か適当なマスクを作りその上にフィルターを作成します。フィルター一覧に先ほど作成したSBSARファイルが見えますので選択します。

このように作るだけなら、非常に簡単にフィルターも作成できます!

UE4マテリアルの変数名の命名ガイド

Category : CGTips, UE4 · No Comments · by 12月 18th, 2018

おひさしぶりですこんにちは。

最近はお仕事で、UE4のマテリアルなど変数名を決める機会が増えてきました。

ですが、アーティストがこういったものの名前をつける機会は過去にはほとんどなかったことや、エンジニア向けにはネーミングルールはあるけれど使う用語がかなり違うことからそのままは転用しにくく、また日常的に使用するDCCツールのネーミングルールのパターンも様々であることから、わかりすい名前ってなんだろうとよく考えています。

わかりやすい名前をつければ怖がらずに使ってもらえますし、ドキュメントを書く手間を省けることもあるかもしれません。

今回、名前の付け方を以下のように統一してみようと考えました。

部位+(状態)+(影響を及ぼす要素)+数学的用語

括弧は省略可能
例 : BrickHeightRenge
例 : RustColor

【部位】とはマテリアルが複数の素材感を持つときにどこに影響を与えるかということです。例えば壁マテリアルの『レンガ』に影響を与えるといったことです。
【状態】とはその変数がマテリアルのどういった状態に影響を与えるのかということです。例えば壁マテリアルの『汚れ』に影響を与えるといったことです。
【影響を及ぼす要素】とはその変数がマテリアルのどのパラメーターに影響を出すのかということです。例えば壁マテリアルの『アンビエントオクルージョン』に影響を与えるといったことです。
【数学的用語】とはその変数がマテリアルのどういった状態をどうするのかということです。例えば壁マテリアルの汚れの『強さ』に影響を与えるといったことです。

数学的用語という名前の付け方はどうなんだというツッコミはナシでお願いします>< (いい言葉が浮かばなかった)

 

ほかには以下のことに気をつけるように心がけています

  • 実装ベースではなく具体的な効果で名前をつける
    例えば、TextureにMultiplyしている変数に対し、TextureMultiplyのような名前をつけることをやってしまいがちなのですが、そこは一呼吸おいて、これは汚れのテクスチャを強くするためにMlutiplyしているんだというところまで考えて、DirtIntensityのような『具体的な効果』に落とし込んだ名前をつけてあげると、使う人にとって優しいものになるのかなと思います。
  • キャメル法に統一
    UE4に倣ってキャメル記法(単語の頭が大文字)で統一します。そのためAOなどの通例として大文字で使われるものでもAoと表記して区切りをわかりやすくします。
  • グループを使う
    マテリアルが大きくなった場合、アルファベット順のソートだけに頼るとわかりにくいので、グループも積極的に活用します。個人的にはSortPriorityまで使うと管理が大変なので使ってないです。
  • なるべくなら20文字程度に収める
    ぱっとみてわかってもらえるくらいの文字数に抑えたいですね。20文字という制限に特に意味はないですが。
  • (将来的には)部位も省略できるなら省略する
    いまだと一つのマテリアルがレンガと木を持っているときに、BrickHeightRengeなどの名前を付ける必要があるのですが、あやゆるものにBrickとつけるのでなかなか取り回しが悪いです。将来的に実装されるレイヤードマテリアルを使えば部位ごとにマテリアルレイヤーを分けられます。そうなるとマテリアルレイヤー側にBrickという名前をつけてしまえるので、変数名もそれなりに簡潔になるのかなあとおもいます。
  • 触ってほしくない場所はなるべく定数+コメントにする
    マジックナンバーはあまり推奨したくはないのですが、マテリアルの場合、UVの中心をとりたいので0.5を足すなどのように、特にいじってほしくもない数字を決め打ちで入れることが多くあります。そういったものはなるべく定数化してコメントを入れておくと後で便利です。

用語集

個人的によく使う英語を集めてみました。

状態を表す用語

英語
日本語
Dirt ほこり(による汚れ)
Moss 苔(が生えた)
Moisture 湿り気
雨だれの表記として見かけたことがあるのですが、英語的に正しいのかは不明
Weathering 風化 BrickWeatheringIntencity
Crack ヒビ
Scratch ひっかき傷
Rust さび

影響を及ぼす要素

基本的にはMaterialの基本パラメーターのままですが、省略したりや例外的な書き方をしているので明記しておきます

英語
日本語
Color BaseColorの略
Rough Roughnessの略
Metal Metallicの略
DetailNormal
Wpo WorldPositionOffsetの略 GlassWpo
Ao AmbientOcclusionの略
Pdo PixelDepthOffsetの略

数学的用語

英語
日本語
Texture (どんな)テクスチャ(を貼るか) CrackTexture
Scale 大きさ
Max 最大
Min 最小
Intensity 強度
Amount
Frequency 頻度
Offset オフセット
Ratio 割合
Position 位置
Spread ひろがり AoSpreading:AOがどの程度広がるか
Shift ズレ HueShift

3DCoatで3Dプリント用データを作る~カラー石膏編~

Category : CGTips · No Comments · by 5月 25th, 2015

3DCoatでモデルデータを3Dプリント用データにするまでの手順解説を書きました。

3DCoatで3Dプリント用データを作る(カラー石膏編) from kurosaurus

UE4 読み込んだモデルのサイズや向きが異なっていたら

Category : CGTips · No Comments · by 3月 9th, 2015

UE4でモデルを読み込んだ際、使用しているDCCツールによって軸やサイズの扱いが異なるため、作った通りの方向を向いていなかったり、サイズが10倍単位で異なっていることがあると思います。
そういった場合、モデルの再インポートの変換オプションを使うことで簡単に修正できます。
(スケルタルメッシュでもスタティックメッシュでも可能です)

3D-Coatざっくり解説

Category : CGTips · No Comments · by 2月 15th, 2015

3DCoatの全機能をざっくり紹介するというスライドを作成しました。

3D-Coatざっくり解説 from kurosaurus

Bitmap2Materialで写真から簡単物理マテリアル

Category : CGTips · No Comments · by 12月 2nd, 2014

今回はUnreal Engine 4 (UE4) Advent Calendar 2014の3日目の記事です。

Bitmap2Materialというツールを使用して、写真から簡単に物理ベースのマテリアルを作成する方法について書きます。

物理ベースのマテリアルとはなにかということについては以下に詳細が書かれています。

Unreal Engine | 物理ベースのマテリアル

物 理ベースのマテリアルとは、簡潔に言えばエネルギー保存の法則に基づき、入射光と出射光とで光のエネルギーの総和が等しくなるように設定されたマテリアル です。物理ベースという言葉を聞く前から、デフューズが明るいマテリアルにはスペキュラの値を入れ過ぎないようにしたり、デフューズの値を0.8以上は入 れないようにしていた方は多いと思います。「入射光と出射光とで光のエネルギーの総和が等しい」というとなんだか難しいですが、リアルな絵をつくろうとし た際にある程度自然にやっていたことなんですね。

物理ベースに基づいたマテリアルを使用すれば上記のサイトのサンプルのようにリアルな反 射 表現を使用した絵を作れるようになることもさることながら、CG屋さんにとっての一番の恩恵はどのようなシーンでもマテリアルの再調整を行うことなくライ トの設定で対応できるということだとおもいます。また物理ベースのマテリアルはすごい勢いで標準化が進んでいるので、UE4などのゲームエンジンにかぎら ず、Maya,Maxなどの統合ソフト、3Dペイントツールなどで全く同じ結果が得られるというありがたい環境が整いつつあります。

しか し 物理ベースのマテリアルは、接続されるテクスチャがかなり整理されているとはいえ、BaseColorとRoughnessが必要で、質感表現には NormalMapも欠かせないので、それだけのテクスチャーを作るとなると結構な作業量なんですよね…。なおかつスタッフがおのおの見た目で明るさを合 わせるのではなく、物理的に正しい値を入れるとなると、これまで陰影もデューズカラーに描きこんでいたCG屋さんにとっては、なかなかハードルが高いので はないかと思います。

そこで今回は写真一枚からBitmap2Materialというツールを使用して、陰影を除去した BaseColor の作成とRoughnessとNormalMapの作成を行い、物理的に正しいマテリアルの計測値に(なんとなく)合わせて、簡単に物理マテリアル(っぽ いもの)を作る方法について書いてみたいと思います。

Bitmap2Materialは以下から購入できます。UE4やMaya,Max等に自動で書き出す機能を制限したインディー版は5000円程度で購入できます。登録が必要ですが体験版を落とす事もできます。

Bitmap2Material | Image to Material Generator | allegorithmic

※ Steamでも時々セールを行っているので、少しでも安く手に入れたいという方はセール期間中に覗いてみるといいでしょう。
では制作方法に入ります。

PivotPainter

Category : CGTips · No Comments · by 11月 6th, 2014

UE4にPivotPainterという機能があります。モデルにサブオブジェクトの座標軸と向きの情報を格納し、マテリアル関数でコントロールするための機能です。

この機能を使用しなくてもシェーダーのヴァーテックスオフセットが使えるので、サイン波などで揺らがせることはできるのですが、それだけではすべてのメッシュが均等に変位してしまいます。マスクを当てるなどしてオフセットを制限したり、特定の頂点だけ別の向きに動かしたりということも可能なのですが、プロジェクトごとにその機能を作るのも手間だろうということで、用意されたのがこのマテリアル関数ということなんだと思います。

3DSMax用のスクリプトが提供されているのでMaxユーザーはスクリプトを使用するのが簡単なのですが、ぼくはMaxを使用していないので、せめてどこで制御していればわかれば、手間はかかるけど同じようなことができるのでは?と思ったので調べてみました。

MeshMixerの自立チェック機能

Category : CGTips · No Comments · by 5月 25th, 2014

20140525-mm

Twitterで@LtYpE_AZさんに教えいただいたMeshMixerの自立チェック機能のドキュメントを翻訳してみました。一部意訳が入ってるので間違えてるかもです。間違えていた場合、教えていただけると助かります。

安定性の解析

このツールは、オブジェクトが重力に耐えれるかどうかを確認するために使用されます。

着色された球はオブジェクトの重心です。この球の色はオブジェクトが自立可能かどうかを示します。球の色が赤い場合、オブジェクトが不安定であり倒れることを意味します。球が緑色の場合、オブジェクトが自立できることを意味します。

オブジェクトの下の赤いラインは接触点の凸包です。これらはオブジェクトが地面に触れる場所を意味します。Contact Tolのスライダーでオブジェクトが地面に接触している領域を増減させてください。

重心から降りているラインは、接触面への投影を示しています。このラインが接触点の凸包の中央付近(つまり赤いラインの中心)に当たった場合、そのオブジェクトは最も安定します。このラインは赤いラインのエッジに近くにあたる場合、オブジェクトは簡単に転倒します。

オブジェクトは接触点が(Yは上方向の)XZ平面上にあるように配向されなければなりません。オブジェクトが適切に配向されていない場合は、Align toolを使用してみてください。

グリッド状に面を作成

Category : CGTips · No Comments · by 4月 5th, 2014

一度に面を貼るとき、四角ポリゴンでグリッド状に閉じたい時って多いですよね?
Blenderにはグリッド状に面を貼る機能が備わっています。