今年よかった広義Progressive House2020 [ProgAdC2020]

どうもはじめましての方ははじめまして、あやふみ(ayafmy)です。

この記事は"ProgressiveHouse同好会による好きな曲紹介など Advent Calendar 2020"の14日目の記事です。 完全にど忘れして焦って記事を書いています。今回は多分短いです。

adventar.org

どうも今年はVRにおねつだったんですけども、VRChatのDJ Communityは想像以上に精力的な活動があるので、 わたしも影響されて今年は例年よりも曲を買った気がします。

さて、近年beatportにはMelodic House & Technoや、Organic Houseなどの名前だけではよくわからない*1 ジャンルがふえていますが、 まあ広義のProgressive Houseかなあと考えながら、そのあたりで今年買ってかなり良かったTrackを数曲紹介したいとおもいます。 だいたいこのまえのDJ Mix Advent Calendarでかけた曲だったり……。語彙力がないのでたすけてください。

Melodic House & Techno

beatportのジャンルですが個人的な解釈として、昔Deep House*2に含まれていたDeep Tech寄りのや、Tranceの"再解釈" みたいな感じです。 早いやつはTechnoに近く、展開もほぼTranceっぽい感じが多いように思えます。

Jerro "Tunnel Vision feat. Kauf (Original Mix)" Anjunadeep (2020)

1曲目から最早4つ打ちではないのですが、これはbeatport上では"Melodic House & Techno"となっています。 このMelodic House & Techno(以下Melodic House)に入っているようなbreaksはChillなTrackが多く、頭が溶けます。 ラストとかオープンとかに入れるとアクセントになって良い感じ。AdCmixの7曲目。

一生聴いてたい。

この曲DuranteのRemixもかなり良いです、こっちは直球Melodic Houseって感じですがかなり「早く」感じるトラックです。 メインのキックがはいってからの音がきもち良い感じ……。

Lane 8 "Keep On" Anjunadeep (2020)

歌詞付きの楽曲。AdCmixの1曲目。

頭の中でずっとながれる感じがする若干メランコリックな *3 音、うしろで広く鳴りつづける音がなんとなく帰りたくなりますね。 前半の部分がキック弱めで歌詞がはいってるのでMixもアクセントになっていいですね。

Durante, HANA "13 Voices" Anjunadeep (2020)

さっきからAnjunadeepばっかでは……って感じがするんですけどまあだいたいそんな感じです。 まとめていくと私はVocal曲が好きなようです。ただこの曲はわりと繋げづらい。 頭溶けますね、説明不要。

Trivecta "Everyday (feat. Rico & Miella) (Qrion Remix)" Ophelia Records (2020)

えーっと、Original Mixとはかなり雰囲気が違う感じの……こう、なんだろう……。 Progressive Houseに近い気のする1曲。これも頭の中で流れる系ですね。イントロのあたりでなってる高めの鐘っぽい音すき。 流れていく感じのこう。。。。

語彙力をください

Organic House

健康的な音

Rodrigues Jr. "What Is Real feat. Liset Alea (Deep in the Playa Mix)" mobilee records (2020)

mobileeからのVocal曲。 ボーカルの部分で頭不健康になっちゃいそう。溶けるから……。。

Jody Wisternoff, Mimi Page "For Those We Knew (Spencer Brown & Wilt Claybourne Remix)" Anjunadeep (2020)

すべてにおいて卑怯だとおもう。

Doyeq "Break Into My Walls Ft. Jay Medvedeva" trueColors (2020)

多分けだるい感じのボーカルがすきなんだとおもう。

Amonita "Lavender Bloom" Shanti Moscow Radio (2019)

弦楽器系がOrganic Houseでは強めに主張しがちな感じ。

最後のほうで「2拍」ズレる。

Roy Rosenfeld "Lift Of Love" All Day I Dream (2020)

ふわふわするOrganic House。あたまもふわふわ。

Timboletti "Shroom Room" Kamai Music (2020)

うしろでなってるおとがぽわーんって感じ。

まとめ

こんな感じですかね、最後の方のコメントがどんどん短くなっていってるのは語彙力が消失しているからであって面倒になったからじゃないよ。 実際、Organic House系のは特徴を差そうとするとなんか違うなあとなってくる(あと音の名前がわからん)のでこれであってるとおもう、Deepとはなんかちょっと違う感じで、ぜひに。

あ、あとこっちもきいてね。

*1:わからないことはないんですが……。

*2:beatport

*3:※意味は無視で

私がワールド制作で考えていること/ヨヨヨAdCal Day5

TL;DR (Summary)

私がワールド制作時に考えていることはおおよそ、以下のようにまとめられます。

  • コンセプト(目的)とモチベーション重視での制作
  • 来る人がどのように動くかの想定
  • 調べられるときを想定した名前の決定

この内容について私の作成したワールドを紹介しつつ考えを述べる文です。

目次

  • 目次
  • はじめに
  • 本文
    • それぞれのワールドについて
    • ユーザー体験の検討
    • 名前の検討
  • まとめ
  • 謝辞

はじめに

おおよそ初めまして。あやふみ/ayafmyです。

この記事はヨヨヨねこアドベントカレンダーの5日目です。前はせぷせぷ先生のつよつよな記事ですね。まあだいたいカレンダーの趣旨はよくわからないですけども、VRChat関連の話かと見受けられたのでそのあたりの話を書きます。

adventar.org

なお、この記事では主にコンセプトやモチベーションの部分がベースでありUnity技術だとか、ライティングの技術だとか *1 は書かれていません。そのため、別段VRChatをしていなくても理解できるような話となっています。

さて、私、あやふみについてなのですが、VRChatではEventSpace: MalplenoやLoungeNOKT、SoundBarMéllonを制作、またSoundBarMéllonではイベントの運営をしています。

twitter.com

これら全て、DJ関連のクラブイベントを開催できるようなワールドとして制作しました。数個のワールドを制作したことは事実ですが、本来としては1つか2つで良いものの、制作したものに対して利用者がついた後の状態では消すわけにもいかなかったので同じ目的のワールドを数個公開していることになっています。これは時間がある時期に、簡単にできるものから制作→公開→反省・利用者の観察→制作→コンセプトを吟味→制作……のサイクルを連続で回したためです。コンセプトとモチベーションがあればあとはワールドが勝手に形をとるので、結果として数個のワールドができたことになりました。

さて、以下の記事ではそのサイクルに関してコンセプトやモチベーションをベースに書いていきます。

本文

それぞれワールドについて

それぞれのコンセプト、発想の根源などを紹介していきます。

Malpleno / Quadra [EventSpace]

f:id:outoz9:20200603222804p:plain

  • コンセプト
    • 「箱」
    • コンテキストを薄く→ 無 → Malpleno
    • 客を密集させることによるDJのモチベーション向上
  • モチベーション
    • コンセプトにあるようなワールドを見付けられなかったため。
    • コンセプトに対して需要があると感じたため。
  • 名前の由来
  • 参考
    • 豊橋技科大 コモンズ1 (TechnoTUT仕様)
    • OctBass (筑波)
    • リレーション (名古屋) (主に規模感)

この2つのワールドはほぼ同一のワールドです。Malplenoは最初に公開・制作したワールドです。対してQuadraは一番最近に公開したワールドですが、MalplenoはPC/Quest両対応のワールドとして、QuadraはPC専用のTopazChatや動画プレイヤーを使うワールドとして制作しました。上に書いてあるモチベーションやコンセプトの部分は主にMalplenoのものです。

さて、モチベーションの面について書いていくと、当時、中〜小箱がみつけられないと感じていました。当時、公開ワールドとして見付けられたのはOpen Airなフェス会場や、ケバケバしい色をした大箱などでしたが、これらには音楽に対するコンテキストが大きく、今後、そのコンテキストと異なるイベントが起こると考えられたために制作にうつりました。

最終的に制作したものは、ほぼ全てのシェーダーがQuest対応の軽いワールドになりました。なお、QuadraはTopazChatをメインに運用できるようにPCのみ対応としましたが、Malplenoの特性をほぼ引用したがゆえに、他の自分が制作したワールドよりも遥かにパフォーマンスが良い結果となりました。

さて、小箱であるということはつまり、人の密集が起きるということです。これはDJ側のモチベーションにも繋ると考えています。逆に言うと広いワールドでは客と客の間がスカスカになってしまい、存在する人数よりも少なくみえてしまいます *2 。 この小箱であるという実現ができていたワールドは当時既にPrivateかつPCワールドとしては存在したようなのですが、Quest対応していたワールドには存在していなかったという点はモチベーションを得るということとして重要なことでしょう *3

この時からQuad *4 に適用したボタン類にピクトグラムを入れてあります。これは言語による伝達よりもイメージを伝えた方がうまくいくという考えからです。今後制作したワールド全てにこのMalplenoで作製したピクトグラムが配置されています。この内容に関しては後述します。

また、ライティングについてですが、前述の通り小箱を作りたかったために暗い「ように見える」ライティングをしています。この要素も他のQuest対応なクラブワールドにはなかったことです。なお、Quest対応のために、ほぼすべてのLightがStaticになっています *5。しかし、Malplenoがさらに暗く見えるのは壁の設定によるものが大きいと考えています。Matcapを使って、黒体のような壁としているために暗いということですが、実際のライティングとしてはそこまで暗くないので、アバターへの参照値もそこまで暗くなりません。なお余談ですが、当時のLightProbeの置きかたはかなり杜撰であり、Quadraとして再設計する際にはすべて置きなおすことになりました。

しかし、Malplenoを制作した当時のUnityの無理解から、オブジェクトの構造が難解になってきており、加えてPC/Quest両対応へのストレスからMalplenoの対極を作ろうと考えてできたのがClub NEBAです。

Club: NEBA

f:id:outoz9:20200811183831p:plain

  • コンセプト
    • パフォーマンス無視
    • 大箱
    • VJが映える ← 配信イベントの増加
  • モチベーション
    • Malplenoの鬱憤張らし
  • 名前の由来
  • 参考
    • Twitterにあがっている大箱の写真
    • Google検索にでてくる大箱の写真

NEBAのコンセプトはシンプルで、パフォーマンスなどよりも見映えをとった箱になっています。このワールドでは何個かのMixed Light *6は存在します。しかし、DynamicなObjectはかなり少ないワールドになっています。これは、演出の部分をかなり動画に頼るワールドとして制作したためです。 その理由としては、Otographic Artsの影響が大きいです。Otographic Artsは日本のOtographic Music *7 による毎月第一火曜日に放送されているDJ配信番組ですが、特徴としてはSoU先生によるVJが全編通してつけられていることでもあると考えています。したがって、そのVJ付きの動画を流して映えるワールドをつくるという別目標もありました。

f:id:outoz9:20200811184958p:plain
Otographic Arts

画面の配置としては2+1+2+1の6画面があります。標準状態では隠してありますが床面にも動画を出せるようにしてあり(TopazChat非対応)、圧倒的な見映えが可能です*8 。やはり、動画コンテンツは映画館も同じく「大きい」ことが正義だと思われます。したがってVRのような 事実上空間を無制限に構築できる場合かなり「やりやすい」ことになります。事実、この目的は何人かの利用をみて獲得できていることがわかりました。

しかし、このワールドは制作中のライトベイク *9 に時間がかかりすぎるために途中で制作を断念して現在の状況となっています。なお、WIPというのはWork in Progressという意味です。この断念した結果生まれたのがLoungeNOKTです。

LoungeNOKT

f:id:outoz9:20200811185800p:plain

  • コンセプト
    • 中箱
    • バー・派手すぎない見た目
    • 「実用的」
  • モチベーション
    • NEBAが無理になったため
    • また、NEBAに実際の実用性が低いと感じたため
    • TopazChatの本格運用
  • 名前の由来
  • 参考
    • R Loungeの6階の「間取り図」
    • VRChat: Club Loner, club monaca
    • など

MalplenoやNEBAにもTopazChat *10 を設置してはいましたが、特性上あまり良い方式ではなかったと考えています。このワールドではNEBAのパーツを流用して、かつ実際にイベントとして「使いやすい」ようなワールドとして制作しました。このワールドから、他の人によるフィードバックをかなり反映しています。例として、トイレの設置は他人から提案によって形にしたものです。また、NOKTは最初期の配置からかなり変えた面もあります。入口は最初には存在せず、前述の通りトイレもありませんでした。今ではカウンター部分のコライダーは調整されていますが、それもそのままメッシュコライダーにしてありました *11

f:id:outoz9:20200811190433p:plain
トイレについて

このワールドのライティングはNEBAとほぼ同一ではありますが、更に暗く、おちついた雰囲気を演出してあります。なお、初期からこれも何度かかなり変更してあり、最初のころにはPost-Processingを使っていたのですが、何度かの更新の後使わなくなり、暗さを調整してなるべくステージ付近を明るくするという調整を行っています。実装がまだできていない内容としては、終わったあとに明るくするようなことができればいいなあと考えていますが実現に至っていません。

上に述べたTopazChatの特徴として、1つのワールドに設置した場合、全てのインスタンスで流れてしまうというものがあります。これは多インスタンスで同時にイベントが可能である反面、Publicなワールドでは採用しづらいという面があります。この考えからするとそもそもPublicなワールドに置くこと自体悪手に感じられてしまいますが、しかし、TopazChatは公式のページを見て理解しない限り使い道がまったく理解できない—本体として用意されているUIはStreamKeyを書く欄とGlobal Syncだけなので—つくりになっている事から問題ないと考えています。さて、話を戻しますが、PublicなワールドでTopazChatを運用するには分離型の多チャンネル化を考えました。この仕組みはDahlia Bar (ダリア)、CLUB COLORなどにもありますが、Dahliaとはほぼ同時期かつ独立に実装したものであると感じます。これによって全てのインスタンスで流れるという効能は事実上無くなりますが、知っている人とイベントをしているインスタンス以外では操作がわかっていない限り流れないという利点も生まれます。この効能は別に考えると、次の手番の人が別のチャンネルに接続して別のインスタンスで音声テストができ、手番になった瞬間に切り替えて音出しが可能であるという作りです。この仕組みは後のワールドのほとんどに実装してあります。しかし、切り替えの都合上、どれが使っているのかわからないと切り替えることができないという難点が生じてしまいました。その結果LoungeNOKTのDiscord Serverを運用することになりました。結果として、そのServerベースでイベントなどを開催することができたので良かったのかなとも思います。

さて、前からVRChatでBoiler Roomみたいなことやると映えるのではないかと思ってつくったのが、NOKT: Boiler Styleです。これは作ったとは言えませんが一応紹介します。

NOKT: Boiler Style

f:id:outoz9:20200811193148p:plain
平成EDMアンセムかけ太郎 / DJアンセムかけ太郎

  • コンセプト
    • Boiler RoomのイベントみたいにDJと客が同じ向きのスタイル
  • モチベーション
    • みんなかわいいので
    • DJ側って全員見ないといけないし重くない?
  • 名前の由来
    • 直接的な名前を使うのは何か違うなと感じたため
    • またBoilerって名前から暖色光のライティングに変更

Boiler RoomはおおよそライブをするアーティストやDJのプレイをリアルタイムで配信・アーカイブする場、みたいな感じらしいです *12。多くのアーカイブでは箱の真ん中に卓が設置されていて、最近だとその様式を真似たリアルイベントも増えているようです。

これをもとに制作したのがNOKT: Boiler Styleとなります。なおVRChatでは圧倒的に客がかわいいのでとてつもなく映えます。なお、ステージ側にはカメラが設置してあり、そのカメラの映像を写すスクリーンがあります。これによって自分と後ろの客を見ることができます。なお、モチベーションに記載した通り、VRChatの都合上、客を見ないといけないDJが一番重くなり一番前にいる客が軽くなるという特性と、VRChat Userは鏡の前に集まりがちという特性を両方満たすことが可能であるという一石二鳥な形となりました。なお、同一のワールドを上げているのと変わらないので、ライティングをBoilerという名前から暖色光に変更しました。

ここでは一度だけ自分でイベントを開催しており、それがDJアンセムかけ太郎の第一回となるのですが、結構客がばらけることがわかりました。それならMalplenoサイズに落として客の凝集度を上げてしまおうとして考えたのがOrtus DJ Lab.です。

Ortus DJ Lab.

f:id:outoz9:20201205201533p:plain

  • コンセプト
    • Boiler Room+客の凝集
    • VRDJの練習場所の構築
  • モチベーション
    • NOKT Boilerが広すぎると感じたため
    • Boiler Styleの有用性を活用したかったため
  • 名前の由来
    • ラテン語で「日の出」
    • ライティングの色をNOKT Boiler Styleから継承したため

客の凝集度をあげるにはシンプルに動ける範囲を狭くするのが一番単純な方法です。そのためにMalplenoと同じサイズで目的を達成する手法をとりました。

また、前述の通り、Boiler Styleは自分の動作を観察することが可能であるために自分のプレイを観察しフィードバック可能であるという特性から練習場所にも適していると考えられました。これに関しては当時のVRChatでDJを始める人の多くがすぐに大きなステージに上がれる強い人 *13 が割といるように感じたのですが、それに対して小さく人前で練習する需要もあるのではないかと感じたためです。

ここでMalplenoをPC向けに改装・もってきたことにより、さらに客を凝集させたり、ラウンジフロアのような雰囲気をだしたりしたいと考えました。それによってできたのがSoundBarMéllonです。

SoundBarMéllon

f:id:outoz9:20201205201234p:plain
DJアンセムかけ太郎 #5

  • コンセプト
    • サウンドバー
    • ラウンジフロア
    • DJがメインではない
    • 客の凝集度
  • モチベーション
    • NOKTの反省
    • バー・ラウンジフロアぐらいの小さい場所でBGM的なDJする場所も欲しいと感じたため
  • 名前の由来
  • 参考
    • R Lounge 7階
    • OctBassのラウンジ
    • 早稲田の茶箱
    • 栄のMiRAi
    • など

SoundBarMéllonはある種の集大成です。結局、わたしも気にいってますし、わりと来てくださる方々にも気にいっていただいていると思っています。特徴としてはコンセプトのようにラウンジ・サウンドバーという雰囲気ではありますが、加えてカウンターがかなり低いというのももう一つの特徴かなとお思います。実際、ロポリこん適合性が高いがゆえにロポリこん勢が集まる傾向にあり、ある種裏こんカフェめいている面もあります。これは本当に偶然です。

さて、私がDJをするとき最近はほとんどLowkey Tech *14 だとかOrganic Houseみたいなのをかけることが多いです。別段目立つだけがDJでもないと考えているので、このようなChillなジャンルや、Waveみたいなちょっと深い感じのジャンルのDJをするコンテキストがある場所もなかったので、それも含めてラウンジとして作りました。なお、椅子や机などが少ないのは単純にあまりVRChatとして必要がないからと、椅子の判定をつけはじめるとひっぱられて事故が起きるためです。それでもSit判定のある椅子がMéllonには存在しますが、細かい内容は後ろにまとめようと思います。

所で、SoundBarMéllonでは木曜日を定期営業日として22時からイベントをしています。このイベントはどのイベントカレンダーにも入れておらず、Twitterのみでの告知をしています。まああまり意図はないのですが、単に理由としては面倒だからということです。他に理由が無いわけではないのですが、ここでは紙面を割かないこととします。毎週木曜日という形で始めた理由は、なにかしらMéllonとして活動しておくか〜ぐらいの気概であって、特におおきな理由はありません。演者は電音研と同じようにTimetreeで管理して、フライヤー・掲示物は名前と色だけ変えるだけで問題ないように設定してあります。第12回にして様式を更新しました。そろそろFree DJって名前微妙な気がしてきたので変えたいという希望があります。しかし名前がおもいつきません。

f:id:outoz9:20201205195107p:plain
前回のフライヤー

さて、以上のようにそれぞれのワールドで「どのような理由・モチベーション」から「どのようなコンセプト」を組みたて、そこからどう組立たかを書いてきました。さて、ワールド毎の流れではなく、ここからはほとんど全てのワールドにおいてほぼ同一の考えから構築しているものについて書いていきます。

ユーザー体験の検討

まず、このワールド群でのVRChat中でのUIやユーザー体験について書きます。反省として、最初の頃に制作したMalplenoではユーザー体験が酷いことになっており、例として動画プレイヤーのQuadをインタラクト—ただこのインタラクトという操作自体VRChatに依存しているものであるから、前提部分がありすぎている面は感じているのですが—すると後ろに動画のUIがでてくるという、あまりにも酷い構造になっていました。これが現在直せてないのはMalpleno自体のObject構造が無茶苦茶になっており、自分でも直すことができないことに起因しています。

さて、逆にそれに気付いた後になるべく工夫していた点をあげようかと思います。おそらくMéllonでは全て完備している筈です。

  • 鏡のトグルのQuadと平行に鏡を設置する
    • とにかくトグルQuadを触れる所から視界に入るところに出てくる事が重要
  • 動画プレイヤーやTopazChatを切り替えた際にはその視界中に同一のUIが出てくるようにする
  • Loli-Colliderは基本的に触った時点で発動が確認できるようにする
  • Loli-Colliderを2種類設置する時は低い方を出すトグルを上に設置して、高い方を出すトグルを下に設置する *15
  • ほぼ全てにピクトグラムをつけ、ある程度の説明を試みる

おそらく、最後の点は割合他のワールドに行ったときに悩むことが多い事項です。特に、VRChatの仕様上 *16 Tipを消しているため、なにかしらの説明を用意しなければ、事故が起こる可能性があるために私のワールドではなるべく設置をしています。なお、全てVRChat Toggleで実装しているのは、挙動がわかりやすいからと、ぶっちゃけUnityのUIの構築がわかりづらいと感じたからです。

f:id:outoz9:20200811191215p:plain
ピクトグラムについて

なお、Publicなワールドであるために、全てのワールドで説明書きや注意書きを置いていません。これは、その注意書きや説明書が読まれることが稀であると考えているからであり、その前提に立つとインタラクトした時の結果が明確に伝わることのほうが重要であると考えています。それに加えて、インタラクトした結果、想像のできないことが起きないようには配慮しているつもりです。その例として、Méllonの椅子が挙げられます。

実はMéllonのカウンター側の椅子にはSit判定があるのですが、ほんの小さな仕組みを入れています。実装してあるものとしてはシンプルで、椅子より横に来ないかぎりsit判定が有効化されないというものです。これは例としてDJ側のフロアで踊っているときなどに椅子にひっぱられないようにするために少しだけの細工として導入してみました。この仕様の理由としては、普通のワールドではSit判定ボタンなどをつけますが、インタラクトした際の起こることがわかりづらい上、Ex Menuじゃない限りどこか「意味もなく」押しに行く必要があるため体験が悪いと感じているためです。

f:id:outoz9:20201205201749p:plain
Sit判定の検討

さて、これらのようにユーザーがどのように行動し、どのような操作を期待するかを考えてトグルなどは構築しようと考えています。しかしながらこのような構築は、実際にテストして観察しなければ改善も難しいので悩ましいという点があります。

名前の検討

f:id:outoz9:20201205200607p:plain

雑多に決めているように見える名前についてです。それぞれ上の文では由来について書いてきました。全体を通して名前として意識していた点は2点あり、まずユニーク性が高いことと、英語1〜2単語+特殊単語のほぼ2〜3単語で組むということです。英語の部分はおおよそそのワールドがどのように使われるかを想定した単語になっています。逆に特殊単語についてはVRChatのWorldに同一の名前が多くなく、かつTwitterなどで検索した上でもある程度ユニーク性が高いものを選択しています。 NOKT以降に関してはなるべく覚えやすいという部分も重視するようにはなっています。エスペラント由来のMalplenoは音馴染みが薄く覚えられておらず、また、NEBAもNevaと間違えられることが多かったためです。NOKT以降はMéllon以外はラテン語語彙から引いてきていますが、おそらく覚えやすさという点において、ラテン語のようなある程度広まっている単語は問題ないのかなと思ったりしています。

一点予想外だったのはMéllonで、これはギリシャ語のμέλλον -- 「未来」からきていますが -- これをわざとMelonと読み替えて絵文字の🍈で表現することが割合一般的になったこととです。これによって更に認知度があがっているように感じます。

これらのように、なるべくユニークな名前をつけると、実際にVRChatのサイトでも検索しやすく、知った後のフローがシンプルになると言えるでしょう。

まとめ

以上のような事項が私がワールドを制作しているときに考えていることです。他の人がどのような考えで作っているのか、どこに意識を置いているのかはかなり気になります。まとめとして、私が考えていることはおおよそ、以下のようにまとめられます。

  • コンセプト(目的)とモチベーション重視での制作
  • 来る人がどのように動くかの想定
  • 調べられるときを想定した名前の決定

以上です。いまだ未熟ではありますので上に書いたすべては実現できていないと今でも思っています。ご意見などございましたらDMなどでご連絡ください。なお、本来的には利用している全てのユーザーの動きを見てその先を考えたり、機能など実装したりしていきたいとは考えていますが、VRChatの特性上できていないことが悲しいことです。

なお、ここでは書かなかった、間取りやメニュー部分の文字組み、色の設定や細かいライティングなどに関してはN日後の自分が気をむけば書くことになるでしょう。

さて、次の日のヨヨヨねこアドベントカレンダーの記事は以下です、よろしくおねがいします。

neoki-teimon0.hatenablog.com

謝辞

使用した全てのアセット作者に感謝いたします。特にVRC_HouseBuilderが存在しなければ上記の全てのワールド考えは実現していませんでした。

また、この文章の校正を手伝っていただいた六橋氏に感謝致します。加えて、NOKT系列のワールド利用者・フィードバックをくださる方々に感謝いたします。そして、SoundBarMéllonの『店長』をしてくださっているQ330氏にも感謝いたします。

最後に、この記事を書く機会を頂いたseptem47先生に感謝いたします。ありがとうございました。

本ワールド群における制作資金の一部は特別定額給付金(新型コロナウイルス感染症緊急経済対策関連)によりました。

*1:それ私も知りたいんだが?

*2:しかしながら、VRChatの特性上、広いワールドの方が視界中に入るアバターを減少させることができ、必ずしも広いワールドが悪いと言いたいわけではないです。

*3:上が見えないとモチベーションになりますね。

*4:板のようなオブジェクト、図を参照。なお、VRChat上ではこれをトグルとして役割を与えることが可能です。

*5:Lightをワールド自体に焼きつけているという理解で良いでしょう。

*6:ワールドに存在しているときに個別に光の状態を計算する必要があるようなLight。

*7:https://twitter.com/otographic

*8: しかしながら元々クラブでも起こることだとは思うんですが激しい点滅には頭がつかれますね。

*9:あらかじめライトによる明るさを計算しておくこと。

*10: https://booth.pm/ja/items/1752066

*11:ただしこれはLoungeNOKT: Boiler Styleでは直っていない面です

*12: cf. http://1overf-noise.com/music-info/about-boiler-room/

*13:私がステージ上がるの苦手なので本当に強いと思っています

*14:これはSpotifyのPlaylist名からとっています。きいてみてね Lowkey Tech on Spotify

*15:これは指摘されて気付きました、ありがとう!!

*16:今どうか知らないんですけど、自撮りするとコントローラーが映りこんだりする。

EventSpace: Malplenoについて

f:id:outoz9:20200603190743p:plain

つくった。あとPublic化された。

vrchat.com

何故

  • クロスプラットフォームでいい感じの日本の箱っぽいワールドがなかったから *1
  • 〜専用にならない感じの箱
  • Home Builderアセットをつかってとりあえず弄ってみた結果できた産物

コンセプト

  • 暗い → フェスとかよりも箱
  • 狭い → 狭いと人数少なくても「映え」る。
  • モノクロカラー → ジャンルを定めない
  • 全てベイク済みライト → クロスプラットフォーム

名前

エスペラントで「空っぽ」

ギミック

f:id:outoz9:20200603203148p:plainf:id:outoz9:20200603203144p:plain
トグル

PlayerAudioOverride以外はあまりかわったことはしていない。 トグルに対して汎用フォントを採用すると雰囲気を破壊するので全てボタン類をそれっぽく制作した *2 。 なるべくステージから見える部分にトグルを置かないようにはしている。これについては、人数表示も位置を変えるか悩んでいる。

なお時計を設置していないのは時間を忘れて楽しむみたいな方向から。ステージ楽屋側には置く予定は無くはないが、これもPC限定となると考えられる。

PlayerAudioOverride

  • ワールド全体の声の音量下げ、減衰を強めにかけている。
  • またワールド全体のAvatar Volumeも下げてある。
  • Audio Boost Zoneの部分のみ通常音量+通常減衰としてある。
    • WorldにJoinした瞬間に普通以上の音量が入るのを避けるため
    • 狭いワールドを広くつかうため ← 減衰が強いと近くにいかないと会話できない *3

Video Player

f:id:outoz9:20200603222804p:plain
最高最高最高最高

iwaSyncVideoを一部改変して設置した。 Streamingを見ているときだけSyncボタンを後ろ側に現われるようにした。 ちなみにやっぱり暗いのでOtographic ArtsなどのVJ付き配信を見るとかなり映える。人が増えても映えそう。 SoUさんに気付かれてた。

ただ今後のことを考えると、光過敏性発作 *4を引き起こす可能性があるので対策を考えている。あとレンズに映り込むかも……。

今後

大きく変化させる予定はないが以下のような変更を考えている。

  • ステージモード (DJブースを消して小さいステージを設けることができるトグルを設置する)
  • 自作デザインのイベントカレンダー (モダンな感じのを作りたい……。)
  • (未定) ワールド専用もしくはワールド連合イベントカレンダー
    • ワールドもしくはワールド連合でのイベントカレンダーなどをPanoramaで設置できたらなあとか考えてる。
  • 人数表示を目立たなくする
  • 光過敏性発作対策
  • ボリュームスライダーを後側に設置
  • 画面枚数追加モード
  • (未定) TopazPlayer 0.xの導入

自由にイベントとかにつかっていいので感想ください。

Special Thanks

  • 緋雪さん (@hiyuki2578)
  • アセット作っている方々 (使ったアセット類はワールド内に記載してあります)
  • テストに参加して頂いた方々

*1:みつからなったとも言う

*2:素材はつかっているので「一から」とは書かない

*3:まあDJ事故ると露骨にブースから離れるってことになるとも言えるが……

*4:ポケモンショック

AWSでクラウドVRChatやってみた

Abstract

Oculus QuestのVirtual Desktop (side loaded)を用いてAmazon Web ServiceのG4 instanceに接続し、VRChatにloginしてみた。 回線状況などが悪くないかぎり、会話が可能程度のレイテンシで接続できることがわかった。 なお、料金は1時間あたり多めに見積って1.5USD程度であった。 この手法をHead Mount Displayの貸与サービスとあわせることで、例として、 High-SpecなPCが自宅になくても一時的にVRを体験することが可能になると考えられる。

科学の力ってすげー!!

いまじゃ自宅に強いPCがなくてもOculus QuestからPCでのVRChatを体験することができるんだと!!

できます。お金はかかるけど。この記事は感想と環境について書いています。 この記事最後の参考文献を参照すればできるとおもいます 。

なお、環境は以下の感じです

おそらく、固定回線があって、まともな5.0GHz飛ばせるルータがあればできるとはおもいます。 PCもスペックとしてはRemote Desktopさえ動けばなんとかなるとおもいます。

加えて、用いたソフト・サービスは以下の通りです。

  • Microsoft Remote Desktop
  • Virtual Desktop (Side Loaded)
  • AWS EC2 g4dn.xlarge (設定にt3.medium) + 色々
  • persec
  • TightVNC
  • vb-audio (必要ない可能性もある)
  • Steam
  • Oculus Software

実際どうなの

通信環境さえまともであればVRChatであれば普通にプレイできるというのが私の感想です。 ほかのゲームをやる上で、レイテンシとかに関しては実際に検証しているかたがいるので参照していただきたいです。

なお、GPUはTesla T4で、わりとつよいのかVirtual Lensなどをつかってもそれなりに動いてます。 fpsは100(表示できない)〜30ぐらい。えらい集会でも問題なく動きます。 まあ回線状況が悪いときはすごいことになるので、そういうときは即あきらめたほうが良いとおもいますが。

f:id:outoz9:20200424171912p:plain
えらい集会で30人ちかくいてもわりと普通に生存できることに感動、なおQuest単体だと死ぬ

お金はどれぐらいかかるの

おおよそ1時間あたり1.5USDは越えないぐらいかなとおもいます。やっぱりData transfer outの比率が高いかなとおもいます。 3時間ちょっとやってEC2に1.19USD、Datatransferに2.53USDですね。あとEBSやSnapshotにお金がかかります。 まだデータはとりきれてないのでアレですが、結論、安くはないです。VR睡眠とかしたいならゲーミングPC買うほうが絶対良いです。

ただ、例えばOculus Questを借りて、ハイスペックPCないけどまあまあなPCと固定回線ならあるって人であれば、一時的にVRを体験できるという点では良いのではないでしょうか。 そろそろVket4もはじまるらしいので、動くかはわかんないですが……、とりあえずVket3のシブヤはちゃんと動いてました、これで人が多いとどうなるかは分かんないです。 それで飛びこめ沼!!するのであればハイスペックなPCを購入すればいいという点では、一度体験として……という形ではいいのかなと思います。 まあ何も考えずゲーミングPCとQuest買って「絶望的に合わなかった」とかだとたしかに悲惨ではあるので……。

設定における注意点とバッドノウハウ?

一応注意点とかどう動かしているかを記載します。

  • Remote Desktopで繋いでいるとDirectXがうまくうごかないらしいのでVNCとかで繋いでGPUドライバ回りの設定をする
  • Remote Desktopでログイン→画面閉じ→persecで接続→Virtual Desktopで接続→persecを切断 ってやるとまあまあラクにログインできる
  • 当然だがRemote DesktopやVNC、persecで繋ぎながらVirtual Desktopを起動させるとData Transferに結構課金されるので注意
  • 毎回VRChatログインは必要
  • スクショフォルダはシンボリックリンクをD:/のどっかに貼っておくほうが気楽 わたしはdropboxに直投げしてる
  • AMIとって前のAMI消してsnapshot消して〜って毎回やってる
    • ある程度設定ができたらそのままTerminateしてしまったほうが楽な気はします
    • 時間課金なのでAMIとる時間がもったいないのではって思ってしまう面もある

参考文献

構築にあたって参考にしたページです。Google cloud Platformでもできるとおもいます、ぜひやって記事かいてみてほしいです。

suna.hateblo.jp

troches.jp

tona.hatenablog.jp

ミーシェちゃんを雑に違和感なくQuest対応する

前回のあらすじ

アップロードまではできるけど赤面させるとすごいことになっちゃう……。

f:id:outoz9:20200403190534p:plain
すごい赤い

TL;DR;

言ってしまえば力技と妥協。

  • 透過が必要なMaterialのShaderVRChat/Mobile/ToonLitにする
  • 透過される先の部分を元の顔部分とかからひっぱってきて違和感なく「合成」させる (力技)
  • あまり面積が広い部分は表情の該当するもののBlendShapeを0にする (妥協)

この記事の内容と注意点

  • 2020.1.1アプデ対応版です
  • 試行錯誤の結果を記録する記事に近いです
  • 別のアバターなどに適用できるかは分かりません
  • Blenderと和解する気がない記事です。
  • アプデ直後なので記事の内容が変わることがあります
  • 「妥協」と「力技」の産物です。参考にならないかもしれません。
  • VRChat, Unity初心者なのでアドバイスください>< *1

アプデがきたら記事を完全に書き直すことになってしまった……。 (VRChat 2020.1.1 @ Build 910)

ひつようなもの

  • Photoshopとか(色が塗れればなんでもOK)
  • Unity (2018)

手技

1. 塗る

これを例示としてあげると、素材画像をあげることになるのでここには記載しません。 *2

ということで自分でつくったクソ雑な図をこう……

f:id:outoz9:20200403184401p:plain
UVに合わせて塗るという力技

赤面をどうしても再現したいなら顔の部分のUVを考えてコピーして載せるって手段があります。今回は頬染めは あきらめます

テクスチャ改変に関する手法については細かく書かないし、やりかたがあってるか分からないのであれですが ImageディレクトリにぶちこんでそのままMaterialに適用(ドラックアンドドロップ) してます。

参考:

tetoralog.com

2. Animationを改変する

Animationを書きかえてしまえば頬染めしなくなるんですよ、それはそうなんですよね……。

ここからはPCとQuest向けは別のProjectで立てている前提で書いています。 手法としてはシンプルで、Assets > Mishe > Animationディレクトリの中の表情のAnimationから透過で酷いことになってしまうBlendshapesを消してしまう。というものです。

やり方は *3 、変更したいAnimation(*.anim)を選択して メニュバーのWindow > Animation > Animationを開きます。 するとこんなのが出てくるかとおもいます。

f:id:outoz9:20200403185308p:plain

これを開いている状態で Inspectorの下側のプレビュー *4 をみてみると、見事に真っ赤になっている状態なことが分かります。

f:id:outoz9:20200403185459p:plain
見事に真っ赤になってますね

ここでやることは一つだけ、もう一度Animation Windowを開いて Body: Skinned Mesh Renderer.Blend Shape.頬染めを右クリックで選んでRemove Propertyするだけ。 すると、以下のように「頬染めはないけど同じような表情」ができあがるとおもいます。

f:id:outoz9:20200403185719p:plain
若干表情が固い気もしますが「違和感」はないですね

これで完成です。あとはQuest向けのいつものアップロードをするだけです。 表情の変更に関しては以下の参考文献を確認していただきたいとおもいます。

f:id:outoz9:20200401215016j:plain
Questから確認 問題ないですね

まとめ

2020.1.1アップデートが来て、現状(2020/04/03現在)、Questには透過できるシェーダーを適用できなくなってしまいました *5 。したがって、どうしても「違和感なく」Quest向けにアップロードするとなると、私の思いつく上では(またUnityだけでやるには)これぐらいしかないのかなと思います。はい。まあ解像度の高い *6 PC向けには普通の透過版を上げればいいだけなので、まあ……って感じはしますが。

参考文献

shiasakura.hatenablog.com

*1:New Userやぞ

*2:再配布になる可能性があるため。

*3:当然ですがこれをやる前にBackupはとっておいてください

*4:おそらくデフォルトではなんか変なオッサンが写ってるかも。 左側のprefabをドラッグアンドドロップで投げこむとプレビューできます

*5:従来のAdditiveはもちろん Multiplyもつかえないし、新規追加したものはアップロードできないし……。

*6:見たことないんですけども

ミーシェちゃんをMacでVRChatにアップロードする

追記 (2021/09/27)

Unityのバージョンが変わって陳腐化した面はありますが、基本的な部分は変わってないので残しておきます。

概要

ミーシェちゃんかわいいですよねかわいい。うんかわいい。

まあアップロードの際のメモみたいなものです。 環境依存部分も大きいでしょうし参考になるかわかりません。とりあえず書いときます。 あと我流です。加えてわたしは現状MacしかもってないのでQuest向けにどう上げるかの試行錯誤もかきます。 今回はアップロード(するだけ)まで〜。*1

実行環境

TL;DR;

MacでVRChatにアップロードするにあたって……。

  • UnityでWindows Build supportAndroid Build Supportをインストールする
  • VRChat SDKのimport時にow.oggをimport しない (2018ではImportしても問題なくなりました)
  • 確認中: Arktoon ShaderはMacOSとの相性が悪いのか2018では動作しないので別のShaderに切り替える。

Quest向けにアップロードするにあたって……。

  • Quest向けプロジェクトを立ててDynamic BoneをImport しない
  • Quest向けプロジェクトでMaterialsのShaderをVRChat/Mobile/ToonLitにする

メイン

1. 準備

まずUnity環境をひっぱってきます。なんか最近だとUnity Hubをつかうといい感じらしい。 簡単のためbrew caskをつかって……

$ brew cask install unity-hub

あーその前に、Unity IDを取得したりしました。 インストールした後開くとだいたい用意しろって言われるので仕方なくアカウントを取得しました。

次いで、VRChatのSDK公式サイトのDownloadからSDK2 *2 をひっぱってきます。(要ログイン)

そんで公式ドキュメント

Once Unity Hub is installed, *click this link to install the correct version of Unity. *

のリンクからUnityのバージョン2018.4.20fをインストールするリンクをクリックしてインストールを開始します。*3

f:id:outoz9:20200329215311p:plain
Unityのインストール
こんな画面がでてくる筈なので、ここで Windows Build SupportAndroid Build Supportにチェックを入れてインストールします。

あとはひたすら待てばUnityがインストールされましてえらい!!

2. 読み込みからアップロードまで

上述のようにQuest対応をさせる必要があるのですが、Swich Platformに無限時間かかるのでメモリの余裕をつかってProjectを二つつくってます。 一つはPC向け、もう一つはQuest向けにたてました。

2.1 PC/Quest向け共通

まず、Asset > Import Package > custom package... を選択して、VRChatのSDK2をImportして……なんか色々Importするファイルが出てくるので……、

ここでImportする際に ow.oggチェックボックスを外しますMacでow.oggを読みこもうとすると何故か無限時間かかるのでとりあえずチェックを外します。謎い。 2018で改善、チェック外す必要はありません。

f:id:outoz9:20200331200509p:plain
SDKのimportについて
読みこみおわったら、PC向けのプロジェクトではDynamic BoneとかをAssetsからImportしてミーシェちゃんをインポートする準備をします。*4 加えてVRChat SDK > Show Control Panel を開いて、Authenticationタブからログインします。 加えてSettingsタブのFuture Proof Publishチェックボックスのチェックを外します*5

そして、同じく Custom PackageからMishe.unitypackageを読み込ませます。わたしの環境だけかもしれませんがArktoon Shaderとの相性がMacと悪いのか読み込みに無限時間かかるのでコーヒーでも飲んでまってます。はい。

f:id:outoz9:20200329220414p:plain おわったら下にこんなかんじに表示されるとおもうのでMishe_lightってかかれてる青い箱 *6 をHierarchyってかいてるところに投げこみます 。

ここまではPC/Questで共通の作業になります。

2.2 PC向けへの作業

PC向けへの作業は非常に簡単で、VRChat SDK > Show Control Panelを開いて、BuilderからBuild & Publishをクリック。あとはこんな画面がでるとおもうので、 f:id:outoz9:20200329220940p:plain Private側にチェックがついてる事を確認して、一番下のThe Above information is...って書かれたとこにチェックをいれてアップロードします。

これでPCからは見られるようになりました。

2.3 Quest用の作業

この状態だとQuestでは「着る」ことができないので、Questに対応させた上でアップロードをします。 Quest向けのプロジェクトを開いて、File > Build Setting を開きます。 f:id:outoz9:20200329221249p:plain

こんな画面がでるとおもうので、Androidを選んでSwitch Platformします。 これでAndroid向けにアップロードができるようになりました。

Quest向けにアバターをアップロードするにはだいたい以下の条件があるみたいです。

  • Dynamic Bone, clothなどをつかっていない
  • シェーダーをVRChat/Mobile以下のものにしている

逆に、 ポリゴン数などに制限は無いです*7

なので対応としては、 Assets > Mishe > Materialsに入ってるファイルを全部選んで右上のInspector から Shaderを画像みたいに選ぶだけ!! ((VRChat/Mobile/ToonLitを選択)) f:id:outoz9:20200329221829p:plain (Toon Litがめっちゃ眩しくはなるけどおすすめです)

加えて、Dynamic BoneなどのScript(の残骸)がPrefab内に残っているとアップロードできないので、すべて選んでちまちま消していきます。 *8

f:id:outoz9:20200403191431p:plain
5つをそれぞれ歯車マークを選んで消していきます。
おそらくミーシェちゃんは Mishe.prefab/ArmatureMishe.prefab/Armature/Spine;/Chest/Neck/Headとかに差さっているはずなのでちまちま消しましょう。 *9

そしたらPCと同じようにアップロードします。 アップロードの前に、 VRChat SDK > Show Control Panelを開いて、Content Managerのタブを選びます。 f:id:outoz9:20200330201511p:plain いまアップロードしたアバターの[Copy ID]をクリックしてBluePrint IDをコピーします。 それで、HierarchyのMisheをクリックして左側のInspectorの一番下に出ている、 f:id:outoz9:20200330200422p:plain Pipeline Manager (Script)のBlueprint ID(Optional)の欄にコピーしたIDをペーストしてAttachをクリックします。 これでQuest向けのアップロードの準備ができました。 PCと同じようにBuilderのタブからBuild & Publishでアップロードします。 *10

おつかれさまでした。 できます。はい。 f:id:outoz9:20200329221949j:plain

(これはQuestからの画像)

2.4. 蛇足

Blueprint IDを同じにすればPCからはArktoon ShaderかつDynamic Bone入りのミーシェちゃんが、QuestからはMobile/ToonLitでDynamic Bone無しのミーシェちゃんが見えるという状態が構築できます。 ただあんまりこの手法とってるとQuest勢だと思われることが全くないので *11 その点は注意かも……?

あまりやらないほうがいいですが、Blueprint IDが同じであれば同一のアバター扱いされるので、Questでは幽狐さん、PCからはミーシェちゃんが見えるみたいなことも可能です。おそらくアバターまわりの会話が成立しないのでやめたほうが良いとはおもいますが……。また、Questでよく見るあのロボットくんは、逆にQuestのみの方でアップロード(AndroidSwitchした方のみ)するとPCからロボットに見えるという形になってます。関係ないけどぶっちゃけあのロボットこわいんだよね……。

次の記事にかくこととまとめ

雑多に書きましたけど、アップロードだけならシェーダーを変更するだけでぶっちゃけアップロードできます。

ただし、VRChat/Mobile/ToonLitは透過に対応してないので、頬染めをすると以下のようになります。 f:id:outoz9:20200329222342p:plain

この解決方*12はあるんですが、この記事に書くと無駄に長くなるので次の記事にでも書こうとおもいます。はい。

参考文献

だいたいこのあたり……。

docs.google.com

qiita.com

*1:間違えてる点とかありましたらご指摘頂けるとうれしいです、もっと釈明させてもらうとこれUnity触るのはじめてだったのであーあーあーあー。

*2:アバター向けはSDK2をDownloadしましょう

*3:ここのリンクも同じ参照をしてます

*4:Quest向けでは使えないのでImportしない

*5:なんか未来バージョン向けの対応らしいけどもMacだとそもそも外さないと上がらないことも多いとかなんとか?

*6:prefabっていうらしい。

*7:超ハイポリだとそりゃ重くなるだろうけど、それよりシェーダーの方が計算重いんでしょうね……

*8:スクリプトでなんとかできる気もしますがここでは書きません

*9:加筆 2020.04.03

*10:なんか色々出てくるとおもいますがだいたいAutofixで大丈夫だとおもいます、大丈夫かは分かりませんが……加筆修正: 2020.04.03 / 加筆修正: 2020.03.30

*11:『Questからでーす』「え、Linkだよね……えっ?」 ってなりがち

*12:力技的なのでアレ