ビルの制作記録

はじめに

ここ何日かの間、ビルのモデリングを行っていました。 残念ながら完成には至りませんでしたが、その作業記録を残すことにします。

未完

ポリゴンを差し込んだ形状について

今回はポリゴンを差し込んだ形状を多用しています。 ハイポリのモデリングにおいてはポリゴンを差し込んだ形状は避けられるようです。 ポリゴンを差し込んだ形状はその境界面の不自然なのが目立ちます。

ポリゴン差し込み

ポリゴン差し込み

この不自然さを気にしないのであれば、ポリゴンを差し込んだモデルを作っても問題ないようです。

ポリゴン差し込みでモデルを作る利点は2つあります。 1つはポリゴン差し込みだとポリゴン数が減ること。 もう1つは構造が分離しているので作業がしやすいことです。

今回はそこまでアップにしてモデルを映すつもりはないので、 作業のしやすさを取ってポリゴン差し込みを多用しました。

アセットの作成

ビルを作り始める前に、必要になりそうな小物を使い回しできるように それぞれ別blendファイルで作成します。

窓や扉の作成

今回は窓をBooleanで作成します。

まずは原型を作ります。

CubeをSキーで拡大します。

窓の作成

次にCtrl-Rでループカットをします。

窓の作成

IキーのInsertとEキーのExtrudeで窓の形を作ります。

窓の作成

窓の作成

Booleanを利用して型をつくります。 新しいCubeのオブジェクトを作り、BooleanでDifferenceにします。 型のオブジェクトの原点がちょうど壁面の位置となるようにしておくと、 型を抜くときが楽です。

窓の作成

窓の作成

型のオブジェクトのエディットモードに入って2mmほどずらします。 Booleanを使ったときに余計な面が生成されるのを避けます。

窓の作成

この型を使ってBooleanを使えば窓が簡単に作れます。

窓の作成

Booleanを使ったあとは面がNゴンになるので、そこは注意が必要ですが。

同様にしてバリエーションを作っていきます。

窓の作成

窓の作成

窓の作成

角の場合も同様に作ります。

窓の作成

自動ドアのセンサー部分やドアの取手などは別オブジェクトで作成し、 型とは分離しておきます。

窓の作成

窓の作成

今回はポリゴンの差し込みで十分なので、これらのパーツは型には含めません。

ベランダ

Cubeを用意します。 壁に設置する面の面は不要なので削除します。

ベランダの作成

IキーのInsertとEキーのExtrudeとXキーでの不要な面の削除で形を作ります。

ベランダの作成

Iキーで面の挿入をしました。

ベランダの作成

Xキーで余計な面を削除します。

ベランダの作成

辺を選択して移動させました。

ベランダの作成

Eキーで押し出しします。

ベランダの作成

余計な面が生成されるので削除します。

ベランダの作成

横に広げます。 横の部分を選択して移動します。

ベランダの作成

このようになりました。

ベランダの作成

下側もIキーやEキーを利用して作ります。

次に手すりのオブジェクトを作ります。 シリンダーを縮小しCubeを拡大縮小したものを追加します。

ベランダの作成

Arrayモディファイアをつけます。

ベランダの作成

ベランダから手すりを配置する位置を削ります。 あとで調整できるようにBooleanモディファイアを使います。

ベランダの作成

屋外用コンセント

CubeをベースにExtrudeやループカットなどを利用して形を作ります。

屋外用コンセントの作成

つまみをシリンダーを追加して作ります。

屋外用コンセントの作成

スムーズシェーディングを適用します。 オートスムースの角度指定やシャープ辺で必要な角を残したままスムースにします。

屋外用コンセントの作成

屋外用コンセントの作成

ケーブルを作ります。 Cubeを拡大縮小します。

屋外用コンセントの作成

カーブオブジェクトを用意します。

屋外用コンセントの作成

FullにしてBevelに0.005程度を入れます。

屋外用コンセントの作成

屋外用コンセントの作成

Bevelでは断面形状を指定することもできますが、 断面が円形でよいならば指定する必要もありません。 Resolutionが低いので円になっていませんが。

屋外用コンセントの作成

パラボラアンテナ

まずは土台から作ります。 Cubeをループカット、拡大縮小、Extrudeを使ってH状の形を作ります。

パラボラアンテナの作成

余計な面を削除してFキーで面を貼ります。

パラボラアンテナの作成

Eキーで辺を押し出します。

パラボラアンテナの作成

パラボラアンテナの作成

パラボラアンテナの作成

グリッドフィルで面を埋めます。

パラボラアンテナの作成

パラボラアンテナの作成

引き伸ばしてループカットを適当に加えます。

パラボラアンテナの作成

カーブ変形モディファイアで曲げます。

パラボラアンテナの作成

Cubeを追加して拡大縮小します。

パラボラアンテナの作成

シリンダーを適当に追加します。

パラボラアンテナの作成

次にパラボラアンテナ本体を作ります。 円を追加します。

パラボラアンテナの作成

グリッドフィルを使います。

パラボラアンテナの作成

Eキーで押し出します。

パラボラアンテナの作成

プロポーショナル変形で中央の頂点を選択して移動します。

パラボラアンテナの作成

Cubeを追加して縮小します。

パラボラアンテナの作成

ループカットをします。

パラボラアンテナの作成

面を押し出しします。

パラボラアンテナの作成

パラボラアンテナの作成

押し出した部分を移動します。

パラボラアンテナの作成

反対側も同様にします。

パラボラアンテナの作成

押し出しをします。

パラボラアンテナの作成

パラボラアンテナの作成

パラボラアンテナの作成

次のようになりました。

パラボラアンテナの作成

カーブモディファイアを使って次のような形状を追加します。

パラボラアンテナの作成

Ctrl-Jで2つのオブジェクトを結合します。

パラボラアンテナの作成

Cubeを縮小して配置します。

パラボラアンテナの作成

ループカットします。

パラボラアンテナの作成

Jキーで面を分割していきます。

パラボラアンテナの作成

頂点ベベルを行います。

パラボラアンテナの作成

パラボラアンテナの作成

IキーとY軸方向の移動を使って形を作ります。

パラボラアンテナの作成

パラボラアンテナの作成

次のようになりました。

パラボラアンテナの作成

これまでと同様にしてCubeをループカットしたりEキーを使ったりして パラボラアンテナと土台を接続する部分を作成します。 シリンダーは差し込んでいるだけです。

パラボラアンテナの作成

パラボラアンテナの作成

カーブオブジェクトを追加します。

パラボラアンテナの作成

すべてのオブジェクトをEmptyの子にしておきます。 こうすることですべてのオブジェクトを一括で動かせて便利です。

パラボラアンテナの作成

パラボラアンテナが完成しました。

看板の作成

CubeやCylinderの拡大縮小やEキーIキーなどを利用して作りました。

看板の作成

看板の作成

看板の作成

看板の作成

看板の作成

看板の作成

次の看板の角の丸みは辺のベベルを使って作りました。

看板の作成

看板の作成

看板の作成

看板の作成

看板の作成

看板の作成

のぼり

Clothを利用してみます。

Planeを拡大縮小し適当にループカットをします。

のぼりの作成

新しい頂点グループを作成し、ピンどめする頂点を選択して割り当てます。

のぼりの作成

のぼりの作成

のぼりの作成

Clothシミュレーションのモディファイアをつけます。

のぼりの作成

ピンどめする頂点を設定します。

のぼりの作成

再生するとシミュレーションが実行されます。 よい感じの形になったフレームでClothをApplyすることで形状を確定できます。 そのままClothシミュレーションにかけるとあまりにも動かなさすぎたので 微妙に斜めに傾けてからシミュレーションを開始しました。

のぼりの作成

あまり大きく変形するわけでもないし、Clothを使うまでもなかった気もします。

残りの部分を作ります。

のぼりの作成

ライト

シリンダーを縮小しループカットします。

ライトの作成

押し出しをします。

ライトの作成

ライトの作成

底を拡大します。

ライトの作成

ライトの作成

ループ選択して押し出しします。

ライトの作成

ライトの作成

拡大します。

ライトの作成

先端を縮めて全体を移動します。

ライトの作成

キューブを追加します。

ライトの作成

薄く縮小してループカットをします。

ライトの作成

押し出しをします。

ライトの作成

ループカットをします。

ライトの作成

丸くなるように持ち上げます。

ライトの作成

シリンダーを配置します。

ライトの作成

電球の部分に球体を配置します。

ライトの作成

ベースの部分を複製します。

ライトの作成

反転して縮小します。

ライトの作成

別オブジェクトに分離します。

ライトの作成

ライトの作成

底の部分を拡大します。

ライトの作成

ライトの作成

押し出しします。

ライトの作成

原点の位置を調整します。

ライトの作成

ベースとライトの部分に親子関係を作りました。

ライトの作成

カーブオブジェクトでコードを作って完成です。

ライトの作成

排気口

Cubeを縮小し、IとEで凹ませます。

排気口の作成

壁に設置する側の不要な面を削除し薄くなるように縮小します。

排気口の作成

別オブジェクトでCubeを縮小回転します。

排気口の作成

排気口の作成

Arrayモディファイアを利用します。

排気口の作成

排気口の作成

その他

その他いろいろ作りました。

階段

張り紙

街灯

パイプ

パイプ

IDマップ用のマテリアルの割り当て

IDマップ作成のため材質ごとにマテリアルを割り当てていきます。 IDマップ用なので適当にディフューズカラーを割り当てただけの適当なマテリアルです。

IDマップ用マテリアル

IDマップ用マテリアル

IDマップ用マテリアル

IDマップ用マテリアル

IDマップ用マテリアル

今回はテクスチャを全体で1つにまとめる予定のため、 個別にテクスチャの割り当てはしていません。 後で全部まとめてUV展開します。

ビルのモデリング

Cubeを拡大します。

ビルのモデリング

ループカットをします。

ビルのモデリング

押し出しをします。

ビルのモデリング

ループカットを加えます。

ビルのモデリング

重なってしまった面を削除します。

ビルのモデリング

重複頂点を削除します。

ビルのモデリング

さらに押し出しをします。

ビルのモデリング

ビルのモデリング

Cubeの不要な面を削除したものを配置します。

ビルのモデリング

ビルのモデリング

ビルのモデリング

ビルのモデリング

ポリゴン差し込みで作ると楽でいいですね。

同様にポリゴンを差し込みます。

ビルのモデリング

ビルのモデリング

Cubeを拡大します。

ビルのモデリング

直方体をBooleanで抜きます。

ビルのモデリング

ビルのモデリング

ビルのモデリング

窓をBooleanで抜きます。

ビルのモデリング

ビルのモデリング

ビルのモデリング

別blendファイルのオブジェクトを読み込むにはapendを使います。

ビルのモデリング

階段を配置します。

ビルのモデリング

ビルのモデリング

ビルのモデリング

ビルのモデリング

階段の先は外からはあまり見えないので作っていません。

次に看板や排気口などを設置していきます。

ビルのモデリング

ビルのモデリング

ビルのモデリング

ビルのモデリング

上に少し伸ばしてベランダを追加します。

ビルのモデリング

窓を抜きます。

ビルのモデリング

上面を複製して別オブジェクトに分離します。

ビルのモデリング

ビルのモデリング

ビルのモデリング

余計な面や頂点を削除します。

ビルのモデリング

ビルのモデリング

ビルのモデリング

ビルのモデリング

引き伸ばして直方体にします。

ビルのモデリング

余計な面を削除します。

ビルのモデリング

Cubeの余計な面を削除したものを追加していきます。

ビルのモデリング

ベランダになる部分も追加します。

ビルのモデリング

窓を抜きます。

ビルのモデリング

底面を少し凹ませます。

ビルのモデリング

ビルのモデリング

さらに窓を抜きます。

ビルのモデリング

ビルのモデリング

ベランダの手摺を追加します。

ビルのモデリング

排気口を追加します。

ビルのモデリング

ビルのモデリング

手すりや排気口を結合してひとつのオブジェクトにします。

ビルのモデリング

複製をして上に配置します。

ビルのモデリング

こちらは下とくっついているため底面のディティールは必要ないので削除します。

ビルのモデリング

Arrayモディファイアで一気に上に伸ばします。

ビルのモデリング

裏側にも小物を付けていきます。 裏側はあまり使うつもりないので適当です。

ビルのモデリング

ビルのモデリング

てっぺんを作ります。 適当にCubeを配置しました。 下からはほとんど見えないのでこれで十分でしょう。

ビルのモデリング

パラボラアンテナと看板を追加でいくつか配置しました。

ビルのモデリング

IDマップ用にマテリアルを割り当てていきます。

ビルのモデリング

全オブジェクトを選択してUV展開を行います。

今回は実験的に建物ひとつを一枚のテクスチャにまとめてみます。 今回のモデルはゲーム用ではありませんが、 ゲームなどではテクスチャの枚数やテクスチャサイズを減らすことが重要になるそうです。 今後ゲーム向けのモデリングも挑戦したいと思っているので、 今回はそれの実験を兼ねてテクスチャ一枚に収めてみることにします。 あとで詳しく書きますが、残念ながらこの試みは失敗しました。

複数オブジェクトをひとつのUVにまとめるのにはTexture Atlasというアドオンを利用します。 UV展開は自動展開にすべてを任せることにします。

まずはTexture Atlasのタブから「+」ボタンを押します。

Texture Atlas

次に「StartManualUnwrap」ボタンをクリックします。

Texture Atlas

するとすべてマージされたオブジェクトが生成されます。 このオブジェクトのUV展開を行ってから「FinishManualUnwrap」をクリックすると すべてのオブジェクトをひとつのUVにUV展開ができます。

Texture Atlas

今回は自動展開で全部済ませます。

UV展開

UV展開

OKを押してから少しの間blenderが応答なしになりましたが、 問題なくUV展開できました。

UV展開

壮観ですね。

ビルのモデリング

下からは見えない屋上にUVの大きな面積を使っているのが気になりますが、 修正するのも面倒なのでこれでよしとします。

TexToolsのマテリアルIDのベイク機能を使ってIDマップを作成します。

TexToolsのマテリアルIDのベイク

TexToolsのマテリアルIDのベイク

ベイク時にまたBlenderが応答なしになりましたがベイクできました。 ベイクした結果を保存します。

IDマップの保存

拡大してみると細かい部分では色が溢れています。

解像度不足

全部をひとつのテクスチャにまとめるのは無謀だったのかもしれません。 このまま作業を進めてみて問題が発生したらUVの展開をやり直すことにします。

マテリアルの作成

いくつかのマテリアルをSubstance Designerで作成してSubstance Painterへ持ち込みます。

壁のマテリアルの作成

メインの壁のマテリアルを作りました。 タイルっぽいパネルがはられているイメージです。

壁のマテリアル

Heightを「Tile Generator」と「Levels」で作成しました。

壁のマテリアルのheight

NormalにはHeightを引っ張ってきます。

壁のマテリアルのNormal

Hightから作成したNormalに「Fractal Sum Base」から作ったザラザラしたNormalを 「Normal Blend」で重ねています。

壁のマテリアルのNormal

Base Colorは「Fractal Sum Base」と「Perlin Noise」に「Levels」と「Gradient Map」を かけたものを最初の「Tile Generator」でマスクしてブレンドしています。

壁のマテリアルのBase Color

壁のマテリアルのBase Color

MetallicにはHighetに「Curvature Smooth」と「Levels」をかけたものです。

壁のマテリアルのMetallic

エッジの部分が明るく光を反射するようにしてエッジを強調しているつもりです。

壁のマテリアルのMetallic

Roughnessも「Curvature Smooth」と「Levels」を使いました。

壁のマテリアルのRoughness

ノード全体は次のとおりです。 ただのタイルでひび割れとかもないので非常にシンプルですね。

壁のマテリアルのノード

壁のマテリアル2つ目作成

もうひとつ壁のマテリアルを作りました。

壁のマテリアル

ザラザラした壁です。

「Fractal Sum Base」からNormalとBase Colorを作成しています。 HeightとRoughness、Metallicは「Uniform Color」です。

壁のマテリアル

Base Colorには「HSL」ノードを挟んでexposeすることで色合いを調整できるようにしました。

壁のマテリアル

壁のマテリアル

大理石のタイルのマテリアルの作成

大理石のタイルのマテリアルを作りました。 大理石のつもりです。

大理石のタイル

Substance Designerに入っているノイズにすでに大理石っぽいものがあるので それをベースにしています。

大理石のタイル

大理石のタイル

最初に「BnW Spots 1」と「Grunge Map 008」をブレンドモードMinで混ぜています。

大理石のタイル

大理石のタイル

「Cell 3」に「Directional Wrap」をかけます。 「Directional Wrap」には「Crystal 2」を斜めにしたものを与えています。

大理石のタイル

大理石のタイル

上記ふたつをMaxでブレンドします。

大理石のタイル

大理石のタイル

「Gradient Map」をはさみます。 大理石の写真から色を取りました。

大理石のタイル

大理石のタイル

大理石のタイル

「Cells 1」から大理石の白い部分を作ります。 「Gradient Map」で白と黒をはっきりさせて「Directional Warp」で歪めています。 なぜ「Gradient Map」を使ったのか覚えていません。謎です。 「Histogram Scan」とかでよかった気がします。

大理石のタイル

大理石のタイル

これらをまとめて大理石の色としました。

大理石のタイル

大理石のタイル

「Tile Generator」からタイルを作ります。 「Warp」で縁を微妙に歪めました。

大理石のタイル

大理石のタイル

「Flood Fill」と「Flood Fill to Random Grayscale」をつかって タイルごとにランダムなグレースケールを用意します。

大理石のタイル

大理石のタイル

大理石のタイル

「Directional Warp」にグレースケールを入れてIntensityを思いっきり大きくして 大理石のカラーをタイルごとにばらばらにします。

大理石のタイル

タイルの隙間の部分を白っぽい色にします。 これでベースカラーを完成とします。 「HSL」ノードを挟んでexposeすることで色味を調整できるようにしました。

大理石のタイル

大理石のタイル

「Curvature」ノードでタイルのエッジの部分を取り出します。

大理石のタイル

大理石のタイル

このエッジの部分をラフネスやメタリックに利用します。 エッジの部分の光の反射を強くすることでタイルのエッジを目立つようにします。

大理石のタイル

大理石のタイル

大理石のタイル

「Flood Fill to Gradient」でタイルごとのグラデーションを作って ハイトマップを作ります。

大理石のタイル

大理石のタイル

完成したタイルは次のようになりました。

大理石のタイル

大理石のタイル

地面のタイルのマテリアルの作成

次の動画を参考にしながらひび割れのあるタイルを作ります。 タイルの形状は動画とは変えています。

地面のタイル

地面のタイル

次にタイルのエッジが欠けているのを作ります。

地面のタイル

地面のタイル

最初に「Tile Sampler」で「Shape」を配置します。 「Size」のXとYを調整して縦長の形を配置します。 タイルと同じ感覚を開けたマスク画像を用意して「Shape」を配置する場所を 縦方向のタイルとタイルの隙間に制限しています。

地面のタイル

地面のタイル

地面のタイル

Mask Randomをexposeしました。 これによってエッジの欠けている量を調整できるようにします。 「edge_damage」という0から1までの値を入力として受け取るようにします。

地面のタイル

「One minus」ノードを使ってMask Randomに与える値を反転します。 これでedge_damageが大きいときにMask Randomが小さくなり、 Shapeの配置数が多くなってエッジが欠けている量が増えます。

地面のタイル

「Slope Blur Grayscale」に「Fractal Sum Base」と合わせて ガタガタの形状にします。 「Levels」ノードを挟んで白よりにします。

地面のタイル

同じもので横方向のものを作成してBlendノードのMaxで合わせます。

地面のタイル

これをハイトマップからSubtractで合成します。

地面のタイル

タイルとタイルの隙間の部分にコンクリートっぽいざらつきを与えるために 「Fractal Sum Base」をブレンドしています。

地面のタイル

タイルのエッジが欠けている部分に欠ける前のタイルの隙間の幅を少しだけ盛り上げて タイルが欠けてなくなったようにします。

地面のタイル

地面のタイル

地面のタイル

タイルそのものがなくなるようにしました。 このタイルがなくなる量もパラメータで調整できるようにexposeしました。

地面のタイル

地面のタイル

「Fractal Sum Base」に「Gradient Map」をかけたものをベースにして ベースカラーを作りました。 「Dirt」ノードに「Gradient Map」で茶色くしたものを薄く混ぜています。 「HSL」ノードを挟んで色をパラメータで調整できるようにしました。

地面のタイル

RoughnessやMetallicについては上で作った別のタイルとほとんど変わらず エッジの部分をちょっと反射を強くして適当な値を与えてあります。 ちょっとエッジを強調しすぎた気もします。

できあがったマテリアルは次のようになりました。

地面のタイル

パラメータを変えることで次のようになります。

地面のタイル

地面のタイル

地面のタイル

地面の四角いマンホールのマテリアル

マンホールのマテリアルを作りました。 これはリピート無しで配置して使う予定です。

マンホールの蓋

適当にShapeなどをつなげて金属部分のマスクを作成しました。

マンホールの蓋

タイルにはさきほど作ったタイルのプロパティを適当に設定したものを使っています。

マスク用の画像も出力に加えました。

マンホールの蓋

マンホールの蓋

Substance Painterでマテリアルを割り当てる

まずはBlenderでIDマップ用に割り当てていたマテリアルを削除して 1つのマテリアルだけを割り当てます。

マテリアルを1つにまとめる

BlenderはNormalマップがOpenGL系らしいのでそのように設定してプロジェクトを作ります。

Normal map formatをOpenGLにする

早速IDマップを使ってマテリアルを割り当ててみます。

マテリアルを割り当ててみるとすぐに解像度が不足していることに気が付きます。 パターンを思い描いたスケールにするとパターンが判別できないほど潰れてしまいます。 パターンが潰れない程度のスケールにすると今度はパターンが大きすぎます。 これでもSubstance Painterの最大サイズの4096×4096のテクスチャを利用しています。

パターンが潰れている

パターンが大きすぎる

パターンが大きすぎる

これはUV展開を見直す必要があります。

UVを見直す

全部を一枚のテクスチャに収めるのは無理があることがわかりました。 どう考えても解像度が足りません。 いくつかのテクスチャに分割することにします。

特に壁のタイルが潰れてしまうのは普通にUV展開するとどうしようもない感じです。 そこで地面や壁などの繰り返しているテクスチャはタイリングのリピートを利用してみることにします。 次のようにUVをはみ出すように展開するとテクスチャのリピートが効いてよい感じになります。

テクスチャリピートのテスト

テクスチャリピートのテスト

Substance Painterの投影方法はTri PlanarではなくUVにする必要があります。

この方法だとベイクしたテクスチャもリピートしてしまうので、 ベイクしたテクスチャは正常に利用できなくなります。 次の画像はベイクしたPositionです。 リピートしてしまって正常にベイクで来ていないことがわかります。

テクスチャリピートのテスト

Substance Painterではベイクしたテクスチャをもとに汚れなどを与えることができますが、 このようにリピートさせる場合にはそのようなことはできなくなります。 本当に単純なパターンで十分な、細かい書き込みが必要ない部分のみ、 このリピートの方法をつかいます。 今回のモデルでは、壁や地面などの単純なリピートでよい 面積の広い部分はこのテクスチャのリピートを使うことにします。 地面と壁2種類、そして屋上に乗っている直方体は、 どれも面積が広いけれども細かい書き込みも必要ありません。 同じパターンが繰り返すだけでよいのでこれらの部分に 本体とは別のテクスチャをそれぞれ割り当てることにします。

壁2種類と地面、屋上に乗っかってる直方体、 そしてその他窓や看板などの5つのテクスチャに分割します。

最初は1つのオブジェクトにUVを複数用意して作業を進めていましたが、 Substance Painterでは1つ目のUVしか見てくれないようで失敗しました。

UVの追加

UVの追加

Substance PainterでTexture Setごとに異なるUVを割り当てたい場合は、 それぞれを別オブジェクトに分離してからUV展開する必要があるようです。 1つのオブジェクトに付きUVは1つだけになるようにします。 今回はテクスチャをリピートさせたい壁は別オブジェクトに分離してUV展開することにしました。 次の画像を見ると壁と窓は別オブジェクトに分離していることがわかります。

壁と窓は別オブジェクトにした

壁のUV展開は次のとおりです。

壁のUV展開

壁のUV展開

UVの1×1の正方形から大幅にはみ出す形にしています。 UVの正方形部分にリピート可能なパターンを配置すると 壁のタイルがテクスチャの解像度によって潰れることを避けられます。

地面のUVも同様に展開しています。 これで地面のタイルが潰れることはなくなりますが、 そのかわりこのままではマンホールを配置できなくなりました。 マンホールを配置するとそれがリピートしてしまいます。 マンホール部分だけ別のオブジェクトにするということが考えられますが、 今回はマンホールの配置を見送ることにします。

地面のUV展開

同様にしてもうひとつの壁のUVもUVの正方形からはみ出す形で展開しました。

壁のUV展開

屋上の直方体のUV展開は次のとおりです。 タイル地にするつもりはないのでテクスチャのリピートを前提にしたUV展開は必要なさそうです。

屋上の直方体のUV展開

その他、壁や地面以外の窓や看板などをまとめたUVは次のとおりです。

その他のUV

なんだかこれは解像度が足りなさそうな気がしますが、 とりあえずこのまま作業を進めることにします。

とりあえず壁と地面タイルを割り当てて窓にもマテリアルを割り当ててみました。 Substance Painterだとmipmapが効いていないような見た目になっていますね。 何かここらへんの設定がどこかにあるのでしょうか。

Substance Painterでマテリアルを割り当てる

看板などはまだマテリアルを割り当てていませんが、 とりあえず途中のものを書き出ししてBlenderに持ち込んでみます。

今回はBlenderのCyclesを利用します。 PBR向けのノードとして「Principled BSDF」というノードが用意されています。 このノードにSubstance Painterから書き出したテクスチャを与えます。

Principled BSDFにテクスチャを与える

テクスチャは「Non-Color Data」として読み込みます。

Non-Color Dataとして読み込む

フリーのIBL画像を読み込みます。

IBL画像を読み込む

ビルのような大きいものに対して普通のIBL画像でよいものか気になりますが。

Hemiライトも適当に配置しました。

ライトを配置する

レンダリングをしてみると次のようになりました。

レンダリングをしてみる

壁のタイルのパターンは潰れていないことがわかります。 テクスチャがリピートしていることが分かるような気もしますが許容範囲内ということにします。

タイルの向きが一部食い違っている部分があります。 タイルの向きを揃えるためにUVを調整します。 UVエディタと3DエディタをSyncさせるとUVエディタの選択と 3Dエディタでの選択がリンクします。 これによって3Dエディタでの面がUVエディタではどこに当たるのかがわかります。

syncを有効にする

syncを有効にする

タイルの向きがおかしかった部分のUVを回転させてタイルの向きを合わせます。

タイルの向きを揃える

タイルの向きを揃える

タイルの向きを揃える

タイルの向きが正しくなりました。

タイルの向きを揃える

この調子で他のマテリアルを割り当てていこうとするとうまくいかないことがわかりました。 マテリアルがきっぱりと別れてほしいのに滲んでしまっています。

滲んでいる

滲んでいる

IDマップを見てみると確かに色が滲んでいて、どうやらIDマップの解像度が足りていないようです。

IDマップ

やはり看板や窓などを全部ひとまとめに「その他」へ割り当てたのは無理があったようです。 もう少し細かくオブジェクトごとにテクスチャを割り当てる必要がありそうです。

そうなるとビルのモデリングを最初から作り直したほうが楽な気がします。 このまま作業するとなると、 1つに結合してあるオブジェクトから選択して分離してUV展開をして個別にテクスチャを割り当てて、 といった作業が必要でとても面倒です。 配置する看板などのオブジェクトごとにあらかじめ展開とテクスチャの割当を済ませておいて、 その完成したオブジェクトを置いていくといった形で作業をしたほうがよさそうです。 すでに全部結合してしまった状態からリカバリーするより、 そうやって作り直したほうが楽そうな気がします。


気力が尽きて作業にも飽きてきたので 今回のビルのモデリングはここでいったんお蔵入りにすることにします。 また後日気力が湧いたらもう一度リベンジしてみるかもしれません。


ゲームなどのリアルタイム用のモデルはテクスチャのサイズや数を減らすことが重要だそうです。 今回のモデルは特にゲームに使うつもりはありませんでしたが、 今後ゲーム用のモデリングを行うときのために実験的な意味で 建物ひとつを一枚のテクスチャに収められるか試してみました。

結果は、ビルのような大きな建物を一枚のテクスチャにまとめるのは無理そうだ ということが分かりました。 描画負荷云々といった以前に解像度が圧倒的に足りなくなってしまうということが わかったのは今回のひとつの収穫です。

今後モデリングをする際はためらうことなくテクスチャセットを分けていくことにします。

おわりに

残念ながら今回のモデルの作成は未完に終わりました。 しかしその過程でいろいろと知見は溜まった気がします。 次回以降はきっと素晴らしいモデルをスムースに作れることでしょう。 次回の自分に期待することにします。