読者です 読者をやめる 読者になる 読者になる

DoGA-L3で「取り急ぎ」作ったカッコいいモデルをもっと使いやすくする

前の記事ではDoGA-L3PLAY Animation importer for Unityを用いて、DoGA-L3のモデルをUnityにインポートし、それを動かすところまでやりました。
dnasoftwares.hatenablog.com

f:id:dnasoftwares:20170312192549p:plain

ただ、現状のモデルはゲームで使うには一抹の不安が残ります。手修正やエディタ拡張アセットを利用して、もうちょっと良い感じにモデルを修正してみましょう。

マテリアルをStandardに揃える

インポート直後は全てのマテリアルにLegacy Diffuseのシェーダーが割り当ててあります。折角Unity5なんですからStandardにしましょう。Assetsフォルダ直下に、l3pファイル名と同じ名前のフォルダができており、そこにマテリアル、テクスチャ、メッシュが入っていますのでここのマテリアルをいじります。
f:id:dnasoftwares:20170312192625p:plain

Metalicのパラメタなどはお好きにどうぞ。
また、「yellg」など「~~lg_uv_material」で終わる名称のマテリアルは本来自己発光のマテリアルです。こちらでも光らせましょう。
AlbedoからEmissionに色をコピー(Emissionのスポイトを押してAlbedoの色を拾う)します。ちょっと明るさを1以上にして、カメラのHDRレンダリングを有効にしてBloomのイメージエフェクトを適当に盛ったらこんな感じ。
f:id:dnasoftwares:20170312192816p:plain

テクスチャの濃度設定とか密度設定とかは無視されている

DoGA-L3ではテクスチャの濃度設定ができました。薄く模様を張るといった表現ができたんですが、Unityへのインポート時にこのパラメタは無視されてしまいます。
気になる場合は自力でテクスチャを薄くしてしまいましょう。テクスチャを複製して適当なエディタで白を重ねればそれっぽくなります。
このモデルでも濃度設定を使っていたので自分で白を載せました。

f:id:dnasoftwares:20170312193745p:plain

同様に密度設定も無視されますのでこちらも注意が必要です。

メッシュを統合する

1モデルのために10以上のGameObjectがぶら下がる構図ははあまり良い感じがしません。メッシュがまとまっていないことでメッシュコライダーの作成ができないなどの弊害もあります。
メッシュをBakeできるツールで統合してしまうのがいいでしょう。ついでにマテリアルも統合してしまえばSetPassの低減につながります。
ウチではPro Draw Call Optimizerを使っています。

ローポリな表現がお好きで、テクスチャがいらない場合はMesh Materializerでも面白いです。マテリアルの色設定やテクスチャの色を元に頂点カラーに変換しつつメッシュを統合してくれます。
ついでにスムージングも切ったり入れたり自由自在。往年の「生ポリゴン(もはや死語ですね……)」な感じが出せます。

さてここではPro Draw Call Optimizer(以下Pdc)で進める事にします。Pdcのウィンドウで当該GameObject以下を指定します。

f:id:dnasoftwares:20170312195514p:plain

また、Settingsで「Generate Prefabs for objects」を選ばないとモデルデータをシーンの外に出すことができません(メッシュデータがファイルとして生成されない)。使い回すモデルの場合はチェックを忘れずに。

f:id:dnasoftwares:20170312195626p:plain

あと、モデルが原点以外にある場合はかならず一度原点に戻してください。そのままだと原点がズレます。
ということで諸々設定してBakeしたら統合済みのモデルに置き換わり……

f:id:dnasoftwares:20170312200305p:plain

……なんでか色設定が飛んでしまいました。どういうことでしょうか。ほかにもいくつか怪しい点があります。

Pro Draw Call Optimizerの罠

テクスチャと色設定を合成できない

Pdcは可能な限りマテリアルをシェーダ単位で結合し、テクスチャも1枚のアトラスに統合してくれます。テクスチャを使わない単色のマテリアルは単色テクスチャを生成してアトラス内に統合してくれるのですが、ここに罠がありまして、「テクスチャと色指定が同時に設定されている場合はテクスチャのみ考慮して色設定が破棄される」という仕様になっております。本来ならテクスチャと色設定を合成(普通は乗算ですね)して着色済みテクスチャを作ってほしいところです。

これだけは手作業でどうにかするのはだいぶ厳しい、ということでエディタ拡張を作りました。他の罠にも対処してから作業してほしいので、エディタ拡張の話は後に回します。

テクスチャのあるマテリアルとテクスチャのないマテリアルで別のメッシュになる

これはつまりテクスチャのないマテリアルにもテクスチャを設定してしまえばいいので、白の適当な(16x16ぐらいでいいはず)テクスチャを用意してテクスチャのないマテリアルのAlbedoに割り付けます。

Emissionはアトラスに反映されない

これはPdcの仕様と思われるので、一度Bakeした後、アトラス画像をいじってEmission用のアトラスを作る方向でなんとかします。

テクスチャに色設定を焼き付け(Bake)るエディタ拡張作った

さて、「テクスチャと色設定を合成できない」問題への対処としては「事前にテクスチャと色情報を合成して新しいテクスチャに置き換えておく」ということになるのは先ほど申し上げた通りですが、手動でどうにかするのはちょっと無理があります。そんなわけで、自動的に色を合成してくれるエディタ拡張を自作しました。当該エディタ拡張はGithubで公開しております。

github.com

普通はUnityPackageだけダウンロードすれば大丈夫。

プロジェクトにimportするとWindowメニューに項目が増えます。「D.N.A. Softwares」→「Material Texture Baker」を選びます。

使い方はPdcに近い感じに揃えました。(あくまで感じなのでデザインとかは違いますが……)

f:id:dnasoftwares:20170315023540p:plain

同じように親のGameObjectを選択し「+Children」を押すと子のメッシュを全選択してくれます。
あとは「Bake!」を押せば勝手にテクスチャに色が合成され、メッシュのマテリアルが更新されます。

処理前と処理後でテクスチャと色の設定が変わっていることを確認してください。
(Bake!の下のリストを展開するとテクスチャと色のペアを確認できます)

Bake前↓
f:id:dnasoftwares:20170315023548p:plain

Bake後↓
f:id:dnasoftwares:20170315023551p:plain

これで準備OK、今度こそPdcでメッシュをまとめます。こんどは綺麗に色も残るはずです。

仕上げ

あとはEmission用のAtlasを作りましょう。Atlasになったテクスチャを複製して、光らせたい色以外を真っ黒に塗りつぶすだけですので簡単。Pdcの出力一式はAssetフォルダ直下の「(編集中のシーン名)-atlas」のフォルダに保存されています。
Albedo用のAtlasでは逆にEmissionに該当する部分を黒にします。

f:id:dnasoftwares:20170315030458j:plain

あと、Metalic,Smoothnessの設定が飛んでしまうのでこちらも要再調整。
場合によってはAlbedoのAtlasをさらにコピーして他の要素用のマップを作ってもいいでしょう。

これでできあがり。
両方でSetpass Callsを比べると59→27と32減。めでたしめでたし。

Before↓
f:id:dnasoftwares:20170315024450p:plain

After↓
f:id:dnasoftwares:20170315024457p:plain

まとめ

というわけでちょっと手はかかりますが、工夫次第で十分実用できるモデルが作れます。
最適化作業はちょっとややこしいですが、慣れればルーチンワークです。(マテリアルに白テクスチャをセットするあたりもエディタ拡張で自動化できますね……)
ライセンス的にも個人制作にはかなり優しいのが嬉しいです。
また、パーツデータは自作してインポートすることもできます。パーツの一部だけ自分でモデリングして、あとは既存パーツと合わせたりすればかゆいところにも手が届くでしょう。ローポリ系アセットと組み合わせても違和感なく繋がりますので是非活用してください。