Imaginantia

思ったことを書きます

区別する抽象

抽象というものは物事の共通部分を抜き出して、中にある本質的な構造を顕在化するものです。

「りんご1個」と「みかん1個」から「1」という概念を抽出するのが抽象というものです。

 

f(x) = 1-x という写像を考えます。

f:id:phi16_ind:20220309223732p:plain

…これだけだと「意味」の考えようがないですけど、例えば横軸を時間、縦軸を位置として捉えれば:

f:id:phi16_ind:20220309230448g:plain

こういう読み方ができます。左が0、右が1です。最初は右にいて (f(0)=1) 、最後は左 (f(1)=0) です。

さて、ここで g(x) = x^2 という写像を考えます。これです:

f:id:phi16_ind:20220310000043p:plain

つまりこうです:

f:id:phi16_ind:20220309235947g:plain

だんだん速くなる感じですね。

で。関数は合成することができます (一定条件を満たせば)。だから、例えば g(f(x)) を考えることができます。それは:

f:id:phi16_ind:20220310004244g:plain

こうなります。逆に、f(g(x)) を考えることもできて、そうすると:

f:id:phi16_ind:20220310004421g:plain

こうなります。この2つはまぁ、みてわかるように、違うものです。その違いは、g を基準に考えるとちょっとわかりやすく読めます。

  • g(f(x)) は、g(x) の時間を反転させたもの (なのでだんだん遅くなる)
  • f(g(x)) は、g(x) の位置を (左右) 反転させたもの (だんだん速くなるまま)

つまり、ここでは f異なる意味で用いられています。同じ関数なのに。これは如何。

 

今の話では、g は「0から1の数」を「0から1の数」に写す関数として定義されていました。確かにそうです。

だけど、私達は意味を与えました。即ち、「時間」を「位置」に写す関数であると。そうすると、それに繋げる f の役割も、合成の仕方によって変わってきます。

  • g(f(x)) と書く場合は、g の入力、即ち時間f を適用しています。
  • f(g(x)) と書く場合は、g の出力、即ち位置f を適用しています。

だから、自然に f の棲む世界が変わっていたのです。時間を時間に写す関数と、位置を位置に写す関数。

ちゃんとそういう「棲む世界」を書いてあげると、次のようになります。

  • 時間を表す空間 T = [0,1]
  • 位置を表す空間 P = [0,1]
  • g:T\to P, g(x) = x^2
  • f_T:T \to T として、g(f_T(x)) を考える。
  • f_P:P \to P として、f_P(g(x)) を考える。

つまり。

意味を考えたことで (= 抽象へ向かう道筋の中で) 、同一視していたはずのものが、異なる2つのものに区別された、という現象が発生したのです。

だから抽象化はむやみに共通部分を抜き出すというわけではないわけです。見かけ上でしか共通でないものは、逆に区別していきます。

共通部分を取り出すことは共通でない部分、つまり具体的すぎる部分を忘れることです。だから、こうやって「f_Tf_P が等しいという見かけ上の関係」を忘れることがあるのです。

 

これは結局「そういう意味を考えたから」に過ぎないわけですが、まぁ、逆に言えばそれほどに「意味」「解釈」「視点」「願い」は重要だということです。

比喩

ふんわり考えていたら書きたくなりました。なんか前にも少し書いた気もしますが、ちゃんと具体例で書こうというやつですね。

思考実験です。

\{1,2,3\}の部分集合を列挙せよ」という課題があったとして、それを人に感覚的に伝えたい、と思うことがあるとします。

そこで私が思いついたのは「"こんにちは"という単語に使われている文字は何でしょう」という問でした。これは一般的に理解できる問だと思います。

これは正しく比喩として成立しているでしょうか。していないのでしょうか。

 

比喩とは対応関係によって2つの文章を繋ぐ行為です。これにおいて、対応が「どう」成立しているかは実は重要…だと思っています。私は。

まず先程の例。

  • \{1,2,3\} という集合が、"こんにちは"という単語に
  • 部分集合という概念が、使われている文字という概念に
  • 列挙を答えるという問が、各々何かを訊くという問に

それぞれなっています。

ここで、「集合」が「単語」になっていますが、この2つには「何かのあつまりで出来ている」という共通点があります。前者は要素、後者は文字。

しかし、本来はここに大きな差があって、単語には文字の順序が定まっているという性質があります。集合にはありません。

だから、もしも本当に集合のことを知らない人がこの「比喩」を聞いた場合、集合には順序が定まっているのかと思ってしまうかもしれません。

 

対して \{1,2,3\} という「3つの要素」で出来た集合が "こんにちは" という「5つの文字」で出来た単語に対応しているという点では、逆に要素の数は今回議題にしていないということを比喩から知ることができると言えます。

即ち「問の意図は部分集合の概念を理解しているか判断することにあって、具体的なこの問題が解けることを訊きたいわけではない」という意思の存在です。

同様に要素が「数字」から「ひらがな」に対応している部分に関しても、今回は数字の性質などに関しては一切関与が無いということが伝わります。

また、「列挙」という形式は逆に順序を想起させるものとなっていますが、「全部答える」という形式は順序を無視しています。これも順序を議題にしていないということが伝わるといえるかもしれません。

 

「部分集合」という概念は「使われている文字」とは本来大きく異なる概念です。部分集合は複数の要素で出来ることを許容します。

その観点では例えば「"こんにちは"という単語に使われている文字を組み合わせるとどんな単語が出来るでしょう」という問が考えられます。

しかしこれでは逆にズレが生まれて、「同じ要素の数は区別されない」「順序は区別されない」という集合の性質にそぐわないものになります。

また、「全ての可能性を選びたい」という部分集合列挙に対し、単語列挙では「世の中に存在する単語のみを選んでしまう」ことになり得ます。

ぴったりな意味を表す問を考えようとしても元々意味のある体系である自然言語の上での具体例であるが故に、意味の無い操作が不自然になってしまいます。簡潔に感情として記述するのが難しいのです。

 

というわけで、確かに「部分集合の概念がわかっているかどうか」に対応する問となっているとは言い難いですが、「それが何から出来ているか」を問うているという観点からは的を外した比喩ではないと捉えることができそうです。

要は比喩におけるこの「何を共通とし」「何を無関係とするか」という境界が、元の問の本質を捉えているはずという話。

逆に言えばこれによって問の意図を精密化することができる他、ちゃんと対応関係を拾えていない場合は間違った解釈を増長させてしまうという側面もあるわけですね。

 

なかなか一文で全てを理解してもらうのは難しいというのは常々思っているので、私は同じ意味の文章をいろんな側面で何度か言ってみるということをやることがしばしばあります。

例えば具体例を複数立てるというのもそうだし、こうやって比喩を出すことでその共通点を感じ取ってもらったり、または「何ではないか」を示すことで外側から縮めていったり。

意図せず意味を持った言葉を発してしまうこともしばしばあるので、ちゃんと相手の理解が正しいかどうか (自身の発言が間違っていないかどうか) は相手の任意の発言や振る舞いから推測しなければならないところです。

むずかしいけれど、言葉が伝わるとうれしいものです。

媒体というものについて

これは前から思っていたことであり、感想文でもあります。

ここでは「媒体」という語を「創作されたコンセプトがモノと成って表現された、他者が観測可能な情報」を指すものとして扱います。

それは画像、動画、そして360°動画もあり、"CUEのような携帯VR" *1 もあり、当然VRもあります。

その表現力の話です。

媒体差

まず、大前提として私が"信じている"ことは、「媒体毎に異なる表現を行った方が、"良い"ものができる」です。

これはこれまでにも何度も何度も書いたことですが、これは、たぶん、あたりまえです。

良いことを認識する軸は媒体によって異なるもので、それは体験の次元が異なることから従います。

画像には時間がなく、動画には視線がなく、360°動画には視差がありません。これらはそのままメリットでありデメリットとなります。

  • 画像は細かいところをじっくり観てもらうことができるが、強制的に時間を消費させる (体験時間 (=記憶に残す期間) を保証する) ことができない
  • 動画は1フレームが一瞬で過ぎ去っていくが、動画の長さ分だけ「覚えてもらう」ことができる
  • 360°動画は自由に視線を動かすインタラクティブ体験としての性質が付与されているが、「裏側で起きている事象」を観測できない
  • VRは「空間」として情報を認識でき、最も体験的であると言える気がするけれど、動作環境を誰でも用意できるわけではない

誰でも観れるわけではない、というのは実は本質的です。媒体 (media) としての性質が異なってくるということに加え、限られた人間が持つ能力を流用することで更に良いものが作れる可能性があるということでもあるからです。PCスペックの話です。

さて、そして、鑑賞者にとっての利点と欠点は、製作者にとっては反転されて顕現します。概ね。

  • 画像の持つ情報量は比較的小さい。それはファイルサイズからもわかるし、時間軸方向が存在しないことからもわかる。
  • 360°動画はどこを向いているかわからないから注視させることが自明ではない (見せたいものを見せることが難しい)。同じ方向を見るだけになるなら媒体の意味がないが、体験者にとって視線を回すのは億劫でもありそう。
  • VRではカットとカメラワークが自然には使えない。私達は「居る」ので、世界は断絶しない。

動画を基準にした言い方ですが、要はVRのほうが大変なのです。…正確に言うと、ズルができなくなるのです。

画像はパースぐちゃぐちゃにしても良いし、動画はエフェクトいっぱい出しちゃっても良い。それが媒体の利点です。

VRでは「空間」を作らなければならないし、それらはリアルタイムで描画させなければならない。これは媒体の欠点です。

「媒体の欠点を如何に隠し、利点を押し出した表現をするか」が純粋な創作物の良さに繋がる、と思うわけです。

ここで「純粋でない」というのは、「文脈」や「説明文」についての私の視点を指していますが、今回の話では関係ありません。

FORGOTTEN MVについて

私は一切関わってない (まぁ話はちょこちょこ聞いてはいたんだけど) ので好き勝手に言います。

まず、この3つの体験は、細かいところは違えど流れは同一です。つまり同じモノを、別の媒体として切り出している、というように見えます。

だけど、同じようには切り出せない。

  • 動画ではプリレンダ *2 の力を使って描かれているシーンが多くあります。
    • 全体的な物量感、長い部屋のシーンでの塵やパーティクル化、ものすごいケーブル、破壊されているシーンの欠けのパーティクル群…。
  • 2D特有の表現として「カット」「カメラの揺らし」「文字と画像が出るオーバーレイ」 「リアル (多分?) の高解像度の動画」があります。
    • あと一瞬入るエフェクト系とか。
    • 「フレームの間引き」はVRではできない (頭揺らしてずれるとしんどい) けど360°動画では一応できそう。
    • 「デフォーカス」は実現可能だけど処理負荷が気になるところ。VRでやりたくはない。

で、これをどのようにVR用に翻訳しているかという観点で見てみると:

  • 最初の部分はまるごと差し替え、代わりに「体験の導入」としての性質を追加
  • 2フレーム程度のカット間トランジションの代わりにゆるやかなフェードが導入
  • 巨大建造物のライティングはほぼ別物、だけど動画よりも威圧感は増していると思う (カットされてないし)
  • 巨大建造物に突っ込むところは視界の回転が無い (あると酔いそう)
  • 長い部屋にある物体の量が大幅に減っているが、代わりに音に合わせてライトが明滅して影を投影している
  • パーティクル化は輪郭化に
  • 文字が出るところの長い廊下へは長い部屋から直接繋がって入る
  • 文字は板ではなく迫ってくるように出す、立体的に複数出す
  • 眼の中みたいなシーンはほぼ変わってないけど、動画には無い「出るシーン」が増えていて、ケーブルに自然に繋がっている
    • (敢えて言うと2D版では終わりにFoVが変化する感じになってるけど、VR版はモデル自体が歪んでいる)

という感じ。だと思います。(変わっている部分自体は他にもたくさんあります)

特にフェードや空間的連結性は面白い部分で。一連の体験であるということは、一連の空間であるということで、離れていたカットたちを繋ぎ合わせる必要が出てくるのですね。

 

ただ、これは「繋がっていた空間をバラバラにして (カットにして) 動画化した」という観点で見る事もできます。

動画版が結局ずっと前に進む一本道であるというのは、VRには翻訳しやすい構造なわけで。つまりVRの欠点である「空間でなければならない」という性質を、もともと動画構造によって無かったことにしているわけです。

それはプレイヤーそのものが空間の中を進んでいる (これは椅子に座って移動させられているという意味です) ことにも通じている感じもありますね。

これはどうしようもない「VR用と2D用のMVを作らなければならない」という要件に関する必然的な解だと思います。そのうちこんなのばっかになりそう。しらんけど。

 

というわけで、まず演出の基軸には「一連の空間」というものがどうしようもなくあって、それを如何に各媒体に分配するかという話だったのではないか思うんですけど。

動画版には動画の利点を存分に活かしていろんなものが載っていて、「MVらしく」なっていると思うのですけど。

VR版にある「そういう構造」はきっとあんまりなくて。強いて言えば立体的であるくらいで。

背面が観れるのは今回は利点というよりもアーティファクトだと認識していて、何故なら見ることによって音との整合性が取れなくなるケースがある (拍に合っている演出が前方にしか存在しない) からで。

最後のズルは効果的ではありますが、欠点を補完するのではなく強い利点で覆い隠すような振る舞いだとは思うので、ちょっとさみしい。

あと360°動画版に関しては、制作工程的にどうしてもVR版をベースにすることにはなると思うわけですが、ただ比較対象は2D版になってしまうので、どうしようもなく不幸だなぁと思いました。

全ては「同一シーンを同一に展示する」ことに起因する問題だと思うので、まぁ…。こう、"良いリファレンス"として捉えるのが良いのかなと思います。

…全制約を同時に解くようなコンテンツが出てくることはあるんでしょうかね。はて。

個人的な感想

あと私の趣味としての感想をちまちま置いておきます。まぁ前項も当然趣味が幾らか入っているものではありますが。

私は「構造の入ったMV」が好きで。つまり「かっこいい映像」であることよりも「意味がちゃんと備わっていること」を好みとしています。

ただ、「意味が備わっている」というのは「製作者にはこんな深い考えがあった」という話ではなく、「閲覧者がその意味を理解できる」ということを指しています。

要は「意味は見出されなければ実在しない」という話です。唯見出す人が居れば良くて、それは私ではなくて良いです。

FORGOTTENのMVは全体的な流れはわかる気がするんですが、細かい動機がわからないことが多くて難しかったです。

特に動画だと時間も空間もばちばちに切れちゃうのでそういう因果的整理ができなくなるんですよね。VR版は「繋がって」いるので気にしなくて済んでいましたが。

あと主体と客体がわからない、っていうのはあるんだけど、今回のVR版はその辺の補助は無かったかなぁと思います。いろいろと仕方ないとは思うんですが。

細かいところを言ってもどうしようもないのでアレですが、まぁ、私はなんかもっと「変」(≒ MVらしくない) な作品が好きだという話です。

あれが「何処」なのかを最初の部分から推測すると、「入っていく」構造に見えます。ただ、最後は「出ていく」構図だと思うのでどこかで切り替わったんでしょうか。 あと文字が出るところはまぁ意味としては取れない。パーティクル化は"忘れていく"みたいな側面と思わなくもないけど直後にはっきりしたケーブルが出てくるので曖昧なんすよね。 こう。意味が確定しない印象。個人的な感想です。

 

何はともあれ関係者の皆様、本当にお疲れさまでした。これは素直な気持ちです。何故ならどう考えても大変なので。

 


私は私に関する批判的文章を読みたいタイプですが、あまりそういうことが無くて寂しい気持ちもあります。(某氏のあの発言は気になっていますけど。)

おもっていることをいうのがすきです。情報を隠すことで希少性という価値を出すのではなく、情報を出して純粋な良さという価値で動く世界になってほしいです。

*1:実はこれ名前がついてないのでは?

*2:pre-rendereredの意味で使っています / 負荷を考えなくて良いという意味

メモ 220124

私の願いはなんだろうとふと思ったのだけど。

多分、ずっと「理解」だったんだろうなと思う。

人を圧倒したいとかよりは、私を理解してほしくて。

そしてそれを前提にして、みんなの願いを引き上げたい。

 

すごかったとか、わけわかんなくなるとか、そういうものに本質的な意味はなくて。

知り、理解し、その結果出てくる納得が、一番うれしいのかもしれない。

 

きっちり構造を出した結果、きっちり構造として受け取ってくれた人たちがいっっっぱいいて凄く嬉しかったです。

ありがとう。

できることと、みたいものと

お疲れさまです。

こう。

昔から言ってることですが、みたいものがあっても、つくる能力があっても、つくろうとするとは限らないということがあります。

「みたいもの」って、割とシンプルで。それこそコンセプチュアルで。こんなのがあったら嬉しいよね。そうだね。そう。

そしてそこで話が終わってしまうのです。つくらなくても、想像で満足できてしまって。じゃあ作る意味のあるものを他に探そう、ってなる。

だから、純粋にみたいものを作るには或る種の強制力が必要なのです。だったのです。私には。

 

今回、もともと恐らくfotflaさん (守護天使) に割当られていたであろう PARCO PRIZE 制作についての話が私に回ってきて、だいぶこう。

ね。

自身のみでつくる創作ではない、っていうのはそういう気軽さがあります。作ることそのものに価値を感じられるところとか。

素直で居られる感じが。わざわざもう一歩踏もうとして虚無に落ちなくても、ちゃんと踏みとどまって答えを出せる感じが。

なので、なんだかひさびさに、すごい素直な気持ちでいろいろをつくりました。

理解が難しいものじゃなくて。ただみたかったもので。そしてただ楽しんでもらいたいだけのものです。

きっと。大丈夫だといいな。

 

いろいろとしんどかったのでしんどかったです。もうやりたくないですね。毎度言うのかもしれません。

まぁこれは本当に一度きりで良くて。見られるタイミングもこの一回だけで。

寂しくはあるけれど、これがちゃんと伝わっていったらそれが嬉しいなと思います。

感想は見たいです。素直なので。

 

さっきまで延々と軽量化をやっていたんですが、これでも結構やっぱり厳しいところは厳しいみたいです。

まぁちゃんとしたGPU積んでるマシンなら大丈夫だとは思うんですけども。たぶん。

こういうのもなかなか作ってみないとわからないことではありますね。知見とは捉えたくないです。

まぁ開発中はずっとプラットフォーム差がしんどかったけどね…。

はい。もちろんVR用に作ったつもりではあるので、どうかそれで。

 


今日にも色々とやらなきゃいけないことがあって大変みたいです。はい。

まぁ、今日で終わりです。当分はおやすみをします。たぶん。

のんびりぶいちゃしたいね…。

 

というわけで宣伝?だと思います。

では。よろしくおねがいします。

言葉の重み

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

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

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

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

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

 

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

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

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

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

逆に言えば。

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

 

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

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

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

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

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

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

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

 

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

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

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

これは何かというと。

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

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

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

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

よって。

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

 

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

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

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

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

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

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

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

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

ねぇ。

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

 

付随して。

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

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

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

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

で。

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

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

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

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

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

 

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

記録 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がだいすきなのよ。