【Blender】シームレスな3Dオブジェクトを作る
タイトルのまんま。
Unityで地面を作るときに、うまい人は頂点シェーダとかを使うんだろうけど、おれにその才はなかった。
だからオブジェクト自体の繋ぎ目をなくそうという短絡的な判断。
テクスチャを使わずにシームレスな地面を作る
例えば、
こういう、水面や地面の三角ポリゴンが強調されていてかわいいゲームが多い。
この雰囲気のモデルを作るだけならチュートリアルは結構あって、
有名なこれとか、あとチュートリアルじゃないのも混じっているけど、
この人はRedditのローポリ作例スレでかなり見た(気がする、あんまり覚えてない)。
で、最終的には、こんな感じになってくれた。
実際に作る手順は以下。
- 平面を細分化
- プロポーショナル変形を使って変形
- 四角面を三角面に変換
- 他方の頂点を複製して繋ぎ目を消す
平面を細分化
平面を作ったら、
ツールシェルフの細分化。
左下の分割数は数字を直接入力すれば10以上にもできる。
実は、ここでフラクタルに値を与えてやれば、この後の頂点変形を飛ばせる。いろいろと調整できるのは後述の方だけど、全体的にノイズっていれば問題ないならフラクタルの方がはやい。
プロポーショナル変形を使って変形
適当に頂点を選択してプロポーショナル変形のランダムを選ぶ。
この青い丸とぎざぎざのとこ(アバウト)
その状態で移動すればランダムに頂点を変形できる。移動させながらホイールを回転すれば、変形を適用する範囲を調整することもできる。
もし中央だけノイズを強めにしたいながら、最初に選択する頂点を絞れば良い。
ノイズをかけ過ぎたと思ったときはUndoか、メッシュ→頂点→頂点スムーズを使うことでも動きを抑えられる。
頂点スムーズを使えばある程度なだらかになるので、ノイズ感をあまり出したくないときは積極的に使う。
四角面を三角面に変換
これはそのまま、全選択してメッシュ→面→面を三角化
Unityとしても三角面の方が都合が良い。
他方の頂点を複製して繋ぎ目を消す
要は他方の頂点が同じであればシームレスになるという安直な発想。
片方の頂点を消して、反対側の頂点を複製、移動する。
面張りは辺ループのブリッジを使う。繋げる頂点を選択してメッシュ→辺→辺ループのブリッジから実行する。
上下も同様。
完成したものにMatcapつけて配列複製するとこんな感じになる。
結構リピート感が気になる……?
この辺はしょうがないとして割り切ってしまった。ノイズにノイズをブレンドするのはUnityの方でやれば良い。
ちなみにノーマルマップでベイクすればテクスチャとして活用できる。
今回は地形としての利用なのでテクスチャは使わないけど、ブロックの表面の凸凹にも流用できそう。
cyclesでは無理だけど、Blenderレンダーならディスプレイスメントでベイクして、当たり前だがUVs Sculptingもできる。
※ずっと前からやりたくてもできなかったチュートリアル。