Virtual Motion Trackerを使ってみよう!
この記事はクラスターアドベントカレンダー2023 一枚目 18日目の記事です。 前日はsmithさんの黒い画面を触らずにサーバーを(できればタダで)作ろう! でした。 皆さんも是非チャレンジしてみてください!
改めまして皆様ごきげんよう! サーバーサイドでエンジニアをやっている二酸化カメレオンと言います。
去年は働くリアアリス - ななさいの備忘録 という記事を投稿していました!
今回はVirtual Motion Tracker、通称VMTを使ってみる話を簡単にします!
VMTとは
VMTはOSCで値を送ってあげるだけで簡単に操作できる仮想トラッカードライバです。
導入は非常に簡単で、私も昔 Androidスマホをトラッカーにする際に使用しました。
実際に動かしてみる。
導入
まず、公式からインストーラをダウンロードし、インストールします。 導入については公式Documentに沿って行った方が良いので下記のリンクを参照してください。
API 曰く、初期値ではport 39570に対してOCSプロトコルで値を送ってあげればよいらしいです。
OSCプロトコルとは?
OSCプロトコルはVRの関係でデファクトスタンダードになりつつあるプログラム間でデータをやり取りするための決まり事みたいなものです。 本来は音楽の情報をやり取りするために使うものです。*1
実際に送ってみる
値の送り方はいくつかありますが、そのうちの一つはこのように書かれています。
/VMT/Room/Unity (int)index, (int)enable, (float)timeoffset, (float)x, (float)y, (float)z, (float)qx, (float)qy, (float)qz, (float)qw Unity lik Left-handed space, Quaternion, and Room space. (Recommended) Unityと同じ左手系かつ、クォータニオンかつ、ルーム空間(推奨)
つまり、だいたいこんな感じに値を送ってやればよいということです。
/VMT/Room/Unity ,iiffffffff 0 1 0 0.99663454 -0.081972964 0 0 0 0 0
iiffffffff
というのはOSCで送る値の型を表しています。それ以上の情報は含まれていないので順番を間違えないようにしましょう。
OSCでこいつをlocalhostの39570に対して送ってあげると・・・
でた!
Goで実装してみる
いい感じに実装してあげると・・・
ぐるぐる動いた!(なんでAdminで動かしてるんやろ・・・)
とりあえず実装ですが、実際のコードは下記Github上で公開しています。
今後はせっかくなのでgoでVMTを扱うためのパッケージを書こうかなと思っています。
以上、VMTのお話でした!
明日はSixeightさんのフィーチャフラグを扱うときのささやかなTIPSです!開発するときに意識しているささやかなTIPSがためになると思います!
*1:Open Sound Control
Resoniteにおける揺れもの設定の話
これはResoniteアドベントカレンダーその3の8日目の記事です。
昨日の記事はFukuroさんのゲームイベント🎮を毎週開催してみた話 でした! 気になった方は是非実際に参加してみてください!
[まえがき]おまえは誰?これは何?
私はResoniteで何かしてたりしてなかったりする人です。これは揺れ物の設定の雑な情報として見てもらえたらいいかなと思って書いている記事です。
目次
この記事で話すこと・話さないこと
話すこと
- 揺れものの設定に必要な最低限の概要
- 希望する揺れものを実現するため近づけるための値の増減方向の話。
話さないこと
- DevToolの詳しい使い方
- ResoniteのDynamicBoneChainの機能説明の全網羅
- 実装ベースでのパラメータの変化の話
- 厳格な貫通対策
- ProtFluxを用いたなにか
- ユーザーの作った補助ツールの使い方
結論
なんもわからんかったらとりあえず
- Elasticity
- Damping
を調整すればよい
セットアップ例
なるべく失敗を防ぎ、品質高めに揺らすためのセットアップ方法。
また、Boneの数は2本以上ある必要がある。
小技(複数の房をまとめる等)の話はここでは解説しない。
初期設定はわかってる人は「設定を詰める」まで読み飛ばしてよい。
揺れるようにする
とりあえず揺れるようにするまで
DevToolを用意する。
揺らしたい場所の根本にDynamicBoneChainをアタッチする。
髪に設定する場合は房ごとにアタッチする。
下記の画像だと Ahoge.001,FronHair.001とかそれぞれに入れる。
子にしたものを"リグのみ"セットアップ を押下
Bones(list): に髪のBoneが登録されていることを確認する。
入っていない場合はもう一度押す。それでもダメな場合は子にしたものをセットアップを押すしかない。*2
この段階で揺れるようにはなる。しかし、おそらく理想の揺れ方にはなっていないと思うのでここから設定を詰めていく。
設定を詰める
ボーンのコライダーの大きさを設定する。
コライダーを確認できるチェックボックスにチェックを入れる。
そうするとボーンのコライダーを目視することが出来るようになる。
必要に応じてチェックを外す。
BaseBoneRadiusの値をいじっていい感じの大きさにする。
コライダー間の隙間が大きすぎず、小さすぎずであればあとは好み。
後に説明する、「掴めるようにする」「コライダーを設定する」にも影響するところ。場合によってはその時にも微調整する。
小さすぎるパターン(コライダーの青い玉が見えない。
大きすぎるパターン(明らかに邪魔
揺れ具合を設定する。
Damping,Elasticityの値を0にする。
Elasticityの値を10にする。この状態で揺らすとうにょうにょと永遠に揺れ続ける。
揺れの速さを見て調整したい場合は10刻みで値を調整するとやりやすい。
早くしたい場合はElasticityを大きく、遅くしたい場合は小さくする。(Dampingを設定すると遅くなるので気持ち速めかなって思うぐらいでよい。
Dampingの値を3にする。
揺れの収まり具合を調整する。こちらは1刻みで調整するとやりやすい。
うにょうにょしすぎる場合は数字を上げて。うにょうにょさせたい場合は下げる。
掴めるようにする。
IsGrabbableにチェックを入れる。
コライダーを設定する。
反応するコライダーを見られるようにする。DynamicBoneChainに反応しているコライダーは緑色で表示される。
コライダーを入れたいところ*3に子スロットを用意する
DynamicBoneSphereColliderをアタッチする。間違えやすいので注意
当たり判定を入れたいDynamicBoneChainに先ほどアタッチしたDynamicBoneSphereColliderを入れる
Colliderの大きさを調整する。
各項目の概要
あとで解説用アイテムのリンクを張る。
正しい意味とは限らない。感覚的に理解するための解説。
inertia
直訳:慣性
ボーンの根本が移動したとき、先端がどれだけ追従するかの値、0にすると先端はぎりぎりまでとどまり続ける。1にすると完全に追従する。いなぁしゃ と読むらしい
inertia force
直訳:慣性力
スロットが移動するときの加減速に対して今の加速度を維持しようとする値。いなぁしゃふぉーすと読む。 ルーク、フォースを使え。
多分設定が一番難しい。
わからんかったら初期値か0推奨。
Damping
直訳:減衰
もとに戻る力が初期状態に近づくにつれて弱まる値。だんぴんぐ と読む。馴染み深い
これが0だと無抵抗の振り子になり、揺れは収まらない。
Elasticity
直訳:弾性
元の形に戻ろうとする値。えらしてぃしてぃ と読むらしい。私はよく噛む。
Stiffness
直訳:剛性
ボーンがどれだけ曲がるか。すてぃっふねす と読むらしい。読みやすい
よくあるやつの対処法
頭を貫通する。
Headにコライダーを入れる。(下で話す前髪横髪が見える対策もついでに入れるとよい。
移動すると前髪・横髪が見える。
下記内容を上から順番に試す。
- inertiaの値を0.8ぐらいにして移動時に追従しやすいようにする。
- inertia force の値を0にして 余計な慣性力を排除する。
- Stiffnessの値を0.8ぐらいにして 揺れすぎないようにする。(前髪のみ推奨
後ろ髪が体を貫通する
クソデカコライダーをChestに入れる。Resoniteはスフィアコライダーしかないの大きなコライダーで面を作る。
移動するとスカートが貫通する。
コライダーを入れる。
inertiaを大きめにする。
足がスカートが貫通する。
足に二つのコライダーを入れるとBoneを挟み込む形になるので割と耐える
なんかバタバタする。
FPSが低くなった時になる。Elasticityを高くしすぎると起きやすい。
対処方法はElasticityを調整するか、強いPCを買う。
インサイドコライダー。。。
ない。欲しい。
[あとがき]
最初にも述べた通り全網羅はできていませんし、実装ベースの話ではありません。あと途中で力尽きたのでどこかで動画で解説しようと思います。
それは違うよ!っていう話があれば追加で記事を書いたりコメントしたりしてくれると嬉しいです。
明日は あきんどアキナさんの 総工期1日!アキナ商店事務所移転密着24時(初心者向け)(SnappingToolとか) です!どのような工事の様子が見られるのか楽しみですね!
それでは、良い揺れものライフを
机を整理した話
今日、机を整理しました。
基本的に私の机の上は散らかっています。本が積みあがってたり、書類が放置されてたり、色んなものが机の上に散乱しています。 そして、散らかり具合が一定量を超えた状態でやる気がでると机の上を整理します。
このような都合上、整理に要する時間は最低でも一日は使用します。正直一日が机の整理で潰れたと思うと辟易としますよね。体力も使うので疲れもします。じゃあ常日頃から机の上は綺麗にしろよ思うかもしれませんが、それができるのなら机の上は散らかりません。
しかしながら、毎回毎回自分の怠惰で時間を潰すのは癪です。そんなことを思った私は前回の整理の時、ひとつの策を打ちました。
制限区域の設定
なるべく整理に時間がかからないようにしたい。というかできれば机の上が散らからないようにしたい。こう思い至ったのは、私自身の仕事が在宅メインとなり、個人PCと社用PCを同時に使用するようになったからです。
平日の朝、仕事をするために個人PCにつないでいるキーボードを奥へ追いやり、社用PCにつながっているキーボードをその手前に置きます。 この時、机が散らかっていると個人PC用のキーボードを奥に追いやることができません。こうなると仕事を始めるまでに時間がかかってしまい毎朝面倒な状態で過ごすことになります。
この問題に対応するTryとして整理し終わってきれいになった机、そこにおいてあるキーボードの端に沿うようにマスキングテープを張り、この中にはものを置かないという決まり事を設定しました。
結果
結果としては失敗しました。ただ、完全に失敗したわけではなく良い一面もありました。 しばらくの間はこの試みにより、机の上は綺麗に保たれていました。しかし、制限区域外に少しづつものが増えていき、それが崩壊を招くことになります。
ものを置く場所を制限したということは、机の広さが狭くなったことと同義です。その狭い区画にどんどん物が増えてき、やがてそれは制限区域に侵食するようになりました。結果として制限区域の存在は崩壊したわけです。
しかし、崩壊した後も暫くは問題なく運用できました。 何故なら最低限確保するべき空間は制限区域のマーカにより示されているため、とりあえずその区域のものを他の場所に積み上げれば問題は先送りにできるからです。
もちろんこれは先送りでしかないので、コインゲームで積み上げたコインの如く時間が経てばどうしようもない崩壊が訪れることになります。
そして崩壊はさも当然のような顔をして来訪し、今回の整理に至ります。
Problem
今回の問題は制限区域を設定したものの、ほかの場所についてものの置く場所を定義していなかったことです。 そもそも机にものを置くのはなぜでしょうか? それは今必要か過去に必要だったからです。 精密ドライバーのセットは一度使えばずっとそこに居続けます。それはその場で必要で、さらにしばらくは必要になる恐れがあるからと放置されているからです。机の上はTemporaryでしかありません。つまりこれはただモノを置く場所を定義すればよいというわけではなさそうです。
Try
今回は机の上に放置されて帰る先のないモノたちに帰る場所を与えるという施策を打つことにします。 それにあたり、整理の際に私は机の上に置かれていたものを分類しました。
- PC周辺器具 (一番数が多かったので細分化しました。
- 音声関係
- USBケーブル
- コントローラー&マウス
- 端末類
- 医療器具
- 工作器具
- 文具
- 書類
- その他
このように9分類ぐらいできたので、程よいサイズの箱を100均で仕入れて設置することにしました。
いつまでこの状態が持つか楽しみですね。次回作にご期待ください。
VRと私
この記事は、大阪工業大学 Advent Calendar 20222枚目の24日目の記事です。(投稿遅れてごめん) adventar.org
改めましてこんにちは、私はバックエンドのエンジニアをやっているOBです。
本当は私のVR遍歴を色々と連ねていこうと思ったんですが、そうすると長くなりすぎて誰も読まんわ!ってなってしまったので、それは別記事で出そうと思います。 もし興味があればツイッターを適当に観測してもらえると、いつか記事を投稿した告知をすると思います。
また、下記に記載するVRSNSについては過去のOITアドベントカレンダーに記載してますので興味があれば見てみてください。
そんなわけで私のVR遍歴(省略版)と簡単なリクルート的な話を読んでいってください。
VRとの出会い
大学院の頃、就職先(今の前職)が決まったご褒美としてOculus Rift SというVR機器を買いました。
当初はBeatSaber等の音ゲーやEuro Truck Simulator2等のシミュレーション系のゲーム、あと狼と香辛料VRを遊ぶことが目的でした。
はじめのころはPCスペックがあまり高くなかったのでVRを遊ぶにはぎりぎりという状態でしたね。
VRChatとの出会い
スペック問題に対応するにあたり紆余曲折あったのですが、なんやかんやでVRChatを始め、その後この世界にどっぷりと浸かることになります。 自分の作ったモデルをVKetというイベントに出展したこともありました。
NeosVRとの出会い
働き出してしばらくしたころ、新しいことがしたいと思いNeosVRに足を運びます。
この世界では内部でノードベースのプログラミングが可能でゲームなどを作ったりできます。
そういうこともあり、EPSON主催のハッカソンにVR空間から参加するといったことをしたりしました。
Clusterとの出会い
手軽なプラットフォームということもあり、何かしらのイベントがあるときに顔を出すという使い方をしばらくしていましたが、 最近はお昼時の雑談や常駐している人とのコミュニケーションをとったりするようになりましたね。 ややダイレクトマーケティング的にはなりますが、スマホからでも始められるのでよかったら見てみてください。
VRと転職
働き出してから2年経ち、転職を考え始めます。
転職サイトに登録し、エージェントと話をしたりしましたがあまり転職に関する意見が合わずエージェントを使用した転職は諦めます。
そのため人伝の転職活動に切り替え、VRChatやNeosVRで知り合った方に相談して現在の会社にたどり着きました。
まだ転職して間もないですが、やはり自分の楽しんでいるコンテンツに関われる仕事ができるのは楽しいです。
結局何が言いたいのか
VR楽しいよっていうこととと、もし、こういう業界にかかわってみたかったら色々さわってみてね!っていうお話ですね。
最後に・・・
まぁこういう記事を書くときのお約束なんですが、こういう業界に興味のある人は是非、弊社も受けてみてください!というお話でした。
【📣新卒採用開始📣】
— クラスター株式会社 (@cluster_corp) 2022年12月22日
クラスター社は2024年卒の新卒採用募集を開始しました!
応募職種はエンジニア、デザイナー、ビジネス職です。ぜひご応募お待ちしてます!
🔽詳細はこちらhttps://t.co/cHZs8UhbZI pic.twitter.com/CYZR1l5qk1
趣味のことから技術の話、何となくの思いつきまで!何でも話せる気軽な催しです!#クラスター社の日常 pic.twitter.com/c7Trf4yLtP
— クラスター株式会社 (@cluster_corp) 2022年12月19日
働くリアアリス
この記事は クラスター Advent Calendar 2022 (2枚目) 23日目の記事です。
リアアリス就職物語
昔々あるところに、一人のリアアリスがいました。
リアアリスは考えます。
「そうだ、働こう!」
そう思ったリアアリスはお仕事を探します。
すると、リアアリスが活き活きと過ごすことのできる会社を見つけたのです。
リアアリスは面接を受けました。
リアアリスはリアアリスとしての全てを伝えることに力を入れます。
その頑張りは功を奏し、リアアリスは見事その会社に就職することになりました!
今、リアアリスは皆が自由にものを作ることができる空間を作るためのエンジニアとして一生懸命に働いています。
職場には一緒に働くリアアリスもいます!リアアリスは嬉しがっています!
まだまだリアアリスには分からないことがたくさんありますが、いろんなことを吸収し自身の強みを出しながらスクスクと成長していくのです。
リアアリスはこれからいろんな困難に直面することになるのでしょうが、きっとうまく解決していくことでしょう。
でも、それはまた別のお話・・・。
おしまい。
自己紹介
改めまして、2022の10月末ぐらいからクラスター社で働いている二酸化カメレオンと申します。HN*1が長いので社内では「ニカメ」と呼んでもらっています。*2
担当としてはバックエンドの開発を主に行っていますが、先の物語で述べたように分からないことがまだ多く勉強の日々を過ごしております。
そんな私がクラスター社で働いて2カ月ほどで感じた、好きなアバターを使って働くのはいいぞ!っていうお話がしたくてこの記事を書いた次第です。
リアアリスはいいぞ
今更ですが、私の使っているアバターはリアアリスといいます。可愛いですね。 私はこの子に変更を加え、いろいろなプラットホームで使っています。最早この子は自身の拡張的な存在として自身の一部になっています。そんなアバターを用いて仕事ができるのは私にとってのQoL向上要因の一つとなっています。
このスクショは会議のときの私のカメラです。会議の時、基本的にカメラをONにする必要はありますが、生身を映す必要はありません。*3
アバターを使用していても ある程度の動きが反映されるためコミュニケーションに支障をかんじたことはないです。
また、これもあくまで個人の感想なのですが、アバターを用いていると会議の時に空間が柔らかくなると感じています。
オフィスで猫を飼ったり、リモート会議に猫が映り込んだりするのに効果としては近いのかなって感じですかね? それが日常的にあるといった状態なわけです。
無理やりの締め
他にもいろいろと、楽しく働けるよ!ってことを書きたいのですが、あまり書きすぎると他のアドカレの記事が書けなくなってしまうのでここで締めたいと思います。(あと2枚記事を控えているので・・・)
最後になりますが、クラスター社では中途採用のほかに新卒採用も始まりました。興味のある人は是非受けてみてくださいね!
クラスター株式会社公式ツイッターでは「#クラスター社の日常」という四コマ漫画が投稿されており、社内の雰囲気を漫画で感じ取ることができます!
そちらもよければ確認してみてください!
【📣新卒採用開始📣】
— クラスター株式会社 (@cluster_corp) 2022年12月22日
クラスター社は2024年卒の新卒採用募集を開始しました!
応募職種はエンジニア、デザイナー、ビジネス職です。ぜひご応募お待ちしてます!
🔽詳細はこちらhttps://t.co/cHZs8UhbZI pic.twitter.com/CYZR1l5qk1
趣味のことから技術の話、何となくの思いつきまで!何でも話せる気軽な催しです!#クラスター社の日常 pic.twitter.com/c7Trf4yLtP
— クラスター株式会社 (@cluster_corp) 2022年12月19日
明日は@enzi_clusterさんのなにかです。 いったい何の記事が投稿されるのか楽しみですね!
Neosらしいなぁって思うこと
Neosらしいってなんやろなぁ
この記事はNeos VR Advent Calendar 2022の2日目の記事です。
3日目はswesheroさんの「neosの開発で困ったこと」です。困ったことはどんどん共有していきましょう!
事前設定したタイトルミスったわ
適当にワールド作るなりに動画撮るなりしようかなぁって思ったら、 どっちも色々問題あって諦めて、急いで記事を書いています(12/01 22時)
うーん、このやっつけ感もNeosらしいね、知らんけど。
てことで今までのすべての写真を振り返りながら、 Neosらしいなぁって思った写真をピックアップしてコメントしようと思います。
開発初めて規模が大きくなってくるといろんな人が関わってくれる。
こういうの作りたいけど作り方わからんなぁって思いながら作業してるといろんな人がやってきて色々教えてもらえる。
なぜかNeosの中でソースコードを読む
シンタックスハイライトのない環境でよく読むよなぁと
チュートリアルワールドが度々カオスになる。
自由にアイテムが出せるゆえに、すぐにカオス空間になるね。
森になったり・・・
サムネイルで飯テロされたりする。
写真や3Dモデルを出して ペンで書いて説明する
マイク設定の説明したり
家が水没した時の様子をフォトグラ部屋にペンで立体的に説明したりする。
ゲーム作りのTODO管理とかも中でやる
新しいモノがでるとすぐ買って遊ぶ。
フェイシャルトラッカーはいいぞ
ネタに群がる
ちょっとブラックなのとか好きよね
小ネタのギミックへのこだわりが強い
動画読み込み中や読み込めないときは砂嵐になる
三時ぐらいに強制的に調整放送が入る
重力無視しがち
サイズもついでに無視しがち
外側
内側
突発イベント
唐突に早押しクイズ大会が始まる
プラットフォームジャック?
他プラットフォームのイベントにみんなで行くと、なぜかいつもと変わらないような気持ちに?
再現ネタ
数時間で某ネタを作る。
再現ネタ(グローバル)
海外勢も考えることは同じなのでもはやプラットフォーム文化
アバター集会もカオスになったりする。
だいたいコマンドーのせい
宙に浮けるので集合写真の密度がすごい
逆にみんな地面にいる写真に違和感が発生する。
Neos誕生日(登録日) を祝う
登録日にはパンにろうそくのついたバッチが付くよ!
終わり
そんなわけで、今までに撮った写真を前から順番に漁ってネオスぽいなぁって思ったものを抜粋してみました。
改めて、いろいろやってたなぁと感慨深くなりつつ、特徴の強いプラットフォームであることを再認識しましたね。
あと、ふとこういった機会に振り替えることができるので積極的に写真は撮っていきたいですね。(これは現実世界も含めてそう)
非常に雑な感じになりましたが以上です!
最速で駆け抜けるLogix入門
この記事は「NeosVR Advent Calendar 2021」の1日目です。
Hello NeosVR!
NeosVRでいろんなものを自由に作れるようになりたいけど、その方法が全然わからん。
そう思ったこと、一度はありますよね。 この記事を読めば簡単にできちゃいますよ *1
時間がなく、推敲する時間がなかったので大分雑になってますが大目に見てください。
気が向いたら清書します。
対象
プログラムを少しでも齧ったことのある人。
非プログラマ向けの内容は体力があれば書こうと思います。
何を知ればいいの?
だいたいこの要素を知ってたらよい。
(詳しい話をすると「それは違うよ」ってなるかもしれないが、はじめは考えなくて良いと思うので説明を省略)
- 処理の順番・Neos特有の処理
- 条件分岐
- 繰り返し
- 値の取得
- 値の設定
- 値の保存
- モノの複製
(9. 便利なノード) *3
処理の順番・Neos特有の処理について
大半は左から右に処理は進むと考えればヨシ。
出力される値は基本的に複数に分けることがでできる。
ボタンを押したら実行するとか、そいう処理はパルスを使う。
パルスは複数に分岐できない。
パルスが出た瞬間しか値を出さないノードがある。
そもそもパルスって何よっていう本質を知りたい場合は下記の記事を見るとよくわかる。
条件分岐について
条件分岐とは 何かしらの入力に対して何かしらの処理を行い、その結果で処理に違いを持たせるということ。
簡単なものだと、スイッチも条件分岐の一種だ。
Onの時は電気がついて、Offの時は電気が切れる。これも条件分岐の一種と考えることが出来る。
実際のノード
TrueとFalseを判定して値を分ける。
TrueとFalseを判定して処理を分ける。
繰り返し
この処理何回もやりたい!ってときがたまにある。
そういう時は繰り返し。
実際のノード
For
While
無限ループについて
Neosは内部でループできる回数が決まっている。
無限ループするとノードが赤くなり、エラーとなる。
値の取得
手段1
Logix ToolTipのモードをinterfaceモードにして 欲しいSlotをつかんでセカンダリを押すと interfaceノードと呼ばれる値をとるための板が出てくる。
ここから伸ばせば値がとれる。
コンポーネントの値も同様
手段2
特定の要素は特定のノードを経由してとることもできる。
手段3
DynamicField
詳しくは れにうむさんの記事を参照のこと
記事の最後にある2フレーム問題は解決したらしい?
個人的にはこれが一番おすすめ。
値の設定
手段1
interfaceノードに直接つないであげる方法(Drive)
手段2
値を書き込んであげる方法(Write)
手段3
WriteDynamicValiable
値の保存
手段1
レジスターというノードがある。これに対してWriteしてあげると値が保存することが出来る。
手段2
DynamicValueValiable
モノの複製
Duplicate Slotを使う
なので先ほどのWriteなどを使ってあげてSlot情報を保存したりする。(同じパルス内で処理される場合は不要
だいたいこのあたりが出来たら後はノードを把握するだけ・・・のはず