こんにちはfrom2001vrです。
3次元空間上の背景として円柱(Cylinder)や球(Sphere)の内側にテクスチャを貼り、その内側にカメラを置きたいというシナリオを実現します。最適なやり方を見つけるのに苦労したのでやり方を記録しておきます。Blender初めて使ったので苦労しました。。。
まず、
- Unityで作るCylinderの内側にはテクスチャを貼れない
- Unityにはプリミティブを置く以外にモデルを手法が存在しない
- テクスチャは貼り方(Wrapping方法)を適切にしないと繋ぎ目がおかしくなる
凹凸のある3次元モデルにテキスチャを貼るためにはUVマッピングというものを使います。2次元のテクスチャを3次元に貼り付ける際にどのような配置で貼り付けるかを決めておく必要があります。
UVマッピングとは(参照元)
UVマッピングは、平面の画像を不規則な形状のモデルに貼り付けるための方法です。 ご承知のとおり、オブジェクトに含まれるそれぞれの頂点は、X、Y、Zの空間座標を利用して決定されます。 UVマップではさらに、マップ上のどこへポイントを配置するかを決定するための、UとVの2つの座標を追加します。 これにより、あたかもポイントがそのテクスチャの位置に常に保持されているかのように、画像をオブジェクトに貼り付けることができます。
ということを理解した上で進んでいきましょう。
今回はUnityだけでは実現することができないので、オープンソースの3DモデリングソフトウェアのBlenderを利用します。
では早速始めていきましょう。
まずは、ブレンダーを開き、Cylinderを追加します。この時にCap Fill TypeをNothingにして円柱の蓋を作成しないようにしましょう。
次に、見やすいように画面のレイアウトを変更しておきます。3Dビューの右上の角っこを引っ張って、そこにUV/Image Editorを表示しておきます。ここにはUV展開(UV Unwrap)されたメッシュが表示されます。
今回、円柱の内側にテクスチャを貼りたいわけですが、普通に円柱を作成すると、メッシュが外側を向いて存在し、内側にはメッシュが存在しません。(円柱の内側にカメラを置くと、表面が透過して外が見える状況です。)
内側にテクスチャを貼るにはメッシュを外向きではなく内向きに扁壺すうる必要があります。
モードを「Edit mode」に変更し、Aキーで全選択後、「Flip Direction」でメッシュの方向を内側に変更しましょう。
次に、円柱をUV展開します。(この処理を行わないとUnityにモデルをインポートした際にUnityがどこにどのようにテクスチャを貼っていいのかわからないためテクスチャを貼ることができません)
UV展開をうまく行わないとテクスチャを綺麗に貼ることができません。
試行錯誤のすえ下記の方法にたどり着きました。
まず円柱をUV展開する上での切り目(Seam)を決定します。(ここがキモ)
「辺選択モード」で円柱の高さ方向の線を右クリックし一つ選択します。
「Make Seam」をクリックし、選択した辺をSeamにします。
Unwrapをクリックし、円柱をUV展開します。下の画像のように円柱の側面が横一列に並んでいれば成功です。この展開方法ではテクスチャを並べた際に綺麗につなぎ目なく表示されます。
ここで作成した円柱を保存しましょう。(仮にCylinder.blendとして保存しましょう)
では次に、貼り付けるテクスチャを作成しましょう。並べた時に繋ぎ目がないテクスチャを作成するソフトはいろいろありますが、今回は
Stripe Generator – ajax diagonal stripes background designer
を利用てテストしてみましょう。
設定を行い、ダウンロードをクリックすると画像ファイルがダウンロードできます。今回作成したファイルはこのような画像です。
作成した円柱のモデルファイルとテクスチャ画像ファイルをUnityにインポートします。ProjectビューのAssetsにドラッグすることでインポートできます。
次にヒエラルキービューにCylinderをドラッグしシーンに追加。Scaleを10にし、拡大しておきましょう。
そして、Inspectorビューにテクスチャをドラッグし追加します。Tilingの数字を変更することにより、敷き詰めるテクスチャの数を変えることができます。
円柱の内側にテクスチャがつなぎ目なく表示されていることが確認できると思います。
円柱は内側にしかメッシュが無いため、外側から円柱を見るとすけてみえます。
幾つかよく使う内側メッシュのモデルを予め用意しておけばテクスチャ自体はUnityで貼ることができるので便利だと思います。