Observe Photon

なにかについて

UnityでやってるVJの構成について

ちょうど長時間移動があって書く気力が湧いたのとジェネ系VJアドカレがあったので、自分がUnityでVJする時の構成を簡単に紹介しようと思いました。

 

今回はこちらのイベントのときの構成になります。

 

Midi入出力

Midi入力はKeijiro Takahashi が公開しているRtMidi for Unityを使っています。

github.com

これを元にMidiInputとMidiOutputコンポーネントを作り、それぞれ

MidiInputはIMidiInputを持つコンポーネントに入力されたMidiの値を渡していて、

またMidiOutputは、UnityからVRChatにloopMidiを通してMidiを渡したい時と、LaunchPad miniのPadの色を変えるために使ってます(どちらもDrawのときは使ってない)

VFX Graphに関してはPropertyBinderでCCの値、EventBinderでNoteのOnOffをTriggerとして渡せるようにして使っています。

EventBinderとPropertyBinder

レンダリング

最新ではURP14を使いました。VFX Graph、ShaderGraphが使えるのと、今のところHDRPを使うほどの絵を作ってないことが主な理由です。いい感じにHDRPを使ってやるの考えたいですね。

PostEffect群はURPはRendererFeatureを使わないといけないので、それぞれのRenderPassを書いて実装しています。(URP12と14で書き方が変わって大変だった)

 

この前のDrawでは

EdegeDetection

FeedBack

SlitScanぽいもの

を作りました。前のだと他にも作ったりしていますが移行の関係と、Feedbackするときのバグの解決に時間を取られて(Bufferの色味が変わってしまって結局、白黒にして誤魔化してます)この3つだけです。

 

また配信のため、KlakSpoutを使ってOBSに送ってます。CustomRenderPassFeatureでUI描画前の絵をKlakSpoutで送るRenderTextureにコピーしています。

Renderer Features

 

素材

主に素材はVFX Graphを基本に、 ShaderGraphで見た目を、動きの制御周りはGraphicsBufferを経由してComputeShaderとスクリプトでやったりしています。Unityだとこの3つが簡単に連携できるのでとても重宝しています。

 

ちなみにDrawのときの素材作るときに参照したネタはこのあたりです。

 

vimeo.com

 

 

ついでに今回のプロジェクトを公開します。整理あまりしてないので見づらいですが…

github.com

 

おわりに

この構成自体は3年前のGC5.0用に作ったLaunchPadからをVRChatにMidiを送るソフトから始まって、一昨年のSanrio Virtual Fes 2021、去年Channel、今年のdrawで少しずつ改良していったものです。おかげではじめから素材づくりに集中できていい感じでした。

他に、もうちょっといろいろやりたいなと思いつつネタもあるけどなかなか掘り下げられてないなという感じです。

 

VRChat振り返り-3年目-

VRChatを始めて3年が過ぎてしまいました。3年目はいささか迷走した1年だったと思います。2年目で一つ区切りがついていたので、その次の年は探る、停滞した年になるとか思った気もするのでそんなに間違った見立てではなかったと思っています。それでもしんどいことはしんどいし楽しいことは楽しかったのでまぁそれもそれで良しとします。

Shader1WeekCompo

去年の今頃の話からすると3月はブタジエンさんと避雷さんが発起人になったShader1WeekCompoからでしょうか。 1週間でShaderを用いていれば何を作ってもいいというゆるい企画です(どうかな?)。一応、初回から今回は無理そうと言いながらも全部に出させてもらってます。 ちょうどよくVRChat以外のことをやるいい機会で気分転換になるので良いんですよね。毎回1Weekというよりも1Dayだったりするのでなかなか1週間かけて良いものを作るということができてないと思うのがちょっと気に掛かる部分だったりします。もともとはWebGL、最近はもっぱらとGLSLSoundを触る機会になってますが、そろそろ新しいことにも挑戦したい気もあります。これも始まってから1年経ってしまいましたしね。

初回に関してはブタジエンさんの身内、つまり大半がVRChatでShaderを書ける人だったということもあって、終了後の交流会をVRChatでやりましたが、その時、ワールドを作って欲しいと頼まれたので作りました。展示会兼交流会のためのワールドだったので始めてそういう導線を考えて作ったです。加えてこれの前にCineShaderを見てそういう感じの作りたいよねというところにこれを作る話がきて、さらにRealtimeGIも動くことがわかって色々タイミングよく組み込めたりと個人的にはいろいろ実験できたワールドでした。

fotfla.hatenablog.com

Audio Interactive and Udon

4月以降から、Udonがある程度動くようになってさらにUdonSharpとかいう強力な道具が現れたのでまずはということで音周りをいじってました。いつもの如くシーケンサーを作ったりして遊んだりしてました。

やっぱり音に合わせて動いてくれるのはいいし、音に合わせて動かしたいし、そういうのがもっと増えればいいなと思っていたりします。

あとUdonではないけど、これとは別にあとあとでMidiOrcaを使ってやったりとこのあたりは続いていくんでしょうね。

GameJam

そういえばこんなこともやってました。たにったさんに誘われてLudum DareというGameJamに参加してました。私はプログラムをちまちま書くことをやりました。結果的にゲームを作ったかというといろいろありましたが… 短期間でみんなでわいわい作るの楽しいのでまた機会があればという感じですがその時はその時ですね。

Angel's Stairway

このワールドはもともとVolumetricRenderingをやっていて、最終的に終わらすために作ったワールドでしたね。 この作ったVolumetricShader自体はなにかと以前のクとか地下で使ってもらったりしてその節ではありがたい限りでしたが、もともとは自分で作ってなにかワールドにできたらいいなと思って2019年夏頃に作ったと思います。この時たまたまSecretSkyで前にテストで使ったVolumeTheaterを思い出したり、VolumetricRenderingがちょっと話題になったのもあって再度触れつつワールド案もあったのでこれでVolumetricRenderingは一旦終わりにするという感じで作ってました。とはいいつつここは色付きライトにCookieを使って落ちる光の色をつけたり、足音をつけたり、これだけじゃなかったりするんですけどね。

A Miniascape

6月頃はずっとVRAA2に向けてワールドをつくってました。このワールドのコンセプト自体は無限にある空間を移動したいぐらいで作ったと思います。ちょうどUdonを使ったワールドとしてちゃんと作るにはいい機会だったと思ったのもあって作りました。Udonを使ってMeshをいじれるようになったのでそれを使って地形の自動生成をしたいと思ったのもありました。 初期構想自体は無限に広い空間を作ってそこを自由に移動、また別の移動手段として別の空間に移動して、そこで好きな座標を選択して移動ぐらいを考えてました。

初期構想から大きく変わったのはMeshというよりメッシュを自動生成するには重たかったからが大きいです100x100頂点では生成する瞬間に負荷が掛かって一瞬止まったりしました。この時GetPixelを使えればShaderでHightMapを生成しておいてその地点を読み取ってColliderを生成するができただろうけどできなかったのでできる形にしようとしたらこうなりました。(実際作り終わったあとにSetPixel,GetPixelがUdonに実装されてすぐに無限地形生成が作られたので結構しんどみがあった) Mesh生成自体は単純にFBMノイズを作ってShader側でも同じものが生成されるようなFBMノイズを作ってうまく合わせてやってました。 また草や花の生成はGeometryShaderですべて生成してShaderで生成したHeightMapから生やすところを決定してました。このあたりのGeometryShaderで草花を生やす仕様かとまた、VRchatではTerrainで作られる草花が多く、リアル調でVRで見るには少し気になっていたのでこの時はStylizedな見た目で行こうと決めてましたね。

この制作にあたって悩んだことは結局同期周りで特に地形生成をどう同期するかが一番考えてた気がします。シード値がどのタイミングで同期するかわからなかったので極力地形生成するのを遅らせるためにボタンで魔法陣に演出を入れて飛び込む瞬間に生成をするようにしてました。そんなに気にする必要もなかったのかもしれませんが、VRChatにいる人達はどう動くかはわからないので最悪を考えるとこんな感じになったりします。

まぁこれ、一人で全部やっちゃて使える時間の少なさも相まって、やってるときだいぶしんどみがあったんですが、ありがたいことにそのVRAA2で賞を頂くことになって少しはほとしたり、ここで草とかを作ったことで三日坊主さんに呼ばれて坊止2に草を提供したりと、色々と面白いことに繋がってる(?)ので最終的にプラスになったという感じで居れてます。

twitter.com

void

習作集とかSketchとかそんな感覚で作ってます、こんな感じのを作りたいなと思ったものを気楽に作ってます。今の所tiwaさんポータルワールドからしか行けないようになっています。自分のポータルワールドの案がないわけではないのですが… それぞれなにをしようとして作ったかの解説をちょっとだけ

void

これはよくありそうな縦空間に球を置いたて縦構造を作りたかったのと、音を空間に配置したのをやりたかったのでえいってやったやつ。ちなみに音のなるタイミングはこれの前に作ったユークリッドシーケンサで、音の方はこれを使っておきたかったのもありました。ちょっとした解説は下な感じです。

void2

tiwaさん主催の1hWCでテーマが「植物」で制作。これの前に買ったRealIvyを使いたくて制作したもの。空間としては無機(コンクリート)と有機(蔦、草)あたりを混ぜたかったのとFogの表現としてパーティクルが使えるかもしれないので天窓を開けてそういう表現として使えるかしてみたもの。

void3

同じくtiwaさん主催の6hWCでテーマが「ピクニック」で制作。このころワールド制作欲があったのと、草を使ってなにかしたかったのでピクニックをうまく解釈して作ったもの。ピクニック->風景を楽しむ->その風景を切り取って窓から覗く、といった具合で解釈した気がします。さすがに6時間あるとこれくらいだとなんとか音までつけれることがわかったのもよかった。とはいってもすでに組んであったものをその場で手を加えたので準備が必要なのは仕方ないね。

これは今後もこんな感じで作って行くかもしれいないですね。

電ド

クリスマスプレゼントとな年末にやることができた電ド、この時点で多分1年ちょっとぶりくらいだったやつ。この時はMidiOrcaでコントロールしてやったりしましたね。 fotfla.hatenablog.com

UdonMidiか来そうで(来たけど)この記事は不要になりそうなので(?)Twitterで公開してませんが… この時、確か雑にやろうとう言う感じで作り始めたと思います。今までと違って広い空間ではなく狭い空間でなにをどうすると良くなるかよく考えてました。最終的に壁は照明をベースに、視界ジャック系のエフェクトはあくまで視界を歪めてなにかをするためではなく空間を操作するというが方向で作ってました。全体的に視界を遮らずに、空間を維持しつつかつBPMSyncをするように作っていた気がします。 VRの演出ってなんなんでしょうね。正直未だによくわかりませんが… まぁ個人的な好みとしては元の空間と上手く混ざってるのが好きなんですよね。VRに来る前に興味のあったことがプロジェクションマッピングとかARとかそっち方向だったので、基本的にはそういう方向が好きなんでしょうね。レイマーチング的な絵がそこまでやろうと思わないのもそういうことなのかなと、ベースに対して多少の異常な変化が加わったりとか。 まぁこのままこういう感じのことをやり続けられればまぁいいかなとか思っています。

アバターとか

2019年の夏から基本的に幽狐ちゃんでいたら気づいたらこんな感じになってましたね。長いのもあるけど一番安定してますね。

幽狐ちゃんに関しては6月頃にレインコートを

気づいたら、Amebientの方でCute担当になったり

11月末にケープを作ったりしてました。

こちらは今は「ル」で親しまれてますが(?)、司書さんのル・ジャルダンスクレに合わせて冬が来る前にということで作りましたね。

やっぱりいいですよね、ロリータ服。フリルついた服昔から好きなんですが、基底現実ではあれであれなのでこういうのが気兼ねなく着れるのがとてもいいですよね。ずっと着たくて何度か作ろうとしましたけど、納得行くものが作れなかったので、そういう点もいいところですね。そういうところでメイド服も好きなんでシンプルなものだとそれなりに作れるんですが、ここまでのものを作るには足りなすぎるのでほんとにありがたい限りです。

一方で2020前半は京狐さんで後半はメリノちゃんがメインで使ってますが、もともとこっちの方は幽狐ちゃんとは違う方向の改変をしたいなと思って使い始めてました。

京狐さんの方はメイド服作ったりなぜかバニー作ったりしてましたね。

メリノちゃんのほうは今のところ特に作る予定はないですが、作りたいものと時間の余裕があればって感じですね。

終わりに

さてVRChat4年目はどうなるんでしょうかね…気に色々あれですが…。周りの多くの人の環境もガラリと変わるみたいで、界隈自体の変化も結構ありそうですしね。 私自身はこのままVisualと音を粛々とやっていけたらと思ってるんですが、今の所、音はできてないし、状況的に上半期は忙しそうなので緩やかな目標にしておきたいですね。忙しくても穏やかなこの生活が続けばいいと思っています。 自分が面白いと思えるものを作っていければいいなと思います。

VRChatでMidiを使ってVRVJをした話(忘備録)

需要がどこにあるかわからないけど書きたくなったのでこの前のド(VRVJ)について多少解説しようと思います(すでに1か月経っている)。 今回はShaderの話というよりも入力システム、コントローラー周りの話です。結局は入力されたTextureデータをどう処理するかの話だからとりあえずいいかなと思ってしてません。 入力の形態はVRChat内Shader製スライダーから今回のようなMidi入力に変わったけど結局出力側をどう作るかはあまり変わってないのもあります。

雰囲気としては

こんな感じです。

Midi設定

すべてのエフェクトの操作はMidi信号をSDK2のVRC_MidiNoteInを通して行っています。 すべてのMidiを一つのGameObjectでやるとインスペクターは

こうなります…。展開するとだいぶ重いです。 一つ一つ設定するのはとてもしんどいのでスクリプトですべて書いてます。

あまり見せるようにはできてないのですが

    void SetMidi()
    {
        var triggers = transform.GetComponent<VRC_Trigger>().Triggers;

        var notes = gameObject.GetComponents<VRC_MidiNoteIn>();

        for (var i = 0; i < count; i++)
        {
            var noteNum = i + VRC_MidiNoteIn.Note.A0;
            if (Obj != null)
            {
                var instance = Instantiate(Obj);
                instance.name = System.Enum.GetName(typeof(VRC_MidiNoteIn.Note), noteNum);
                instance.transform.parent = transform;

                AddTirgger(triggers, instance, notes[i], noteNum);
            }
        }
    }

void AddTirgger(List<VRC_Trigger.TriggerEvent> triggerEvent, GameObject obj, VRC_MidiNoteIn note, VRC_MidiNoteIn.Note noteNumber)
    {
        // NoteON
        var triggerOn = new VRC_Trigger.TriggerEvent();
        triggerOn.Name = "NoteOn" + noteNumber;
        triggerOn.BroadcastType = VRC.SDKBase.VRC_EventHandler.VrcBroadcastType.AlwaysUnbuffered;
        triggerOn.TriggerType = VRC.SDKBase.VRC_Trigger.TriggerType.Custom;
        var vrcEventOn = new VRC.SDKBase.VRC_EventHandler.VrcEvent();
        vrcEventOn.EventType = VRC_EventHandler.VrcEventType.SetGameObjectActive;
        vrcEventOn.ParameterObject = obj;
        vrcEventOn.ParameterBoolOp = VRC.SDKBase.VRC_EventHandler.VrcBooleanOp.True;
        triggerOn.Events.Add(vrcEventOn);
        triggerEvent.Add(triggerOn);

        // NoteOff
        var triggerOff = new VRC_Trigger.TriggerEvent();
        triggerOff.Name = "NoteOff" + noteNumber;
        triggerOff.BroadcastType = VRC.SDKBase.VRC_EventHandler.VrcBroadcastType.AlwaysUnbuffered;
        triggerOff.TriggerType = VRC.SDKBase.VRC_Trigger.TriggerType.Custom;
        var vrcEventOff = new VRC.SDKBase.VRC_EventHandler.VrcEvent();
        vrcEventOff.EventType = VRC_EventHandler.VrcEventType.SetGameObjectActive;
        vrcEventOff.ParameterObject = obj;
        vrcEventOff.ParameterBoolOp = VRC.SDKBase.VRC_EventHandler.VrcBooleanOp.False;
        triggerOff.Events.Add(vrcEventOff);
        triggerEvent.Add(triggerOff);
        AddMidiNoteIn(note, noteNumber, triggerOn, triggerOff);
    }
    
    void AddMidiNoteIn(VRC_MidiNoteIn note, VRC_MidiNoteIn.Note noteNumber, VRC_Trigger.TriggerEvent onTriggerEvent, VRC_Trigger.TriggerEvent offTriggerEvent)
    {
        note.note = noteNumber;
        note.OnNoteOn.TriggerObject = gameObject;
        note.OnNoteOn.CustomName = onTriggerEvent.Name;
        note.OnNoteOff.TriggerObject = gameObject;
        note.OnNoteOff.CustomName = offTriggerEvent.Name;
    }
    

Midiの設定とMidiのオンオフで切り替えるGameObjectの設定を一括で生成しています。生成したGameObjectは

f:id:fotfla:20210119011334p:plain

MidiObject以下に生成されるようにしています。また別のスクリプトで 次のように16x16に収まるように配置してカメラで撮ってRenderTextureに描画してこれをCustomRenderTexutureに渡しています。

f:id:fotfla:20210119011558p:plain

演出処理の話

Midi情報の処理、Particleの情報の更新などはすべて一枚のCustomRenderTexutureで行っていて、 先程ののMidiのオンオフ情報もここで処理をして、減衰、乱数の生成、入力回数などを処理してます。

// Midi
if(index.x >= 64 && index.y >= 64){
    if(index.x < 80 && index.y < 80){
        float input = tex2D(_Input, (index- 64) * _Input_TexelSize).r;
        float3 current = buffer.yzw;
        if(input > 0.5){
            current.x = input;
                        // 乱数生成
            if(current.z > 0.5){
                    uint2 seed = index + floor(current.y * 65537);
                current.y = hash12(seed);
                current.z = 0;
            }
        } else {
       // Decay
            current.x -= _DecayTime;
            current.x = max(current.x,0);
            current.z = 1;
        }
                        
           output = float4(input,current);

    } else if(index.x < 96 && index.y < 80){
        float input = tex2D(_Input, (index- float2(80,64)) * _Input_TexelSize).r;

        float4 current = buffer;
        if(input > 0.5){
            current.y = input;
            current.x = 0;
                        // 入力回数16回を1ループとして計算
            if(current.a > 0.5){
                current.z += 1/16.0;
                current.z = frac(current.z);
                current.a = 0;
            }
        } else {
                        // Decay
            current.y -= _DecayTime;
            current.y = max(current.y,0);
            current.a = 1;

            current.x += 0.01;
            if(current.x > 1){
                current.x = 0;
                current.z = 0;
            }
        }

        output = current;
    }
}

またParticle系はPosition、Velocity、Lifetimeなどを計算しています。 この計算されたCustomRenderTexutureを使って各演出用のShaderに渡してそれをもとに演出のオンオフ操作などをしています。

こういったCustomRenderTexutureを使った計算の話はこういった記事のほうがより詳細に記載されてるのでぜひとも御覧ください。

qiita.com

phi16.hatenablog.com

コントロール

今回のMidiのコントローラーはOrcaを使用しています。 もともとはAbletonでクリップを予め作っておいてLaunchPad(Midiコントローラー)で制御しようと思っていましたが、 複数種類のエフェクトと異なるリズムを用意することと、LaunchPadがVRChatに認識されて押したつもりのないノートまでが反応する(今はアップデートで認識させたいMidiバイスのみになったのでこの心配はなくなったと思う。)のであまり増やしたくなかったので自由にシーケンスを組めるOrcaを使いました。 こんな感じにOrcaからMidiを飛ばして各種エフェクトを制御してます。 youtu.be

これでおわりです。実際今はUdonがあるので組もうと思えばVRChat内で完結できるようになるし、UdonMidiが来ればそれでまた扱い方が変わるのでそんなに必要ないと思って軽めです。ありがとうございました。

20201231

なんだか今年はぱっとしない一年だった気もします。去年は2010年代の総決算だったので始まりの年と考えるとまぁ妥当かなと思ったり…

今年はじめは技術市でShader本を書いたり、つぶやきGLSLからtwiglができて、Shader1WeekCompoが始まって WebGLやGLSL Soundをちょっと書くようになったり少し新しい領域に手を出すような感じですね。書く機会が今の所これぐらいしかないけど、これが活用できるようになったらいいね。(そうか?)

そのあと5月には、PorterRobinson主催のSecretSkyがあってそのセットはもうずっと何回も聴いてるんですど

適当に作っていたVolumetric TheaterでSecretSky見たのは良かったですね。コレ自体は去年に作って放置してたけど、ちょっと手を加えてまた別のワールドになったりもしました。

で6月からはずっとVRAAのことをやっていて、これは結果的にはおかげさまでとてもいいところにあるんですが…

結局一人でやるには時間も技術も足りなかったということと、まぁ純な創作とも言えないかったあたりが苦しいところだったことですね。このときのが後半いろいろ役に立ったりしてそれはそれで良かったりしたんだけどね。 来年はどうしようかな、去年は出せずに今年は作ることで苦しんだので。最終的には作ることを選んでそうですけど…

そのあと開いてる時間で音を触ったり、ぶいちゃでMidiのテストをしたりでだいたいこの後の電ドにつがなるようなことをやっていたと思います。

で年越しも近いクリスマスに0b4k3さんと一緒にGHOSTCLUBでほぼ1年越しに電ドをやるわけですが、外の空気が入るようになって少し雰囲気も変わったクでやるのちょっと怖かったんですが、結果的に受け入れられてるようでとても良かったです。途中DJが止まっちゃたりしたのでまたリベンジをどっかでやりたいすね。

ここまでずっと今年の創作のもやもやを引きずって電ドをやったことでやっと開放された感がありました。長いよ… 来年はこういうこと少なくしていきたいですね。

来年は音をやることと電ドとうかそれ相当するVRVJを見るということをなんとか叶えたいですね。 前者は自分に対して、後者は世界に対しての願いな感じがありますね。そのためには動かないといけないんですが。

VRChat振り返り -ド編-

振り返り電ド編です。

参考動画です。

な感じでVR空間でVJ?をすることを勝手に電ド呼んでいたわけですが…

始まり自体は ブタジエンさんと👻さんの

ここからですね。ワクワクしましたね。 影響を受けてモチベも上がってこんなものを作っていたら

やらない?と誘われたので

やりました。(自分で撮った写真が一つもないんですねよね。)

でこのときの私は大量のキューブのTransformを変化させることがメインでした。(ブタジエンさんはレイマーチングがメインになっていった。)

次にやる場所が変わりました。 最初に始めたときに比べると空間のディティールが大幅にアップしました。 そうすると単純にキューブにTextureを載せたものだと物足りなくなりました。(単純に見慣れたのもあると思うけど…) それに単純にエミッションだけしてるものなのであの空間に合わなかったのもありました。

そこでReflectionを追加しました。

これがReflectionの追加のテストの動画

この結果がこれになります。

このときは4人体制でDJ1人、映像1人、空間2人でやりました。これもこれで面白かったね。 ReflectionProbeのおかげで空間全体の色が馴染むのと映像がバキバキなので色がころころ変わるのがとても良かった記憶があります。

このあたりで結局あの空間でやるのも限界かなみたいな流れになりました。

平成最後の電ド このときはnoribenさんを加えて、更に新ステージでやりました。前の空間であった映像がなくなりました。Reflectionする映像の代わりにnoribenさんのレーザーや花火がとても生きてきてとても良くなりましたね。

このあとにphiさんを加えてのやったのが

です。1DJ4VJ体制のVJセッションがとても楽しかった。(実際このときは”他のこと”で新しいものが追加できなかったり、VRChat側の更新でうまく見せられなかったなどの不満があったけどそれは別のこと)

番外編

あのパルマーラッキーに見せる機会をブタジエンさんが運んできました。運んできたときはとても驚いた。それに最後にやってから時間が空いていて久々にやったら楽しかったし、追加できなかったのを追加できたのもの良かった。

Channel

あとVRChatでこんなことをやっていたらこんなところに繋がりました。

youtu.be

実際これの準備中、正直心がだいぶやばい状態でした。色んな意味で。

2010年に出会った分解系Recordsというネットレーベルのおかげでクラブに行き、音楽を作り始め、映像を作りたいと思うようになりました。情報としては以上です。

bunkai-kei.com

少なくともここと一瞬でも繋がり得たことがありがたいことでした…。

以上ド編終わり。

#Shader1weekCompo のワールドについて

すでに1ヶ月経ちますが#Shader1WeekCompoのワールドについての考えたことメモです。

最初の要件としては

  • 皆の作品を皆で見ることができる
  • 交流会もするのである程度お話するスペースが欲しい。(ペンとかあると良いよね。)

だったと思います。

個人的な願いは - 作品を並べたい - CineShaderのようにRealtimeで大画面で作品を見れるようにしたい です。

導線の思考

導線としては交流会のスケジュールが 1. 挨拶 2. 鑑賞 3. 交流会(作品解説とかなどなど) でした。

なので部屋として 1. ラウンジ 2. メイン 3. シアター を作ろうということは決まりました。かつ流れとしてはこの1,2,3をループした構造を作ると f:id:fotfla:20200423014635p:plain なります。

重要だと思ったポイントは - 作品を見てもらいたいのでここの部屋を極力独立したものにする - 最初は逆周りに進まないようにする です。 ここの解決ポイントは - 入り口から次の入り口が見えないようにする。(入り口よりも) - スポーン位置からラウンジに出たときにメインの入り口が見えるようにして、そちらに誘導する。 です。 1. 各部屋の入り口からは f:id:fotfla:20200423020543p:plain f:id:fotfla:20200423020913p:plain f:id:fotfla:20200423020638p:plain だいたいこのような視点になってます。  要は極力次の入り口の存在を視点の端に寄せて認識を遅らせています。見せたいものの方に注力するようにしました。 また1つ目の部屋では大きいタイトルを見せてからその流れで入口を見せるようにして3番目の部屋からの出口に意識しないようにしました。

個人的なワールド制作のこだわり

作るときに考えるのは - デフォルトのものは使わない(世界に意味があるなら) - 文字を極力使わない(使うなら英語を使う) - Interaction Textに頼らない

デフォルトのものは使わない

ワールドの世界があるのでデフォルトのものを使うととたんに”それじゃない”感がでると思っていて、例えばUnityデフォルトキューブのスイッチや、アセットのそのままの流用の存在は世界観を壊す。 せっかく景観はいいのにとたんにキューブが出てくるとちょっと残念に思うじゃないですかそういうことです。 そこに存在するのが必然であってほしいのです。

文字を極力使わない、Interaction Textに頼らない

たとえ日本コミュニティだとしても結局は英語圏が大半をしめるのがここです。解像度が足りなくて読みづらいことがあるので文字を使うのは極力避けたい。あんまり文字で認識をしたくなくて、できれば直感で操作できるものを作りたいです。 Interaction Textに関しては最近は私がIndexを使っていてカメラに映り込むのでShow Textを外しているのが原因です。  例えば、キューブにInteraction Textのみだとそれにインタラクションしたときに何が起こるかわからなくなります。それを見るためにする行動が無駄だからそれを避けたいという気持ちです。考えずに行動、操作したいというのが願いです。

今回の場合だとこれで f:id:fotfla:20200423032252p:plain もともとはよく知るQVPenですね。 booth.pm

  • UIとして文字がある部分を図形に変更
  • ペンもデフォルトのものを使わずに新たに用意

をするだけで世界に対する違和感が少なくなります。

という感じで、実際の制作数は少ないですがいつもワールドを作るときになったら考えることです。

VRChat振り返り - 森編 -

VRChatをもう2年ほどやって今更だしだいぶ雑な振り返りです。まとめて書くと永遠に終わらない(完成と見なせず放置する)のでいくつかに分けて書きます。まずは森編です。

森とは
  • 正直よくわからない
  • 木が集まればそこは森

ぐらいにはとてもあいまいですし、そんなものです。コミュニティというほど運営されるもでのでもありません。場として存在してるだけです。 基本的には各々の活動は独立的です。先日パブリック化されたワールドもphiさんやCap.がワールドの下地を作ってくれてその上に各自自由におうちを建てていったくらいです。 2019年8月に原型みたいなものが薄々と生成されて9月ぐらいにはっきりと命名されて存在として認知されたぐらいのものだと思います。

幽狐ちゃん

よくわからないといいつつ下地は自然と集まった幽狐ちゃんだったりします。

幽狐ちゃんには気づいたらなっていた…。というのは冗談で初めてツイッターで見た時に良いと思っていたのは確か。 (すでにphiさんとかが買っていて)悩んでるときに落雷さん見て買ったのも確か…。(この日は深夜に予定があって落雷さんしか見れてないけど)

f:id:fotfla:20200308225322p:plain

で深夜の予定が終わって明け方に買った記憶があります。

そのあとから(他の幽狐ちゃんを見たかったので)多少お外にでるようになりました。この流れでタービンさんやNikoさんややぎりさんとよくお話するようになった記憶があります。(当時某所関連以外に行ってなかったので某所に行けない人と出会う機会が稀だったレベル)

夏休み良かったですね。

だいたい8月中は河で遊んだりやぎりさんのLunar Planetsで遊んでました。

アスタリスク

少なくともアスタリスクの縁で「森」になりました。それまでふわっとした曖昧なものだったけど名前が必要になったので「幽狐ちゃんの森」になり「森」になりました。

f:id:fotfla:20200308233158p:plain

その縁で逆にヨツミフレームさんが名誉会長にもなったりして面白いなと思ってます。

Mori

集まってワールドを巡ったり遊んだりしているうちに「ここ幽狐ちゃんはこういう設定を持っていそう」みたいな話が大きくなって、いつの間にかこういう森に住んでてるとか、どうして住んでるのかを考えた結果だったりだったり。 極力形にしたいけど、形にするほどの力がなかったり難しいね。でもあった記録が残るのはいいことだと思います。

世界の喧騒から逃れてのんびり暮らしたいねみたいな願いがあったり…

もっと書くことはある気がしますがこれぐらいで。