VRChatに銀河を作る[2]
前回星の位置情報に基づいてパーティクルを出すVRChatワールドを作った。その後様々協力していただけて星の明るさや色、星座線などを反映できるようになったのでメモ。
ちなみに前回はこんな感じだった。
できたもの
こんな感じになった。
星を描画するシェーダとテクスチャはGitHubで配布してる。
VRChatでPublicワールドになったのでみんなも遊びに来てね。
HIPPARCOS SALONで検索。
約12万個の星空の中を歩き回れるワールドをVRChat Community labsに登録しました。名前は「HIPPARCOS SALON」です。みんな来てねー。#VRChat #VRChat_world紹介 pic.twitter.com/h2FK1sbPYX
— 🔫📛クワマイ✨🍣 (@beet_lex) April 17, 2019
天文について教えてもらう
前作のブログを書いたのち、天文に関する知識不足で完全に放置してた。するとブログやTweetを見てくださった星好きなVRChatユーザーが声をかけてくれました。
天野ステラさん
やっぱりあったかー。探せば見つかるのねVRChat
— 天野ステラ🌌バーチャル星空案内人 (@stellagear) September 16, 2018
GAIAだと重すぎでワールド化出来ないかな? https://t.co/e677JZ7iq2
@beet_lex 初めまして、天野ステラと言います
— 天野ステラ🌌バーチャル星空案内人 (@stellagear) September 16, 2018
突然ですみません。ヒッパルコス銀河ワールド、公開されていたりしますでしょうか?是非見せていただけたらと思います!
よろしくお願いします!
アルベールさん
@beet_lex 突然すみません! フォロー返しありがとうございます。
— アルベール: VRChatにいます (@forarvers) December 2, 2018
クワマイさんのブログ記事で銀河を作るを読んで興味持ちました。ワールドはpublicで公開されているのでしょうか?
自分の作品に反応していただけるなんて滅多にないので嬉しい。お二人とも天文に詳しい方なので、星の視等級と描画サイズの関係や、色の算出方法などを教えていただきました。そしてモチベーションも向上した。
今回の追加要素
前回書いた記事から増えた要素を説明。基本的には人様の色々を活用させていただいたので、自分がやったことと経緯だけ日記っぽく書いておく。
GPUパーティクル
前回はメッシュパーティクルエミッターを使って星を表示しており、個々の星を区別できなかった。GPUパーティクルなら色も大きさも個別に指定できて良さそうだったけど、シェーダは書いたことなかったので困ってた。
phi16さんからシェーダをもらうまでの話
遡ることこちらのTweet。
インセプション観たからVRCにトーテム持ち込みたくなってる
— 番匠カンナ@バーチャル建築家 (@Banjo_Kanna) September 8, 2018
ちょうど渋谷のモデルで遊んでいたので、ワンシーン再現してみました。本当はアニメーションしたら面白いのでしょうけど、Unity力皆無なのが悔しいです。https://t.co/Qean5c3iEz
— 🔫📛クワマイ✨🍣 (@beet_lex) September 11, 2018
街の3Dモデルといえば3dcelで公開されている渋谷のデータしか知らなかったので遊んでみた。今思うとこれがなかったら点群ビジュアライゼーションの話題になってなかったかも。不思議。
その後番匠さんは渋谷駅の点群データに興味を持ち、呼びかけ、みんなでウンウン言ってるとこにphi16さんが答えをダイレクトに持ってきた。
横から唐突にすみません、テクスチャにデータを突っ込んでつくってみました(エディタがまともに動く程度には動いてます、ただVRC上だと耐えられないとおもうので諸々考える必要がありそうです) / 位置情報の精度に問題があったりテクスチャ生成にバグがありそうだったりで完全ではないですが pic.twitter.com/Uej7y0g7Ti
— phi16 (@phi16_) September 15, 2018
この時番匠さんに声をかけていただいて、xRArchiというコミュニティに参加しました。その名の通り建築とXR。僕は建築全然わからないけど、お友達がたくさんできた。嬉しい。
そして点群つながりで龍さんがデジタル芸大プロジェクトとして点描芸大を作成します。けれどもこれは別の物語、いつかまた、別の時に話すことにしよう。
いや、話すつもりないからこれを見て。
ということがあってめでたく星の描画にぴったりなシェーダをいただくことができました。つまりHIPPARCOS SALONと点描芸大は同じシェーダ。芸大も宇宙も兄弟みたいなもの。
星のデータをテクスチャに埋め込む
phi16さんの書いたシェーダは、位置と色をテクスチャに埋め込んでいる。それ以前にシェーダがわかんないからvertとかfragって何って感じだったけど、落ち着いて読んだらテクスチャの作り方がわかったので書いた。詳しくはJupyter notebookに書いた。
ちなみにphi16さんはptsをテクスチャに埋め込んでくれるコードを書いてるけど、僕はHaskellがわかんないので見なかったことにした。すごくシンプルですごい。
星の見た目をいい感じにする
めでたく星が表示できたけど、ただの円盤で味気ない。なんかこう、ふわ〜っとして欲しかった。調べたところシェイピング関数と呼ばれるものがあるらしい。グラフを眺めてそれっぽい関数を書いた。
マシになった。
星座線
Cylinderを配置して星座線を描くことにした。星座線の端位置を計算しCSVで出力するコードを書いた。
Cylinderの配置は三田村綯夜さんにUnityのエディタ拡張ツールを作成していただきました。位置データに基づきスケールと回転をしてくれるもの。
最終的にこんな感じになった。
地球からの距離表示パネル
オノッチさんのPosition Shaderを使用させていただきました。テクスチャを書いて見た目をちょっと変えて、1m = 3.26光年に変換しただけ。
こんな感じで地球から何光年離れているかわかるようになった。
恒星名表示パネル
天野ステラさんに恒星名を表示するパネルを作成していただけました。ビルボードっぽく見せたかったので、下記のシェーダを参考にさせていただきました。
ビルボードかつ、カメラ - オブジェクト間の距離に比例してスケールすることで、見かけのフォントサイズを一定に保つ。
これもさっきと同じ動画だけど、こんな感じで表示されるようになった。
おしまい
これで前回改善したいと思っていた部分はほぼ実現できた。気が向いたら追加してみたい機能としては
- 空飛ぶ乗り物
- 星座のクリエイトモード
空飛ぶ乗り物はすでに作成されている方がいらっしゃるのでできそう。星座はどうやって作れるかな。
このワールドはVRAAというアワードに提出したり、天文教育研究会のセッションにて紹介されたりと、マニアックながら評価していただけているみたい。また何か新しいことがあったみたいで、現在進行形でなんだか凄いことになっちゃったぞ状態。その辺も思い出として書けたらいいな。
来てくださった方のTweet
全部は載せられないけど、いくつか。VRChatではこうしてワールドを紹介してくださる方が多く、感想をいただけるのはとても嬉しいです。天文知識があれば僕よりHIPPARCOS SALONに詳しいことになる。ウケる。
深夜です。今回ご紹介するのはKuwamaiさんご製作のワールドです。
— mitsuba217 (@_mitsuba217) 2019年8月9日
一言で言えば、ヒッパルコス星表です。VRだと星の距離が体感できますね。
2枚目写真はミンタカ…のつもりでしたが距離が…間違えたかな…?(使い方がよくわかっていない)
ワールド名:HIPPARCOS SALON#VRChat_world紹介 #VRChat pic.twitter.com/ko6aKfYX6b
#VRChat #VRChat_world紹介#VRAA01 作品紹介第一弾はクワマイさん( @beet_lex )のHIPPARCOS SALONです。
— initial K(山田加恋) (@initialK_0001) 2019年8月15日
夜空を彩る星座の実際のところがとてもよくわかる、とても美しくてためになる作品だと思いました。
ポインタ的な白い棒が実装されていて、さらに便利です。
例えばオリオン座の位置関係は。。 pic.twitter.com/xjzdGIJwdT
Kuwamaiさんの【HIPPARCOS SALON】
— えこちん (@ecochin) 2019年8月21日
星座の位置を立体的に観測できるワールド。VRAA10選にも選出されたKuwamaiさんの星座ワールドです!こちらのワールドでは指定した星座から場所を見ることができます。動的な要素もあり見ていて飽きません。#VRChat_world紹介 pic.twitter.com/gcQBuOAoRM