一頻りやってみよう

CG全般についてまとめたり

Smoothing Groupってなんだよ

今更ながらタイトルの件について気になったのでメモがてら共有。MayaのSoft/Hard Edgeは知ってる前提で進めていきます。


Maya使いがUEにモデル持っていった時に1回は引っかかるやつ。

UEにモデル持っていったら怒られたしなんか一部黒ずんでるんだけど!?ってなりますよね。SmoothingGroupをオンにしろと言われるので、指示通りExport時にオンにするとMayaと同じ滑らかな見た目になって一件落着となります。

 

でもなんかモヤモヤしない?

急にFBX出力の時だけSmoothingGroupとか言われて、Soft/HardEdgeの設定どこ行ったねんとなります。

 

Maya FBX plug-in は、エッジ情報をスムージング グループに変換し、ファイルとともにエクスポートします

Mayaで調べるとこれだけ書いてあるのでスムージンググループが何なのかを説明してくれてない。そこでスムージンググループについて観測した範囲で説明します。

 

結論:hard/soft EdgeとSmoothingGroupは、どちらも頂点法線を管理、変更するものだが用語とアプローチと処理結果が異なる。

SmoothingGroup・・・3ds maxなどで使われている概念で、面に1つ以上のgroupidを割り当て、共通のSmoothingGroupを持っていた場合に法線を平均化して滑らかなシェーディングを行う.Mayaでは使っていない

https://help.autodesk.com/view/3DSMAX/2020/JPN/?guid=GUID-1DB2E3C2-CE68-4AF7-899E-01B90F7EB320

hard/soft Edge・・・Mayaで、面やエッジに対して法線を共有するか、分割するかを決める。

hard/soft Edge補足1:SoftEdgeの法線ベクトルを決めるアルゴリズムもSmoothingGroupと違う。面法線、頂点角度、面面積の加重平均になる。

normals[normalIndex] += faceNormal * vertexAngle * faceArea;

www.autodesk.com

hard/soft Edge補足2:頂点法線は実データがありますが面法線は実データはなく頂点の番号から自動で計算されます。UEでは頂点法線のみを使い面法線という概念は出て来ないと思います。

note.com

2つは似た概念だが扱われ方やアルゴリズムが違うんですね。そのためMayaのFBXexporterはそれらを変換してSmoothingGroupを使用するUEなどのゲームエンジンに持っていくわけです。なのでMaya上でソフトエッジ/ハードエッジを指定してあげてSmoothingGroupオンにすれば問題ないはずです。

 

実運用上の注意

SmoothingGroupはオンで問題ないのですが、色んなDCCでゲームエンジン用モデルを作る場合や、ハイポリベイクする場合は注意が必要です。以下引用です

 

  • 基本はソフトエッジ、つながったUVIlandでベイクした方が良い結果を得られる
    • ハードエッジはデータ量も増えるので最小限に
    • 接続面の角度が90度を超える場所は、ベイクした結果に歪みを生むのでハードエッジにしてUVを切り離した方が良い
  • ベイク用の低ポリモデルは、エクスポート時に統一された環境で三角分割を行う
  • Mayaのソフトエッジは他DCCでのスムージング状態と異なる法線結果になる。その為、Mayaをベースとしたワークフローを構築している場合必ずMayaでソフトエッジを適用してエクスポートを行う。

おわりに

間違ってたらご指摘ください・・・

これですっきりしました。SmoothingGroupはなんとなくオンにするという運用で間違ってはないのですが中身を知ることで納得感が出ますね。

 

 

 

Houdini-Copy to Pointで姿勢を表現する

こんにちは。今日は少し趣向を変えてHoudini初心者が躓きやすい姿勢制御について紹介したいと思います。

Houdiniを始めて驚くことの1つに、複製のしやすさが挙げられます。メッシュの頂点(正確にはPoint)を用意すればその場所に別のメッシュを配置できます。

なんの変哲もない平面の頂点に..

豚を・・

配置する!

大きさもバラバラに!

コピー毎に大きさをバラバラにすることも簡単です。大きさ以外に設定できるアトリビュートはこちらを参考に。

www.sidefx.com

 

しかしいじり始めて躓くことの1つに、回転がおかしい!というものがあります。どういうことかというと、Point配置用のメッシュを横にするとなぜか豚があらぬ方向を向いてしまいます!

豚が寝転がってしまっている!

上のURLに助けを求めるとこんなことが書いてあります。

???これはどういうことかというと、配置用のPoint側に、アトリビュートを設定して向きを教えてあげないとどの向きに配置していいか分からないよ!ということです。

向きを考えるには配置用のPointと配置するメッシュどちらもルールを決める必要があります。

配置するメッシュ

+Z軸が正面、+Y軸が上方向である必要があります。豚はデフォルトで入っているノードなので正面、上方向がちゃんと合ってますね。メッシュを作る際はこの約束を守って作りましょう。

豚はデフォルトで向きが合っている

配置用ポイント

Nアトリビュート、upアトリビュートを作ります。通常Nはメッシュの法線を表しますが今回は正面を向けたい場所に設定すれば大丈夫です。

今回はZ+方向に正面を向けたいのでAttributeWrangleでNに{0,0,1}、upに{0,1,0}を設定します。

するとちゃんと正面を向いてくれました!

正面方向を変えることもできます

おまけ

と、ここまでで姿勢は制御できるようになったのですが、せっかくなので行列やクォータニオンにも(軽く)触れたいと思います!

Nアトリビュート、upアトリビュートの2つのベクトルを今回作成しましたが「あれ?3次元なんだからベクトル3つ指定しなくていいの?」と思いませんでしたでしょうか。実は2つのベクトルの外積を求めることで最後の1つは計算できます。そのためユーザーは3つ目まで指定する必要がないんですね。

内部的には2つのベクトルから3*3行列を作成しています。出た謎概念行列!と思うかもしれませんが、ここでは3*3行列は回転を制御できると思っていていれば大丈夫です。(ちなみに4*4行列は回転、移動、拡縮を表現します)

とはいえユーザーが姿勢を変えるたびに3*3行列なんて指定してられないので、簡略化のためにベクトルを指定したり、オイラー角(X,Y,Zで指定する角度)を使用したりするわけですね。

他にもクォータニオンというものを使うとクォータニオン同士をなめらかに補間し、最短経路を出してくれたりします。オイラー角だとこうは行かないですね。アニメーション周りでよく使うかと思いますが、こちらは機会があればまた解説しようかと思います。

270度回転するのではなく、-90度回転するだけで済みます。

 

metadataのすゝめ(EUWを添えて)

概要

短い夢を 朝が来れば幻と化す夢を 後先もなくかき集めてしまう 馬鹿な僕らでいようぜ

日食なつこ 音楽のすゝめ

 

こんな気持ちでゲームを作っていきたいですね。

 

さて今回はアセットにつけるメタデータの話です。C++で使うメタデータ指定子とは別の話です。

公式にもページがあるのでここを見ればだいたい使い道が分かると思いますが、思ったより便利ですコレ。あまり解説してる記事が見当たらないので実例を交えて紹介しようと思います。

docs.unrealengine.com

何ができるのか?

こちらメタデータという名前の通り、アセットに対してつける付加情報のことです。ゲームプレイ時には利用できず、開発時の管理などに使える機能となっています。

つけた情報はコンテンツブラウザでフィルターに使えたり、EUWでゴニョゴニョしたりと色々できます。

ただし設定するのにBP,Pythonなどで設定する必要があります。

何も設定されてないとグレーアウトされています。

設定後は設定したMetadataが見れます

なんか地味な機能だな・・

と思った方も多いと思います。「もっとかっこいい見た目が作れる機能紹介しろよ!」と言われるかもしれませんが、コレがなんとも重要な要素になります。

例えば背景アセットが10000個あったとします。その中で「〇〇さんが作ったアセットを探せ!」とか「開発初期で作ったアセットを一覧にしたい」なんてことが稀によく起こります。特に大規模開発なんかでありそうな話です。

 

管理用データ?それならコレで良くない??

pafuhana1213.hatenablog.com

コレですね。はい、これならエンジンコードさえいじれば

  • プルダウンなどいろんな型のデータを作れる
  • ホバーしたときに情報を出せる
  • 検索ももちろんできる

といいとこづくしです。ただデメリットもあって、

  • エンジンに手を入れるためある程度知識が必要
  • 運用が大変
    • 大規模開発になるとエンジニアさんに欲しいタグなどが増えるたびに依頼する必要がある。
    • バージョン更新時の対応も必要です。
  • 設定を効率化したい場合にツールでの設定が考えられるが、BPから読み取れるようにアクセス権を設定する必要があり、運用上問題があるらしい

そんな時にメタデータ

アセットのメタデータならアーティストだけで完結することができ、ツールで効率化しメタデータ設定の手間を最小限に抑えることができます。さらにゲームプレイでは使えないので運用上の安全性も高いです。

 

百聞は一見にしかずということでやってみましょう。EditorUtilityWidgetの基本は知ってる前提で進めます。

UE4のEUW(Editor Utility Widget)を使って簡単にマーケットプレイスのアセットたちのテイストを合わせる - 一頻りやってみよう

実装例1:進捗タグを設定してフィルターに利用する

ポイントとして、UIでComboboxを作って設定値を用意することで設定が楽になります。実装部分もめちゃくちゃシンプルでTag名を指定してComboboxで選んだ値をそのままメタデータに投入してます。

Combobox(string)で設定値を選べるようにします

 

次にコンテンツブラウザで検索できるようにします。といっても簡単で、プロジェクト設定でTag名を指定するだけです。

ProjectSettings-Game-AssetManager-Metadata Tags For Asset RegistryにTag名を指定

これで終わりです。簡単ですね。

コンテンツブラウザの検索は便利で、検索単語が一部でも反応してくれますし、メタデータを設定してないアセットを検索したい!となった場合も演算の反転ができるので以下のように検索すると未入力のものをフィルターできます。

NOT(Progress=完成 OR Progress=要修正)

設定例

詳細検索シンタックス | Unreal Engine ドキュメント

実装例2:外部リンクを設定して飛べるようにする

意外と良くあるのが、アセット制作時のSlackの会話とか社内のアセットライブラリなどのリンクを張りたいというケースかと思います。その場合もメタデータにリンクを貼っておいて後でツール上からアクセスできるようにすることが可能です。

外部リンク設定のEUW

終わりに

今回は管理系データをメタデータに設定しましたが、工夫次第で様々なデータを管理することができます。デフォルトでアセットに入っていないけど開発上欲しいデータはたくさんあると思います。

エクセルで全アセットを管理!となると作業コストがかかりヒューマンエラーの元にもなるのでアセット自体に情報が紐づいてるのは助かります。

今回は紹介しませんでしたがこちらfbxファイルにもメタデータを格納することが可能です!Mayaなどで作成したアセットの補足情報などをUEで管理する場合に便利ですね。

 

 

 

UE4のEUW(Editor Utility Widget)を使って簡単にマーケットプレイスのアセットたちのテイストを合わせる

こんにちは、最近はぷちコン映像編にまた参加していました。その中で、

「時間がないからマケプレのアセット達を使いたいけどテイストが違いすぎて使いにくい!」

となったので元のテクスチャを使用しつつ色味や詳細度を調整できるマテリアルインスタンスに差し替えるEUW(Editor Utility Widget)を作ってみました。マケプレの毎月無料アセットいつも有難う・・以下ができたもの

 

f:id:watarishiki:20220109105930g:plain

概要

冒頭の通りいろんなマケプレのアセットを利用しようとしていたのですが、モデルは様々なテイストで表現されています。

特にマテリアルに関してはただテクスチャを挿してるものから色調整ができるものまで様々です。それらを1つ1つ調整して場合によってはテクスチャを書き直して・・とやっていると時間がいくらあっても足りません。

なんかいい方法ないかなーと思っていたところ下の記事を見つけました!

www.unrealengine.com

とてもいい雰囲気のゲームですが、マケプレアセットを多用してるらしく、EUWでスタイライズして使っているみたいです。

ただ実装方法については言及されていないので今回作成してみました。

EUWの実装

Editor Utility Widgetに関してはいろんな方が記事を公開してくださっているのですが@pokopen_cgさんがまとめ+検証してくださっています!本当にありがとうございます!ここでだいたいのことはわかります。

 

 

先に実装内容ですが、以下のようになっています。

f:id:watarishiki:20220109114635p:plain

blueprintue.com

f:id:watarishiki:20220109115512p:plain

マスターマテリアル

できたもの

f:id:watarishiki:20220109120415g:plain

差し替えたMIで色味を調整する

 

特徴としては、

  • アセットそのもののマテリアルは残したいのでレベル上に配置されたActorを1つ以上選択し、マテリアルをオーバーライドする仕組み

そのため同じアセットの別Actorでもスタイライズしたくないものはしないといったことができます。

  • 元のテクスチャを引き継いで自分で作成したマスターマテリアルのマテリアルインスタンスを複製したマテリアルインスタンスに入れ込む
  • リセットボタンを押すと元のマテリアルが適用される
  • フォルダはアセットごとに自動で作成してそこに入れる

今回はEUWの検証のためマスターマテリアルが簡素なものですが、タイリングに対応したり、他のテクスチャを持ってきたりといろいろできますね!

他にもカスタム深度を使ったスタイライズやポストプロセスボリュームの色味調整で全体を調整なんかができるので組み合わせるとさらに強力だと思います!(誰か解説して・・)

 

編集後記

ちなみにこの機能はぷちコンには間に合わなかったので使ってないです(泣)今回はどんな作品が出るのか楽しみです!

 

 

Substance Painter Livelinkを見つけて導入したらハマって苦労した話

概要

普段MayaとかBlender使う際って

UV展開+FBX出力ーSubstancePainter(以下SP)でテクスチャ作成&出力ーマテリアルを作成し各テクスチャを読み込んで割り当てるという流れだと思う(もっといいやり方あったら教えて欲しい)んですが、手作業はきついなーと前々から思ってました。ワークフロー改善したい!と検索したら良さげなのがあったので導入したらハマったというお話です。

gumroad.com

 

結論:導入できたけどだるかった

結論だけ言ってしまうと日本語のパスがプラグインから読み込めないので別パスから読み込むようにして解決しました。

 

本文

このライブリンク(プラグインの中でもツール同士を連携させるもの)、modelinghappyさんからも不穏な感じで紹介されてて、不安ではありました。

modelinghappy.com

記事内でもその後どうなったかはわからない。。。

で実際購入してみると複数バージョンがあり、バージョンによってインストール手順が違うので気をつけてください。

Youtubeチャンネルでインストール手順も解説してくれてます。

www.youtube.com

インストール手順は

1.SPにプラグインのインストール

2.各DCCツールへのインストール

となります。自分が入手したのはxol_splink_2_1_14_WINで1については以下のYoutube道理やればできたので説明割愛します。

https://www.youtube.com/watch?v=wLfbaxJKoYA&list=PL0Y5mOfvERUlSa4ZekRgz7i0Kr5XNUI_c

問題は2.で、SPから各DCCのインストールフォルダを自動で検知してくれます。便利なのですが、パスが

C:\Users\ユーザ名\OneDrive\ドキュメント\maya\2019

のようにドキュメントと日本語のパスが混じってたら要注意です。逆に混じってなければキレイな環境をお持ちなのでサクッとインストール終わると思います。

で、自動インストールもしてもらってMayaにシェルフが追加されているので呼び出そうとするとエラーを吐いてしまします。

UnicodeDecodeError: 'ascii' codec can't decode byte 0x83 in position 24: ordinal not in range(128)こんな感じのエラーが自分は出ました。

ASCIIというのは英語圏で使われる文字コードなのですが、

文字コードとは?~UTF-8はパソコンの世界共通語~|データ分析用語を解説 - GiXo Ltd.

そいつが変換できない文字があると言ってます。これ割と日本の開発環境あるあるなのですが、ファイル名とかパスに日本語を入れると動かないことがあります。絶対ダメではないのですがプログラムがASCIIを使用していると問題になることがあります。ちなみに日本版のWindows10を使ってるとドキュメント系のデフォルトのパスが上のように日本語(なぜ!!!????)が混じっていて、これが悲劇を生むことがあります。

今更Mayaに通ってるパスを変更すると他のところで影響が出そうなのでそれはできません。

そこでMayaにパスを追加しようと思います。(Mayaがプラグインを読み込む先を追加してあげるということ)

まずMaya.envというファイルを探して編集してあげます(自分はC:\Users\ユーザ名\OneDrive\ドキュメント\maya\2019の下にありました)

ここで

MAYA_PLUG_IN_PATH=C:\Users\ユーザ名\Documents\maya\2019\plug-ins; 

のようにどこでもいいのですが、日本語のないパスを選択して追加します。この直下に先程自動インストールの際にインストールされたxol_splinkフォルダをコピーします。そのままだとplug-insフォルダ直下に.py or .melファイルがないためxol_splinkフォルダ以下にあるプラグインの実態を読み込んでくれません。

そこで適当にuserSetup.pyとでもpyファイルをplug-insフォルダ直下に作ってあげて

from maya import utils
import xol_splink

utils.executeDeferred(xol_splink)

 

 と入力してあげます。正直このコードの部分は自信がなくて、Warningとか出てしまいます。。つよつよな人教えて。。大事なのはimport xol_splinkの部分で、xol_splinkフォルダまでの道筋を付けてあげることでMayaが読み込んでくれるようになります。

ここまできたらMayaを起動し、追加したパスとpyファイルがPluginManagerに追加されていることを確認します。Loadedをチェックすると無事プラグインが読み込まれ、XolSPlinkシェルフから起動ができるようになりました!!

f:id:watarishiki:20210224161800p:plain

まとめ

いかがでしたでしょうか。同じく苦しんでいる人の役に立てれば幸いです。

その後BlenderとSPとか、MegascansとMayaとか連携しましたので需要と機会があれば所感でも述べようかと思います。

正直UE4とSPのライブリンクと比べると見劣りしてしまいますが、かなり行き来が楽になったなと感じます。MegascansやHoudiniと合わせて面白いことができそうだなーと感じますね。

 

 

ぷちコン映像編2nd応募完了&ひとりポストモーテム

 

ぷちコン映像編2ndを終えての感想&反省

ぷちコン映像編https://historia.co.jp/ue4petitcon-mv2が終わりまして(発表はまだですね)色々反省とかが出てきたので書き留めたいと思います。こういうコンテストっていうんですか、出るのは11月のUnrealFestのゲームジャム以来2回目なので右も左も分からない状態でした。

色々苦労しましたが作りながら#UE4ぷちコンのハッシュタグでツイート見てるだけでも楽しかったし1つ完成させただけで達成感最高でした!ヒストリアさんありがとうございました(あとブログ記事いつも参考にしてますありがとうございます)

 

 

 

 先に結論から

風呂敷広げすぎた。

この一言に尽きます。テーマ発表があってからこんなガントチャートを作成して計画を立てていきました(初めてのこんなの作ったので適当ですが)

f:id:watarishiki:20210112154104p:plain

ガントチャート

f:id:watarishiki:20210112154310p:plain

実際の作業

行ったり来たりを繰り返し、なんだったら5日くらい前にやり直しになったり。。。

こんな切羽詰まったのはやりたいことを詰め込みすぎたのが100割くらいの要因です。

  • QuixelのGoddess Templeかっこいいなあ!こんな感じの作りたい!

から始まり、

  • RVTっていうの使うとめっちゃいい感じのレベルができるぞ!勉強してみよう!
  • やっぱ焚き火は欲しいしエフェクトといえばHoudini!勉強!
  • iCloneとCharacterCreator買ったけど出番ないしここでフォトリアルキャラクター使ってみよ!
  • レイトレ!服作成!新機能Groom実装!etc..

こんな感じで、使ったこともない機能を盛り盛りにしようとしてしまいました。結果どうなったかというと

  • RVT結局実装できない。。境界が滑らかにならない。。
  • えっHoudiniからNiagara、Indie購入しなきゃいけないしプラグインがまだUE4.26非対応?(結局Houdini Indie購入した)
  • iClone重いんじゃあ

などなど、詰め込みすぎた理想の作品に初心者が押し潰されていきます。

 

身の丈に合った機能に削ぎ落とす

これらの新機能や未学習分野の勉強はとてもためになったしこのぷちコンの1つの目標でもあったので良かったのですが、いかんせんこのままだと締め切りに間に合わないため機能を制限していきました。

  • そもそもストーリーを書き換えて、できる実装の範囲からストーリーを構築する
  • Groomは物理の設定が難しくて描画負荷も高い(GPUプロファイルで分かった)わりに画面に占める割合が低いのでシミュレートオフに
  • エフェクトはNiagaraサンプルのパラメータ変えただけ
  • IKは断念。アニメーションは最小限に
  • これらがバレにくいようにカメラワークで誤魔化す

こんな感じで色々削ぎ落としてプリビズの映像を作るくらいの気持ちで(作ったこと無いけど)早めに完成させていきました。その上で時間に余裕ができたため、実装したい機能からコスパ(かけた時間に対して見た目にどれくらい反映されるか)が高そうなものを優先的に実装していきました。

  • 流血表現は実装したかったのでVATで
  • スコップをIKでもたせる(これは結局断念)

など。

まとめ

こうして書き出してみると初心者がやりがちってよく言われることだよなと思いつつ結局ハマってしまいました。それでも軌道修正のおかげでなんとか応募できました。

次回はやること、やらないことを明確にしつつスモールスタートでやっていければなと思います。

今回できなかったRVT,リグとアニメーション周り、レイトレあたりはどこかで解決したいなあ。