Imaginantia

思ったことを書きます

言葉の重み

なんとかアートには余計な文章がつきものな感じがします。

それはそうしないとわかってもらえない、っていうことだとは思うんですけど。

でもそれは「鑑賞者に対する逆信頼」及び「言葉への甘え」、ですよね。

世の中の人間がたしかにちゃんと「観て」くれないからそうなるのでしょうけど、それによって「観る」ことをやめた人間もきっといるのです。

いえ、それはもちろんそれだけの人間だった、というだけではあるんですけど。

 

言葉はそれ自身が意味を持つと思われている媒体で、それ即ち作品が言葉で表現しきることができることを想定できます。

その場合、その作品の持つ意味は。いえ、その作品の「実在」が担う情報は何か。

表現が所詮表現であり、それによって渡る情報が主とするならば、その情報が文章化されたモノを以て作品は存在しうる。

強いて言えば「その情報が実在できる」ことを示すもの、ということにはなるんですが、それは本来文章から計算可能なのではないですか

逆に言えば。

文章に「実在し得ない構造」を記した作品が存在しない限り、表現の実在に意味はないのではないですか。

 

まぁ、その「実在し得ない構造」を記した作品はそこそこあります。

既存の技術を元にして「その延長線上にあると思われる概念」を提示する作品。

そしてその多くは、実は延長線上にはないのです。

ただそのは、それによって、文章と作品の間の齟齬を生んでくれます。

文章が立派なコンセプトを宣うことと、その作品がコンセプトを実装していることは、一切関係がありません。

観る目として、私達は、その「実装の実在」を読まなくてはいけない、と思っています。

そうしないと、文章に喰われてしまうので。

 

その「喰われ方」として気になるのは『思わせる』という表現です。即ち解釈の自由度について。

私達は表現を解釈して意味を得ます。よって、作品が表現であるということは、意味を得ているのは自身なのです。思っているのはあなたです。

その自分勝手な行動を、作品に押し付ける表現が『思わせる』という語だと思います。作者が本当にそう思わせようとしていたのだとしても。

これは何かというと。

全ての作品に対して、あなたは好きな感情を『思わせられた』ことにできるのです。

即ち、そこに意味はない。

逆に言えば意味がないだけなので、善でも悪でもありません。ただそこにあるだけです。

そしてそれを受け入れるべきです。

よって。

自ずから「思わせ」を受信し発信する行為は。文章によって「思わせ」を伝播させようとする作品も。同等に、「無」だと思うのです。

 

ここで、これに対抗するべく行うべき行為は、思わせでないことを示すことです。

即ち意味の実在を検証するのです。自らのみが受信する (= 送信された確証がない) 状態ではないことを示すのです。

そうして初めて「評価」という概念が生まれて。いえ、生まれてほしい。

世界には概ね「適切な評価」という概念は実在しませんが、私は、そこにある構造をただ読むという意味での評価が実在してほしい、です。

最もわかりやすいのは、「それが何で出来ているか」、ですよね。

それで測れないからこそ面白いというのは本当にそうなんですけどね。

まず、多くの存在は「構造を読む」ことを諦めていると思うので、文脈を繋げる前に、解釈を与える前に、その表現の解体からはじめてほしいと思うのです。

そうすることで「解体の困難さ」という本質的な課題に立ち向かえる気がするのです。

ねぇ。

エンジニアリングに成りきれない、アートに則ったことにしたい、世界の人々。

 

付随して。

私は「感情を伝える文章」が以上の理由で苦手です。

その情報は感情にはならなかったのです。何故謳うのかわからないし。構造も見えなかった。

自明に自己の内部で再構成する文章は存在していますが、それは所詮シミュレーションの上の話で。"本物"ではないんですよね。

理解出来ても届いてないのです、きっと。

で。

その点に於いて、「曲」は面白い媒体で、自身の感情を正しく生成しうると思えるのです。少なくとも私には。

詩が入るとダメ、というよりは、音が良いとちゃんと伝わる。まぁ、その伝わりは所詮私の自我が生成した身勝手な感情ではあるんですが。

だからこそ、自分のものになる。

操作された感情であることは疑いようもないんですが、でも、それを退ける強さはどうやら私には無いみたいです。

もう少しわかってきたらわかるのかもしれないけど。

 

アートとはそういうものであってほしいなぁ、と、私は思っています。

記録 TDF2021 ShaderShowdown

tokyodemofest.jp

いろいろあってShaderShowdownに参加することになっていました。25分で参考資料無しで絵を作るという競技です。

優勝しました。

(リプライツリーにあるshadertoyのリンク先の中に、YouTubeのURLも置いてあります)

素直に嬉しく思います。祝ってくれた方々ほんとうにありがとうございます。

余計な話

昔butadieneさんにShaderShowdownに誘われたことが何度かあった覚えがあるんですが、私は毎度「私は無理」と返していた覚えがあります。

今回も0b5vrさんから話を頂いたときには同様の返しをしていたんですが、「25分の試合やったことある人今回居ないから」と言われ、何故か説得されて参加してしまいました。

騙されたなぁと思いました。

一昨日の日記 に書いてしまったように私には精神的にこの形式が向いてないようで、本当にずっとしんどい気持ちでした。

終わった現在としては一応ありがとうございましたの気持ちが結構あるんですが、まぁ、もうあの精神状態には成りたくないなぁと思ってしまう感じです。

たぶん、向いてる人はいるとおもいます。単に私がそうじゃないだけです。

だから私がこんなにしんどいとか言っていることはそんなに自分のことかと感情移入する必要は無いと思います。いろんな人がいます。

そのうち普通に4kとか出したいとは思っています。

Quarterfinal

f:id:phi16_ind:20211213182800p:plain

www.shadertoy.com

まずレイマーチは一切しないことを前提にしました。ただの逆張りですが、単に私はあんまりレイマーチが得意ではないという理由もあります。

作るものを考えるにあたって、最初は全然違うものを考えていたんですが、発展性とかディティールとか、何もかもが足りなかったのでやめました。

そのときに思ったことは「遠近感があると解像感が変わるのでディティールが出る = 3Dの強さ」です (これはそれ故に出てきた文章です)。だから「どうオーソドックスではない方法で3Dをやるか」が問題でした。

とりあえずレイトレ的にQuadを出して (だから quad って名前なんです) 飛ばしたり曲げたりしてみたはいいものの、あんまりおもしろくありませんでした。

そこで色々悩んでギリギリ (試合の8時間前です) 出てきたのが、Quadの大きさを無限にしてしまって、その表面での色付けを使って遊ぶという部分です。

f:id:phi16_ind:20211213183647p:plain

遮蔽してしまうとディティールがもったいないので加算合成にして、各点での色付けを3D空間ベースで行うことで一貫した絵になるようにしました。

というところでやっと「これはvolumetric renderingもどきを目指している」ことに気づきました。

解釈が定まったので出来ることがわかるようになりました。つまりvolumetric的に映えるdistance fieldを作れば良いということです。

なので乱雑にキューブをいっぱい散らして、modで増やして、ごちゃごちゃしてくるのでメリハリとして中央からキューブを引きます (文字通りね)。

だいぶ締まった感じになったので、やっとこれでなんとかなりそうだな、と思いました。これが試合開始1時間前でした。

あとは自分の行動をリプレイするだけです。

今回、最終的な絵はそこまで劇的なものではないので、そこまでの過程で勝負する必要があると感じました。

最初は2Dの振りをして。板を回すことで発展性を提示して。やわらかい感じから輪郭入れてディティール出して、球からキューブに変えて変化を見せて、だんだんと硬い雰囲気に。あとはまぁそれこそVJみたいにシーンを変えてみる (パラメータ変えると結構変わりますからね)、という感じで。

twitch側の方で「real "performance"」と言及していただけたのは嬉しかったですね。

なんとかなってよかったです、わりと良い勝負できた感じもしましたし…。願わくば完璧な状態の0b5vrさんのシェーダと並びたかったですね。

Semifinal

f:id:phi16_ind:20211213182812p:plain

www.shadertoy.com

正直もう考えてられるかという気持ちでしたが、可能性がある以上考えるしかありません (実際そうなったわけですが)。

なんか根本的に「作りたいもの」ないかなぁ~と考えていたんですが、1つ思いつきがありました。

www.youtube.com

えー。曲が普通に好きなんですが、MVも好きです。

ひたすら世界をぐるぐる飛び回るだけ、ではなく時々「世界が異常な繋がりをする」んですよね。こういうのすき。

これをやるか、とまず考えましたが地形が大変です。と、同時にvoxel traversalやってもいいな~と思っていたので、voxelで地形作るか、ということを考えました。

レイマーチと違ってディティールの最小単位が決まっているので、あんまり細かく作り込まなくても大丈夫だろう、という思惑です。

が、私には自然を作る能力がありませんでした。

仕方ないので適当に削って洞窟っぽいのを作ったはいいものの、ここから空間ワープみたいなことを作らなきゃいけないのか…と考えると25分でやる内容ではありません。そうだね。

やめました。

代わりにカメラワークをちゃんとやる、ということを思って、Bezierっぽいイメージで適当に曲線に載せてみたところ、めちゃ良感があったので、これでいっちゃえとなりました。

寝る前ちゃんの曲があてられるということだったので、そのまま疾走感とビート感強め。

これに合わせる形で、ポイントライトと影でぱきっとさせて、後は 𝑚𝑜𝑡𝑖𝑜𝑛 𝑏𝑙𝑢𝑟 と画面全体のdistortion

最終的な絵にめちゃ満足できたので自分の中でもすごく良かったです。

本番でのリプレイですが、前回とは違って「途中で絵を出しにくい」という問題があります。ポイントライトを置くにはカメラワークと地形が必要で、どうしても順序があります。

なのでもうそこは諦めて、完全に最終形での勝負と考えました。

代わりに離れ業っぽいことは一切やらずに着実に。さっとvoxel書いて、AO (これを参考にしました) 載せて、カメラ動かして、シーン作って、ライティングして、エフェクト掛けて。わかりやすいですね。

カメラの動きを直線ベースから曲線に変化させる、ということも考えたんですが、寝る前ちゃんの曲はずっと華やかなので、最後にぐっと入れるよりも早い内に良い動きにしておきたいという気持ちもありました。

こちらも惜しくもsp4ghetさんの方がバグっていたのが残念です…。

Final

f:id:phi16_ind:20211213182819p:plain

www.shadertoy.com

今度こそ考える余裕がありません。

1戦目と2戦目を組み合わせて「voxel上でvolumetric rendering」とかも考えたんですが、ディティールの出し方がめちゃくちゃ難しいと思いました。炎のシミュレーションとか出来たらまた違うんでしょうけど。

どうしようもなかったので0b5vrさんのシェーダを眺めていたんですが……これやるか、と思い立って。

今から新しいテクニック (quad tree traversal) やるのはしんどいので、今持っているvoxel用のコードをそのまま、ライティング側で魅せる方向を考えました。

まぁ、こう、感謝の気持ちと、惜しかった1戦目を連れてくるような気持ちで、文脈的にもいいかなって思った。最終戦なのでそこまで気張らなくてもいいかな、というのもありました。

で。

quad treeはそれそのものがかっこいいのでかっこいいんですが、私はそれに見合うものを代わりに連れてこなくてはなりません。

ランダムで作れる地形はやっぱりランダムで作れる地形でしかないので、こう、なんか、変なものが欲しくって。

ライフゲームやるか、となりました。シミュレーション系は強いのよ。実在度が。

元々は3Dのcell automataで良いのがあったらいいなぁと思っていたんですが、求めているような感じのルールは無いっぽくて。

ならまぁ2Dのいつものを引き延ばせばいいかと。

で、光源と金属をどう分けるかが問題だったんですが、よくある「数F前まで生きていたことを覚えておく」やり方、わんちゃんいけるのではと思ったら、いけました。

「さっきまで生きていたセル」のほうが「今生きているセル」よりも少なかったので、そちらを光源に。生きているセルを金属に。

めちゃいい感じになった。

ブロックが純粋な金属柱に、ブリンカーが眩しい柱になるので、シーンの情報量的に激良いんですよね。そこまで予測はしてなかったです。

あと最初はふわふわしてたんだけどなんとなく地面を置いてみたら激良になった (GIがね、綺麗なのよね) し、気分で色を乗せてみたらこれもいい感じになったし (0b5vrさん感は減りましたね、私らしくはあるんでしょう)。

あと毎フレーム動かすと目に悪いな~と思ったけどカウンタわざわざ作るのもな~とか思ってたんですが、シンプルに時間ベース (fract(t) < 0.5) でシミュレーション止めるようにしたら思いの外ハマったので良し、となって。

なんとかなりそうで安心しました。

さて、リプレイ戦略ですが、今回は完全にトリッキーが1つ居ます

こっそり作ることも出来たとは思うんですが、まぁ敢えて完全に分けて堂々と仕込みを見せるのも (安全性的にも) 良いだろう、と思って、ああなりました。

試作時では最後にライティングを入れたんですが、予めちゃんと入れといて、「唐突に全然違うことをやり始めた感」そして「これまでの2つが噛み合った瞬間」を出したほうが良さそうで。

どうやらなんかめちゃ反応いただけていたようで本当に良かったです。組み合わせたタイミングも結構良い感じに見せられたっぽかったですね。うれしい。

個人的には仕込みが終わったときに堂々とシーンを元に戻すのがわざとらしくて好きです。

最終的に出来たものはちゃんと「それらしい」ものになったと思うし、Kamoshikaさんと本当に良い勝負だったようなので、良い試合が出来たなという満足感がすごいです。

 

というわけで。以上、何をしようとしていたのか、についての解説でした。

実況、何度も見返していてすごい楽しませて頂いてます。本当にみなさんありがとうございました。

コーディングについて

以上を、ちゃんと、時間内に、間違えないように、色々と検証と書き方は考えていました。

まず根本的に3作品どれも予めほぼ完成形は前以て作っています。

f:id:phi16_ind:20211213225511p:plain

ちょっとずつ違うんですけど、でも見ての通り2戦目と3戦目はもうほぼ同じです。

色々と思っていたことはありまして。

  • 段階的にチェックする
    • 間違ってないか確認するポイントがいくつかあって、正しくない限りは次に進まないようにした
    • (コードが間違っていなければ、絶対に正しく出るという自信があるので (一度作ったから))
    • 正しいのに間違っているかもと思わないように、予め色々試す
      • 乱数が悪いと視点が壁に埋まって何も出ない、みたいなケースがあるので、それでも正しいと思えるようにする
    • 暇があったらコンパイルする (構文エラーになるときでも、構文エラーが出ることを期待してコンパイルする)
  • 間違えそうなところを認識する
    • 微分したときの符号とか
    • プラスマイナス関係ないなっていうところは、それはそれで「関係ない」ことを覚える (後述の「迷わない」に繋がる)
    • これについては「やっていることを正しく理解する」ことが何よりも便利かなと思います、検証もできるし
      • カプセルのSDFの length(pa-h*ba) とか、パーティクルの distance(pl, o+dot(pl-o,d)*d) とか
      • voxel traversalの r += d*length(l*m) - m とか
      • 私は元々数学ベースで考えるタイプなのでそのへんも功を奏していますね…
  • コードを単純にする (短くなるし、間違えにくくなる)
    • 正しくなくても要らなそうなところは省く (ray direction の normalize とか)
      • 実際に抜いて問題ないなと思ったら消してます
    • 円周率は3
    • コピペをすることを前提として覚えておく (脳内圧縮する)
    • x,y,z,w の順番で現れるように (覚えやすいように) 並び替えたりする
  • 迷わない (速度を維持する、書き続ける)
    • 変数名は全部もう固定しておく、被りそうな命名をしそうならそれも把握して予め避ける
    • ループの回数、大きさの範囲、そのへんの数値調整パラメータも覚える
    • 関数の最初にfor文の前に何行あったか覚えておく
    • 座標系は必ず +X Right, +Y Up, +Z Forward で固定する (頭がそうなってしまったので)
    • 記述する処理の順番を覚えておく、「いつ終わるか」「どこから始めるか」も覚える
      • フレキシブルに出来る場合はそれはそれとして覚えておく (エフェクト系はいつでも良い)
    • 「こっちのほうがおもしろいかな」みたいな邪念は全部前段階で消化しておく

あとはタイプ速度の問題ですが、入力するものが全て頭に入っている場合は通常のタイピングよりも余程早く打てるんではないかなと思います。

ちなみに練習だと27分とかで怪しいな~というところで、おかげで適切に急げて間に合ったのかなと思います。時間感覚がわかるのも大事ね…。

 

で、私が今回やらかしたミスですが

まず2戦目、m = step(l,l.yzx) * step(l,l.zxy)m = step(l.yzx, l.zxy) って書きました。これは覚えすぎたことによる弊害で、覚えるべき場所だけが頭にあった結果、当たり前のことが抜けているケースです。

ちなみにこれは l.xyz のうち最も小さい軸の値が1、そうでない軸の値が0であるようなベクトルを作る計算で、これを参考にしました (75行目)。

普通によく見たらどう見ても違うので直せました。冷静になるのが大事…。

3戦目の最初にミスったのはvoxel traversalの中心からのオフセット o-u-0.5 を何故か o-d-0.5 って書いていたせいで、多分目が滑ったんだと思います。

さすがにびびりましたがなんかこんなところに d あったっけなぁ…って思えたので気づけました。そういう「文字がどこにあるか」みたいな感覚は (ずるいですが) 便利ですね…。

あとライフゲームの前フレームサンプル位置をミスったのは cd.xy %= 64 を入れ忘れていたからで、これは誤字では無いので処理が正しいかどうかを丁寧に見るしかなかったです。

当たり前のように動くと思われるコードが変な結果になるので、入力 (cd) がおかしいんかな?って思ったら値の範囲を縛る行が無かったので気づきました。

バグるとマジで焦るんですが、「私のコードはちゃんと動いていた」という自信は、めちゃくちゃ安心に繋がっていたと思います。

(ちなみに、書き込む方は直したんですが読み出す方が直っていなくて、終了後に「微妙にバグらせてる」と言ったのはそれを指しています / shadertoyに移植したら動かなかったのでちゃんと直しました)

 

正直なところShaderShowdownとしては「完全記憶」は邪道だと思います。正直。

でも私は「途中で頭が空っぽになって何もできなくなる」ことの方が怖かったのです。テストで書いてると大体そうなんですもの。

まぁ当然何もルールには抵触していないわけで、ギリギリを攻めて出来る限りのことをしようとした、という態度として許してほしい気持ち、です。

 

参考になるかはわかりませんが、これで頭の中をほとんど出しました。

みえてきたもの

昔から、Showdownに誘われる度に「私ならどんな絵を出すんだろう」と気になっていたことはありました。

こういう場で「吐き出すもの」っていうのはどうやってもその人の性格が出るわけで。私は自分がどんな存在に視えるのか知りたかったのです。

そして今回、実際それが (不幸中の幸いとして) 出来て。あの3枚は、「私」なのですね。

きっと他の人は作らなくて、3枚とも全然違うんだけどどことなく見えない共通点がある、この感じが私なのです。きっと。

それはワールドでもそうで、色々作る度に「私は私を客観視できるようになっていく」のを感じています。

ただ今回は顕著で、「テーマ無しで3つ、同一手法(GLSL)」なので本当に純度高く私を観察できているのです。それがすごく嬉しい。

これは当然「私がつくるものがわかったので、これからも作れる」という話では一切ございませんが、今後の何かの指標には成りうるのかな、と思っています。

 

そして。

今回、奇しくも SANRIO Virtual Fes と同日となってしまったわけで、たくさんの知り合いがとても大変なことになっているのを眺めている私です。

私は本当に一切関与してない (GC用に前に作ったものが流用されたりはしてますが) ので、それ単体に関する気持ちとしてはわりと「しんどい」です。

ただ今回、私は私で何か出せたというのは「具体的な救い」だとは思います。なのでこう、これだけだと良い話ではないんですが。

…割と上に書いた「私を認識した」という話は結構大きくて。

私は、やっぱり他人が作るようなものが作れないという自覚があります。本当に。

Bonzomaticのデフォルトを一番最初に消している理由はそれです。自分の書いている内容に、自分以外の存在が含まれていることがあまりにも許せないのです。非効率的だとしても。

そして中途半端なところでやめることができないのもそれで。他の人が期待していようがいまいが、きっと私が一番私に期待しているのです。だから私は自分に応えなければならない。

その結果として以上に書いた諸々の長い考えに繋がるわけですが、マジで気持ち悪いと思う。

世の中にあるチュートリアルを素直に実行することが出来ないし、人の助言は自分の言葉に置き換えないと受け入れられないし、意味もわからないで誰かの式を使うことも許せない。

それが良い方向に働いていることもあれば、悪い方向に働いていることももちろんあって。

困るなぁ、とは思うんですが、でも結局私はその通りに進むしか無いのです。

ね。

…というわけで、私は、他の人がすごいことに関する諦めが、そうしたくはなくても、必然的に発生してしまうのです。

この私は多少特殊ケースだとは思うのですが、ここまでではなくても、「結局自分が在るように在るしかない」という結論は持ちうるものだと思います。

今回、いろんなしんどさが振りまかれたとは思いますが、私はもう段階的に歩いていくことしかできません。それで自分が満足できれば良いのかなとは思います。

趣味だからね。人生も。

 

自分に刺さる曲がつくれるようになりたいですね。

www.youtube.com

良い曲です。

歌詞のある曲が理解できなくて、無い方がすっと入ってくるというのは、なんとも面白いところです。音楽は面白いですね。

はい。

では。長い感想文でした。今度こそみなさまお疲れさまでした。

 


あとね、全ての人がごちゃまぜに存在できているこのVRChatがだいすきなのよ。

日記 211212

こっそり。

えー。ちょっと心配掛けている感じでございます私です。心配してくれたらちょっとうれしいような気もするがそれはよくない思考な気がする。

何かと言えば、えと、まぁ大変にしんどくて、普通につらいので、こう、世界を見ないようにしたというやつです。昨日から何度か発狂しかけてます。

私にはね、マジでこういうスタイル向いてないのよ。もう絶対やらない。ごめんね。つらいので。

正直今日で全てが終わってくれればと何度も願っていましたが…。はて。

まぁ、やるならやるしかないんです。ああ…………

やるならやるでちゃんとやる、いや、やるしかない、っていうのが私の性質でもあって、めちゃくちゃ私を苦しめています。

マジで向いていません。

はい。

ごめんなさい。見ないようにとしつつも実際のところ普通に各人のついーと直接見に行って反応見てありがとうありがとうございますになってます。本当にありがとうございます。


で、まぁ、しんどいはなしはしないことにしてですね。

今日のよかったこと

今日はそれ以外は完璧でですね。

ましゅましゅのらいぶもね。こう。モーションがあまりにも綺麗すぎて逆にリアリティが無いと感じるなどありましたが、こう、現状出得るものとしては非常に良い部類なのではないかと思います。

f:id:phi16_ind:20211211233427p:plain

Serph (というかB2F) のらいぶのとき?でもパーティクルがいい感じに一杯で素直に綺麗でした。今回のフェス、基本的にどこにも「Unlit的」な演出は無くて (Bloomのおかげだとは思いますが)、ちゃんと世界の上に乗っている感じがあり、たいへんありがとうございました

f:id:phi16_ind:20211211233448p:plain

線はね、綺麗ですね。本当にね。

 

あとキヌさんがマジでよかった。これはね、マジ。なんかね、こう、滅多に無い感情があった。

その正体の半分はあの曲がめちゃくちゃ好きというやつで、まぁ、つまるところ曲が好きが半分で。そしてまぁ、モノが「あってほしいモノ」であった。うん。

いやマジであれね、どこかで聴いたことあるんだけどね、その時からめっちゃ好きなやつってなってたんだけどね、正体をこんなところで知るとは思いませんでした。考えてみるとまぁ確かにそうだなぁってなるんだけどね。

なんすかね。音楽って面白いですね。

で、みえるものの方については…そうですね、「空間が空間である意味」がそこにあった、というところです…よね。

つなげるにはつなげなければならない。素晴らしかったです。

あとこれは少しnegativeな話ですが、所謂「インタラクション」というものを考えるとき、それこそぶいちゃのInteractできるオブジェクトのような存在を考えてしまうのはやむ無し感あるわけですが。

本質はやはりinter-actionであって、作用が一方向ではないことが重要だと思うんですよ。つまり、Interactしてただ動く物体というものは、実はインタラクションしていないのです (違うレイヤーのインタラクションでしかないのです)。

対して、「予測を示し、行動を促すモノ」は、あれは、インタラクションだと思うんです。世界が私達に提示し、私達はそれに応えるのです。あの意識が大事だと思うのです。

だから、すごく、よかったです。

今回のライブ、演出系で珍しく素直にマジでよかったのでマジでよかったです。

あの曲が好きです。

 

で。某所…。

三日坊主さんがあまりにも普通に (これは当然平凡という意味ではありません) 良かったのでなんなんだろうという気持ちになりました。

こう、あの「えぐみ」が綺麗に表現できる場としてはこれ以上ないという感じです…よね。GCじゃなくてここじゃないとできない感じありますよね。GCでやっていただいて良いとは思うんですけど。

場がえぐいからえぐみが噛み合うのよね。(5.0はああ見えて「綺麗」だからね。)

あとfotflaさんが可愛かったです。

f:id:phi16_ind:20211212000200p:plain

やっぱりかわいいですよね。こう。かわいい。あぁfotflaさんなんだなぁという感じがします。去年のドの感じがちょこちょこ見えたのも面白いというか、なるほどというか。

あれよね。キューブとかが3.0では展開しにくかったけど、こうやって映像として (カメラを自由に動かせる状態として) ならいける、みたいな、そういうものを感じます。

あとめちゃくちゃ素直に音に合わせている感じがするのもかわいいですよね。良い。CRTだとなかなか出来ないからね…。

あしたもたのしみですね。

 

で、どうでもいい話を3つ書いておきます。(真に受けなくて良いです。)

  • ロープが懸垂線っぽくない (まっすぐ垂れ過ぎ) ところがあったけどBlenderに懸垂線ツールがあるわけないしなと思いました。
  • モニタのモアレが遠くから見るとちょっと顕著で寂しかった (中庭のアレはそれを対策したくてやったやつ。) けどこれもわかります。ふつうそうなる。
  • モニタのReflection、微妙にジラジラしてる (mipmap拾ってなさそう) のは少しもったいなさを感じましたが、まぁ、これも…。

後半2個、思うに「ピクセルの大きさは0ではなく有限値であり、割り当てられる値はピクセル領域における受光量の積分である」という意識が薄いからなんだと思うんですよね。わかります。

世の中mipmapが何のためにあるのか知らない人ばかりみたいなので、既に絶望しているところではありますが、まぁ、今後よくなっていったらいいですね。あ、これはALT3に対するお気持ちではないです。

もうちょっとこう、微分積分についてはみんな意識持っていて良いと思います。曲線があったら微分があるし、分割があったら積分があるのです。

 

あと入場シーケンスで白色から色付くのすき。ああいうのシンプルにすき。

クリックしたときに一瞬黄色になるのも激良いですよね。ああいうのが感触のある応答なんですよ。UXですよ。

入場シーケンスのところ、なんかあまりにも「ちゃんと」しすぎててGCメンバーこんなことできたんだ…ってちょっとびっくりしました。私は出来ません。

で、そして、やっぱり激良かったのはこれです。

f:id:phi16_ind:20211212000227p:plain

リアルでよくこういうおもしろ文字を撮る習慣のある私ですが完全に同じことをしていてウケました。

あまりにもアレだしやっぱりたなべさんが描いてらっしゃるのかしら、と思うんですが。なんというか、本業は本業って感じがしますね…。

「安」のアンバランスな感じとかね、「段」の几の端っことかね、「優」の激埋まってるところとか、さんずいとかね、めちゃかわいいですね。

あとLとTがめちゃギチギチな感じが好き。3はTにめっちゃ近いんだけどちゃんと離れてるんですよね。うつくし…

オーソドックスなこと言ってもみんな言ってるのでこんなことしか言えないんですが、まぁ純粋に「ピューロランドB5にある文字」として良かったです。

これでいいんだろうか。

 

B5全体についてはもうなんか。「いつものの、ちゃんとした版」を感じました。やってることかわらないなぁ感が強かったと思います。

だからそほどの意外性は無いんだけど、その状況は多分望まれるべきもので、これが対外的に存在するということが重要なのです。

はー。

一気にがばっと人が増えることはもうなさそうですが、こうやってちまちまと人を増やしていくのが「らしい」のでしょう…かね。ね。

まぁそのへんは私が考えることじゃないや…。

 


そう、そういえば元々日記は全てが終わってから書くつもりだったんですよ。

だったんですが、なんか、良いものが良かったので、まぁさっさと書いてしまおうの気持ちで書いています。

明日はまぁ逆にTDFの話が出来たらいいですね。話ができる精神状態だとは思うので…

あとまぁ、その点では明日のALT3はもう本当に純粋に楽しめる日なのですごく楽しみにしています。

某が終わったらTwitterは戻すと思うのでまぁ特に影響もないと…思います。多分。

まじでつらいな。

これかられんしゅうなどをするなどします。うえー。

はー。最大あと2回ですよ。やってられるか。

はーーーー。いやさ、ちゃんと無から引き出せる人はいいだと思うんですけど、私はそうじゃないんですよ。

無からだと私はゴミしか出てこないので、長く考える時間が必要で。

そして長く考える時間があればあるほど私はしんどくなります。詰み。

私はこれまで「練習して、成果を出す」タイプのアレをほとんどやってないので慣れてないんです。新しい課題が与えられるタイプ (普通の試験とか) だと自分のせいではない感じがするのでいいんですが、完全にやることが決まってしまう場合だともう事前準備の不備でしかないので、それが嫌で私は頑張ってしまうんですね。

パフォーマンス系全般が向いてないんですね。かなしいね。

代わりにワールドっていう表現方法があるのでありがたい現在でございます。はい。

 

はい。こんなこと書いてもしょうがないですね。れんしゅうします。

では、またあした。

読んでくれてありがとうございます。

私達はどこに棲んでいるのか

最近よく「3次元空間」という言葉を (某コンテキストで) 聞きますが、私はあまりそれが好きではありません。

たぶんみんな数学っぽい用語はそれっぽければ使って良いと思って使っているのだと思いますが (まぁ事実としてちゃんとわかる人はほぼ居ないのでバレません) そういう態度が往々にして人類を不幸にしているものかと思います。

私達が概ね3次元空間に居るのは間違ってはいないと思います。でもそれはそこまでに本質的ですか?

もっと考えるべき本質がきっとあって。だけど誰もわからないから、見た目的にわかりやすいものを選んでいるのではないですか?

私達は本当はどこに棲んでいるんですか?

語の解釈

「3次元空間」というのは一応ちゃんとした術語なので、歴とした解釈が実在します。即ち「(局所的には) 3つの数字 (実数) で点を特定できる空間」です。

では「私達」は3次元空間に棲んでいるのでしょうか?術語を基に解釈を与える際には全てを術語世界に持ち込まなければなりません。即ち、『「私達」って何ですか?』。

「点」は3次元空間に棲んでいるといってもおかしくはありません (そういう点の解釈を選ぶだけです)。私達は点ですか?

 

点では表せないこの自由度がきっと大切なんじゃないんですか

 

そんなことはわかっていると思うんですけど。

さて、私達が「点」となれるのが、おそらく SpatialChat です。そう。そういう話です。

まぁ純粋な「点」ではもちろん無くて、画像情報音声情報いろいろありはしますが、ここで導入された概念は御存知の通り距離、なわけです。

 

私達はいろんなものに距離を見出します。関係性とか。そして大原則として「近いほど強く干渉する」。

きっと、私達は、このインターネットの世界であっても、もっと近くにいたかったのではないでしょうか。

何かに。

距離の生む世界

基底では人間関係という繋がりを渡り歩いてきた人類、インターネットもまた繋がりで出来た世界。

ではその上で何を求めているのか、ですよね。

抽象的な「繋がりの世界」と、具体的な「物理的距離のある世界」の差がどこにあるのか、と思うわけですが。

1つ思いついたのは、周りを見渡せること。そしてもう1つ、動きやすいこと

 

抽象的な繋がりの殆どは、大凡の人間にとって可視ではありません。

それを可視化するのが なかよしMAP みたいなものです。でもこれでも複雑すぎて読み切れるものではありません。

根本的に人類は抽象的な繋がりの理解力が足りないのです。

対して物理的距離は見たらわかります。それは即ち、見て関係性を理解できるという意味ではなく、見たままの距離以外に読み解くべき情報が無い、ということです。

そこには情報の欠落 (近づきたいけどそうできない状況 = 距離に表現されない関係性) があって、それはきっと各々の感情に結びつく (近づけないもどかしさとか) ものでしょう。

その「表現できなさ」が、全てが繋がってしまったこの世界に必要なものだったのかもしれません。少なくとも現状の人類には。

 

ただし、距離を関係性に連関させてしまうと「縛る」ことが出来るようになってしまいます。私達が基底で縛られているように。

それに対してこの世界の面白いところは、動きやすいことです。

もはや固まってしまった現実世界の関係性に対し、私達はここで自由に動き回ることが出来ます。文字通り。

姿を変えることで変わる距離もあります。界隈、プラットフォーム、名前、いろいろ渡り歩くこともできます。

きっと「変わる」ことが目的ではないのです。「変われる」ことが重要だったのではないでしょうか。自分の存在が流動的であるということそのものが。

それは安全性 (危険になったら移れる) でもあって、そして「変われるのに、変わらない」ということは信頼にもなりえます。「自主的な」土地概念は意味を持ちうるのです。VRChatに店があるように。

 

基底は「周りが見える」世界、SNSは「変われる世界」で、それらを合わせるとこの世界になる。そんな感じがします。

そういう意味では「基底で移住し続けている人」や「SNSで周りの人間を制御してきたような人」とは案外似たような感覚なのかもしれないですね。知らないですけど。

SNSと違って「増やせない」のはちょっとおもしろいかもしれませんね。頭は1つしかないので。

視界

さて、では3次元空間であることはどれだけ必要だったのでしょうか。

私達の視界はどう足掻いても2次元ですが、平行移動と回転によって3次元空間を間接的に視ています。

その間接性が、私達の認知にどれだけ影響を与えるか、です。

 

周りが見える、という側面に於いて、3次元世界は割と面白い意味を持っています。

遠いものが小さく見えるのですね。

ここでは3次元という語を2次元射影空間みたいな意味で言っていて、以降はほとんどorthogonalとperspectiveの違いとして書いています。

大きいものは大きいなりに観察ができて、そこには解像感という概念が生まれます。私達が直感的に「近づける」と思える世界は、確かに3次元の世界なのです。

また、平面だと作りにくい「遮蔽」とか、複雑な構造。何よりもそれらから出てくる「空気」とか。

私達が自然に受容できるこういう概念は、意外と自明なものではないのだと思います。

既知の概念 (現実世界に於ける3次元的広がり) を比較的容易に輸入できる、という意味では現実の模倣から入るのは間違っていないのかもしれませんね。

わざわざ仮想現実っぽい世界を考えようとすると2次元になりがちですからね。一面から見えないものを作ることが主、ですよね。ちゃんと構造立った状態でね。

 

動くことに関しては、2次元世界でも結構楽しい (昔のゲームとかね) ことはよく知られています。3次元での優位性としてはやはり「近づくこと」なのかもしれません。

または即ち「遠ざかること」。小さく観ること。

この「対象に対する距離の自由度」が、写真をどう撮るかという話でもあって。写真が創作たりうる理由にもなる。3次元世界は2次元世界を内包しないのです。

そういう意味ではここでは「遠くに移動する」ことに意味はなくて、「目的地に行く」「現在地から離れる」ということが主と言えるかもしれません。

近くに行って、大きく見えるようになったものを観察し、戻る、という行為は、「視える世界が実在する」ことを確かめることにもなります。

行程を省いてしまうと「中間が実在しない」ことになるのでそれはそれでダメなのでしょうね。

地図はスケールを跨ぐことで初めて遠くの詳細を知ることができますが、3次元の視界には遠くのものが初めから観えるのです。

 

結論ありきでこの文章を書き始めたわけではないんですが、考えた結果として「3次元空間であることはある程度本質的である」と思えるようになりました。

これは「距離を大きさで表現する媒体」なのであり、何よりもそれが直観的である、という点で、それを行うことに意味はあるのです。きっと。

だから私達は「浮く」必要はないんでしょうね。遠いものが小さく見えれば十分なら。何よりも物理的距離は平面の方が読みやすいです。

まぁ、世の中の人間が何を思って3次元と書いているのかはわかりませんが…。

抽象の無意味さ

…と。

こうやって文章を書くことは誰にでも出来ると思うんですが、私はこういう文章が一般に好きではありません。

何故かというと解釈はいくらでも自由に取れるからです。

その解釈を作家性を伴う形で表現するなら (私はこの文章をそういう気持ちで書いています) 許せ得るかもしれませんが、何らかの真理や原則、常識、指針のように提示するのは誠実ではない気がします。

抽象を拾い出すのはそんなに難しいプロセスではなくて、ただ具象を捨てて残ったものを読めばいいだけです。

それはいくらでも恣意的に行うことができます。

 

この世界に本当に必要なものは、抽象を具現化する存在です

 

結局みんなの想像の範囲は現実を簡単に越えてしまって。

各々の哲学もまた確固として実在するようになっている昨今です。

強いコンセプトなんてきっと最早無くて。

あとは私達にそれをやる能力と覚悟があるかどうか、それだけです。

 

私達が本当に棲んでいる世界は、結局そういうところなのだと思います。

がんばっていこうね。

記録 211125

f:id:phi16_ind:20211125012856p:plain

折角なのでね。

 

私はぶいちゃの「アバター」文化がめちゃくちゃ好きで。

アバターという概念がここまで拡張されている世界も珍しいと思うの。

狐耳は常識、自販機とかも当然として、カメラを仕込むのもアバター、演出やらを仕込むのも、ワールドまるごと仕込むのも全部アバター

そういう「内的な常識」はまぁ伝わらないものだと思うんだけど、その「常識レベルの差異」を感じさせることは出来るかなと思う。

 

だから私はめっちゃ自己主張してみることにしました。私という存在を。

fotflaさんと自然に双子っぽい感じになってて面白いですよね。多分何の違和感もなく受け入れられると思っていて、その状況が求めているものです。

私は中から平然と外に情報を送れるし、操作している様子もわかって。確かに「個」である。では誰か

その問いを解釈する必要なく、状況を受け入れられるなら、それは「一つ抽象に上がった」のだと言えることでしょう。

 

その「上昇」が、"Meta"という語の本質なのだと思います。

距離場を雑にメッシュにしたい

したいですよね。

でもよくある方法だとなんか面白くないのでちょっと変なことを考えました。

f:id:phi16_ind:20211118112032p:plain

基本的にはやっぱり marching cubes だとは思うんですが、線が綺麗に出すぎるイメージがありまし。

何故綺麗かというと点が綺麗に並んでるからだと思うので、点を雑に並べればいいと思いました。

 

三次元単体である三角錐の各頂点で距離場をサンプリングするとしたとき、場の線形性を仮定すると形成される表面 (値が0となる平面) を決定できます。

f:id:phi16_ind:20211118111753p:plain

つまり空間を適当に三次元単体に分割してあげて、各単体で断面を構成してあげればそれっぽくなる気がする。というわけです。距離場は大凡線形ですし。

 

単体分割と言えば ドロネー図 ですが、今回は3次元なのでちょっと実装が大変そうです。

とは言え元々の目的である「乱雑さ」を確保するためにはやらざるを得ません。どうしよう。

 

ところで、ここに Light Probe Interpolation Using Tetrahedral Tesselations というスライドがあります。

えー。Unityはある物体への光の寄与を決定するために高々周囲4つの light probe をサンプリングしますが、これは単体分割された空間をてくてく歩いていくことで実装されているらしいですね。

ということは内部的に light probe からなる3次元ドロネー図を構成しているはずです。羨ましいなー。

…えーと。

f:id:phi16_ind:20211118113129p:plain

なんとこの関数、普通に使えます。しかもインタフェースが完璧。

というわけでUnityには3次元ドロネー図を計算してくれる神託が居るので、あとはにゅってやってあげるとやりたかったことができます。

f:id:phi16_ind:20211118114649p:plain

三角錐の断面は三角形か四角形なので、各単体に2ポリゴン (6頂点) 割り当ててあげます。4つの頂点位置はPositionとNormalとUVとTangentに突っ込みました。

Vector3[] pos = new Vector3[pointCount];
// assign positions...

int[] tetraIndices;
Vector3[] tetraPositions;
Lightmapping.Tetrahedralize(pos, out tetraIndices, out tetraPositions);
for(int i=0;i<tetraIndices.Length;i+=4) {
    Vector3 p0 = tetraPositions[tetraIndices[i+0]];
    Vector3 p1 = tetraPositions[tetraIndices[i+1]];
    Vector3 p2 = tetraPositions[tetraIndices[i+2]];
    Vector3 p3 = tetraPositions[tetraIndices[i+3]];
    Vector4 ta = new Vector4(p2.x, p2.y, p2.z, p3.x);
    Vector4 uv = new Vector2(p3.y, p3.z);

    int N = vertices.Count;
    for(int j=0;j<6;j++) { 
        vertices.Add(p0);
        normals.Add(p1);
        tangents.Add(ta);
        uvs.Add(uv);
    }
    uv2s.Add(new Vector2(0,0));
    uv2s.Add(new Vector2(0,1));
    uv2s.Add(new Vector2(0,2));
    uv2s.Add(new Vector2(1,0));
    uv2s.Add(new Vector2(1,1));
    uv2s.Add(new Vector2(1,2));

    indices.Add(N+0);
    indices.Add(N+1);
    indices.Add(N+2);
    indices.Add(N+3);
    indices.Add(N+4);
    indices.Add(N+5);
}

断面はまぁ適当に計算します。

float3 le(float3 a, float3 b, float p, float q) {
    // p * (1-t) + q * t = 0
    float t = - p / (q - p);
    return lerp(a, b, t);
}
void el(float3 p0, float3 p1, float3 p2, float3 p3, int2 loc, out float3 position, out float3 normal) {
    float3 verts[4];
    verts[0] = mul(UNITY_MATRIX_M, float4(p0,1));
    verts[1] = mul(UNITY_MATRIX_M, float4(p1,1));
    verts[2] = mul(UNITY_MATRIX_M, float4(p2,1));
    verts[3] = mul(UNITY_MATRIX_M, float4(p3,1));
    float val[4];
    val[0] = field(verts[0]);
    val[1] = field(verts[1]);
    val[2] = field(verts[2]);
    val[3] = field(verts[3]);
    int c = 0;
    for (int i = 0; i < 4; i++) if (val[i] < 0) c++;
    if (c == 0 || c == 4) {
        position = normal = 0;
        return;
    }
    #define SORT(i,j) if(val[i] > val[j]) { float3 tv = verts[i]; verts[i] = verts[j]; verts[j] = tv; float3 ti = val[i]; val[i] = val[j]; val[j] = ti; }
    SORT(0, 2);
    SORT(1, 3);
    SORT(0, 1);
    SORT(2, 3);
    SORT(1, 2);
    #undef SORT
    float3 el[4];
    if (c == 2) {
        el[0] = le(verts[0], verts[2], val[0], val[2]);
        el[1] = le(verts[0], verts[3], val[0], val[3]);
        el[2] = le(verts[1], verts[2], val[1], val[2]);
        el[3] = le(verts[1], verts[3], val[1], val[3]);
        position = el[loc.x + loc.y];
        normal = nf(position);
        return;
    }
    if (loc.x == 1) {
        position = normal = 0;
        return;
    }
    if(c == 1) {
        float3 tv = verts[0];
        float3 ti = val[0];
        el[0] = le(tv, verts[1], ti, val[1]);
        el[1] = le(tv, verts[2], ti, val[2]);
        el[2] = le(tv, verts[3], ti, val[3]);
        el[3] = 0;
    } else {
        float3 tv = verts[3];
        float3 ti = val[3];
        el[0] = le(tv, verts[0], ti, val[0]);
        el[1] = le(tv, verts[1], ti, val[1]);
        el[2] = le(tv, verts[2], ti, val[2]);
        el[3] = 0;
    }
    position = el[loc.y];
    normal = nf(position);
}

唯一気をつけなきゃいけないのが、どうやら Tetrahedralize は入力頂点位置が近すぎると同一視するみたいなので「全体に一定スケールで拡大してから分割させて」「出力位置を縮小して使う」必要があることがある点です。light probe をどうにかする為と考えればまぁ当然ですね。

 

はい。

何かに使えるかな~と思って作ったんですが、まぁ当分使わなそうなのと。あと Lightmapping.Tetrahedralize という関数があってウケる、という話がしたくて書きました。

使ったり使わなかったりすると良いと思います。

おわり。

日記 211028

こんにちは。特に何でもないけどなんとなく書きます。

延々と同じような毎日を過ごしているよう…に見えるような最近です。

ずっとやっているはずの作業はいつになっても終わりはなくて (巷のアレは関わってないですよ)。進むようで進まない感じがしんどいです。

いつかちゃんと出せたら良いんですけどね。いや、出さなきゃいけないんですけども。

 

同じような毎日に見えはしますが (そう見せてるんですが)、まぁ割と違う日々を過ごしている気持ちではあります。

それは特に前に書いたように同じような毎日だとどんどんしんどくなりそうなので。まぁだからといってしんどさが解消されるわけでもなかったんですけど。

作業を進めるためにはどうすればいいのかみたいなことを考えて改善を考えては結局うまくいかないみたいなのを繰り返しています。

色々と私の性質をちゃんと書き下せるようになったらいいんだろうなぁと思ってはいて。

何かにむーってなったときは一回吹っ切れたほうがいいとか。でもそれは吹っ切れから戻ってくるまでに時間がかかるとか。

諦めた日はもう諦めたほうがいいとか。でも毎日そんな感じもしていて。

やりたいことやったほうがいいとおもってもそんなのいくらでもあって。

どうにかして「もともとやるべきこと」に収束するように色々と気持ちをいじるしかない。とか。

誰も見ていないアカウントを作ってがーっと吐き出すとかも割と効果的であることもわかりました。ある意味で他者の言葉になるんでしょうね。

うまいこと自分の意識をバグらせて作業に向かわせる方法を考えるしかありません。まだ安定はできていませんが…。

今日はやっと久々にメイン作業の方に「向いた」感じがあるのでこのまま続いてほしいですね。これから作業します。

 

ほんとやりたいことはいっぱいあってね。

つい最近某ーフ某の提出をしたところですが。いつか出来ることなら個人的に作りたいワールドが2つあったりとか。

音も弄りたい気持ち高まってたけどなぁとか。昨日メインじゃない方のPCのLiveのセットアップをしたので比較的気軽に使えるようにしたりした…けど、ちゃんと音楽作れる日は来るんだろうか。

あと当然某の練習もしなきゃいけないっすね…。その辺になってくるとやらなきゃいけないことが2つ3つくらいあってあれですね。

はー。自由に制作/創作出来るようになる日が待ち遠しいものですが…。当分は無理ですね。来年夏くらいまでこんな感じだと思います。

世界があんまり進まないことを祈りたいものですが、そうでもないみたいなのでもうちょっと急いだほうが良いですね。そうですね。

 

これは驕り的でもありますが、私にはあまり期待しないほうがいいんだと思います。私自身がそうなんだろうね。できることをやろうね。

当分はtwitterも騒がしくなくなんかこっそりやっていますが、適当な感じでよろしくおねがいします。

何かが出来る人は本当に羨ましいです。私も多少は何かが出来る人だったような気もするんですけど、最近は…。

人間の欲が底なしみたいな話でもあるんですけど、でもまぁ、どこかに救いは欲しくなっちゃいます。

その点なおさら面白い状況のはずなのに、どうしてでしょうね。まぁ可観測でない事象は実在しないのと一緒というだけかしら。

焦りたくなくてもずっと焦っています。私は冷静に見えて別に一切冷静ではないタイプなんだと最近気づきました。そう見せてるつもりなだけです (でもバレてるらしかったです)。

「人」ではありたくないと願うというのは今現在「人」だということなんですよね。本当にそうだと思います。

いつかこの最悪状態から抜け出したいものです。