バッテラが如く

プログラミングしましょ!

【Unity】モデルをインポートした時のマテリアル設定方法

この記事の情報は次のバージョンで動作確認しています。

  • MacOS Monterey (12.1)
  • Unity (2021.3.2f1)
  • Unity

    はじめに

    どうも、バッテラです。

    FBX等のモデルファイルをインポートしたときにマテリアルがどのように設定すればいいのか分からなくなってしまいませんか?

    各種設定を公式サイトを確認しつつ理解したことを共有していきます。

    準備

    FBXファイルをUnityにインポートし「Materials」タブを開きます。

    マテリアル設定はここで行なっていますので各種項目を深ぼっていきます。

    Material Creation Mode

    マテリアルをどうやって生成するかのモードです。全3種あります。

    モードによりマテリアルの初期状態に違いが出てきます。

    デフォルトはImport via Material Descriptionです。

    None

    マテリアルを生成しません。

    メッシュだけ欲しくてマテリアルは自分で作るよという人はこれでいいです。

    Standard(Legacy)

    デフォルトルールに沿ってマテリアルを生成されます

    デフォルトルールて何なのか?公式だとこう記載されています。

    Legacyと記載があるように非推奨になっているのでわざわざ使う必要はないと思いますね。

    Import via Material Description

    公式ではこう書かれています。

    Unity では、以下のマテリアルを扱うこのポストプロセッサーのデフォルトの実装を提供しています。

    FBX ファイルからの FBX 標準マテリアル、Arnold Standard、Autodesk Interactive、3Ds Physical マテリアル。 SketchupCollada3DS マテリアル。 ImportViaMaterialDescriptionモードの場合、モデルインポーターは マテリアルの作成をAssetPostProcessor.OnPreprocessMaterialDescriptionコールバックに委ねます。

    簡単にいうとモデリングした時のマテリアルを引き継ぎやすくなってるということですね。

    とはいえ完全ではないのでAssetPostProcessorで自前でマテリアルを割り当てることもできるので、かゆいところに手が届くモードですね。

    docs.unity3d.com

    Location

    生成したマテリアルをどこに配置するか設定です。全2種です。

    デフォルトはUse Embedded Materialsです。

    Use Embedded Materials

    Assetに展開せず内包するようになります。

    メッシュと同じようにモデルの中にマテリアルが作れます。

    内包されているものは編集不可です(これ重要)。

    Use Embedded Materialsを選ぶとTexturesMaterialsの項目が表示されます。

    Use External Materials (Legacy)

    Asset上にマテリアルファイルを展開します。

    実際にやってみると自動でMaterialsフォルダが作られその中にマテリアルが生成されていました。

    しかしテクスチャマッピングが正しくできていなかったり、エラーが表示されたりなど不安定な部分が多い印象です。

    現在は非推奨になっているので使う必要はもうないと思います。

    なので以降はUse Embedded Materialsを使う前提の解説になります。

    Textures

    FBXにテクスチャデータが含まれている時に活性化されます。

    Extract TexturesをクリックするとテクスチャファイルをAssets上に抽出できます。

    AssetStoreなどのモデルだとテクスチャは含まれていない方が多いのでほとんど使う機会がないかもです。

    Materials

    FBXにマテリアルデータが含まれている時に活性化されます。

    Extract MateriasをクリックするとマテリアルファイルをAssets上に抽出できます。

    下にあるマテリアル一覧部分にアタッチされた状態になります。

    自動生成で内包されているマテリアルが気に食わない場合はこれを使って書き換えると覚えておけばOKです。

    一部のマテリアルだけ書き換えたい場合

    書き換えたいマテリアルを右クリック → Extract From Prefab としてマテリアルを抽出します。

    これでマテリアル1個だけを抽出できました。

    書き換えたい場所がわかってるならこの方がスマートですね!

    マテリアル一覧

    ここは内包されたマテリアル名の一覧が表示されています。

    Noneは内包されたマテリアルをそのまま使うという意味になります。

    Noneの代わりに自前で用意したマテリアルをセットすることで上書きできるようになっています。

    On Demand Remap

    Search and Remapをクリックすると前述で説明した「マテリアル一覧」にプロジェクト内にマテリアルを検索して自動で選択するというものです。

    「Naming」と「Search」の2つの検索条件で行います。

    とはいえ正直メリットがわかっていません。手動でやった方が早いし確実です(笑)。

    Naming

    公式の記載を引用しています。

    プロパティ 機能
    By Base Texture Name (デフォルト) インポートされたマテリアルの拡散テクスチャの名前を使って、マテリアルを命名します。
    拡散テクスチャがマテリアルに割り当てられていない場合、Unity はインポートされたマテリアルの名前を使用します。
    From Model's Material インポートされたマテリアルの名前を使って、マテリアルを命名します。
    Mode Name + Model's Material モデルファイルとインポートしたマテリアルの名前を組み合わせて、マテリアルを命名します。

    From Model's Material以外はうまく動作しませんでした(笑)。

    公式の記載を引用しています。

    プロパティ 機能
    Local Materials Folder ローカルの Materials フォルダー (つまり、 Materials サブフォルダーのことで、モデルファイルと同じフォルダーです) 内でのみマテリアルを検索します 。
    Recursive-Up Assets フォルダーまで上位に移動しながら、すべてのサブフォルダーを含む Materials フォルダー内のマテリアルを検索します。
    Project-Wide すべての Unity プロジェクトフォルダー内の既存のマテリアルを検索します。

    ファイル名が同じテクスチャファイルが複数あった場合

    起こり得ることなので調べてみました、

    テストとしてHoge1とHoge2に同じファイル名のマテリアルを用意しました。

    この状態でRemapするとHoge1の方のテクスチャがセットされました。

    ファイル名昇順ということですかね。

    どちらを使いますか的なダイアログを表示されるのを想定していたのですが、うーん。少し残念です。