Unreal/Unityへ出力する透過メッシュの設定と表示の合わせ方
https://www.youtube.com/watch?v=X7uKsWDWAd0
MODO 10.0v1からはゲームエンジンとの連携が強化され、MODOのアドバンストビューポート上でUnreal EngineやUnityとの見た目を合わせることができるようになりましたが、今回はその中でも透過の表現を合わせる方法について解説します。
ではUnreal Engineの場合から見ていきましょう。用意してあるのは32ビットのTARGAの画像ファイルであり、アルファチャンネルにロゴのデータが入っています。MODOでゲームツールレイアウトからビューポートをアドバンストビューポートへと切り替えておきます。
まずはシェーダツリー > レイヤー追加 > カスタムマテリアルからUnreal Materialを追加し、これがUnreal用のマテリアルであることを示します。次に読み込んでおいた画像を適用します。エフェクトはデフォルトでディフューズの色になっていますので、これをUnreal Base Colorへと変更します。ここでロゴ以外の部分を透過させるため、画像を右クリックしインスタンス作成でインスタンスを作成します。このインスタンスでアルファを適用しますが、MODO 10から画像の特定のチャンネルを抽出して使用するスウィズル機能というものが実装されていますので、この機能を利用します。まずはエフェクトをUnreal Base ColorからUnreal Opacityへと変更すると、ちょうどロゴ部分が抜けてしまっているので、スウィズルオプションをオンにし、チャンネルをAlphaに設定します。こうすることで画像のアルファチャンネルを使用して、Opacityを設定するということになります。
それでは出力タブからプリセットをUnreal Engine 4に設定し、FBXを出力し、Unreal Engineの中へと読み込んでみましょう。そうするとベースカラーは画像のRGBチャンネルが、そしてオパシティには画像のアルファチャンネルが接続され、MODOと同じような透過の状態を設定することができました。
次はUnityです。Unityの場合、アルファの値はAlbedoで指定した画像のアルファチャンネルから取得すると決まっています。このため、Unity用のOpacityのマップというのを指定することはできません。こういった場合にMODOとUnityでの見え方を同じにするためには、まずシェーダツリーのレイヤー追加 > カスタムマテリアル > Unity Materialを適用した後、画像を適用し、Unity Albedoへと変更します。いったんこの状態でFBXへと出力してみてみましょう。
ゲームプリセットをUnityへと設定し、FBXへと出力したら、Unity上へと読み込みます。デフォルトではマテリアルのレンダリングモードはOpaqueになっていますので、これをTransparentへと変えてみると、Albedoで指定されている画像マップのアルファを利用して、キレイに透過の状態になっています。
ただし、これだとMODOとUnity上で同じ表示状態にはなりません。こういった場合には、MODOで画像マップのインスタンスを作成し、先ほどと同様、スウィズル機能をオンにし、チャンネルからアルファを選択します。エフェクトを基本チャンネルの透過量へと変更し、効果を反転させたら、Unity上と同じ表示状態に合わせることができます。仮にこの状態でFBXへと出力しても、エフェクトがUnityチャンネル特有のものでなければFBXと同じ階層に出力されるマテリアルを表すXMLファイルの中には記載されませんので、透過の表現をUnityとMODOで合わせたい場合には、MODO側で透過量チャンネルを一つ増やすようにしてください。