【Unity】複数のテクスチャを重ねて表示する

ひとつのメッシュデータに複数のテクスチャを重ねて表示する方法を紹介していきます。
まず、方法は2つあります。
・Shaderを改造し、テクスチャを二枚入れると重ねて表示されるようにする。
・マテリアルを2つ用意し、マテリアルを2つ重ねる。
今回はマテリアルを2つ使用する方法を紹介します。

マテリアルを重ねる方法

やり方は単純で、InspecterからRendererのマテリアルの配列要素数を増やし、マテリアルを紐づけます。

また、重ねるマテリアルはしっかり透過部分のあるものを選択しましょう。
StandardShaderを使用する場合はRenderingModeをCutoutにし、pngファイル等の透明度のあるテクスチャをalbedoにセットしてください。

これで重ねて表示できます。

しかーし!モデルのサブメッシュが複数に別れている場合、これではうまくいかない可能性が高いです。
解決策について、サブメッシュって何よってとこから説明していきます。

モデルデータの構造

学んだわけじゃないけど多分こんな感じ

FBXファイルを読み込むとメッシュ単位でオブジェクトが生成される。
そして、そのメッシュ内のサブメッシュ毎にマテリアルが生成される。
Blenderでいうとオブジェクト毎にメッシュ、マテリアルの配色分け毎にサブメッシュといった感じだ。
問題は、Unity内でメッシュの描画を行うRendererがメッシュ毎に使用することにある。

最初に紹介したように、RendererのMaterialsの要素数を増やすことで、サブメッシュの数以上のマテリアルを重ねることができる。
しかし、ここで厄介なのがメッシュ内で保持しているサブメッシュの内、一要素目のサブメッシュにしかマテリアルが重ならない。いくつマテリアルを追加で重ねても、全て一要素目に重なってしまう。
上記例の場合、肌にタトゥーや擦り傷のマテリアルを重ねて表示したくても、肌ではなく瞳のサブメッシュに重ねて表示してしまう為、不可能である。
また、メッシュ内のどのサブメッシュを一要素目にするかは、選べない。(多分頂点数の一番少ないサブメッシュが一要素目に来ている気がする。)

解決策としては、モデリングソフトで目と肌のメッシュを分けて再度FBXにエクスポートした後にインポートし直す。
もしくは、マテリアルを2つ重ねる方法を諦めて、自作シェーダー内でテクスチャを重ねて表示する他ないと思う。多分。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です