Tag Archives: プロシージャル・テクスチャ

Blender初心者のためのマテリアル&テクスチャ取り扱い

■はじめに

Unity5 に取り込むのを前提で Blender2.74 にてマテリアルおよびテクスチャの設定を行うときの手順や注意事項の備忘録となります。書いている内容は基礎のキだと思います。(初心者向け、との記載は自分が初心者で初心者なりにまとめたものだからです。)

特に、 Blender で割り当てた情報のどの部分が、 Unity に取り込めるのか、分かるように書いたつもりです。

■blendファイルのUnity取り込み

Blender (.blend形式ファイル)を Unity に取り込むときは Unity 側で内部で FBX形式に変換して取り込んでいるようです。(これについては公式ドキュメントを参考にしています。)

モデリングについては 前に書いた内容 をご参照。

 

■マテリアル&テクスチャ情報の割り当て

Blender 上で設定するマテリアル名や設定の色合いDiffuse Color)については Unity に取り込みできます。それ以外の補足情報である、Diffuse Color の強度とか、スペキュラー とか 放射(Emit) とかは設定しても Unityには引き継がれないようです。(FBX形式に変換した時点でこれらの情報は失われる。スペキュラーについてはFBX形式に変換した時点では色情報は保存されているっぽい)

Diffuse Color の設定方法はマテリアルを設定したいオブジェクトを選択し、ディフューズカラーの項目の色を選択するのみで特に悩むことはないかと思います。

blender_material_texture_icon

テクスチャの UVマッピング についてはUV情報(2次元画像データをどのようにメッシュ上に展開するか、メッシュ頂点⇔画像データの位置のマッピング情報)と、貼り付ける画像データが必要となります。

まずUV情報を作成します。貼り付けたいオブジェクトのメッシュを編集モードで選択し、UV/画像エディターウィンドウを開くことでマッピングが出来ます。( UV/画像エディター ウィンドウは ウィンドウのアイコンから選択するか、情報ウィンドウのウィンドウセットを「default UV Editing」に切り替えてあげることでも表示できます。)

UV/画像エディター ウィンドウを開く

UV/画像エディター ウィンドウを開く

UV/画像エディターウィンドウの下部メニューから、「新規」テクスチャ作成を選択し、貼り付ける画像のベースを作成します。ここで画像サイズや背景色を決定します。ここでは 64 × 64 ピクセルに設定。

UV/画像の新規追加メニュ-

UV/画像の新規追加メニュ-

作成されたUV用画像の上に、UVマッピング情報を設定します。メッシュ一つ一つに手動で設定するのではなく、ある程度自動的に設定する機能を利用します。(スマートUV展開)

ツールシェルフから、「シェーディングUVマッピングの項目で 展開スマートUV展開」でマッピングします。(ショートカット U キー)

スマートUV展開

スマートUV展開

あとは画像を保存し、Photoshop や Gimp 等で編集し、UV/画像エディター下部メニューの「画像」から再度読み込みをします。なお画像については後々Unityに取り込むことを考え blendファイル内に「Textures」フォルダを作成して保存すると分かりやすいです。

なお、画像を特にいじらずにテクスチャを表示してみるため、オブジェクト「MushroomRoof」 にテクスチャ情報を追加します。キノコの頭のオブジェクトを選択し、テクスチャ情報を確認すると、以下の通りテクスチャが一つも割り当てられていません。

blender_see_texture_none_info_of_the_mushroom_roof_texture

「新規」の左のテクスチャアイコンを押し、先ほど作成したUVマッピング画像を指定します。これでテクスチャ情報が確認できます。

割り当てテクスチャ リストの一つを選択し、先ほどのテクスチャを指定します。これで割り当て完了。実際に確認します。確認にあたっては3Dビュー下部のシェーディング(赤で囲んだアイコン)を押し、「ソリッドレンダー」に切り替える必要があります。

キノコの頭にUVマッピング

キノコの頭にUVマッピング

以上、最も簡単なUVマッピングの手順でした。

 

■Blender のマテリアル・テクスチャ情報をUnity に取り込み

Blender で作成した3Dのファイルにつき、頂点やメッシュの形状、UV情報、ボーン、スキンメッシュ情報、アニメーションはFBX形式を経由してそのまま取り込み可能ですが、画像ファイルを割り当てたテクスチャ等をUnity 上で表示するには少し注意してあげる必要があります。

以下、FBX 6.1 ASCII形式で 刀 をモデリングし、柄の部分に画像をUV マッピングしたもののファイル内容です。FBXファイル内には画像へのファイル名・相対ファイルパスが記載された状態であり、FBXファイル自体に画像ファイル情報を取り込んでいるわけではないので、 UVマッピングに利用した画像ファイルも一緒の相対ポスで Unity にインポートしてあげる必要がある、ということのようです。

FBXファイルの中身例(画像をUVマッピングした時)は画像ファイルのファイル名、ファイル相対パスが記載される。

FBXファイルの中身例(画像をUVマッピングした時)

作成している blender ファイル配下に「Textures」フォルダを作成し、Unity 側に取り込む際、FBXファイル本体と一緒に Textures フォルダも取り込んであげると、正常に画像読み込みおよびマッピングをしてくれます。(別に Textures という名前でなくても動きますが、よく手順にでてくる)

 

■マテリアル情報のUnity 取り込み

マテリアル情報を Blender 側で作成しておくと、Unity に取り込んだときに「Materials」というフォルダが自動的に生成され、マテリアルごとに matファイルが生成されます。

 

Unity の特定の階層に複数の Blend や FBX を取り込むときの注意:

同じマテリアル名をいろんなオブジェクトにつけて、同じUnity 上の階層に突っ込むと同じ名前のマテリアルがすでに存在した場合は新しいものに更新されないようですので注意。(ということは、既にUnity プロジェクトに取り込み済みのFBXやBlendファイルのマテリアルを更新するときは、取り込み済みのファイルを直接おきかえないと更新されない?)

 

Unity 取り込み後の高速化をあらかじめ意識:

マテリアルを割り当てするとき、同じマテリアルを割り当てられそうな所には極力同じマテリアルを設定してあげると、後々のUnity 上の描画上、高速化できるようなので、意識して割り当てしてあげると良いようです。これはバッチング(Batching) という、同じマテリアルを共有しているオブジェクトをまとめて描画できる高速化の機能が Unity にあるためです。コチラ(公式ドキュメント)にバッチングという高速間の処理の概要が記載されています。

 

Blender 側でオブジェクトに割り当てていないマテリアル情報:

Blender では作成したマテリアルを手動で削除する、という機能はないようです。ファイル保存時に利用していないマテリアルについては自動的に削除されるようです。

 

■Procedural Texture(プロシージャル・テクスチャ) の利用

画像データや法線マップ等をプログラムから2次元座標や3次元座標、時間、乱数を引数として関数的に生成したテクスチャをプロシージャル・テクスチャと呼びます。

プロシージャル・テクスチャを利用すると、高画質テクスチャを画像としてあらかじめファイルなどで用意しておかなくて良い(つまり容量が削減できる)、与える乱数の種(パラメータ)を変えることで、類似するパターンだが、細部が乱数により異なるテクスチャを生成できる、など良いことが沢山あります。

欠点としては画像を関数的に生成するための事前の計算(時間)とメモリが必要になることでしょうか。

なお、Unity5 では Allegorithmic社 のSubstance という プロシージャル・テクスチャ生成エンジンを取り込んでおり、Allegorithmic社の「Substance Designer」という製品から出力した「SBSARファイル(SuBStance ARchive)」をUnityに取り込んで、UV情報を与えてあるメッシュオブジェクトに対してドラッグ&ドロップで適用可能です。

同社のツールについては30日無料トライアルもあるので、今度ためしてみようかな。ちなみに同社の日本語ページのトライアルのDownload用のアドレスがリンク切れとなっていました。探してみたところ、英語版(こちら)のページの下のほうにお試し(30日間)のリンクがありますので、参考までに。STEAMや公式ページから購入可能です。このブログを描いている時点(2015.12.08)では STEAM で Substance Indie Pack が 29,990円、公式サイトIndie License が $149でした。(公式のほうが安い・・!?なんか違うのかな。知っている人、いたら教えてくれるとうれしいです。)

プロシージャル・テクスチャには沢山の利点があるのですが、ゲームで利用したい意図するテクスチャを自力で Substance Designer で生成するのと、必要な画像を自分で描いて生成するのにかかる時間とコストとの比較しだいでしょうか。時間があれば、綺麗で容量も小さいプロシージャルの仕組みを是非使いたいのですが。

なお、Unity5 でのプロシージャル・マテリアルへの適用手順の流れはコチラ(海外のUnityブログ)のサイト様が丁寧で参考になりました。SBSARファイル形式で公開されている素晴らしいテクスチャ(Unity Asset)もありますので、選択肢の一つとして考えておきたいです。

 

非常に参考になりましたサイト様: