Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【アセット紹介】Weather Maker で天気を操作する【Unity】

これはUnity アセット真夏のアドベントカレンダー 2019 Summer!の22日目の記事です。

f:id:Raspberly:20190819100742p:plain

ハッシュタグ : #アセットアドカレ2019

 

今回はアセットの紹介をしていきます。
紹介するのはWeather Maker - Unity Weather System, Sky, Water, Volumetric Clouds and Light*1です。
天気など自然環境を構築できるアセットです。

 

こちらは去年の8月にありました、「アセットストアの購入金額に応じてアセットが無料でもらえるイベント」でいただいたものです。今まで積んでいた。
アセットストアで50ドル以上のお買い物をすると本アセットが無料で入手できました。

www.asset-sale.net

 

 

 

 

☀☂☁⚡☃⛅⛈☀☂☁⚡☃⛅⛈☀☂☁⚡☃⛅⛈

WeatherMakerはとても機能が多いため、今回は天気の操作をメインで取り上げます。

☀☂☁⚡☃⛅⛈☀☂☁⚡☃⛅⛈☀☂☁⚡☃⛅⛈

 

 

必要条件

--------------------------------------------------
-Weather MakerにはUnity 2017.4以降が必要です。
-Weather Makerにはテクスチャ配列のサポートが必要です。
-Weather Makerは、gles 2.0、WebGLDirectX 9.0以前ではサポートされていません。Unityのバグが原因でWebGLのサポートが壊れています。私は彼らと協力して修正を支援しています。
-iOS / MACでは、OpenGLレンダリングを使用します。Metalには、3Dテクスチャルックアップなどの機能が壊れています。

 

.NET設定

Unity2019.1以降の場合、PlayerSettingsで.NET4.5または.NET standard 2.0を有効にします。

Rain Makerの削除

もしプロジェクト内に
Rain Maker(同パブリッシャーの類似アセット)がインポートされている場合は削除します。

ColorSpaceをLinerに

PlayerSettings->OtherSetting->ColorSpaceをLinerにします。
ガンマよりも見た目がよくなるそうです。

f:id:Raspberly:20190802150120p:plain

 

 

 

 

 

サンプルシーンの確認

アセットをインポートしたら、サンプルシーンを見てみましょう。豊富にそろえてあります。

f:id:Raspberly:20190819100936p:plain

UIがものすごくちっちゃいことに気をつけましょう。
画面サイズによっては潰れてしまってしまうこともあります。

f:id:Raspberly:20190819101051p:plain

こちらでは、実際に天気を変化させたり、昼夜を切り替えることができます。

デモシーン

 

 

初期セットアップ

まずは初期設定から、簡単に紹介します。
詳しくは付属のReadme.txtを見てください。

シーンの作成

デモシーンをそのままいじってもいいですが、今回は新しくシーンを作ります。
この時、他に何もオブジェクトがない状態だと少し寂しいので環境を整えましょう。 

Assets/WeatherMaker/Demo/DemoResourcesにあるSimpleTerrainをシーン内に加えます。

f:id:Raspberly:20190819111829p:plain

これはWeatherMakerのデモ用として用意されたTerrainです。

f:id:Raspberly:20190819113011p:plain

もちろん自分で用意した環境や、アセットを使っても問題ありません。

 

  

シーンにプレハブを配置(重要)

UnityEditorのWindow->Weather Maker -> Add Weather Maker to SceneWeatherMakerPrefabを配置します。

f:id:Raspberly:20190805105801p:plain

 

ちなみに、MainCameraのProjectionがOrthographic(2D)になってる場合は
自動的に2D用のWeatherMakerPrefabが配置されます。

f:id:Raspberly:20190805110003p:plain

手動で配置したい場合は、Assets/WeatherMaker/Prefab/WeatherMakerPrefabを配置します。
2Dの場合はWeatherMakerPrefab2Dを。

 

 

このWeatherMakerPrefabこそ、このアセットをコアであり簡単に空や天気をコントロールできるプレハブです。
パーティクルやサウンドなど必要なものはすでにセットアップされています。
後はこいつを使うだけです。

また。各種天気の状態やデータはProfile(ScriptableObjectみたいなやつ)で管理されています。(後述)
このプレハブは、それらProfileを参照したりパラメータを変更する機能がありますが、
このProfileは直接編集もできまし、自分好みのProfileを新しく作成することもできます。

右クリックからCreate/WeatherMakerで作成できます。

f:id:Raspberly:20190822092046p:plain

今すぐ使うわけではありませんが、Profileがあることを知っておきましょう。

 

 

DirectionalLightの削除

シーンに最初から含まれているライトは削除しておきましょう。
太陽にすでにライトがあります。

 f:id:Raspberly:20190802162714p:plain

LightingSettings

Window/Rendering/LightSetting/EnvironmentのSkybox MaterialとSun Sourceを変更します。

SkyboxにはWeatherMakerに含まれているSkybox用のマテリアルWeatherMakerSkyBoxMaterialを、
SunSourceにはシーン内に配置したWeatherMakerPrefab内にあるSunを追加する。

 

f:id:Raspberly:20190802164201p:plain

Environment LightingをGradientColorに変更

Environment ReflectionsをCustomに変更

f:id:Raspberly:20190802153025p:plain

 

 

 

MainCameraの編集

Cameraパラメータの設定

Clear FlagをSolidColor
Backgroundを全て0(真っ黒)
Far Planesを2000以上
Rendering PathをDeferred
Allow MSAAを無効化

f:id:Raspberly:20190821024239p:plain

Rendering PathはDeferredにした方がよりよく見えるようになるそうです。

Tagの設定

シーン内のMainCameraのTagがMainCameraになっていることを確認しましょう。
通常はデフォルトで大丈夫のはず。

f:id:Raspberly:20190802151515p:plain

 

PostProcessingの設定

必須ではありませんが、見栄えがよくなるため設定しておきます。
PackageManagerからインストールしておきましょう。

実はWeather MakerにはPostProcessingを簡単に自動設定する機能が用意されています。

Window/Weather Maker/Setup Post Processingで、シーン内にあるカメラにPost Processing Stackが自動で設定されます。

f:id:Raspberly:20190819103640p:plain

f:id:Raspberly:20190819104206p:plain

ProfileはWeatherMaker側でいい感じに作成してくれたものです。
ワンクリックですべて設定してくれるのはとても便利。

 

 

 

 

実際に動かしてみよう

 

WeatherMakerPrefabの中にはいろいろ入っています

f:id:Raspberly:20190805115220p:plain

この中の内、
・WeatherMakerPrefab
・AudioManager
・DayNightCycle
・LightManager
の4つは必ず有効化していなければいけません

他のPrefabで、使わないものであれば無効化することができますが、Prefabの削除はしないようにしましょう。

 

 

一日のサイクルを作る

日が沈んでまた昇る、そんなサイクルを作ることができます。

f:id:Raspberly:20190821223256p:plain

f:id:Raspberly:20190821223443p:plain

DayNightCycleにアタッチされているWeatherMakerDayNightCycleManagerのプロファイルを見てみましょう。

f:id:Raspberly:20190821223733p:plain

Time Of Dayがシーン内での時間になります。
ここの値を変えることで昼夜の変えることができます。

f:id:Raspberly:20190821225332g:plain
月は必要でないのなら無効化することができますが、太陽を無効化してはいけません

サイクルを停止したい場合はSpeedを0に設定すれば時間が経過しなくなります。

ちなみに光に指向性を持たせたり、緯度・経度・惑星軸まで調節できます。
夕日の色を変えたりなど、こだわりたい方はとことんこだわれる。

 

 

 

雲を作る

雲を作ってみましょう。
雲の状態はいくつかプリセットがあります。これを選ぶだけで簡単に状態をセットできます。 

f:id:Raspberly:20190821230231g:plain

雲はもちろんリアルタイムで変化します。

 

 

 

 

 

天気の操作

それでは実際に雨を降らせたり晴れさせたりしていきましょう。

WeatherMakerPrefabにあるPrecipitationが雨や雪を管理するオブジェクトです。

f:id:Raspberly:20190821123447p:plain

インスペクターを見てみましょう。

f:id:Raspberly:20190821130008p:plain

 

Precipitationが天気を設定する項目です。

Rain(雨)、Snow(雪)、Sleet(みぞれ)、Hail(雹)、Customと別れています。
Noneにすると晴れます。

f:id:Raspberly:20190821130213p:plain

Precipitation Intensityが天気の強度です。0~1まで設定でき、1が一番強い状態です。

Precipitation Change Durationは天気の推移を行う時間です。

Precipitation Change Delayは天気が変わる際に遅延させる時間です。

Precipitation Change Threadは天気が変わるしきい値です。

 

  

 

雨を降らす

WeatherMakerPrecipitationManagerのPrecipitationでRainを設定します。

f:id:Raspberly:20190821231651p:plain

この時、Precipitation Intensityが0だと天気が発生しないことに注意しましょう。
最大の強さで発生させたいのなら1にすべきです。

 

以下が雨を降らせている場面です。
非常にわかりづらいですがポツポツ降っているのが見えると思います。

f:id:Raspberly:20190822000916g:plain

 

デモでは以下のように確認できます

f:id:Raspberly:20190821181917g:plain
デモと比べると実際に降らせた時は雨が非常に弱く見えます。
ここを少し変えてみましょう。



雨をカスタマイズする

雨はパーティクルシステムでできています。
これはPrecipitation/Rainの子オブジェクトに配置されています。

f:id:Raspberly:20190821232711p:plain

パーティクルを直接編集してもいいですが、
親であるRainに便利なコンポーネントがアタッチされているのでそちらを使います。

f:id:Raspberly:20190821234557p:plain

画面に収まらないくらいのパラメータ数!実際は下にさらに続きます。
それぞれツールチップでパラメータの役割が表示されています。

 

雨を強くしたいので、適当に以下の値を最大値まで上げてみます。

f:id:Raspberly:20190822002428p:plain

 

 

先ほどと比べるとだいぶ雨っぽくなりました。ミストもいい味出しています。

f:id:Raspberly:20190822001541g:plain

できればもっと土砂降り感も出してみたいところ。

 

 

 

雪を降らせる

雪を降らせるのは雨同様とても簡単です。
PrecipitationをSnowに設定するだけ。

f:id:Raspberly:20190822005206p:plain

f:id:Raspberly:20190828083358g:plain

 雨同様、カスタマイズも可能です。

f:id:Raspberly:20190828083457g:plain



 

 

晴れさせる

雨が降ったので次は晴れにしてみます。今から晴れるよ。

f:id:Raspberly:20190822011146g:plain
Precipitation Intensityを0、またはPrecipitationをNoneにします。
雲がある場合は、上記の通りNoneに設定すると完全に晴れます。

 

 

 

 

 

まだまだ紹介しきれない機能

ウェザーゾーンなどもまとめようと思ったのですが、かなり大変そうだったので概要だけ紹介します。

ウェザーゾーン

特定の範囲内に入った時あらかじめ設定しておいた天気にランダムで変化させるシステムです。

ヌルゾーン

雨や霧などをレンダリングしたくない時に使う領域です。
これにより、洞窟や屋内では天気の影響を受けません。

ボリューメトリッククラウド&フォグ&ライト

立体感のある雲や霧、光を出すことができます。

オーロラ/ライトニング

オーロラや稲妻を出すことができます

海を作り出すことはもちろん、水中に入った時の表現もできます。 

Weather APIとの連携

現実世界の天気と連動させることができます。

 

 

 

まとめ

Weather Makerを使えば簡単に天気や空を作成することができます。
プレハブを配置して、パラメータを変えるだけ!


また冒頭の通り、このアセットは非常に多くの機能を持っています
ほとんどの自然環境を再現できる上にかなり細かいカスタマイズができます。
更新頻度も短く、頻繁にバージョンアップもされています。

 

今回で全て解説するのは困難でしたので、HUD Navigation Systemと同様複数回に分けて解説記事を投稿する予定です。

 

 

 

 

参考文献

https://demo.digitalruby.com/WeatherMaker/Readme.txt

チュートリアルビデオ
--------------------------------------------------
最新のWeather Makerビデオ...

-Open Weather Map APIhttps://youtu.be/7_r7oibCM68
-uMMORPG / Mirrorチュートリアルhttps://youtu.be/BIFQqmG2Gws
-体積雲:
	-美しい空のセットアップ:https://youtu.be/1Xk2z858T1U
	-完全な概要(40分以上):https://youtu.be/ZoULn0mYbt8
	-レイマーチの最適化:https://youtu.be/Dwk4vF_6ogs
	-クラウドノイズエディター:https://youtu.be/NxuJ5H2mZwY
	-オーロラ/オーロラ:https://youtu.be/J9QSebVLEO8
-時間的再投影:https://youtu.be/JCzE7JfFPU8
-パフォーマンスプロファイル:https://youtu.be/-Yoj_OjJL4g
-完全なセットアップガイド:https://youtu.be/DHNnS6f85rM
-クイックスタートガイド:https://youtu.be/5IACGZULiDw
-新しいプレハブの概要:https://youtu.be/hWJF5v0s4gc
-天気ゾーン:https://youtu.be/11QoMD_qhHw
-ヌルゾーン:https://youtu.be/ZPBum2YcgB8

 

 

 

類似アセット

アセットストアには天気にまつわるアセットがたくさんあります。

 

aria1.amebaownd.com

bibinbaleo.hatenablog.com

www.asset-sale.net

www.asset-sale.net

Enviroは頻繁にセールも行われているアセットですし、UniStormはかなり昔からある人気アセットです。
是非お気に入りの天気アセットを見つけてみてください。

 

 

 

 

 

余談

ウェザーには「天気」「天候」「気象」などいろいろ意味がありますがこれらは何が違うのでしょうか?
実は以下のように分けられます。

気象
大気の状態・変化を物理現象として捉えた言葉

天気
数時間から数日間の気象状態

天候
1週間から1ヶ月程度の気象状態

気候
1ヶ月以上の長期的な気象状態

 

天気、天候、気象は表す期間によって名前が異なります
天気や天候など短期間の状態をひっくるめて気象というそうです。

「天気」「天候」「気候」「気象」 - 違いがわかる事典

 

 他間違っている箇所がありましたらコメントにお願いします。

*1:名前が長いので記事内では「Weather Maker」と表記します