[Unity+Oculus]ParticleSystemでVR星空をつくる

2020年11月5日

VRゴーグルを利用すると、室内でも遠くを眺めることができるので凝った目を解すのに良い気がしています。夜空の星々を見るのは目を休めるのにぴったりですが、室内で横になって見られると便利だと思い、VR空間内に星空をつくってみることにしました。

Unityには、アニメーションする大量の粒子オブジェクトを一度に生成できる "Particle System" という仕組みが存在します。これを利用して、ドーム状の星空を作る手順を紹介します。

以下の手順は "Oculus Integration" の導入が済んでいることが前提となります。まだ導入を行っていない場合は以下の記事を参考にしてください。

OculusのVRアプリ作成チュートリアルをやってみる

空間を真っ暗にする

暗闇に星が浮かぶようにしたいので、デフォルトの背景色を黒にし、光源をなくします。

新しいプロジェクトに "Oculus Integration" を導入した後、デフォルトのカメラ(Main Camera)とライト(Directional Light)を削除して、VR用カメラのプレハブ OVRCameraRig を追加します。プレハブのあるパスは以下のとおりです。

Assets/Oculus/VR/Prefabs/OVRCameraRig.prefab

追加した OVRCameraRig の子要素である CenterEyeAnchor を選択します。

OVRCameraRigにあるCenterEyeAnchor

選択すると表示されるインスペクタービューで、空間の背景色を単色(Solid Color)の黒にします。これでデフォルトの背景である空が真っ黒に変わります。

カメラに映るデフォルトの背景色を変更

星となるパーティクルの基本設定

主役の星を作成します。ヒエラルキーに Effect > Particle System を追加します。

パーティクルシステムをプロジェクトに追加

インスペクターを開き、以下のようにメインプロパティを変更します。各プロパティの詳細は下に記載します。

ParticleSystemのメインプロパティの設定例

設定値は一例であり、好みに応じて変化させてください。

Start Lifetime

粒子の消滅までの時間です。まず、項目の右端にある逆三角形をクリックして Random Between Two Constants を選択します。

二つの入力欄が現れるので、40〜60に設定します。これによって各粒子消滅までの時間が40〜60秒のランダムな値に設定されます。

Start Size

同様に "Random Between Two Constants" で発生する粒子のサイズもランダムになるよう設定します。

この例では 0.05〜1.2 としました。

Start Color

同じく若干黄色みを帯びるように幅をもたせます。

Max Particles

粒子の最大数を設定します。ここでは 10000 としました。

パーティクルの詳細設定

以上の設定を終えたら、次は粒子の形状や発生の仕方を変更します。

Emission

タブ Emission では、粒子の発生量を変更できます。

時間経過による複雑な発生パターンなどを設定できますが、今回は Rate over Time を 150 にするだけです。これで毎秒の粒子発生量が150となります。

Shape

タブ Shape を開き、その中の ShapeHemisphere とし、Radius を 200 にします。これで粒子の発生箇所が半径200の半球状となります。

しかし、半球内部で粒子が発生してしまうとカメラに近すぎるので、半球の表面で発生するように変更します。これは Radius Thickness を0にすればOKです。

ParticleSystemのShapeタブ

Color over Lifetime

それらしくなってきましたが、粒子が急に現れたり消えたりするのが目に付きます。なので、粒子のフェードインとフェードアウトを設定します。

タブ "Color over Lifetime" で Gradient を選択し、エディターを表示します。

GradientEditor

このようなウィンドウが現れます。ここでの操作は少し特殊です。

まず、色が表示されている四角の左右の上下に矢印があるのを確認してください。今回は上側の矢印のみ操作します。

左上の矢印をクリックすると、下の方にアルファ値を操作するスライダーが表示されますので、アルファ値を0にしてください。同様に右上もアルファ値を0にします。

その後、色が表示されている四角の直上をクリックしてみてください。新しい矢印が追加されるはずです。その Location を30%に設定し、アルファ値は255としてください。

GradientEditorでアルファ値を操作

同様にもう一つ矢印を追加し、Location を70%に、アルファ値は255とします。最終的に以下のようになればOKです。

GradientEditorでフェードインとフェードアウト

これで、徐々に色がはっきりする粒子ができます。

間違って追加してしまった矢印は command + delete で削除できます。

以上でパーティクルの設定は終了です。シーンビューが以下のように表示されるはずです。

ParticleSystemの粒子発生のシミュレーション

実行結果

スクリーンショットだと実際より見難くなっていますが、星空が見られます。

ParticleSystemによるVR空間の星空

アプリ起動時の時点で満天の星空にしたい場合は ParticleSystem のプロパティ Prewarm を有効にします。

以上、OculusのVRゴーグルで見られる星空のつくり方でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です