BlenderとUnityで作ったものをVR(Meta Quest/Oculus Link)で動かします

ブログの女の子を作る #32 UnityのTerrainでキャラを動かす世界を作る【Unity】

 
前回は、Motion Libraryのモーションを使ってキャラクターを動かしてみました。
 
はしごを登る、ブリッジする、ブレイクダンスする、などいろんなモーションがありました。
 
これを見ていると、「Fallout4の拠点の人みたいに、キャラが自動で移動して、移動先で何かのモーションをする」と楽しそうな気がしました。Fallout4では、拠点をクラフトして入植者を集め、人々が生活しているのを眺めるのがとても楽しかったんですよね。
 
といっても、いまの世界は家とベンチと木が数本 だけ。このままではキャラを動かしても寂しいですので、UnityのTerrain機能と各種アセットを使って「キャラを動かすための世界」を作っていきます。



(1) Terrainで地形を作る

Unityには「Terrain」という機能があり、山や谷などの地形の盛り上がり・凹みを簡単に作ることができます。Blenderのスカルプト機能みたいな感じですね。
 
ちなみに、「Gaia」という地形を簡単に作れるアセットを購入してるのですが、そこまで広大なワールドを作るわけではないので、今回はTerrainだけで作っていきます。
 

いまの世界と作りたい世界

いまの世界です。
とてもシンプル。
 
まずは、どんな世界にしたいかを考えておきましょう。
・キャラが動くのを眺めたいので世界は小さ目
・周りを山と木で囲む
・池があり、周りに散歩道を作る
・小さな川と橋
・ベンチと街灯を設置する
 
こんな感じでしょうか。
 

「Terrain」で地面を作って高さを上げる

あとからを作りますので、「Terrainのオブジェクト」をHierarchyに追加した際、全面的に地面の高さを上げておきます。
 
Inspector – Terrain」で「Set Height」を選択し、設定したい高さを「Height」に入力してから、「Flatten」ボタンをクリックします。
これで、すべての地面が高くなります。
 

周りを山で囲む

地平線を隠すため、とりあえず周りを木で囲んでみました。
なんか微妙な感じですね。。。やはり、山で囲むのが良さそうです。
 
Raise or Lower Terrain」を選択し、「Brush Size」でブラシの大きさ、「Opacity」でブラシの強さを調整しながら山を盛り上げていきます。
 
Paint Texture」を使って、山に「緑色の草のテクスチャ」を塗っていきます。
 

木をランダムに生やす

山はできましたが、木の違和感がスゴイ。
そういえば、木は一本一本配置するのではなく、「ブラシで塗る」ことができるのでした。
 
まずはすべての木を削除しておきます。
 
Paint Terrain」ボタンの隣にある、「Paint Trees」をクリックし、「Edit Trees …」の「Add Tree」で木のオブジェクトを設定すると、ブラシで木を配置できるようになります。
Tree Density」で木を配置する密度、「Tree Height」で木の高さを調整、「Random?」にチェックでランダム配置になりますよ。
 
木のオブジェクトは「Standard Assets」の「Broadleaf_Mobile」を使いました。「Broadleaf_Desktop」の方がキレイですが、木の形がいまいちだったのでモバイル版を使ってます。こちらでも十分キレイだと思いますよ。負荷も低そうですし。
 
調子にのって木を配置しすぎると、負荷が高くなる原因にもなりますので、ほどほどで。
とはいえ、木から遠ざかった時に「木の表示を簡略化して負荷を下げる」仕組みもあるので、そこまでの心配は必要ないかも知れません。
 

木を風になびかせる

このままでは木は動きませんので、木が風になびくように設定しておきます。
 
HierarchyのTerrainオブジェクトに「Wind Zone」をアタッチし、パラメータを調整します。
数字が大きすぎると台風みたいになってしまうので、「Main:0.1、Turbulence :0、Pulse Magnitude:0.5、Pulse Frequency:0.01」くらいにしてみました。環境にもよると思いますが、これで葉っぱがそよそよ揺れます。
 

ライトマップのベイク速度が10倍になった

Terrainで木を生やしていると、画面右下に「Baking…」と表示されて、しばらくCPU使用率が100%になる現象が起きてました。調べて見ると、オブジェクトが増えたり減ったりした時に、影を焼く処理が実行されているようです。
 
描画に必要な処理なので仕方ないとはいえ、時間を測ってみると97秒もかかってました。これは遅い。。。
 
Lightingタブ」の「Scene」の一番下にある「Auto Generate」のチェックを外すと、勝手にベイクすることは無くなりますが、「Generate Lighting」ボタンで手動ベイクする時には時間がかかってしまいます。
 
更に調べて見ると、CPUではなくグラボ(GPU)を使ってベイクするステキ機能があるらしい。
 
設定も簡単で、「Lightingタブ」の「Scene – Lightmapping Settings – Lightmapper」で「Progressive CPU」を「Progressive GPU(Preview)」に変更するだけでした。
 
この状態で処理してみると、ベイク時間が「97秒→10秒」に短縮されました!ほぼ10倍です!
グラボは「GeForce RTX 2060 SUPER」を使ってます。
 
これだけ速ければ、Auto Generateを常時オンにしても良いかも知れませんね。
 

(2) 池と散歩道を作る

周りを山で囲めましたので、次は池と周りのを作っていきます。
 

「VRWaterShader2」で水面を作る

既に地面の高さを上げてますので、地面とほぼ同じ位置に「水面」を配置しておけば、地面を掘った時に池が出てきます。
 
水面は、手持ちの「AQUAS 2020」を使っても良かったのですが、水面の表現が少し気になったので、「VRWaterShader2」というシェーダーを使わせて頂きました!
 
デモシーンを起動し、サンプルの「水面のオブジェクト」を持ってくるだけで使えます。
水面の表現もイメージ通りでした!「WaterFlow」は流れがあるので、川に使えそうですね。
 
池で使えそうなのは「WaterLarge」ですので、これを作業中のシーンにコピーします。
海を作る場合はこれくらいのサイズですが、今回は池ですので、もう少し小さくても良さそうです。
 
水面の高さは、地面の少し下にしてますよ。
これで水面の準備ができました。
 

地面を掘って池にする

Terrainで「Shiftキーを押しながら左クリック」すると、地面を凹ますことができます。
 
ブラシの形と大きさを調整しつつ、池を作っていきます。
 
凹ませすぎても、「Shiftキーを押さないで左クリック」すれば盛り上がるので、修正も簡単です。
 
VRWaterShader2は、「Common – Base Color」で水面の色、「Tiling」で水面テクスチャの数、波の重なりを「1st wave」から「4th wave」で設定できます。
 
波の高さも調整できるので、説明サイトを参考にして設定していきます。
 
池なので、波の高さと動きを控えめにしてみました。
 

池部分を砂地にする

水中にまで草地が続いてるのは違和感ありますので、池部分を砂地のテクスチャで塗っていきます。
 
水面のシェーダーを非表示にすると作業がしやすい。
 
自然な感じになりました。
 

「Grass Flowers Pack Free」で草を生やしてみる

Terrainには木だけでなく「草や花を生やす」機能もあります。
 
どんな感じで生えるか試してみましょう。
 
テクスチャ画像には「Grass Flowers Pack Free」を使わせて頂きました。
 
まずは設定そのままで、草の「grass01」を生やしてみます。
草の背が高い!しかも斜めすぎる!
 
高さや幅は、「Edit Grass Texture」で設定できました。
ビルボードはオフにしてますよ。
 
そして、草が斜めになってたのは、風が強く吹いてる設定になってたからでした。
 
木で設定した「Wind zone」と同じ設定を使うのかと思ってましたが、別箇所に専用の設定がありました。「Terrain Settings」ボタンをクリックし、「Wind Settings for Grass (On Terrain Data)」で設定できます。
Speed:0.3、Size:0.2:Bending:0.1」くらいにしておきます。
 
良い感じに草が生えました。
 
草や花はあとからまとめて生やしますので、「Shiftキーを押しながら左クリック」して消しておきます。
 

池の周りに道を作る

池の周りに散歩道を作っていきます。
 
アスファルトみたいなものを配置することも考えましたが、今回は「砂地のテクスチャ」を塗って道にします。
 
テクスチャを塗る時は、周りのオブジェクトが一時的に消えるので、とても作業がしやすい。
 

余分な木を消して道を広げる

最初に木を生やし過ぎたので、道がなく真っ暗です。
 
余分な木を削除しておきます。
 
光が差し込んできましたよ。
 
どんどん道を作っていきましょう。
 
もうすぐで池を一周します。
 

散歩道ができた!

池の周りに散歩道ができました。
 
木漏れ日が良い感じです。
 
葉っぱにも影があるのが良いですね。
 

「Rock and Boulders 2」で岩を追加する

池の中が寂しいですので、大き目の岩を入れておきます。
 
アセットストアを探したところ、「Rock and Boulders 2」という、ほど良くリアルな岩アセットがありました。
 
適当に積み重ねていきます。
 
岩の種類も結構あるので、とても使いやすい。
なぜか釣りがしたくなってきましたよ。
 


(3) いろんなアセットを配置する

ベースとなる地形がだいぶんできました。
 
地形で残ってる「」を作りつつ、いろんなアセットを配置していきます。
 

「Free Steel Ladder Pack」のハシゴを置いてた

まだ紹介していませんでしたが、家の前に謎のハシゴを配置してました。
 
使わせて頂いたのは「Free Steel Ladder Pack」というハシゴのアセットです。
 
まだ作成中なんですが、こんな感じでキャラがハシゴを登る予定です。
キャラは、ハシゴが置いてある場所で「ハシゴを登るモーション」を実行するだけなので、キャラがズレて表示されるんですけどね。。。登っている雰囲気は味わえそうです。
 

小さな川を作る

池に流れ込む「小さな川」を作ります。
位置はこの辺りで。
 
VRWaterShader2の「WaterFlow」を使います。
 
オブジェクトを長く伸ばすと「水面のテクスチャ」も伸びてしまうので、「Tiling」設定を「X:1、Y:20」くらいにしてみました。
 
池の水面の同じく、地面に埋めれば準備OKです。
 
Terrainで川部分の地面を掘っていきます。
 
川の両側に少し凹凸をつけると自然です。
 
川の最後は「山部分」に突っ込ませます。
 
山側から見ると、こんな感じになりました。
水面がとてもキレイですね。
 
川部分を砂地のテクスチャで塗れば完成です。
 

オブジェクトで橋を作ってみる

次は「川にかける橋」です。まずは自分で作ってみることにしました。
 
Cubeオブジェクトを配置して、
 
形を整えていきます。
 
岩のマテリアルを貼って完成!
なんですが、岩の板を置いただけにしか見えません。
 

「Shed, Tools, Bridge and Fences」で橋を置く

やはりアセットを探しましょう。
 
Shed, Tools, Bridge and Fences」という素晴らしいアセットが見つかりました。しかも無料。
 
桟橋のようですが、川の橋にも十分使えます。
 
クオリティが超高い!
 
奥の広場の方にも設置してみました。
 
これで川に橋がかかりましたよ。
 
今回は池と小さな川だけですが、このアセットにはフェンスや小屋も付いてるので、もっと大きな湖も作ってみたくなりましたよ。
 

本格的に草と花を生やす

草と花を生やしていきます。
 
使ったテクスチャは「grass01、grass02、grassFlower04、grassFlower05」の4種類。
 
生やし過ぎないようほどほどに。
この辺りは、テントがあるとキャンプができそう。
 
池の周りは花多めにしてます。
 

「Bench」のベンチを増やす

ベンチを増やしていきます。
 
家の前にも配置してる「Bench」アセットを使わせて頂きましたが、これもクオリティ高いですね。
 
公園のベンチっぽく、2つ並べてみました。
 
散歩道のベンチは、池に向かって配置します。
 
ベンチがあるだけで、リアルさが増す気がしますよ。
 

「Wispy Skybox」で空を作る

いまの空は、Unity標準のSkyboxを使ってます。
太陽だけなので、空に「」を追加していきましょう。
 
実は、雲のアセットを購入済みで試してみたのですが、カメラやコントローラと競合するのか、私の環境(2018.4.1f1+Meta Quest+Oculus Link)では残念ながらうまく動きませんでした。
 
今回は「Wispy Skybox」アセットを使わせて頂きました。
 
雲は動きませんが、落ち着いた空ができました。
 
雲があるのは良いですね。
 

「Modular Medieval Lanterns」でランタンと街灯を置く

最後のアセットは、ランタンと街灯です。
 
Fallout4でも、クラフトで配置しまくるほどの街灯好きです。
 
軒先にはランタンをぶら下げます。
 
動かないオブジェクトは、Inspectorで「Staticにチェック」を入れておきます。
これで「Batching Static」にもチェックが入ります。オブジェクト描画時の負荷が下がるようですよ。
 
散歩道に街灯を配置していきます。
 
一定間隔になるように。
 
橋にも街灯を配置しておきます。
 
街灯のろうそく部分は、アニメーションで揺れてます。
街灯やランタン自体は光らないので、夜に使いたい場合はライトを追加すると良いかも知れませんね。
 

世界ができた

一通りの作業が完成しました!
自然豊かな世界になりましたよ。
 

まとめ 

キャラを動かすための世界を作りました。
 
3Dモデリングも楽しいですが、Terrainやアセットを配置して世界を作るのも楽しいですね。
 
スポンサーリンク

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

ブログの女の子を作る #31 Motion Libraryのモーションでキャラを動かす【Unity】

ブログの女の子を作る #33 NavMeshで巡回してモーションする【Unity】


最近のコメント

だーしゅ
IT関係のお仕事してます。
3Dモデルの女の子は「ブログノ・スージー」。VRは楽しいですね。

[当ブログについて]