カテゴリー「VRChat」の6件の記事

VRChatのfriendとオフ会に伴う徒然

秋HUB的な

 秋葉原には「秋HUB」と呼ばれる居酒屋的なものがあり(正しい名称は「HUB秋葉原店」らしい)VRChatユーザーのオフ会などで使われることも多く「秋HUB」が代名詞的なものになりつつあるようです。スマホの画面に自アバターの画像を表示して集めた記念写真が「秋HUB的な」なんて言われたり。

秋HUBしました

 2022年4月25日、かなり遠くに住んでいるらしいVRChatのfriendがふと思い立ったとかで東京に来ました。えっ、VR東京駅の話題とかじゃないの、と思いましたが現実のようです。暇を持て余していたタイミングだったこともあり秋HUBみたいなことへの憧れもあって合流してみました。

写真提供:きゅさん

 撮影場所は新宿の居酒屋で秋HUBではないです。
 左上の赤背景振袖マリオンが私のです。

中の人

 オフ会の顔ぶれは全員(リアルでは)初対面でした。面白かったのはどなたも挨拶までは「知らない人」だったのてすが「あさやです」「××です」と互いに名乗った次の瞬間には「VRで知ってる声、知ってる仕草」にモードチェンジし一瞬でいつものVRChatでの距離感に変わったこと。VR上での人格にスイッチした感じでした。(ペルソナ的なイメージで)
 VRの身振りと声の組み合わせというのは現実の対面コミュニケーションと情報量が近いみたいで、外見による第一印象の部分をアバターで代替してるだけ=ルッキズムの回避にちょっと役立ってるのでは?と思ったのでした。
 とはいえVRでの知己はあくまでもVR友、VR向けのペルソナに従って見せてくれている面だとも思うので「VRで出会い」「VRから恋人を作ろう」みたいな推し方はしたくない気もします。出会い目的のコンパみたいなのが大嫌いなだけですが。

遠距離恋愛・家族の絆

 ではオフラインとVRの組み合わせで良さそうなのは、と思いを巡らせてみると「遠距離恋愛」「遠地の(リアル)友人との交流」といったあたりが浮かびます。電話のような通話ツールの身振り付、という使い方。目新しくはないですが単身赴任などで家族が一人離れてしまう状況で、人間関係の維持にも効果的な気がします。Zoomでいいのでは、と思うかもしれませんが実写のZoomよりもアバター越しのVRの方が遙かに「本人」感、臨場感に満ちています。あとVRだと、同じゲームをして遊べる、というのが楽しいです。VRChatにあるのは市販の人気ゲームをシンプルにしたぱちもんみたいなゲームばかりですが、それだけに普遍的な楽しさのあるゲームが多いです。VRでの多人数ゲームってたぶんVRChat以外だと成立すらしていないのが現状ではないでしょうか。

まとめ

 オフ会を通じてVRSNSは思った以上に「なかのひと」を表現していることを実感しました。VRで仲良くお喋りできる相手であればオフラインで対面しても同じように会話を楽しめるはず。でも、VRやオフ会で知己が見せてくれるのはVR世界でのペルソナのはず。VRでの距離感をオフラインでも同じように保つのが良さそうな気はしました。

|

VRChatのworldをquest対応

quest対応world

 

 VRChatはパソコンとoculus questの二種類の機材で遊ぶことができます。ハードウェア性能の違いで、quest対応のワールドやアバターは見映えでどうしてもPC向けのものに及ばなくなりがちなのですが……最近はquest対応していても見映えする3Dモデルが増えてきました。そしてこんなイベントも。

 

20220118-152340

 

 参加して先達の話を聞いてきました。
 というわけで次は実践です。

 

Vrchat_1920x1080_20220115_163651469

 できました! 『人形工房 Malion et Atelier』のquest版。

 以下、作業した際の雑感を。

 

quest対応とは?

 quest対応ワールドは制限が厳しいです。

  1. 容量100MB未満(必須)
  2. 推奨シェーダーがごく少数
  3. 容量や推奨シェーダー対応だけだと大抵とても重い

 必須の対応は「1」のみですが、「2」「3」にも配慮しないと(よほどシンプルなワールドでもない限り)まともに遊べません。例えば「2」ですが推奨を無視すると、

  • PC用シェーダーをそのまま使っても動くが、とても重くなりがち。
  • 自作・カスタムシェーダーも(見た目を追求するので)大抵重い。
  • 透過・半透過も公式非推奨。割と重い。

 「2」の対応は比較的簡単です。シェーダーをただVRChat mobile対応シェーダーに替えるだけ。ほとんどの市販アセット(部品)はStandardシェーダーが指定されていますがそれをStandard Liteに置き換えてしまえば動きます。一応。
 問題は「3」。リアルタイム3DCGとして軽快に動作するよう調整が必要です。具体的には、

  1. オブジェクト数(メッシュ数)をできるだけ少なく。
  2. マテリアル数をできるだけ少なく。
  3. 「2」に伴いテクスチャもできるだけひとまとめに。

 「そんなこと言われても……」ってなりますよね。blender等のモデリングソフトで全部自作しているなら最初からこの三つを満たすようモデリングすればいいし難しいことではないですが、市販アセットを組み合わせたプロジェクトでの対応となると「どうすりゃいいの?」となります。
 そこで定番ツール『MeshBaker』です。

MeshBaker

 具体的な使い方は下のような記事が参考になりました。どれもほぼ同じ内容でした。

 以下はMeshBaker全体像を把握するための話です。

 MeshBakerはunity向けの「テクスチャのアトラス化とメッシュ・マテリアルの結合ツール」です。定価は$90弱ですが、unity asset storeでは年に数度のセールで半額だったり70%オフになったりします。無料版もありますが結合可能マテリアル数が少なくてあまり実用的ではなさそうです。

  • オブジェクト数が少ない方が表示負荷が少ない→メッシュ結合
  • マテリアル数が少ない方が表示負荷が少ない→マテリアルを結合し、テクスチャも結合(アトラス化)

 という3D負荷を減らすためのツール。便利! ただし難も多いです。

  • 負荷軽減のための大雑把な知識が必要。
  • 作業の見通しが悪く手順がわかりづらい。
  • 結果が予測・制御しづらい。

 特に最後の「結果が予測しづらい」のは苦しいです。UVが壊れたように見えたり、テクスチャアトラスが不本意な状態になったり。オブジェクト内部の問題でそんなトラブルが起きるようなのですが対処が困難です。(アセットの中身をblenderに戻して設定し直さないといけなさそう)
 また一番目の「知識」の必要性も痛感させられます。MeshBaker作業を始めてから「ああ、動的要素とスタティックなものをあらかじめ分類しとけば良かった」って思うはず。一通り作業してから身に染みる手順が発生します。MeshBakerで得られる利点が「作業の見通しの悪さ」という難点の先にあるので「お勧め?」と訊ねられても「う~ん」と言葉が濁ります。
 でも数百あるオブジェクトを数個にまとめるような作業だとMeshBakerは便利です。元のデータを破壊するようなツールではないので安心して試行錯誤できます。

対応の結果

 quest化作業の実際はというと。(例は人形工房・初代questにて)

  • buildのみquest用→メモリ不足で落ちたり一桁fps以下
  • シェーダのみquest推奨に→10fps以下
  • オブジェクトを(オクルージョンカリングを意識しつつ)統合。シェーダはPC用。→10fpsくらい
  • (ガラス以外)推奨シェーダー化+オブジェクト統合→25fps

といった感じでした。アニメーションさせる人形モデルはボーンが入ったままだったりするので人形展示エリアは最低の25fps程度、スポーン部屋は40~50fpsとなります。部屋の仕切りでオクルージョンカリングも効果あるみたい。

quest対応のツボ

シェーダー:Lightmapped

 シンプルなdiffuseとライトマップの組み合わせですがstatic部分はこれでPC版に近くなります。テクスチャ主力ワールドのquest対応では一番頼りになるシェーダーです。

シェーダー:透過

 quest推奨シェーダーには透過/半透過がありません。ガラスのような表現がどうしても欲しい場合には、負荷に妥協して非推奨の"Standard"のtransparentが無難です。ガラス専用シェーダーの類は比較にならないくらい重いです。questでもReflection Probeは機能します。

シェーダー:dynamicオブジェクト

 インタラクトできたりアニメーションしたりするオブジェクトのシェーダー選択肢はStandard Liteが筆頭、ツヤテカさせたいものはBumped Diffuse Specularを。ただしquest推奨シェーダーはReflection Probeに反応しないようです。どうしても映り込みが欲しいオブジェクトはPC版向けのStandardシェーダーでSmoothnessを1へ。

シェーダー:頂点カラー

 quest推奨シェーダーはLightmapped以外だと「Albedoに頂点カラーを乗算」する仕様です。意図せず頂点カラーが設定されていると色がおかしくなります。また、逆にテクスチャを使用せず頂点カラーで彩色することもできます。人形工房ワールドでは作業机の上の顔料ビンの中身をテクスチャなしの頂点カラーで色づけしてあります。(メリットはあまりなさそう)

オクルージョンカリング

 公式マニュアルのオクルージョンカリングの項を読むべきです。MeshBakerでオブジェクトをまとめる際にも「まとめ過ぎるとオクルージョンカリングが効かなくなって負荷が減らない」事態が起こり得ます。どの程度オブジェクトをまとめるかはバランスポイントを探して手探りになると思います。例えば「ワールド全体に散らばってる小物」はひとまとめにせずに、中程度に領域別にまとめた方が無難なはず……。

MeshBakerでテクスチャ容量が増えた!

 テクスチャのアトラス化をすると使っていない部分が出るので容量的な効率は少し落ちます。が、それだけでなく、アトラス化テクスチャ外の個別のテクスチャもリンク、アップロードされてしまいワールド容量が倍増してしまうことがあります。そんな時はhierarchyからTextureBaker(0)以下を削除。

ギミック

 アバターと違いワールドで利用できるスクリプトはPC版と同じです。ドアの開閉のようなアニメーション、時計の針を現在時刻に動かす、操れるマリオネット、パーティクル、青空文庫システムなどのギミック類はPC版ワールドと同様に遜色なく機能しています。

まとめ

 わからないことがあった時に一番頼りになるのはunity公式の日本語マニュアルです。
 マニュアルはとてもよく整備されていてわかりやすいです。quest対応のための軽量化は、ゲームを前提としたunityの基本のようです。(questに採用されてるチップはスマホ用でスマホはunityゲームの一大市場です)

|

VRChatのUdonで遊ぼう

Udonとは?

 UdonとはVRChatでWorld製作時、使用することのできるグラフィカルなノードプログラミング言語です。こんなの。


操り人形のUdon Graph

 画像は操り人形を作った時のGraphで、Udon環境にはC#をほぼそのまま記述する(いわゆるプログラミング言語のフツーのイメージの)udonsharpという有志開発の環境もあります。

不評なUdon Graph

 Udon Graph、情報を求めて検索すると大変不評です。実際、VRChat World向けの高機能なasset(部品)を作成・配布している開発者はudonsharp利用派が圧倒的多数です。どうやら初期のUdonの機能があまりに少なく、画面操作もこなれていなかったために忌避され、udonsharpの登場でSDK3移行組が増えたみたい。また、プログラミングスキル持ちはテキストベースの開発言語の方に慣れているのでグラフィカルなノードプログラミングは迂遠に感じたのかも。

Udon Graphの実際

 実際はどうなのだろう、と触ってみました。

 悪くない。

 少なくとも、

  • Animation起動
  • 音の再生
  • オブジェクトの回転・移動

程度のことであればとても楽です。具体的には、

  • ドアの開閉
  • オブジェクトの表示/非表示
  • 入場音の再生

といったあたりでしょうか。udonsharp(やunity標準のC#)のようにプログラミング初学者には呪文でしかない変数宣言から解放されるのは好印象。unityのHierarckyタブにある目当てのオブジェクトをUdon Graph画面にドラッグしてくればそのまま利用できるのです。ノードを繋ぐ作業自体も楽しい。

 一方でうんざりしたのは四則演算や条件分岐でした。

 型変換や掛け算、割り算ひとつするごとにノードをひとつずつ増やさなくてはいけません。数式を、数式のままの形で扱えない……。if文の条件に入る論理演算も同様です。数式を扱うような処理はudonsharpを利用した方が断然楽です。

どハマリしたとこ

 以下は個人の体験に基づいているので錯誤している可能性も大いにあります。

Udon Graphで大いに填まったのが変数の代入です。

「え?」って感じですよね。

 試しに i=i+1 に相当するノードをUdon Graphで組んでみてください。

20211127-033043

 C言語系に慣れた人は上のようになると思うでしょう? ところが下のようにするのが正解のようです。(実は正解ではない。後述するがChimeCountを直接Set TempCCに代入してるのは結果をnullにする可能性があるっぽい)

20211127-033401

 Udon Graphは処理手順に注意が必要なようです。

 また、芳しくないバグ?仕様?もあります。

  • debug.logでconsoleに変数内容を表示しようとしてもnullが表示されることがある。
  • 変数から変数へ、演算を経ない代入をすると値がnullになることがある。
  • Udon Graphで用意されたGet系ノードは変数に格納せずに呼ぶとnullを返すことがある。
  • 分岐させた制御ノードを合流させると正常に動作しない。
  • ノードの変数をドロップダウンから別のものへ変更すると接続できないはずの型へ変更できてしまう。

作例

 以下は自作world『人形工房 Malion et Atelier』で使用したUdon Graphです。

  • 時計の分針、時針を動かして現在時刻を表示
  • 時鐘を鳴らす

というもの。簡単なはずの処理ですが割と複雑になってしまいました。

20211205-130508

ゲームプログラミングということ

 Unityも、その上で動くVRChatも、ゲームを前提としたシステムです。Udon Graphで記述する内容の多くはEvent発生時の一回だけの処理かOnUpdateのような毎フレーム行われる処理になります。特に後者の毎フレーム行われる処理はループの中にあることを強く意識しないとうまく機能しません。

まとめ

 基本的な使い方でトラブルに遭遇しがちなUdon Graphですが、UnityC#の提供している機能の多くにアクセスできるようにはなっていきていて、初期のUdon(SDK3)がSDK2に比べて使える機能が少なすぎたというのは過去の物と思います。アニメーションの起動やシンプルなギミックはUdon Graphのノードプログラミングが簡単で楽しく、数式を扱うならudonsharpが良さそうです。ひとつのworldでUdon Graphとudonsharpが混在していても問題ないので、機能ごとに向いた方を使っていこうと思います。

 悪くないよ、Udon Graph!
 udonsharp構築したMerlin氏すごい!

|

VRChatでworld製作

もくじ

  1. TUKIKAGEカフェ
  2. SF系集会イベ会場を作りたかった
  3. 原作再現ポイント
  4. イベント会場として
  5. 実製作
  6. 課題詳細
    1. blender作業
    2. 基本のライティング
    3. Light Map
    4. Light Probe
    5. Reflection Probe
    6. 自作小説・青空文庫システム
    7. oculus quest版
    8. To Do
  7. 使用アセット一覧
  8. まとめ

 

TUKIKAGEカフェ

 VRChatにてworldを製作・公開しました。川原由美子のコミック作品『TUKIKAGEカフェ』に登場する喫茶店の再現・二次創作worldです。このworld製作についての四方山話・感想をまとめておきます。

Vrchat TUKIKAGEカフェ Vrchat TUKIKAGEカフェ

TUKIKAGEカフェ -Moonlight Cafe- by 藤あさや TouAsaya

SF系集会イベ会場を作りたかった

 当初、作るつもりでいたのはSF(Sci-Fi)について雑談集会のできるworldで、クラークの『白鹿亭綺譚』をモデルにするつもりでした。ところが白鹿亭は英語版の表紙こそ巨大タコが絡んでいたりしますがぱっと見の建物としてはありふれたバーという設定で特徴を出すのが難しそうです。そこで方針転換。私にとってのSFジャンルのビジュアルならば加藤直之、佐藤道明、そして川原由美子です。VRChat内の漫画紹介イベントで『TUKIKAGEカフェ』を紹介したりfriendに推して良い手応えが得られていたところでもありました。
 ならば、『TUKIKAGEカフェ』をSF集会の会場にしてしまおう! となりました。

原作再現ポイント

 二次創作として再現してみたポイントは以下の通り。

  • ながいながい下り階段
  • 「アイスクリームみたいな」月を象った建物
  • 階段に踊り場があること
  • カフェ室内は東洋の香り漂わせたい
  • 背景でイメージ的に登場した蝶・花をどこかに盛り込む(天の月の影)

 原作にはない要素は、

  • 月の見える天窓(原作には窓がないと明記されている)

イベント会場として

 一方でイベント会場としての機能も必要です。

  • ひとつの輪になってトークンを渡しながら会話
  • 進行している話題リスト表示
  • 自身の姿を確認する鏡
  • 筆談具
  • イベント中負荷が軽いこと

 こんな要件を満たせれば良いと思ったのでした。

実製作

 二次創作worldとはいっても原作『TUKIKAGEカフェ』はデテールは細かに描かれる部分と少女漫画的、あるいは中国絵画のように幻想的なイメージに寄せて描かれている部分とに大きく分かれ、3D構造物化では自由度の大きな作品です。というわけで

ビルとビルとビルビル
ばっかりの谷間に
アイスクリーム
みたいなカフェ
ながいながい
階段をくだって
たどりつく山頂

川原由美子『TUKIKAGEカフェ1』朝日新聞出版社p.6-7より

のような描写や印象的なカットを頼りに、具体的な形は想像で補い作ることにしました。

 また、VRChatのworld製作は実質的に初めてです。技術的な課題を決めて取り組むことにしました。

  • blenderを使いたい
  • unityの一般的なworld要素は一通り使ってみよう
  • アニメーションやインタラクションする機能は外部アセットに頼ろう

を基本に据えました。具体的には

  • 月を象った球形の建物のアセットなどないので自作
  • Light Map、Light Probe、Reflection Probe等の動作の軽量化&ライティング要素を一通り使おう
  • worldペン、鏡、テレポーター、椅子といったSF集会イベ用の機能を揃えよう
  • ボリュームライトがかっちょいいのでひとつは使おう
  • 自作小説も置きたい

がTo Doとなりました。
 world作りに当たっては、VRC哲学カフェのworld自作&イベ運営されているまさきさんの『設計からUnityまで はじめてのワールド作り』やtiwaさん主催の『World Creator's Cafe』イベントが大きな力になってくれました。またunity公式のマニュアルも日本語化されていて使いやすいです。具体的な調べ物はほぼ公式マニュアルで片付きます。

課題詳細

blender作業

 モデリング自体はコミPo!用にmetasequoiaをいじっていたり、VRChat用にアバターを自作していたこともあって作業量と造形センスの不足くらいしか問題がなかったです。blenderこねこね、楽しいです。

基本のライティング

 まずはライティングを調整しておかなければ始まりません。worldの見た目の大半が決まるライティングは説明しづらいですが、現実で写真を撮る時のライティングと近いです。大雑把に作業手順を並べると、

  1. とりあえずメインになるdirectional lightを置く
  2. 一番暗くなる影となる場所の明るさをskybox、environment lightingで決める
  3. ダイナミックなdirectional lightは一個は置く(おまじない)
  4. point lightやspot lightを配置して明るく照らす場所を決める

 暗い場所の明るさを最初に決め、明るい場所を作ってグラデーションやコントラストを調節する感じです。

Light Map

 unityのライトマップ機能はworld制作では必須に近い機能です。動的なライティングを最小にして、静的(static)なライティングをメインにすることでworldの描画負荷を下げることができます。陰影をあらかじめ焼き付け――ベイクする機能です。ライトマップはパラメーターも多く、初めてunityで扱うとなれば手探りになります。「ライトマップってなんなの?」というところから呑み込まないといけないのでけっこう面倒くさかったです。

Light Probe

 ライトプローブは「ライティングを静的にしちゃったらアバターの照明がどこでも一様で雰囲気できない」を解決する機能です。worldに設置した静的な照明をアバターを始めとした動的(dynamic)な物体に反映させるためのもの。屋外と屋内で明るさに差があるようなworld、全体が薄暗くて点々と照明が存在するようなworldに効果的なようです。目的がわかっていれば作業は簡単。

Reflection Probe

 これは製作するworldによって要不要が大きく分かれます。ツヤテカの金属や映り込みの欲しいガラスがあるならばぜひ設置しましょう。ツヤテカの部分に周囲の景色を写し込むための機能です。pick upできるワイングラスなんかは周りの景色が映り込むとすっごく格好良くなります。公式マニュアルにとても役立つことが書いてあります。

自作小説・青空文庫システム

 これは別記事『VRChatの青空文庫システムで自作小説をworldに置こう!』にて細かく説明しています。テキストファイル相当の容量+8MBで、自worldに縦書き日本語電子書籍が置き放題になるアセットです。イラストや横書きは不可。本来は青空文庫の16000以上の作品を置くためのものです。

oculus quest版

 今回のworldはquest版も製作しました。といっても作業は、

だけです。

To Do
  • パーティクルを使った演出
  • 屋外の低い場所に霧を這わせたい
  • オブジェクト数が100近いのを数個にまとめ、テクスチャもアトラス化したい→MeshBakerのセール待ち
  • 楕円軌道リングのアニメーション解説モデルの仕込み

使用アセット一覧

蝶の飾り - 藍夜野雑貨 booth支店 - BOOTH
メガネ向けガラスシェーダー Ver.2.1 - お休みさんの作ったもの - BOOTH
[VRChat]ワールド用インスタンス人数カウンター(SDK3.0) - KineL - BOOTH
【VRChat】スイベルチェアーギミック(座高調節機能付き)【Udon】 - みみーラボ - BOOTH
VoxkeVolumetricLight - ボクスケショップ - BOOTH
VRC Udon Starter Kit β Ver0.90 - Tesla design laboratory - BOOTH
【VRChatワールド用】青空文庫システム - スズ製作所 - BOOTH
誰でも操作できる同期uGUI - テキスト入力編 - ハツェの真時代傾向璋 (hatenablog.jp)
Rock and Boulders 2 | 3D Exterior | Unity Asset Store
Yughues Free Wooden Floor Materials | 2D Wood | Unity Asset Store
Yughues Free Decorative Plants | 3D Interior | Unity Asset Store
Plank Textures PBR | 2D Wood | Unity Asset Store
Skybox Series Free | 2D Sky | Unity Asset Store
Wooden Floor Materials | 2D Wood | Unity Asset Store
Table with chairs x3 Free | 3D Furniture | Unity Asset Store

まとめ

 最初にworldをprivate登録したのが2021年の1月。当時はまだ白鹿亭を作るつもりでした。具体的な作業に入ったのは6月。機能は新造せず既存のものを利用し、見た目を整える範囲の作業だけしたこともあって楽しめましたし、unityの機能を調べるのも面白かったです。

|

HaritoraX購入

HaritoraX

 五月半ばにVR用フルトラッキング機材・HaritoraXを予約購入しました。

 HaritoraXは慣性センサ(ジャイロ)を使うトラッキング機材で27,900円。PC用のVR機器です、HMD+ハンドコントローラーの三点トラッキングに加えて使用することで胴体・足の動きをVR世界に反映させることができるようになります。私の環境では

oculus quest

ゲーミングPC

HaritoraX

ということになります。

HaritoraX到着

_dsc0185
_dsc0187

 七月末に発売元から連絡があり私の予約したHaritoraXの発送は8/6になるとのこと。連絡通り8/6発送で8/7に到着しました。

HaritoraX稼働!

 デスクトップPC(HP Pavillion)のbluetooth環境がイマイチだったのか当初は通信が確立せず、bluetoothのUSBドングル+延長ケーブルを手配して動くようになったのは8/10のことでした。

Vrchat_2560x1440_20210810_222742803

 足が動いた!
 生身の足の位置と多少位置がズレていたりしますが、それは上半身でもあることであまり気になりません。内股もガニ股もできる。足も組めなくはない。何気なく嬉しかったのが腰のひねりや上半身の傾きが表現できること。自然なポーズが自然に取れる!

 PCの画面しか知らなかった状態からoculus questでVR世界を体験したときほどのインパクトはないですが、こんなに簡単に全身が動くようになったことに感慨を覚えます。使い始めたばかりの印象を列挙すると……

  • 大振りのアクションはHMDを付けたままだと怖くてできない(ダンスやアクション見せてる人すごい)
  • トラッキングが“飛ぶ”ことはなく、キャリブレーションも思ったほどずれない
  • トラッキングのレスポンスは両手と同じくらい
  • キャリブレーションにはコツがあるっぽい
  • VRの準備にかかる手間が増えた
  • バッテリーの持ちがかなり良い
  • 鴨居にロープを張って雑多なものをぶら下げてるような部屋でもトラッキングできる。viveのベースステーション&トラッカーで伝え聞くように遮蔽物や赤外線の反射に阻害されない。(布団被ってても問題なく機能する)

 使えるようになるまでに遭遇したトラブルは……

  • Winのbluetooth管理では認識するのにHaritoraConfiguratorで接続できない→BTドングル+延長ケーブル買って解決
  • HaritoraXの組み立て(マジックテープに本体を組み込む)で向きを間違えて最初変な動きになった
  • VRChatログイン(アバター変更)後、Tポーズから抜け出せない→両手コントローラーを腰に当てトリガー
  • OVR Advanced Settingのspacedragを使っても地面に潜れない→HaritoraConfiguratorで設定

という感じです。HMDセットの三点トラックだけで十二分にVR感は楽しめるのでさほど強くは推せないのですが、VR世界の写真被写体としての幅が大きく広がるのは間違いないです。AirLinkとの併用で(長時間ではないですが)完全無線フルトラも可能なのでダンスを楽しむVRChatユーザーにとっても魅力があるのではないでしょうか。

購入一ヶ月後

 慣れてきた頃の感想など。

  • キャリブレーションのズレは装着中のバンドのズレが大きい
  • フルトラ適性の高い/低いアバターがよくわからない(明確に適性の低いものはあるがベストなものが見つからない)
  • バッテリーの持ちは間違いなく良い
  • 装着に時間がかかる。フルメッシュのzozoスーツみたいなの欲しい。

|

VRChatの青空文庫システムで自作小説をworldに置こう!

 以下の記事は青空文庫システムv8での内容です。

青空文庫システム・AOZORA LIBRARY

 六月下旬に青空文庫システムというVRChat用のアセットが登場しました。青空文庫収録作品の中から16082冊(登場当時)を収録したworldを作成するためのものです。作者さんによるこのアセットを使用したworld「AOZORA LIBRARY」を訪れて驚きました。一万六千冊以上の本があるのに200MB弱しかないのです。
 この収蔵数と容量から「テキストで格納しているのでは」と想像し、ツイートしてみたところ、作者の方から肯定のお返事を頂きました。テキストを1ピクセル2文字で画像にエンコードして格納しているとのこと。

 素晴らしい!

 何が素晴らしいかというと、これまでVRChatのworldで「本」の体裁で読めるものを置こうとしたときにテクスチャ画像として貼り付けるという形で持ち込むのが一般的でした。特に縦書きはunityの文字系機能が対応していないこともあり、テキストをテキストのまま持ち込むのは困難だったのです。そこに、

  • テキスト形式
  • 縦書き
  • ルビ
  • 字下げ
  • 文字が滲まないボケない
  • フォントの字形が画一的でない

に対応した「本」のアセットの登場です。文字はフォントで表示されるため、近づいても滲んだりボケたりしません。読める本16000冊余を置いたworldが作れてしまいます。
 最後の字形が画一的でないというのは紙の(特に活版時代の?)印刷物的な印字結果の揺らぎを与えたもののようです。

 このアセットが公開されてから数日後、自作テキストをこのシステムでworldに置くことができる「おまけプログラム」が追加公開されました。
 この「おまけ」はサポートなしが明言され公式からはガイドなしです。その方法を私にわかった範囲で解説します。(この記事の内容は私が勝手に調べて推測の元に書いたものです。強調しますが、開発元から「サポートなし」が明言されている機能です。「おまけ」機能に不明点があったとしても作者・スズ製作所様への問い合わせなどはしないでください)

大まかなしくみ

テキスト・書誌情報設定

テクスチャに格納

worldプロジェクトに設定

という流れで作業をします。

「おまけプログラム」設定ファイル構成

 ダウンロードした「おまけ.zip」は図のように展開されます。

20210629-031231

 自作テキストを登録するために触れる必要があるのは

  • skycode/books/*.xhtml …… 書籍テキストを格納する
  • skycode/books.json …… 書誌情報を格納する

のふたつです。これらを編集後、skycode/skycode.exeを実行すると以下のファイルが生成されます。紫字はv6にて追加されたもの。

  • skycode/out/card_0.png
  • skycode/out/code.txt
  • skycode/out/content_0.png
  • skycode/out/authors.txt
  • skycode/out/numPages.txt
  • skycode/out/sortedAuthorBookIndices.txt
  • skycode/out/sortedAuthorRubys.txt
  • skycode/out/titleRubys.txt
  • skycode/out/titles.txt

これらをプロジェクト内に配置・設定することで自worldに青空システムを使った自作「本」が置けるようになります。

作業手順1 書籍内容の用意

 「おまけ.zip」を展開した中の skycode/books/sample.xhtml がサンプル書籍になっています。

改行 <br />
改ページ <span class="notes">[#改ページ]</span>
字下げ

<div class="jisage_?"></div>
?に字下げ文字数を設定。<div>と</div>の間に字下げする段落を記入。

ルビ <ruby><rb>親字</rb><rt>ふりがな</rt></ruby>

 使用できる記法は以上。sample.xhtmlの書式を真似して、本ごとにxhtmlファイルを分けて作ります。本はsample.xhtmlと同じ場所に置きます。一冊一ファイル。ファイル名はお好みでOK。

作業手順2 書誌情報編集

 同様に skycode/books.json を編集します。

        {
"title": "タイトル",
"title-ruby": "たいとるるび",
"subtitle": "サブタイトル",
"subtitle-ruby": "さぶたいとるるび",
"author": "著者",
"author-ruby": "ちょしゃ",
"translator": "翻訳者",
"translator-ruby": "ほんやくしゃるび",
"xhtml-path": "books/sample.xhtml"
},

「タイトル」や「たいとるるび」「著者」「ちょしゃ」をご自身の本のものに書き換えればOKです。「サブタイトル」や「翻訳者」といった項目が不要であれば : より右側の""内を削除しておきます。
 "xhtml-path": "books/sample.xhtml" は skycode/books に置いた(作業手順1で作成した)書籍ファイルのxhtmlのファイル名を記入します。
 初期状態では三冊分の書誌情報が仮に書き込まれていますが、skycode/books に置いた表示したい「本」(※)の数だけ記述します。

  書誌情報 books.json の一番上の一冊はアセットの「検索」機能の結果には表示されません。(world : AOZORA LIBRARYではワールド案内用書籍――テーブルの上に置かれている本――に使われているそうです) ランダム棚には表示されます。ダミーの書籍なりなんなりを登録しておくのが良さそうです。
 ※ {}は必ず対になる一組の数、区切りの , も過不足のないように。

作業手順3 unity用ファイル生成

 作業手順1、2で本の内容と書誌情報が揃ったら、skycode/skycode.exe を コマンドプロンプト から、かつ skycode.exe のあるディレクトリで 実行します。すると skycode/out フォルダに以下の九つのファイルが生成されます。

card_0.png 書誌情報が格納されたpngファイル
code.txt unityプロジェクト内のファイルを編集するための情報
content_0.png 「本」の本文がひとまとめに格納されたpngファイル
authors.txt 著者情報
numPages.txt 「本」の各巻開始インデックス
sortedAuthorBookIndices.txt 著者のインデックス(検索用)
sortedAuthorRubys.txt 同上ルビ(検索用)
titleRubys 「本」タイトルルビ(検索用)
titles.txt 「本」のタイトル(検索用)

作業手順4-1 unityへの青空システムの導入

 青空システムの「本」を置くためのworldのプロジェクトを開きます。(worldそのものの作成、sdkの導入等はここでは説明しません)

 青空システムのアセットをプロジェクトに追加します。

作業手順4-2 unityプロジェクトへの「本」データの追加

 次いで、explorer上での作業になります。
 unityプロジェクトの保存フォルダ(˜/Unity/プロジェクト名/Assets/AozoraLibrary/Textures)に作業手順3で作成されたファイルすべてをコピペで上書き保存します。

 unity上での作業になります。
 プロジェクトのprojectウィンドウの ˜/Asset/Aozora/Texutures フォルダでは card_0.png とcontet_0.png 作業手順3でコピーしたもの
に置き換わっているはずです。これら画像のinspectorで、下ので囲ったようになっていることを確認します。「本」のデータにはバイナリ一致が必要であるためのオマジナイです。

20210629-042750_li-2

作業手順4-3 unityプロジェクトの書籍データの関連付け

 書誌情報と書籍内容の入ったpngデータをunityのオブジェクトへ関連付け(の確認と余分な関連付けの除外)をします。

 Hierarchyの
 Asset/AozoraLibrary/Material の CoverFace マテリアルの Card 項目画像と PaperRight と PaperLeft マテリアルの Content0 項目画像が それぞれ 作業3 で上書きコピーし 4-2 で確認した画像に指定されていることを確認します。

 作業4-2でご自身で追加した以外の画像( Content1 や Content2 )が登録されていた部分はnoneにしておきます。

作業手順4-4 unityスクリプトの変更

 作業手順3 で得られた code.txt の内容をプロジェクトのスクリプトに反映させます。
Projectの Assets/AozoraLibrary/Script フォルダの内容を表示します。以下このフォルダでの作業です。拡張子 .cs ファイルがテキストエディタに関連付けられている前提となります。

 Book.cs をテキストエディタで開き、
 private int[] numPages2 =
 の右辺を作業手順3で得た code.txt のものに置き換えます。

 SearchSystem.cs をテキストエディタで開き、
private string[] authors =
private string[] titles =
private string[] titleRubys =
private string[] sortedAuthorRubys =
private int[] sortedAuthorBookIndices =
 の右辺を同じように code.txt のものに置き換えます。

終了

 作業手順4-4の変更内容を保存し、テキストエディタを閉じて、worldのアップロードを行います。手順に誤りがなければ自作の「本」がVRChat内で読めるようになっているはず。

サンプル

 上記作業で作成した自worldです。

VRChat - TUKIKAGEカフェ -Moonlight Cafe-

追記・quest向けworld

 青空文庫システムはquest向けworldにも導入できます。表示品質はPC版とまったく同等です。すごい!

  • world容量上限50MB

 制限はきついですが、市販の文庫本一冊相当の文章量で300KB程度にしかならないので数十冊であれば十分に設置可能です。quest対応のための作業は

  1. 作業手順4-1以降のunity上の作業が違うだけ
  2. buildターゲットをquest(android)に設定します
  3. 書誌情報 card_?.png と本文 content_?.png に加え、フォントを格納している font.png にも作業手順4-2の設定をして不可逆圧縮を回避します。
  4. アップロードで完了

 ファイルサイズは

書誌情報 card_?.png 数KB
本文 content_?.png テキストファイルとほぼ同容量
フォント font.png 8.4MB

 程度なので個人のライブラリとしては十分な数の本が置けるのではないでしょうか。

|