初心者が Unity でウユニ塩湖みたいなものを作る

昨日 Unity で初めてのゲーム(ブロック崩し)をつくってみました伏見です。

今日は初心者の私が見た目に少し凝ってみたくなった結果の記録です。というか、最初からこれが作りたかったの。んで VR で中に入ってのんびりしたいなあ、なんてな。(初心者の私、といつまで言い続けられるのでしょうか。)

ウユニ塩湖の動画をみていて、作りたくなりました。無論行ったことはないので想像です。再現というより、こういうところに行きたいなあっていう願望みたいな感じになりつつあります。

こちらでプレイできます

動画はこちら

今回やったこと

まずは水面の作成

これには、Unity の Standard Assets に含まれている WaterProDaytime の Prefab を使用しました。Prefab というのは、雛形ですね。テンプレートとか、プログラミングでいうクラスとか、そういうものっぽい。ヒエラルキーでは青字で表示されます。

とりあえず設置してみて、まず気になったのが波の大きさ。そのままだと普通に海のようになってしまうので、波を優しくする方法を探しました。

調べてみると、波の表現は法線マップというものによって表現されているようでした。白黒でテクスチャの高さを表現する法線マップ(あってるかな…)を使って、ライティングに影響を及ぼすことで波の揺れ動きを表現しているようです。このファイル、みたところ単なる JPEG ファイルだったので、まず真っ平らのファイルを作成してみました。しかしそれではつるんとした面ができるものの、大きな水信玄餅の上にいるような感じになってしまったので、デフォルトのファイルのコントラストを下げることで優しい波にしました。ついでに Wave Speed を 1/4 にして波の速度も遅めに。

次は反射率の調整です。ウユニを自称するからにはぺかーんと写り込んで欲しいわけなんですが、これは簡単でした。Inspector で Watar Mode を Refractive(屈折) にするだけ。Reflective(反射)というのもありますが、水の下が透過しなかったので屈折モードを選択。欲をいえばフレネル反射をもっと表現したいので、水平線近くの色をなんとかしたいですね。

屈折モードにしたら水面が透過したのはいいものの、何やら妙に透過の解像度が低い。まあ今回はスルーしても良かったんですが、Inspector で Texture Size をあげると高精細になることが分かったので、256 → 1024 にしたところすっきりした見た目になりました。

空を作る

Unity で空を表現する基本の方法は Skybox というものらしいです。調べてみると、テクスチャを貼り付けた六面体を球に展開するから Skybox ということのようですね。なるほど。間違ってたらどなたかコメント投げてください。

というわけで、Asset Store にあった Classic Skybox を使わせてもらっています。調べても Unity 4 の情報ばかりで戸惑いましたが、Unity 5 では Lighting タブの中に設定が移動しているようですね。こちらに Skybox のマテリアルを投げて完了。そのままでは暗かったのでちらっと明るくもしました。

画角を広げる

これは広さを演出するために行いました。カメラの Field of View を60から70にするだけです。でもあんまり広げると違和感がありました。これもあんまり飛ばしすぎない値にしておいたほうが Oculus Rift で見たときに違和感ないんだろうなあ…でもあえて広大な視野角を見せる表現も作り方によってはありかもしれません。

地面の位置

ウユニ塩湖の動画を見ていたら、くるぶしまで来ないくらいの水位のものが多かったので、そのくらいのところに地面を設置。これでものを置けるようになりました。この地面の色によって水面の色も影響を受けるので、こっちで色も調整。かなりいい感じに

BGM

これは最後にやりましたが、そこまでの部分を製作中になんとなく似合うなあと思って浮かんできたジムノペディを採用しました。今回はどこからともなく MIDI を拾ってきて、きつめだったベロシティをゆるくして、Wet 目のロングリバーブをかけることで空間の広さを演出するのとともにゆったりした雰囲気を。

おまけ:ピアノを置く

Asset Store にピアノのモデルがあったので、お借りして置いてみました。よくあるじゃないですか、こういう延々広がる水面にグランドピアノが佇むシーン。まあ今回は佇んでるわけじゃないんですけど。

やりたいこと/できてないこと

ToDoリストの丸コピー

とりあえず、ゆーったり雲を動かしたいですね。気持ちが落ち着きそう。