蒼水技術録

蒼水家技術録

蒼水が普段制作とか勉強とかして覚えたことを復習としてまとめてるものです。 それが最適解かどうかはわからないけど、何を目的として始めて、何が必要で、実際何をやって、どうなったか、まで全部過程を残すための技術ブログです。

Blender Tips編 #8 -データ転送モデファイヤと法線転写 基礎編-

どうも蒼水です。前回からだいぶ期間が空いてしまった...。

それはさておき、今回は法線転写に関してまとめておこうかなと思います。

今回の目的

メッシュ本来の法線ではなく、別のオブジェクトから法線情報を持ってくることができるんですが難しそうに見えて結構お手軽にできてしまうんですよね。
そこで今回は2つのオブジェクトを用意して片方からもう片方に持っていくことを目的とします。

よく使われているのはキャラクターの顔ですね。
本来のメッシュの法線をそのまま使ってしまうと、ライティングしたときに顔にでる陰影が良くないため法線編集が行われる傾向にあります。

例えばこんな感じに球と立方体があったとき....

f:id:Yui_Aomi:20201031154821p:plain
法線転写前

転写するとこうなる

f:id:Yui_Aomi:20201031155005p:plain
転写後

法線情報/編集って?

法線...数学...ウッ....
とかまぁそこまで気にすることはないのですが一応前提として必要な知識なのでちょっとだけ法線の解説。

一言で言えば各面に対して90°の線、つまり下記画像の青い線です。
Blenderではここで視覚的に法線は確認することができます。
*編集モードでのみなので注意

f:id:Yui_Aomi:20201031155603p:plain
法線を視覚的に表したもの

編集を行わない場合は各面からこのような法線の情報が全ての面に定義されています。
しかし、法線編集を行うことでこれとは違った意図的な法線情報を持たせることが可能です。
今回はそれを行っていくわけですね。

法線転写の準備

デフォルト状態ではカスタム法線が有効になっていないため法線編集が行えない状態になっています。
そのためまず下の画像の場所、プロパティの頂点データの中にあるノーマル(法線)の自動スムーズにチェックを入れておきます。

f:id:Yui_Aomi:20201031160357p:plain
自動スムーズにチェックを入れる

法線転写元、転写先のオブジェクトの用意

今回は手順解説のためシンプルにこの球と立方体で行います。
f:id:Yui_Aomi:20201031161600p:plain
が、実践的な話をすると例としては

  • キャラクターの顔メッシュと球体(orカプセル的な形状)のメッシュ
  • ハイポリとローポリ

などの2種類のメッシュを準備しましょう。
次の記事で実際にキャラクターに編集を施したものの記事を別途執筆予定です。

実際に転写する

まず用意した二つのオブジェクトをこんなかんじで重ねた状態にし、転写先のオブジェクトにデータ転送モデファイヤを選択します。
ものにもよるんですが、基本転写元にするオブジェクトが転写先より大きくしておいた方が安全な気がします。(覆う感じ)
ちなみに重ねずにズレた状態で転写を行うときちんと転写されないので注意。

f:id:Yui_Aomi:20201031162025p:plain
重ねた後データ転送モデファイヤを選択

その後モデファイヤの設定をこのように設定します。
元オブジェクト→転写元のオブジェクトを指定
面コーナーにチェックを入れ、カスタム法線を有効にする

f:id:Yui_Aomi:20201031162329p:plain
モデファイヤの設定

カスタム法線を有効にした時点で法線転写が行われていることが確認できます。
f:id:Yui_Aomi:20201031162425p:plain

法線がきちんと転写されていることが確認できたらモデファイヤを適用します。
適用後は転写元にしたオブジェクトは不要のため煮るなり焼くなり消すなりして問題ありません。(自分は一応残しておいて非表示にしています)

転写自体はこれだけで良いのでめちゃくちゃお手軽ですね。

次回の記事では先ほど軽く触れましたが次回はキャラクターの顔の法線編集とUnity上でどれくらい出方に差が出るかをまとめてみようと思います。

まとめ

転写元と先のオブジェクトを2つ用意して転写先にモデファイヤ適用してヨシッ!
今回はデフォルト機能で行いましたが法線編集系のアドオンとかも結構あって便利なんですがそういうのも今後扱ってみたいなぁ

では。

前回
atelier-aomi.hatenablog.com

次回
リンク作成予定

Blender Tips編 #7 -Blenderの自動保存と復元-

どうも、蒼水です。
Blender落ちたァ!」とかあるあるではないでしょうか。
スゥッ...と音もなく落ちるBlenderくん、優秀なのでほぼ無傷で復旧できることはご存じだろうか?
今回はそれに関してまとめていきます。

今回の目的

冒頭でも書いた通り、強制終了とそこからの復旧をどうするか。
といったことが今回の目的になります。
突然の死は実は傷は浅いのです。知らないと損するやつですね。

そのための復旧方法や設定周りの解説をして行ければと思います。

自動保存の設定を行う

この自動保存機能ですが、インストールした初期の状態でOnになっている状態で何もしなくても保存してくれています。神ですね。
保存場所は以下の場所に【ファイル名】_【プロセスID】_autosave.blnedという名前で保存されます。
C:\Users\(ユーザー名)\AppData\Local\Temp\

設定項目ですが、上部メニューの【編集->プリファレンス】から設定できます。
f:id:Yui_Aomi:20200628221408p:plain
f:id:Yui_Aomi:20200628221418p:plain
一時ファイルの自動保存にチェックを入れることでONになります。切れば自動保存はされません。
特にOFFにする理由もないので基本ONにしておくことをお勧めします。
タイマーは保存する間隔になります。デフォルトでは2分おきに保存してくれるので万が一突然の死を引き起こしても2分程度の傷で済みます。
神ですね...。
いや、そんな短い間隔でいらんよ~という方はここの数値を調整することで感覚の変更は可能です。
最短感覚で1分で、それ以下はできないみたいです。

(逆にこの性質を利用してちょっと弄ったけど戻りたい!とかにも使えたりはしますね。ちょっと扱いは難しい気はしますが....。
例えば10分くらいに設定しておけば「あっ、アンドゥであそこまでもう戻れない...」な時に10分巻き戻すことができたりとか...。)

実際に復元する

復元を行う際は【ファイル->復元->自動保存...】から一時データを開けます。
f:id:Yui_Aomi:20200628221304p:plain

Blender落ちたァ!!!と思ったらとりあえずこの自動保存の一時データがあるので試してみると良きですね!

余談

【ファイル->復元】の項目にある最後のセッションというものもあるのですが、これも自動保存されているものですが、最後に開いていたblendデータを開けます。
前日やったデータを翌日に、という時とかは使えそうな気はするのですが、基本自分で名前つけて保存したblendデータから開くのであまり使わないなぁという印象です。
ちなみにこのデータはquit.blendという名前で自動保存と同じ場所に保存されています。

まとめ

Blenderが突然の死を!?
安心したまえ、Blenderくんは賢いので適宜自動で保存してくれている。
復元すれば傷は浅い...。

では。

前回
atelier-aomi.hatenablog.com

次回
(リンク作成予定)

Blender Tips編 #6 -BlenderのシーンをVRで見る-

どうも蒼水です。
さて、BlenderがLTSとなる2.83が正式リリース来ましたねぇ。
今回のバージョンの目玉はなんといってもVRとクロスブラシでしょうか。

で、今回はVRの方取り上げていこうかなぁと思います。

今回の目的

BlenderのシーンをVRで確認すること。
今まではUnityにモデルを持ち込んで...マテリアル設定して...配置して....ビルドして....とまぁVRでのルックやバランスの確認するのに大変手間であったんですが、これが来たことにより大幅に楽になりますねぇ!
ありがとうBlender....。

VRモードの使用方法

公式からリファレンスが出ているのでこちらを参照していきましょう。
wiki.blender.org

対応機種(HMD)ですが現在はOpenXR(Oculus/WindowsMR/Monado)に対応されているみたいですね。(ViveやValveIndex等のHMDは未対応とのこと。)
またNotesにあるように条件があるみたいなので自分の所持してるものに合わせて従いましょう。
docs.blender.org

上記には対応機種としてOculusRiftとありますが、理論上それと同等であるOculusQuestのLinkで再現可能であり、実際こちらで動作確認を行いましたが問題なく動作を確認できています。
Questはいいぞ。買おうな。
Linkの使用方法は以前執筆していますので是非参考にしていただければと思います。
atelier-aomi.hatenablog.com

では本題。
まず、このVRモードは扱いとしては公式アドオンとなりますので【編集->プリファレンス】からアドオン設定を行います。
検索欄にvrとか入れれば VR Scene Inspectionというアドオンが出てきますのでこちらのチェックボックスをONにして有効化します。
一応まだプレビュー版とのことらしい。
f:id:Yui_Aomi:20200621182306p:plain

次に、アドオンの有効化がなされるとビュー右側、Nキーを押したときに出てくるタブの中にVRというタブが追加されているのでこちらから操作します。
f:id:Yui_Aomi:20200621182509p:plain

Oculus QuestではLinkが有効になっていることを確認後、Start VR Session を押下することでHMDにビューが表示されます。
ね?簡単でしょう?成功するとこんな感じになります。
f:id:Yui_Aomi:20200621183529g:plain

補足ですが、PC側での操作はリアルタイムでHMDにも反映されるらしい。

各種設定項目に関して

VRモードの使用はできたかと思いますがいろいろ設定ができるみたいです。
これらに関してみていきましょう。
f:id:Yui_Aomi:20200621182738p:plain

VRセッション

こちらには先ほど使用したボタンのほかにポジショナルトラッキングという項目があります。
これの違いは3DoFか6DoFか、くらいのことっぽいです。
Onの時は6DoFです。頭を左右前後に動かせばきちんと動くいつものです。
Offの時は3DoFです。Goと同じ感じですね。位置は固定です。

ビュー

床はグリットの表示非表示だけですね。モデル見る際は消してたほうが良いかも?
アノテーションは見てみたけどよくわかりませんでした...なんだろう、今後なにか出てくるのだろうか...。

範囲の開始/終了、これは描画範囲ですね。
例えば0~10mに範囲設定するとそれより外側のメッシュは描画されません。
視点を中心に球状に範囲が展開されています。

ランドマーク

これは視点設定になります。
デフォルトのままであればシーンに配置されているカメラにVR時の視点が設定されます。
複数視点設置したい場合は+を押してランドマークを追加し、タイプをカスタムタイプにします。
そのあと2個目のカメラを設定してやることでVR時の視点を切り替えることができます。
f:id:Yui_Aomi:20200621183405p:plain
切り替え時は☆マークを押して切り替えることができ、下GIFの様な挙動を取ります。
f:id:Yui_Aomi:20200621183444g:plain

ビューポートフィードバック

VRカメラを表示というのはこれです。青いカメラのワイヤーがそれです。
Onにするとこいつが出てきます。
f:id:Yui_Aomi:20200621183810g:plain

VRセッションをミラーリングHMDに見えている視界をBlenderの画面に反映してくれます。最初の方に貼ったGIFがその挙動ですね。
他人とかに何を見ているか見せたいときとかはこれをOnにするといった使い方ですかね~。

注意点

あくまでもこのモードは現状VRでみることのみ行うことができます。
VRのままコントローラーを使ってモデリング....とかはできないみたいです。今後に期待したい...。(改造すれば行けるのか....?)

まとめ

いちいちUnityでビルドして~とかめんどくさいことをしなくてもBlender内でルック確認まで完結できるようになった。神。Thx Blender....
Questはいいぞ。給付金でQuestを買うとおつりがくるので実質無料。買おう?(圧力)

前回
atelier-aomi.hatenablog.com

次回
atelier-aomi.hatenablog.com

Blender Tips編 #5 -Auto Rig Proと戯れる その1 リターゲット-

どうも蒼水です。
今回は前回モーションに関してちょろっと触れたのでそれと関連してリグ周りに関してアドオン紹介もかねて触れていこうかなと思います。

今回の目的

今回は有名なアドオンである「Auto Rig Pro」をいじったのでそのまとめをしてく感じになります。
めちゃくちゃ便利ですよこのアドオン。
こちらから購入できます($40)
https://blendermarket.com/products/auto-rig-pro

いくつか機能があるんですが、メインであるキャラモデル等にお手軽にリグを入れる機能はいったん置いておいて、モーションをリターゲットもできてしまうこのアドオン。
その部分に今回は触れていこうかなと思います。

そもそもリターゲットとは?

「リターゲット」というのは簡単に言うと、既にできてるモーションデータや、キャプチャスタジオ等で収録したモーションを別のモデルに流し込むこと、というかんじです。
前回の記事でも触れましたがモーションデータは決まったボーンのみで構成されており、キャラモデルで作ったボーンとは命名や構成が異なっていることが多いです。
それをどこの骨がどこの骨と対応しているかを指定し、適用することで別のボーン構成をしたモデルへモーションを流し込んで使用できるようにします。

なぜリターゲットを行うかといえば、UnityにおいてはHumanoidを利用すれば人型のモデルでのモーション流用は比較的楽にできることはご存知の方も多いかと思いますが、弱点として細かい部分の調整ができなかったりで思った挙動と違う挙動を取ってしまう可能性があること。
またモーションキャプチャなどで収録したデータにはノイズも結構多いのでその際の修正する過程で必要になったりするものです。
そこまで気にしなければそのまま使ってもいいと思うんですが、いやいや....と満足いかない場面結構多いです。とくにモーキャプの生データ。あれは修正不可避ですね...。
腕や足がぶっ飛んだりすることが結構あるので、そのノイズの除去のためにいったん流し込んだりします。
リターゲットは必須ではなく、もとのボーンの方で修正しても良いのですがUnityで流し込んだ際にズレたりすることもあるのでリターゲットして上げたほうが確実にきれいで確実にできるなぁという個人的感想があります。

BVHのインポート

前回の記事で触れたので軽く流しますが、以下の設定でまずはBVHをインポートしましょう。
Blenderでモーションデータ扱うならFBXでも良いですがモーキャプデータに限っては必ずBVHを使用したほうが良いです。
f:id:Yui_Aomi:20200427201427p:plain

BVHのインポートとターゲットになるキャラモデルを並べるとこんな感じになります。
f:id:Yui_Aomi:20200429004427p:plain

Remap機能を使用する

Auto Rig ProをインストールするとNで表示される右側のバーにARPというタブが追加されています。
その中のRemapというものを今回使用していきます。

作業に入る前に一点注意。
元のボーンとターゲットにするボーンのサイズはだいたい合わせておくこと。下記のようにだいたいで良いです。
Auto Scaleでも自分で合わせてもOKです。前者だと多少ズレることもあるのでSキーで自分でやるほうが確実な気がします。
f:id:Yui_Aomi:20200429010113p:plain

では実際に作業に入ります。
Source Armatureにはリターゲット元となるBVHデータのボーンを。
Target Armatureにはリターゲット先となるキャラモデルのボーンを指定します。
f:id:Yui_Aomi:20200429005945p:plain

次にBuild Bones Listボタンを押して出てくるボーンのリストがきちんと対応してるかどうか確認します。
まぁ一発できちんと対応してくれるはずもなく....おかしなところは自分できちんとマッピングしていきましょう。
マッピングが終わったら最後にRootになるボーンにだけSet as Rootのチェックを入れてやります。
今回は元のデータにRootがない関係でHipsがRootになるのでこいつにチェックを入れてやります。
f:id:Yui_Aomi:20200429010312p:plain

これでリターゲットの準備が整いました。
最後に▶Re-Targetボタンを押してリターゲット完了です。
リターゲット後きちんとポーズをとってくれない場合はどこかしらミスってます。ボーンの指定を見直したりしましょう。
リターゲットは結構重くて時間がかかりますが、待ちましょう。


無事成功すると下の画像のように同じモーションをとってくれるようになります。
ここからノイズ除去やら細かい調整とかをしていく、というフローになりますかね。
リターゲット後はもとのArmatureはもう必要ないので消してしまって問題ありません。
f:id:Yui_Aomi:20200429010448p:plain
だいたいあってるけど微妙になんか変だな....という時はInteractive Tweaksで調整してやるといい感じになります。

修正作業はグラフエディタで行います。
上部にあるレイアウトをAnimationにして、左上をグラフエディタにしたものが下画像。
f:id:Yui_Aomi:20200429010554p:plain

当たり前なのですが、全フレームにキーが打たれておりウッ....ってなります。
このまま修正作業などを行っても良いのですが、Blenderには間引きをしてくれるアドオンが標準で入っています...!
【編集→プリファレンス→アドオン】から検索で「Curve」とかで検索してみてください。
Add Curve: Simplify Curves+というのが出てくるのでこれにチェック入れるだけで使えるようになります。

使い方はいたってシンプルで、ボーンを選択した状態で実行するだけです。
今回は全ボーンに行いたいので全選択した状態で実行します。
実行方法はF3キー(検索ボックス表示)で「Simp~」と打てば候補にSimplify F-Curveが出てくるのでそれをクリックすれば処理が走ります。(結構重いです。)
処理が終わるといい感じに間引かれたのが確認できます。
間引く量は任意で設定ができるのでDistance Errorの数値を設定します。
おすすめは「0.05~0.1」あたり。これ以上にするとだいぶモーションが崩れてきます。
間引いたものが下画像。
f:id:Yui_Aomi:20200429011014p:plain

だいぶ間引かれたことでカーブの制御とかもやりやすくなりますね。
あとはぶっとんだキーの削除や、カーブの調整等きれいに動くように調整してやりましょう。

まとめ

Auto Rigはいいぞ。買おう。

リターゲットしたいときはAuto Rig Proにおまかせ!
めっちゃ簡単にできますね。大変お世話になっております。

次回でお手軽リグのセットアップを扱いたいなぁと思っております。
では。

前回
atelier-aomi.hatenablog.com

その2
(これを次回にしたかったけど忙しくてたどり着けなかったので2書いたらリンク張ります...)

次回
atelier-aomi.hatenablog.com

Blender Tips編 #4 -BlenderとUnityのやりとり覚書その2(リグ/モーション)-

どうも蒼水です。
今回は前回から引き続きリグ/モーションのBlenderとUnityのやりとりに関して書いていきます。

今回の目的

Blenderで作成したモーションをはじめ、外部から持ち込まれたモーションデータ(FBX/BVH)などを編集してUnityとやりとりに関してデータの扱い方に関してまとめていこうかと思います。
モーションになってくると外的要因が増えてくるのでそこも踏まえてまとめていきます。

ちなみに外的要因というのは主にモーションキャプチャーデータのことになります。ほかmixamo等からデータを持ってきてインポートして使う、といった場合のことです。
この際インポート設定もきちんと確認しておく必要もあります。

リグ、およびモーションデータ形式に関して

まず前提知識としてこれらに関して確認しておきます。
データ形式としてはFBXとBHVが主になります。

▼FBX形式に関して
最終的にはUnityに持ち込む際はFBXで出力します。
キャラモデルであればメッシュと一緒にボーン(リグ)も出力しますよね。
モーションであればボーンのみをFBXで出力し、Unity側でAnimファイルとして流し込みます。(Humanoidの場合)
Humanoidではない場合はGenericとしてメッシュと一緒に出力してやる必要があります。

▼BVH形式に関して
個人でいろいろやってる方の場合めったに見ることがないであろうこの形式。
結論から言えばモーションキャプチャデータです。Blenderでは標準で読み込めるようになっています。

OptiTrackやVicon等モーションキャプチャシステムを使用し収録、出力されたデータです。いわばモーションの生データみたいなものです。
中身はHumanoid型のリグと全フレームにキーが打たれているモーションデータになります。(長いものだとめっちゃ重い)
(余談ですが、キャプチャデータそのものはほぼ確実に修正が必要になるためそのまま使用されることはあまりないです。)

つまり、今回想定する流れとしては以下の通り。
パターン1:Blenderで作成→FBX(完成データ)
パターン2:BVH(元データ)→Blenderで編集→FBX(完成データ)
パターン3:FBX(元データ)→Blenderで編集→FBX(完成データ)

次項からそれぞれに関して掘り下げていきます。

パターン1:Blenderで作成→FBX(完成データ)

こちらに関してはエクスポート設定だけしっかりなされていれば特に問題ないためエクスポート設定だけ記載します。
(とはいえ拡縮とかはフリーズしたくなりますね....一応しなくても問題はないんですけども...)
f:id:Yui_Aomi:20200427200117p:plain
基本的には前回のモデルと同じですね、理由も同じです。
一点補足するといえばリーフボーン追加のチェックを外しています(デフォではチェック入っています。)
理由としてはなくても困らない、余計なボーンは入れたくない、という理由から外しています。
これは各ボーンの末端(各階層の一番子の子生成される)に1つ追加されます。ボーンが増えると負荷上がりますからね...。というかこれBlender特有のものっぽいですね。

パターン2:BVH(元データ)→Blenderで編集→FBX(完成データ)

こちらはモーションキャプチャデータを扱う方向けの内容になっていますので関係ないぜ!って方は飛ばして下さい。

まず前提として各キャプチャシステムにおいてはFBX/BVHどちらでも出力が可能ではあるのですが、BlenderではFBXで書き出されたモーキャプデータを読み込むとだいたい正常に読めこめない場合が多いです。
そのため必ずBVH形式で出力してそちらを読み込んで使用します。
インポート設定時点できちんとしておく、同じHumanoidに複数モーションを扱う場合は設定も全てのデータで統一しておくことが大事です。
(でないとUnityでめんどうなことになります)
インポート方法と設定は以下の通り。

f:id:Yui_Aomi:20200427201327p:plain
BVHの読み込み
f:id:Yui_Aomi:20200427201427p:plain
BVHのインポート設定
設定に関して確認していきます。

▼拡大縮小
デフォルトでは1になっていますが、前回扱ったスケール100倍問題もあり外部データをBlenerで扱う際は基本的には1/100にして使用します。
(動作面で言うと別に大きいままでも流し込んだらきちんと動くので必須ではない...けどサイズ感は合ってたほうがいいかなというお気持ち)

FPSのスケーリング
これはBVHのFPSではなくBlender側で設定したFPSにBVHを合わせてくれます。
個人的にはBVH側に合わせているためここはチェックしません。
余談ですが、BlenderのシーンFPSは以下の場所から設定することができます。

f:id:Yui_Aomi:20200427202355p:plain
シーンFPSの設定

▼シーンFPSを更新
これは各システム側からBVHを書き出す際にフレームレートを設定できるのですがBVH側に合わせる場合にチェックを入れておきます。
ちなみに高FPSで書き出してしまうとPCスペックによってはBlenderが音もなく落ちたり、読み込みに異常なほど時間がかかったりします。30FPS以内くらいで書き出すのが良いかなと思います。

以上を設定しておくことできれいな状態でBlenderにデータを読み込むことができます。

あとは編集/修正作業を行い、パターン1と同様の設定で出力してあげればOKです。
BVHで読み込んでも書き出しはFBXです。

f:id:Yui_Aomi:20200427200117p:plain
同様にこの設定で出力

パターン3:FBX(元データ)→Blenderで編集→FBX(完成データ)

これは主にmixamo等からFBX形式で配布されていてるモーションデータをBlenderで読み込んで何かしたい場合です。
mixamoにはかなり多くのモーションデータが配布されているので興味ある方は是非。
Adobeアカウントがあれば誰でも無料で利用ができる、はず。
www.mixamo.com

デフォルト設定でインポートしてしまうと正常に読み込まれないため以下の設定でFBXをインポートします。

f:id:Yui_Aomi:20200427204356p:plain
FBXのインポート設定
メインの方はデフォルトのままで、アーマチュアの方のチェックを全て入れておきます。
これで正常に読み込むことができます。
以下画像からキーフレームが打たれていること、ボーンが正常な向きをむいていることが確認できます。
メッシュもついてきますが、キャラ等に流し込む場合はこのメッシュは不要のため、書き出し時はボーンのみ選択して他同様に設定して書き出しを行いましょう、
f:id:Yui_Aomi:20200427204535p:plain
読み込みが正常に完了

まとめ

エクスポート設定は基本的には全て同じです。
インポート設定は元がFBXかBVHかで変わってきますので、適宜設定すればOK。

Blenderモデリングだけでなくモーションも十分扱えていいぞ~。
では。

前回
atelier-aomi.hatenablog.com

次回
(リンク作成予定)

Blender Tips編 #3 -BlenderとUnityのやりとり覚書その1(モデル)-

どうも蒼水です。
今回はBlenderでデータ作成してUnityに持っていく際のエクスポート設定のお話になります。
これに関してはモデルとリグ(モーション)に関して書きますが、今回はそのうちモデルデータのみにいったん絞ります。

今回の目的

Blenderでモデルをエクスポートする際に何も考えずにデフォルト設定でエクスポートするとUnityに持って行った際ちょっと面倒なことになるんですよね。
いわゆるスケール100倍問題とかって言われたりするやつです。
ついでなのでデータ作成時に気を付けつけたほうがいいかな~的なものいくつかまとめていこうかと思います。

ちなみに扱いやすいデータ、扱いにくいデータの違いは下の画像みたいな違いになります。
赤枠で囲っている部分が良くない部分です。
f:id:Yui_Aomi:20200426231616p:plain

データ作成時に意識すること/大事なこと

まず前提のお話になります。

これに関しては正解というものはないと思うのですが、蒼水が個人的に扱いやすさを考えた上で気を付けていることとして書いていきます。
要素としては以下のこと

  • Transform値が全て1(or 0)であること、かつ寸法も正しい状態になっていること。(フリーズ)
  • 原点がきちんと設定されていること。
  • 英字のみで、2バイト文字を使用しないこと
  • 命名に規則性があること。

主にこのあたりになります。では次項からもっと掘り下げて見ていきます。
(そもそも造形が~テクスチャが~とかそういう話ではなく、あくまでも扱うデータとしてのお話になりますのでそこは今回は考えないものとします。)

2バイト文字と命名に関しては、ただ名前変更すればよいだけなので今回は割愛します。

Transform値のフリーズ

この時点でオブジェクトの寸法は合わせておきましょう。
Blenderではフリーズという言い方はあまり聞かないのですがMAYA等でフリーズと呼ばれているものと同じです。
現在の位置/回転/拡縮を0または1などきれいな状態にします。

f:id:Yui_Aomi:20200426232250p:plain
値のフリーズ
上画像のように上部メニューから【オブジェクト->適用(Ctrl+A)】からそれぞれ選択したものをフリーズできます。
原点がしっかり設定されており、かつ(0,0,0)にある場合は全トランスフォームを適用してしまって問題ないかと思います。
そうでなければ基本回転と拡縮だけ適用してください。
*位置まで適用してしまうとオブジェクトの位置がそのままに原点だけ(0,0,0)に飛んでいきます。もとからそこに設定されていればヨシッ!
これを行うことで乱れていた各値が下のようにきれいになっていることが確認できます。
f:id:Yui_Aomi:20200426232722p:plain
適用前後
*今回は回転はもともと0だったので変化ありませんが、適用することで0にすることができます。

原点設定に関して

原点位置、結構これ大事なんですよね。
なぜかというとアニメーションを作り始めると実感できると思います。

原点位置の考え方

考え方としてはこんなかんじ
f:id:Yui_Aomi:20200426233555g:plain
左:中央に原点
右:底に原点

例えば上画像の様な柱を作成したとして、これをゲームエンジンに持って行ってスケールをいじって配置したい!というシチュエーションがあったとします。
左の状態では上下に伸びてしまい下の位置が揃わない、めんどくせーってなっちゃうんですよね。
なので右の状態にすることで上方向にしか伸びないようにすることで下をそろえたまま拡縮できるわけです。

今回の剣で言えば剣は持ち手部分を中心に回ってほしい!と思ったのでそこに原点を持っていくことでそれを実現することができます。

作成するオブジェクトによって用途は様々なため、シチュエーションに合わせて原点位置を考えて設定していくようにしています。

原点設定方法

では実際に原点を設定していきます。
原点設定は上部メニューから【オブジェクト->原点を設定】から行います。

f:id:Yui_Aomi:20200426234520p:plain
原点を設定
いくつか種類がありますが、自分が良く使うのは

  • 原点を3Dカーソルへ移動
  • 原点を重心に移動

ですね。
とくにに融通が利かせやすいのは3Dカーソルへ移動です。
言ってしまえば指定した場所狙い撃ちで原点設定が可能です。
重心に関してはそのままの通りです。オブジェクトの重心に原点が設定されます。こちらは狙い撃ちができません。

3Dカーソルの特性

3Dカーソル、Blender特有の機能なんですがこれ原点設定時に結構便利だったりします。
こいつ↓

f:id:Yui_Aomi:20200426235220p:plain
3Dカーソル

まず特性に関して確認していきます。

  • クリックで場所を指定できる
  • クリックで指定する際、オブジェクトの表面に張り付く
  • Shift+Cで原点(0,0,0)に戻せる

まずこれを前提とします。
そして2パターンあるので次項のように行います。

パターン1:カーソルが(0,0,0)にある場合

こちらのパターンはメッシュ内部に重心を持たせたい場合に使用します。
剣に関してはこちらになりますね。持ち手の表面ではなく、その内部にあってほしいわけです。

まずShift+Cでカーソルを(0,0,0)へ移動。
次にオブジェクト側を下画像のように、原点を設定したい場所に来るように移動させます。
この状態で原点を3Dカーソルに移動を実行。以上。
f:id:Yui_Aomi:20200426235917p:plain

パターン2:カーソルがオブジェクト表面にある場合

こちらはメッシュ表面に原点を持たせたい場合に重宝します。
柱なんかはこちらの方が楽ですね。

まず、指定したい場所に3Dカーソルをクリックで狙い撃ちしておきます。クリックした場所ならどこにでも貼り付けられます。
次に同様に原点を3Dカーソルに移動を実行。以上。
f:id:Yui_Aomi:20200427000253p:plain

エクスポート設定

ここまででTransformのフリーズと、原点設定まで行ったので最後にエクスポートをします。
デフォルトでは冒頭のようなおかしな数値が入ってしまうので以下のように設定してください。

f:id:Yui_Aomi:20200427000925p:plain
エクスポート設定
デフォルトからの変更点

  • 選択したオブジェクトにチェック
  • スケールを適用をFBX単位スケールに変更
  • !実験的機能!トランスフォームを適用

以上3点を変更していきます。
選択したオブジェクトのチェックは必須ではないです。シーン内にいろいろあるなかで特定のオブジェクトだけ出力したい場合に必要です。
他二つは必須でこれを変更しておかないとおかしな数値になってしまいますので入れておきましょう。

ここまで一通り設定すればきれいなデータの出来上がりです。

まとめ

モデル作成が終わったら...
Transformをフリーズ!
原点設定!
しっかりエクスポート設定!
Unityにぶちこむ!

ヨシッ!

ではまた。

前回
atelier-aomi.hatenablog.com

次回
(リンク作成予定)

Blender Tips編 #2 -Blender2.8でのテクスチャベイクの覚書-

どうも蒼水です。
Blender2.8系になってからEeveeが搭載されましたが、従来のレンダラの廃止でベイクがちょ~っとめんどくなったのでその覚書しておこうと思います。

今回の目的

2.8系でベイクってどうやるんだっけ?という疑問の解決、フローを確認するという目的で書いておく目的です。
ちょっとめんどくさくなったのが悲しみ...。

そもそもベイクとは?何のためにするの?

ベイクはテクスチャにライティング済みの状態や、アンビエントオクルージョン、ノーマルなどを焼きこむことを言います。
言葉だといまいちわかりにくいですね...。
いろいろ使用用途はあるんですが、今回はテクスチャを描く前にUV島にマスクをするための領域をベイクで作成したりします。
フォトショで島ごとに単色で塗りつぶされていると島ごとに自動選択するのが大変楽になるのでいつもやっています。

また、アンビエントオクルージョン(AO)やノーマルの作成にもたまに使ったりします。
いろいろベイクできるものがあるので試してみると良いかなと思います。

Blender2.8系でのベイク方法

レンダラーの変更

Cyclesレンダラーを使います。ということでEeveeからCyclesに変更しましょう。ここがちょっと面倒になった...。あと若干重い...(でも前よりだいぶ軽い気がする)
Eeveeにはベイク機能がないのでしょうがないんですよね...。

f:id:Yui_Aomi:20200320214250p:plain
レンダラーをCyclesに変更する

ベイク用テクスチャとマテリアルの設定

ベイクするためにはマテリアルの設定は必須なのはBlender2.8と変わらないのです。
UVエディタでベイク用に画像を新規作成しておきます。(持ち込んでも良いですがBlender側で新規で作ったほうがたぶん楽です。)

f:id:Yui_Aomi:20200320220309p:plain
新規画像の作成

新規で画像を作成しただけではマテリアルが適用されていないのでマテリアルタブから適用しておきます。
左上、シェーダーエディタで画像テクスチャに先ほどの画像が指定されており、ノードがシェーダーに繋がれていれば準備OKです。
ここがきちんと設定されていないとエラーを吐かれてベイクが失敗します。

実際ベイクすると左下のようなテクスチャが指定した画像にベイクされます。(ベイク方法は後述)
f:id:Yui_Aomi:20200320221651p:plain

ベイクを実行する

レンダープロパティでレンダラーをCyclesに変更すると、項目にベイクが現れるのでベイクしたいオブジェクトを選択した状態でベイクをクリックして実行します。
マテリアルの設定がきちんとされていればベイクされます。
f:id:Yui_Aomi:20200320222032p:plain

これでベイクすることができます。

今回はとりあえず統合でベイクしましたが、今回の目的としては単色として塗りつぶしてほしいのこれではダメですね。
*統合はライティング等も含めた最終的なレンダリング結果をテクスチャに焼きこむ設定です。

今回はマスク用に単色で塗りつぶした画像を生成したいのでこれではダメなのでそのやり方を次項で解説します。

マスク用のテクスチャをベイクする

マテリアルを適用したとき最初に設定されているシェーダーであるプリンシプルBSDFシェーダーでOKなので以下の設定を行います。
設定はここまでの解説と基本同じですが、ベイク時の設定をディフューズにすることで真黒く単色で塗りつぶされた結果を得られます。
ただし、指定した画像がそのまま出てきますのでBlender内で新規画像を作成するときに必ずブランクを指定する必要があります(or何色でも良いので単色のテクスチャを持ってくる)

f:id:Yui_Aomi:20200320223932p:plain
ベイク設定をディフューズに変更
f:id:Yui_Aomi:20200320223352p:plain
ブランクを指定
結果としてこんな感じになります。これなら自動選択でUV島ごとに選択しやすくなる!という魂胆です。これをフォトショに持ち込んで使います。
f:id:Yui_Aomi:20200320224010p:plain

ちなみに単色ではない画像を使うとこうなります。
これは寿司の画像を指定してベイクした場合。つまりそういうことです。
f:id:Yui_Aomi:20200320223738p:plain

おまけ(他のベイク設定に関して)

他の設定っていろいろありますがそのうち自分が良く使う2つだけどんな感じに使うのか少しだけ書きます。

アンビエントオクルージョン(AO)

詳しくは端折りますがAOを焼いてくれます。これを乗算するだけでいい感じクオリティが上がるのでめっちゃ使ってます。
簡単に言うと溝(エッジ部分)とかをいい感じに暗くしてくれるやつです。詳しく知りたい方はググりましょう。AOすこ...。
下画像(3Dビューはベイクしたものを貼ったもの)みたいな感じにくぼんだ部分の隅っこ部分に行くほど暗くなる性質を持ちます。これがいい感じに立体感を出してくれるんですよね。とりあえず焼いて乗算しとけ。
(*白黒のまま乗算するとちと汚いのでグラデーションマップ等で色を調整することを推奨します)

f:id:Yui_Aomi:20200320225404p:plain
AOはいいぞ

ノーマル

これは若干手順がややこしいのできちんと解説します。

■①ハイポリ/ローポリ両方のモデルを用意する。
基本的にノーマルを焼く場合はハイポリモデルの法線をローポリに貼り付けて軽量化する目的のために使用されます。
でので、同じモデルのハイローを用意しましょう。
今回は例として以下のようなモデルを用意します。
f:id:Yui_Aomi:20200320230435p:plain
また、用意した二つのモデルは重ねておきます。
重ねておかないと意図しない結果になる場合があるので重ねておいた方が無難です。なんかちらちらするけど気にしないで重ねておきましょう。
f:id:Yui_Aomi:20200320230603p:plain

■②ベイク設定
ベイクタイプをノーマルに変更します。
また、さらに下にある選択→アクティブという項目にチェックを入れ、レイの距離の設定を行います。
f:id:Yui_Aomi:20200320230744p:plain

レイの距離というのはハイとローの高さ(深さ)の違いだと思ってください。
参考画像置いておきます。基本的にはハイとローの深さの違いだと思っておけば良いと思います。
f:id:Yui_Aomi:20200320231332p:plain

今回で言えば深さも何もない立方体(0cm)と深さのある立方体(20cm)なのでレイの距離は20cm、と言えます。
ここをきちんとしないと正確な結果が得られない場合があります。とはいえ実際の深さ<設定値ならば基本大丈夫です(検証済み)
深さ20cmのとき50cmに設定しても期待した結果が得られます。めんどかったらとりあえず設定値はデカくしとけ(雑)

■③ベイクする
ベイクする際は必ずハイポリモデル→ローポリモデルの順番で選択した状態でベイクを実行します。逆だとダメです。
マテリアル設定でノーマルマップノードをつないで確認すると、ただの立方体の方(ローポリモデル)の方にもきちんと法線が反映されてることが確認できます。
f:id:Yui_Aomi:20200320232148p:plain

こんなかんじでハイポリ→ローポリ、みたいなフローを踏む際はこういった方法でノーマルを作成します。軽率に軽量化していけ。
モバイル環境やVRだと余計に意識しちゃう。

まとめ

ベイクはEeveeだと使えないのでCyclesを使う。
UV展開してベイクするテクスチャ用意してマテリアル設定してベイク設定してポチー
完成!

ベイクいろんなとこで活躍するので酷使していこうな...!

前回
atelier-aomi.hatenablog.com

次回
atelier-aomi.hatenablog.com