未分類」カテゴリーアーカイブ

VRChatにみんなで遊べるマインスイーパーワールドを作ってみる

UdonSharpの同期変数の仕組みが分かってきたので、
同期を活かした新しいワールドを作ることにしました。

ジャンルとしては仲間同士で遊べるようなゲームワールドを作りたいと思い、
繰り返し遊べる要素があって、
みんなで遊べるゲームとはどんなゲームだろうと考え、
思い浮かんだのが少し古典的なゲームですがマインスイーパーでした!
そんなこんなでマインスイーパーのVR化を進めていきました。

マインスイーパー自体のプログラムは、
だいたい想像することができましたが、
ググってみるとたくさんコードが転がっていたので、
ゲーム部分は想像していた処理とネットの情報を組み合わせながら、
こちらはおおむね詰まることなく完成させることができました。

基本的にはそのブロックが爆弾かどうか、
爆弾でない場合周囲に爆弾があるか、
あれば数字を表示して、なければ周囲のブロックに対して再帰処理を行う。
こんな感じのロジックですね。

そしてしっかり考えなければいけないのがUdonSharpのクセの強い同期処理です。

同期の方式としては基本的には以前世代別交流用ワールドに設置した
入室者カウンターと同じ方式を取り入れました。
同期は同期変数を用いて、
更新は全てオブジェクトオーナーに移譲する同期方法です。

参考)世代別交流用ワールドに入室者数カウンターを設置する

複数人でゲーム参加しようとした場合、
あちこちでブロックを消したりすることを想定すると、
排他的な処理は必須となります。
オブジェクトオーナーに同期変数の更新処理を集中させると、
通信のラグがどうしても生まれてしまうのですが、
ゲームの性質上、多少のラグがあっても確実に排他できる方が良いと考え、
この方式に決めました。

同期変数を利用して、
複数のユーザが同じようにゲームを進行できるようにするためには、
状態管理がとても大事で、
大きく「ゲームの状態」「設定の状態」「ブロックの状態」
この3つの状態をコントロールしてゲームの進行を維持することにしました。

ゲームの状態
設定、ブロックの状態

そして設計を実装に落としていくことで、
ゲームが形になっていきました。

CyanEmuでデバッグもしつつ無事に完成と思い
いよいよVRChatへアップロードして動作確認をと、
アップロードしたワールドへ移動しようとしてみたのですが、
ぜんぜん読み込みが終わらず、、、
真っ暗な画面が延々と続く状態に、
VRChatはパフォーマンス系の制約も結構厳しいようで、
これまでもマテリアルの画像を圧縮して容量自体は削減したり工夫はしていたのですが、
実装面でも気をつけるべき点がいろいろとあるようです。

まず取り組んだのが

「脱string型」

string (文字列)は定義しているだけでもGC Allocを発生させるということで、
stringを使わないで実現できる部分は可能な限り他の型に変えたり、
処理の見直しを行いました。

(参考)こちらの記事参考にさせていただきました。
https://qiita.com/toRisouP/items/16bd06aa303a1bb1a747

でも結果は変わらず、、
次に取り組んだのが

「同期変数のサイズ削減」

同期変数は更新をかける度に通信が発生し、
ネットワークもそれほど潤沢では無いようで、
同期変数の通信量削減はとても大事なポイントのようです。
ということで、整数型の同期変数は出来るだけ
int型ではなくbyte型に変換していきました。
最近は通信量意識して実装したりとかあまりしていなかったので、
久々に型の重要性を再認識させられました(笑)

でも結果は変わらず、、
その次に取り組んだのが

「手あたり次第怪しい実装を外してみる」

もう原因が読めなかったので、
とりあえず怪しい実装やゲームオブジェクトそのものを削除してみたりと、
手あたり次第ですが、
症状改善するポイントを切り分ける作業を試みました。

特に怪しいと考えていたのが、
ゲームの設定上、マス目を16×16にした場合にブロックの数が256個になるのですが、
当初それぞれのブロックに対して、
どこからでも「破壊」と「フラグ」が実行できるようにと、
ボタンを5面に設置していました。
これだけでボタンの数が2,560個、
全部のボタンにインタラクトできるように
Udon Behaviourコンポーネントを割り当てていました。
(リンクしているスクリプトは同じものでしたが)
この辺りが読み込みを遅延させているのではと考え、
コンポーネントを外してみたり、
SerializeFieldを使っていたので外してみたり、
ブロックのオブジェクトの数を減らしてみたり、
ボタンを5面設置(5組)じゃなく1組にしてみたり、

と試行錯誤をしていく中、
結果ボタンの数を減らすことで事象の改善が現れることが分かりました。

「対策」

対策としてはシンプルにブロック上面に「破壊」と「フラグ」ボタン1組を設置する形に変更して、
何とかゲームが読み込まれる状態に改修することができました。

ボタンの組数削減

それでも他のワールドに比べると読み込み時間は遅く、
根本的な原因は特定できていないので、
これは今後の課題かな、

最後にパフォーマンスで苦労しましたが、
何とか対策することができ公開に繋がげることができました!
まだまだ知れたことは断片的かもしれないですが、
毎回いろいろ障害にぶつかっていて、
なかなか勉強させられますね。

Minesweeper for VRChat ⁄ バーチャルマイスイ

1人で黙々と挑戦しても良し、仲間とわいわいと楽しんでも良しのVRマインスイーパーです。
ぜひぜひ遊びにきてください♪

ワールド:Minesweeper for VRChat ⁄ バーチャルマイスイ

展望台エリア増築

clusterで制作している巨大迷路のワールドに
新しく展望台エリアを建設しました♪

展望台

木造の地上20mの展望台です。
実際にはありえないような建築物ですが、
VRの世界では想像をそのまま形に出来ます☆

Unity建築中

螺旋階段を上っていくと、
展望デッキからは巨大迷路も見下ろすことができます!

展望デッキ

そして巨大迷路と言えばバブル時代、
ちょっと遊び心に動くものを取り入れてみたいと思って、
上空に飛行船を飛ばしてみようと、
簡単ですがモデリングから作成して
飛行船を追加しました!

上空を旋回する飛行船
工作レベルですが飛行船を作成

現在もいろいろと試しながらあれこれ改良進行中です☆

懐かしの巨大迷路

懐かしの巨大迷路を建築

最近ではなかなか見かけることが少なくなってしまった、
巨大迷路をVRの世界に建築しました♪
アップロード先はまずはスマホからも気軽に遊べそうということで、
clusterにあげてみました!

巨大迷路で自撮り

建築の大まかな流れとしては、

1.設計
設計ツールは持っていないのでExcelを方眼レイアウトにして
建材の寸法の決定や、迷路のレイアウトを作成。

2.テクスチャ作成
PhotoshopやExcelを使って、建材や地面のテクスチャ、
案内看板などのデザインを作成。

Photoshopでテクスチャ作成中

3.モデリング
blenderを使って、設計に合わせて建材を作成。

blenderで建材モデリング中

4.組み立て
unityを使って、作成したモデルを設計した
レイアウトに合わせて配置と組み立て。

Unityで配置中

育児や仕事の合間時間での作業でしたが、
構想から初版アップロードまで約3日ほどの作業でした。
(現在も徐々に改良に改築は進めていますが)

本来であれば広大な土地が無いと立てられない巨大迷路も、
VRの世界であれば何もないところから作ることができます。
ツールもだいぶ進化していて、
導入障壁低く感じますね!

PCやVRゴーグルだけでなく、スマホからも遊ぶことができるので、
ご興味のある方はぜひ遊びに来てください☆
今後はVRchatへの移行も試みたいと画策中です。

https://cluster.mu/w/f7b1503b-0d7f-4290-bbb6-f95a8e0b60a0

見て、感じて、知ろう

3Dモデルを作成してアップロードしたり、
自分だけの空間を作ってみたり、
VR空間での活動も徐々に慣れてきたので、
実際にVRゴーグルをつけた時にはどう見えるのか、
どう感じ取れるのか、
これは体験しないと分からないと思い。
エントリーモデルとしてはちょうど良さそうな、
Meta Quest 2」を購入しました♪

Meta Quest 2(128GB)

一昔前にVRゴーグルをお試しでかけたことはありましたが、
その時は正直あまり実用性は感じられず、
「ふ~ん、こんな感じか、」で終わってしまいましたが、

時代は進んでいますね!!
先日作成したバナナと野菜の世界にも訪れてみましたが、
没入感をたっぷりと味わえました。

VRChatでは今やっとビジネスの中でも一般的になってきた、
チャットやWeb会議ツールでの文字やWebカメラなどによる
平面上でのコミュニケーションでは体感できない、
ジェスチャーなど立体的な表現や
距離感を活かしたコミュニケーションもとれ
表現の手段が一気に増えるように思えます。

VRChatキャプチャ

次な何にチャレンジしてみようかな。

VRChatID:TakafumiCreate

実体を仮想空間へ

メタバースの世界に経済圏が確立していくと言われ始め、
何か自分なりに表現をしていこうとした時にどんなことができるのか、
何か現実と仮想を組み合わせた表現はできないかと模索しているなかで、フォトグラメトリーという表現に出会い、
まずは簡単なものからということで身近な野菜をフォトグラメトリ化して仮想空間へ持って行ってみました。

持って行く対象の仮想空間は自分で自由にカスタマイズできるプラットフォームとしては敷居が低そうだったのでVRChatの世界へ持って行くことにして、アカウントを作成してまずは自分の空間(ワールド)を作成できるところまで事前準備として行いました。

そして準備が整ったら大まかなステップとしては次の通り

1.野菜を用意する
 ひとまず玉ねぎとキウイがあったので。

撮影した玉ねぎ

2.360度様々な角度からたくさん撮影する
 できるだけクオリティの高い画像が必要ということで高解像度での撮影が可能なSIGMAのsd Quattroを使いました。
 撮影ボックスを利用して、枚数としては200枚弱でした。

撮影ボックスを使ってぐるぐる撮影しています

3.フォトグラメトリ化する
 3DF Zephyr Liteという写真計測用ソフトウェアを使い3Dモデルを生成しました。

3Dモデル化

4.ディティールの補正
 今回はAdobe Photoshopを使って若干ですが3Dモデルの表面を修正しました。

5.仮想空間へ設置
 UnityというIDEを内蔵するゲームエンジンを利用して用意した3Dモデルをあらかじめ作成しておいた自分の空間(ワールド)へ設置します。

Unityまでインポートすることができれば、
テーブルに陳列してみたり、
棚に飾ってみたり、
大きくして椅子にしてしまったりと、
現実に縛られない自由な世界が広がっていました。

持ってみたり
たくさん並べてみたり
椅子にして座ってみたり

これなら野菜のバリエーションを増やすことができれば
バーチャル八百屋も作れそうです!
バーチャルケーキ屋さんなんかも面白そうですね♪
既にアパレル業界などは進んでいるようですが、
ECサイトと連携させた仮想のショールームなんかが、
今後どんどん増えるのかもしれないですね。

この世界でどんな表現ができるのか、
まだ模索中ですが考えているだけでわくわくしてきます!

来るWeb3.0の時代に向けて

出遅れ感はありつつも、
最近はなかなか撮影に出掛けることも出来ていないのもあり、
今のうちにメタバース系のマーケットを知っておいて損はないかなと、
調査も兼ねてNFTアートの展開を進めています。

一月弱出展してみての感触としては、
いろいろとニュースにもなりましたが昨年にNFTアートのバブルが起きて、
今年に入ってからはマーケットの勢いとしては下降気味のようで、
既に物珍しさで興味を持ってもらえる時期は過ぎ、
なかなか簡単に反応を得るのは難しくなっているんだなというのが今のところの感想です。

NFTアートのセルフプロモーションの場としてはTwitterが主流ということで、
専用のアカウント(@takaart_nft)も作成しましたが、
まわりの活動されている方を見ていると
いかに自身でプロモーションをマメにやってていくのかが、
結果に結びつく重要なカギとなっていそうです。

私は2年ほど前から写真以外で何か表現を創出できないかと試行錯誤している、
ジェネラティブアートを展開していますが、
もっともっとマメにやっていかないとエンゲージ率向上はなかなか難しいです。

まだまだNFTアートは投資の対象とされていますが、
VRチャットなども盛んとなっていて来ていて、
きっとアバター用のファッションやグッツなども増えていき、
今後は誰もが仮想空間でNFT資産を身に付ける時代が来るかもしれません。
今のWeb2.0の時代ではSNSでのセルフプロモーションが、
大きな力を持っていましたが、
これから来るWeb3.0の時代ではメタバース上での
セルフプロモーションが大事になるのではと思う今日この頃です。
もう少しコツコツと活動していき新しい表現、新しい共有の形を模索したいところです。

< openseaプロフィール >
https://opensea.io/TakafumisCreate

– コレクション –
Generative moments
Generative moments icons
Generative moments -SakuraFubuki-
Generative moments -Reflection of sadness-
Generative moments -Fullofsmile-
Generative moments -Hieroglyph-

< NFT用Twitterアカウント >
@takaart_nft

2021年のシグマカレンダーに採用していただきました。

SIGMA社が毎年制作されているシグマカレンダー。
その2021年版カレンダーの12月に私の作品を採用していただくことが出来ました。
カレンダーは予約受付開始されています。
ぜひチェックしていただけたらと思います。
1年の締めとなる12月、たくさんの方に手にして楽しんでいただけたら幸いです。

https://www.sigma-onlineshop.jp/shop/g/gR00001/