hibitの技術系メモ

数学とか3Dとか翻訳とか

2018年+αにやったこと(主に3D)

 4月から3DCGを初めて、いろいろと知見が溜まってきました。まだまだ勉強中で、走りながら考えるといった感じですが、それらをまとめて書き溜めておかないと、自分がどういうことをやってきたのか、またその過程でどのようなサイトにお世話になってきたのかということを忘れてしまい、技術の基礎が疎かになってしまう感じがあるので、書き記しておきたいと考えております。

 本当は、半年に1回ぐらいのペースでやるべきだったのかもしれませんが(半年前の記憶でさえすでにあやふや……)、もうすでにそのタイミングを逃してしまったので、やや中途半端な時期ではありますが、2018年+αにやったこと、という形でまとめておきたいと思います。

(以下、長いので敬体ではなく常体で記す)

VRChatへのアバターアップロード

 4月。HTC Viveを買ってVRChatに登録する。

 すべての始まり。この頃はトラストシステムがなく、登録したらすぐにアバターアップロードができた。アップロードにあたっては、サンオ (id:san_o)さんの以下のページに大変お世話になった。残念ながらこの記事だけで更新が止まってしまったようだが、この記事だけで千金に値するブログだと思う。

vr-san-o.hatenablog.com

f:id:hibit_at:20190128013636p:plain

 一応こんなものだが。この時期はまだ販売アバターが少なかったので、Unity Asset StoreにあるSuriyunさんのアバターを改変して遊んでいた。VTuberでこの子を使っている方もいたようだ(詳しくない)。下はそのボクセルバージョン。

f:id:hibit_at:20190128015714p:plain

 なお、ボクセルの作成方法についてはサンフィッシュ熊野さんの3DCG出来ない!でもVRChatでオリジナルアバターを作りたい人向けチュートリアルが詳しい。

フルスクラッチアバターの作成

f:id:hibit_at:20190211004556p:plain

 今なお現役のパンダもどき。二面図をモデル作っていくという作り方を日本VTRさんの以下のページから学んだ。

nvtrlab.jp

 元の二面図のパンダからは似ても似つかない謎の生物になったが、これはこれで愛嬌があってよいのではと思っている。

f:id:hibit_at:20190211004235p:plain

 私の外向けのメインアバターであるダークエルフちゃん(一応そういう名前)。見てわかる通り、服装はJamiroquaiVirtual Insanityのオマージュ。この子はJamiroquaiを聴きすぎてしまった結果、自分をアボリジニだと思い込んでしまった悲しい子である。

 特にそのために参考にしたという訳ではないが、高知工科大学が公開している以下のページは基礎的ながらもかなり内容が濃く、これからBlenderを始める人におすすめである。

krlab.info.kochi-tech.ac.jp

 この頃はVRChatで知り合った人達に、とりあえずその日できたアバターを見せては反応をもらったりアドバイスをもらったりという感じで、非常に恵まれた期間だった。あるフレンドのオリジナルアバターを見て「アマチュアでもここまで出来るのか……」という衝撃を受けたのが、アバター作りにチャレンジした一番のきっかけである。部屋にこもってBlenderをいじっていても、そういう気持ちは起きなかっただろう。

改変アバターの作成

f:id:hibit_at:20190211004704p:plain

 6月に作ったメインアバター。お気に入りではあるが、この子は露出度が高いしweebな感じがあるので、一応内向けアバターという位置づけ。この頃になると、フルスクラッチではなく販売素材や配布素材を活かして効率的に作っていく術を覚えるようになる。その時はタイミングが良いことにあるモデラーさんがVRChat向けに素体を配布してくれていたので、ありがたく改変させていただいた(今は広く公開はしていない)。服とか髪とか含めて1週間ぐらいで出来た気がする。

 今(2019年現在)では数百体のモデルがBOOTHを中心に売られている。もしVRChatを始めるのがあと半年遅かったら、自分はアバターを自作までする気になっただろうか? 今のコミュニティの人間と知り合えただろうか? 仮に知り合ったとして、同じような関係になれただろうか? そういうことを考えると不思議な気分になる。

数学の勉強を再開

 思うところがあり数学の勉強を再開した。図形の一般概念であるところの多様体のことを勉強したかったので、入門書として有名な「多様体の基礎」(通称:松本多様体)を購入し、一応一通り目を通した。

www.amazon.co.jp

 ラノベのように読めるということで有名だが、全然そんなことはなかった。位相と集合とか解析学とかあたりの基礎が抜けているっぽいので、そのあたりを補完してからリトライしようと思う。学部時代に数学を真面目に勉強しておけばよかったと後悔しているが、こういうことは思い立った時に始めるしかない。

 他に参考にしたものとして、東工大のサイトに上がっている川平准教授が公開されている多様体の基礎のキソというpdfは非常にわかりやすかった……が、もっと噛み砕いた資料、というか具体的な計算例や可視化例があってもいいかなと思う(というか私が欲しい)。私が多様体の気持ちをよく理解できるようになったら(cf. 多様体愛護協会)「多様体の基礎のキソのきそ」みたいな文を書こうと思う。

 全体的な理解とは別に、特に射影平面については面白い概念だと思ったのでUnityでビジュアライズできないかということに興味が移るが、これは後日レイマーチングを用いて一部成功した。

5次元立方体のバズ

 およそ1年前に投稿した5次元立方体のビジュアライズがなぜか1年経った頃になってバズる。phiさんがテセラクト(4次元立方体)シェーダを販売して話題になった頃だったから、皆様に耐性(?)のようなものがついたのかもしれない。ようやく時代が俺に追いついてきたということか……ということはなく、バズりは時の運の産物である。ただ、コーディングでこの動画を実装できたのはそれなりに面白いことだと思うので、それがある程度認められたようで嬉しかった。せっかくなのでQiitaに解説記事を書いた。

 5次元立方体についての動画はあまりなく、そこにある程度の私の新規性はあると思うが、YouTubeではJos Leysさんが超次元立体について非常に興味深い動画を多数投稿しているので、こういったレベルと比べるとまだ改善の余地がある。今後、UnityとVR/ARデバイスを用いてよりインタラクティブかつ、より体感的に幾何をビジュアライズすることにより新規性を出していきたい。

販売モデルリス

 6月頃から盛んになったアバター販売だが、すごい勢いで増え続けているので誰も整理できていないのが現状である。こりゃあ誰かがリスト化した方がいいぞ、ということでとりあえず作ってみた。最初に20体ぐらいのリストを作って(まだその頃は平和だった)Googleスプレッドシートで共同編集できるようにしたが、結論的にいうとこれは失敗した、というか更新停止をせざるを得なくなった。

f:id:hibit_at:20190129022704p:plain

 主に私とあるフレンドさんとで記入をしていたが、100体を超えたあたりで手が回らなくなってしまった。元から少数が人力管理するには無理のある量だったのだ。

 人力でダメなら機械じゃい、ということで正規表現Google Apps Scriptを勉強してBoothをWebスクレイピングすることを考えた。GASの扱いについてはこのページにお世話になった。ここら辺の経過はQiitaのここにまとめてある。

 しかしこれも結果的には失敗した。「3Dモデル」を機械的に抽出することはできても「どれがアバターで、どんな特徴を持つか」という情報を機械的に抽出するのが難しく、結局人力勝負になってしまうのだ。「3Dモデル」タグを持つ商品は2,000以上にのぼるが、人力で選別処理をするには馬鹿げた量だ。

 「大量のモデル群の整理がついていない」という懸念はたぶん誰もが感じている。例えば、ねこますさんは、作者個人が申請するWebプラットフォームのような構想が良いのではと言っている。これをやってみるのもアリかと思ったが、私がWeb周りに詳しくないのと、構築したところで周知浸透できるのかという点に不安があるので、今はまだチャレンジしていない。

 という訳でこれは未解決問題である。他に個人努力として考えられるアプローチとしては、キカイガクシューを頑張って、Boothの個別ページからアバターか否か・性別・外見をまとめる判別システムを作るとか(できるのか)?

シェーダ

 9月ぐらいからシェーダそのものをいじってみたくなる。最初は簡単な例から……ということで、いくつかのワンライナー改変を考えてQiitaに投稿したら、少し反響があって嬉しかった。その後、マンデルブロ集合固有ベクトルの図示などいろいろなシェーダを自作する。これらの勉強にあたってはちくわ (id:nn_hokuson)氏のおもちゃラボに非常にお世話になった。このサイトなくてはここまでスムーズにシェーダを勉強できなかったであろう。紛うことなき神サイトである。

 11月には、簡単なサーフェスシェーダだが、フルスクラッチで自作シェーダを作った。1行残らずすべてのコードの意味(少なくとも「変更したらどういう挙動を示すか」)を理解しているシェーダである。GitHubリポジトリここ、Qiitaの解説はここ

 また時期は前後するが、VRChatで見かけたFractal Explorerというワールドに感銘を受けて、ああいうのを再現できないかと思った。二次元の座標をもとに組むシェーダだと限界がありそうなので、レイマーチングに興味を持つようになる。その内GLSLとか読み書きできるようになりたい。

セル結合

 12月に書いた、セル結合について積年の恨みを書いた文章がなぜか異様にバズった。

deux-hibi.hatenablog.com

 これはまさに異様で、1,700ブクマ弱を獲得してその日のはてブロ総合トップになるとともに、Twitterのトレンドに「セル結合」が並ぶことになった。まさかここまで広がると思わず極端なキレ芸的文章を書いてしまったので、さすがにフォローした方が良いなと思って後日釈明記事を書いた。これで一躍人気ブログに……ということはなく、その後は細々とした感じに戻ったが、まあこれぐらいがちょうど良いんじゃなかろうか。それはともかく人類は(無意味な)セル結合をやめ……やめてくれると嬉しいな(遠慮)。

ビートセイバー(環境構築方面)

 12月にビートセイバー(Beat Saber)を始めた。単なる娯楽用のゲームを「始めた」と言うのも変だけど。ある晩、もののためしにコントローラーを逆手に持って数曲やってみたら「これは……”来る”……!」と謎の確信を感じ、その日から逆手でしかプレイをしなくなる(過言)。

 その思いを抑えきれず下のようなイラストツイートをしたところ、それを見かけたガチ勢の人から声をかけてもらった。これがきっかけとなってビートセイバーのディープな世界に突っ込んでいくことになる。

 このイラストは今年の初めに購入したiPad Proがなかったら描かなかったかもしれない。思いついた事柄をそのままApple Pencilで表現して数秒でtwitterに投稿できるのはすごいことだ。そう考えると今ビートセイバーを楽しめているのはiPad Proのおかげと言えるのか……?

 やったこととしては、LIVバーチャルモーションキャプチャー(VMC)の導入。このあたりは猫井ゆうなさんの解説ページがわかりやすくとても助かった。MODを用いたカスタムアバターの導入にあたってはのしろぐさんのサイトさんには非常にお世話になった。ビートセイバーに関する情報では、日本で一番まとまっているサイトではなかろうか。神サイトである。MODを使うかVMCを使うかどちらがいいのかというのは非常に難しい問題で、これについては別途記事を書くつもりである。

 なお動画撮影のためだけにトラッカーを買った。VR機器をフル活用するようになってからの方が、肉体の限界とか部屋の狭さとかが気になるようになった気がする。物理的制約から人を自由にするためのVRなのに、本末転倒では?

ビートセイバー(動画投稿方面)

 とりあえず逆手セイバーの可能性を示すために以下のようなマップ(譜面)を作成&撮影した。マップデータはここ

 あと、合同作譜というのもやった。サーバ上にあるマップを協同で編集するというやつで、わりとたのしい。こういうツール・MOD類がユーザー主導でどんどん公開されていくのもビートセイバーの良い文化である。

 せっかくみんなで作っているから、動画もリレー形式でプレイするものを作ってみてはどうかと呼びかけた。タイムシートを決めて、皆から素材動画をもらって動画編集をするということをやった。編集にはAVIUtlを用いた。非常に便利なフリーソフトだが、各種プラグインの導入やメモリ拡張が(ほぼ)必須なのでその点は注意。完成品は以下。

発信し続けること

 やりたいことや面白いと思ったことを発信し続けるのは大事だと思う。ふとしたことがきっかけで……というのはよくある話だが、結局そういうめぐり合わせがないと効率的に成長できないのが普通の人間だと思う。同時に、それと同じぐらい、頑張ったはずなのに上手くいかなかったことや自然消滅したこともあるというのが、普通の人間だと思う。こういうのは時の運が絡むので、こうすれば絶対に上手くいくということはない。

 だからうまい縁を引き当てるまではどんな形であれ、twitterの呟きでもブログでも飲み会の雑談でも何でもいいけど、可能な限りわかりやすく具体的にやりたいことのイメージや希望を発信し続けることが大事かなと思う。

2019年のこれから

 「最終的に何がやりたいの?」ということを簡潔に記すのは難しい(長期的には変わっていくものでもあるし)。現在考えていることを要約すると、世の中の美しいこと、複雑なことは突き詰めれば線形的な要素群に分解できて、いったん線形的に扱えるようにすればコンピュータに一括計算させられるので、プログラムを活かして上手くそれら(美しいことや複雑なこと)をビジュアライズしたい、ということになる。数学もプログラミングもそのためのツールに過ぎないと思っているが、まだまだ両者とも未熟である。

 それとは別に、3DとVR/AR(将来的にはXRの方がより総括的な名称になるのかな?)はまだまだ遊びの余地がたくさんあるので、そういう娯楽的な楽しみも追及していきたい。また、それらが一般化していく中で、編集や作業を効率化していきたいという需要は絶対出てくると思うので、そういった面でもプログラミング能力を活かせたらと思う。ニッチかつマイクロなOSS開発とかあったら参加してみたい(インターネットの詳しい人達おしえて!)。後は十分な食事と睡眠をとって健康に気を付けるぐらいだろうか。