古い建物をモデリング

今回は建物のモデリングについて。また、Unityに持っていく手前の最適化についても書いていくことにします。
Shade3Dでのレンダリングを飛び越えてリアルタイムに持っていくことになるので、無駄を極力省く必要があります。
ターゲットは日本の昔の古い建物ですので、建築の知識も入れていきます。

建築の知識とモデリングについては、チュートリアルサイトの「建物を作る」でも解説していってますので、こちらも合わせてご参照くださいませ。
すごく長いですが、いくつか知識を取り入れていると理解が早まるかと思います。

なお、筆者は建築の専門家ではありませんので、浅い内容で書いております。
ただ、これを入口として「建築って奥が深いな」という空気が伝われば幸いであります。
ある程度知識を仕入れていろいろ見て回ると面白いですよ。家はどこを見渡しても存在するわけですので。
あと、古い建物が今の現実世界だとレアというのも気づくかと思います。

木造の建物の構造

今現在の建物と、今回のVRでテーマにしている建物はモデリングの流れはほぼ変わりませんが大きく異なる点があります。
木造建築の場合は「木造軸組構法」と言われる、柱や梁(屋根を支える横向きの木材)などをベースとした設計手法があります。

木組みを作ってから、最後に床や壁を取り付ける流れになります。
3DCGではこれに沿ってモデリングすることで、木造らしさを出します。
また、「木造軸組構法」では「在来工法」と「伝統工法」に分かれ、今回の古い建物のモデリングでは「伝統工法」の組み方を行うようにしています。
なお、「伝統工法」は耐震の問題や建築基準法に沿っていないということで、現在は建てることが難しいのだそうです。
でも、VR空間はなんでもありですので、昔の建物を再現できると素敵ですよね。
ざくっとにはなりますが、「伝統工法」での木造建築の特徴をとらえつつ、流れを追いかけてみます。
「伝統工法」の場合は、木材同士の接合で金具を使用しない、
「筋交い」という壁に斜めに配置して補強する木材を入れない(入れることが少ない)、などの特徴があります。
ただ、「在来工法」と「伝統工法」の明確な区別は難しいのだそうです。

建物は、地面と接する部分に「基礎」を設けます。
「在来工法」の場合は基礎は鉄筋やコンクリートで固めますが、「伝統工法」の場合は石(「礎石」と呼びます)を並べています。
その上に木の柱を立てることで、木材の腐食を防いでいます。

木組みは以下のようにしました。
基礎→柱→横向きの木材(梁や桁など)→屋根周り、の木材を配置していってます。

それぞれの部位で細かく名称は決まっているのですが、長くなるため省略します。
これに対して、順番に床、壁、屋根を作っていきます。

実際に現実世界で建物を建てる場合は、屋根を先に作って、床、壁、となるとのこと。これは早い段階で雨を防ぐ目的があるからだそうです。
建物の右半分は「土間」のスペースで、直接地面となりますので床は張っていません。
天井を張った場合は屋根の木組みはほとんど見えなくなるため、削除しておいてもいいかもしれません。

外壁は平面ではなく、段々がついています。
これは「下見坂張り」と呼ばれ、少し斜めに傾けた板を縦に複数重なるように貼り付けて、その上に「ささらご」という垂直の木材で押さえ込んでいます。
「伝統工法」ではよく見られる壁の種類になります。

以上が、ざくっとした日本の古い建物の構造になります。

テクスチャとマスターサーフェス

さて、ここからはShade3Dでのモデリングになります。
上記の木造の建物、実はテクスチャを3種類しか使っていません。
基礎の石で、以下の石のテクスチャ(512×512 pixel)を使用してます。
左が拡散反射のテクスチャ、右が法線マップのテクスチャになります。

建物の木材で、以下の木材テクスチャ(512×512 pixel)を使用してます。4種類の木材を格納しています。
左右でタイリング加工されています(タイリング加工は、前回解説したB2Mを使用してます)。

その他、白壁の部分で灰色一色のテクスチャを使用してます。

ブラウザ上では以下のようなイメージパートとマスターサーフェスパートになっています。

マスターサーフェスの「ground」は地面、「stone」が基礎の石、「wood」が木材、「white」が白壁のマスターサーフェスです。
注意点として、形状に表面材質を個別に割り当てるのではなく「マスターサーフェス」として材質を与えるようにします。
Shade3Dだけで完結するのなら個々に表面材質を割り当ててもいいのですが、
複数の形状で共通の材質を使用している場合は材質更新に手間がかかる、
Unityなどのリアルタイム系に渡す場合は、材質(マテリアル)は形状とは分離して管理する構造になる、という理由のためです。

リアルタイム系に渡したときは、このマスターサーフェス(マテリアル)とテクスチャをいかに少なくするかというのが速度面でもリソース面でも大事になります。
木造の場合は幸いいくら大きな建物でも、同じマテリアルを使いまわししやすいです。
また、異なる構造の建物が複数ある場合でも、マテリアルとテクスチャが増えることを抑えることができます。
そのため、リアルタイム時の速度では有利になります。
というよりも、建物がたくさんあるシーンの場合はこの部分を抑えておかないと、あっという間に速度低下につながってしまいます。

リアルタイム向けに最適化が必要な箇所

リアルタイム系に渡す際は、以下を頭に入れておくといいかと思います。
すべての形状は「シーンにたくさん配置する可能性がある」というのを頭の片隅に置いておき、常にテクスチャ数やマテリアル数を減らす努力が必要になります。

  • マテリアル数やテクスチャ数を少なくする
  • テクスチャサイズは2の累乗で指定(16×16、32×32、64×64、、512×512、512×256など)
  • ポリゴンメッシュの面数を減らす、見えない面は削除する
  • 同一マテリアルのポリゴンメッシュを1つに結合する

上から順番に優先順位が高いです。

今回の建物では使用していませんが、
テクスチャについては、1枚の大きめのテクスチャに複数のテクスチャ要素を敷き詰める、ということもよく行います。
これは、「アトラス化」と呼ばれます。以下のように詰め込みます。

これで、テクスチャの読み込みは一回で済むことになります。
また、材質の光沢や荒さ表現はリアルタイムではよく使われます。
それらもテクスチャ化してアトラス化すると、光沢が異なるマテリアルについても1つのマテリアルで表現できるようになります。
ただし、アトラス化した場合はタイリングによる繰り返しのマッピングができなくなる点に注意します。
キャラクタや小物類のマッピング用途となりそうですね。

リアルタイムでは、マテリアルの切り替えはコストがかかります。
ポリゴンメッシュの面数を減らすよりも、マテリアルやテクスチャの削減をまず念頭に置くようにしましょう。

また、特にVRではですが、建物にかなり接近する場合も多々あります。
その場合に、テクスチャの解像度が低いと萎えてしまいますので、Shade3D上でテクスチャの解像度が適切かもあらかじめ確認しておくとよさそうです。
これはテクスチャのサイズだけでなく、UVの割り当てによっても影響を受けます。
以下は、建物をUnityに持ってきてVR上で近づいたときの画像です。

こう見ると、テクスチャだけでなく、モデリングが粗い場合もすぐばれてしまいますね。

木材のマッピング

木材でのテクスチャは、ポリゴンメッシュの直方体として以下のようにマッピングされています。

柱はもっと長いのですが、ここではわかりやすく少し短くしてます。
ポリゴンメッシュのテクスチャの割り当ては「UV」を使用します。
UV図面では以下のように割り当てています。

テクスチャのU値の0.0~1.0を超える形で指定してます。こうすることで、横方向のテクスチャの繰り返しが行われます。
また、テクスチャは縦に4種類分並べているので、UVをずらしていくと以下のように異なるマッピングの木材を量産できます。

これだと、マスターサーフェス数もテクスチャ数も増えることはありません。
UVも、形状編集モードでUV図面上でずらすだけです。
これで、木材の個性を出していきます。

建物の場合は、木材ができれば後はそれを並べていくだけですので、特にこれといったモデリングのテクニックは使うことが少ないと思います。まんべんなくいろいろな機能を使うことにはなりますが、、。
ただ、はじめに「平面図」という図面を用意してそれを元に建物を立体化していく手順だったり、厳密な寸法指定など、建築モデリング寄りの知識が必要となってきます。
それらについては、チュートリアルサイトの「建物を作る」にて流れを書いています。

本記事の建物をモデリングするだけでも結構時間がかかってます。
建物の場合は、単純ですが反復操作が必要な作業がたくさんあります。これをなんとか解決できないものか、という課題が出てきました。
そうだね、プラグインだね。

ということで、次回はShade3D上で建物モデリングのための、プラグインを使った作業効率化について書いていきます。