Unityでの開発で、コードで生成するには多少複雑な3Dモデルを扱う必要があったので、「BlenderでしれっとモデリングしてUnityにぶち込めばいけるだろう」と軽く考えていたところ、テクスチャの貼り付けでハマったのでメモ。
僕自身、3DCGのエンジニアでもないし、ガチのUnityエンジニアでもないので、用語の間違いから、「そもそもこの記事言ってる事が的外れ」レベルのご指摘でも頂きたいです。
普通にマテリアルを適応するとか、シェーダーでゴリゴリするのであればUnityのプリミティブやコードで生成したオブジェクトも、Blenderで作成してインポートしたオブジェクトでも、やることはそんなに変わらないと思いますが、テクスチャの貼り付けに関しては少しコツが必要でした。
結論から言うと、Blenderで3Dモデルを作成する際に、きちんとUVの設定をしましょうと言う話です。
まず、試しにBlenderで作成したplaneをそのままfbxで書き出して、Unityにインポートしてテクスチャを適応してみます。
うまく適応されません。
そこで、UV展開を行います。UV展開の手順については普通にBlenerの解説ページなどに詳しく載っていますが、なかなか奥深い世界が待っています。
この記事では、簡単のため、プリミティブのplaneを利用しますが、複雑な形状で行いたい場合は、普通にBlenderや他のモデリングソフトのチュートリアルを参考にしてみてください。
(形状が複雑になる程、自動処理では色々難しく、「シームを付ける(Mark Seam)」などのテクニックが必要になるのですが、それは普通にBlenderの使い方なので、この記事では割愛します)
Blenerでの具体的なUV展開の手順として、まず、対象となるオブジェクトを選択しEdit Modeに切り替えます。
その状態でキーボードの 'a' を押し、オブジェクトのメッシュを全選択します(今回はplaneなので全選択しても1つのメッシュが選択されるだけですが、cubeやcylinder等の、もう少し複雑な形状も想定して書いています)
そして'u'キーを押して、"Unwrap" を選択することで、自動展開されます。
UV / Image Editor で見るとUVが設定されたことがわかります
こちらのモデルをfbxで書き出して、Unityで読み込んで、先ほどのUV展開していないモデルと同じ条件で、テクスチャを貼り付けてみます。
うまく貼れました。
このように、3Dモデルの素材側でUV展開を行っておけば、Render Texture や VideoPlayer 等も、Unityのプリミティブとの違いを、特に意識することなく貼り付けることができるようになります。
雑感 :
アプリケーション内で3Dモデルを扱う際には、コードで生成するか、案件で求められるクオリティによってはCG屋さん/チームに制作してもらったモデルを使う事が多いと思うので、エンジニアが自分で3Dモデリングツールでモデリングをするときに以外に落とし穴になるのではないかと思います。
参考 :
https://www.cgradproject.com/archives/2425/
http://cg.xyamu.net/Blender/entry201.html