第一話 ビルド0.0.1
渋谷のオフィスビルは、水瀬陽太の想像よりずっと普通だった。
十五階建ての雑居ビル。エントランスに貼られた企業ロゴの横に、隣の不動産会社のロゴが並んでいる。エレベーターは三基あるうちの一基がすでに「点検中」の張り紙を貼られており、残り二基のボタンを押しても、なかなか降りてこない。
陽太は自分のリュックのショルダーベルトを握り直した。大学の指導教官から「インターン先が決まった」と連絡をもらったのが三週間前。その会社の名前を聞いた瞬間、陽太は思わず「えっ」と声に出してしまった。
NEXUSエンタテインメント。
国内最大手のVライバー事務所だ。所属ライバーの総登録者数が一億を超え、売上は五年連続で右肩上がり。業界を知らない人間でも名前くらいは聞いたことがある。そのNEXUSが、技術部門「ARIEL TECH」のインターン生を公募していた。採用枠は全国でたったの三名。
受かるとは思っていなかった。本当に。
なのに今、陽太は渋谷のくたびれたエレベーターの前に立って、内定通知の紙をリュックの奥深くに押し込んだまま、緊張で手のひらが湿っていた。
エレベーターが開く。中から出てきた女性社員が、陽太をじろりと見た。スーツを着ていない学生が不審者に見えるのかもしれない。
「インターンの方ですか」
「あ、はい。水瀬陽太です。今日からお世話になります」
「十二階ね。行ったらすぐ左のフロアで受付してもらって」
それだけ言って、女性は立ち去った。陽太はとりあえずエレベーターに乗り込み、十二のボタンを押した。
扉が閉まる直前、外から誰かが手を差し込んできた。
「待ってー!」
滑り込んできたのは、小柄な男だった。三十代くらいだろうか。くたびれたパーカーにジーンズという格好で、両手にコンビニの袋を三つ提げている。袋の中身はエナジードリンクと、カップ麺と、スナック菓子だった。
「助かった。ありがとう」
男は陽太の隣に立ち、袋をガサガサと持ち直した。エレベーターの中に栄養ドリンクの甘ったるい香りが漂ってくる。
「インターン?」と男は言った。
「あ、はい」
「何階?」
「十二階です」
「一緒だ。俺、坂部」
「水瀬陽太です。よろしくお願いします」
「よろしく。コード書ける?」
唐突な質問だった。
「……一応、情報工学専攻なんで。グラフィックスとか、並列処理とかは」
「OpenGLとVulkan、両方わかる?」
「OpenGLはわかります。Vulkanはちょっとさわった程度で」
「ゲームエンジンは?」
「Unityなら。Unrealも授業で触ったことはあります」
坂部は「ふーん」と言って、それきり黙った。評価されているのか、されていないのか、まったくわからない。
十二階で扉が開く。坂部は袋をガサガサいわせながらさっさと歩き出したので、陽太は慌ててついていった。
フロアに入った瞬間、音と熱気が押し寄せてきた。
デスクが迷路のように配置されていて、どこを向いても大型モニターが並んでいる。四枚組のマルチモニターを前にして頭を抱えている人、立ったままキーボードを叩いている人、床に座り込んでノートパソコンを操作している人。天井近くのホワイトボードには、意味のわからない数式と、「同接10万←死」という血のような赤マジックの文字が書いてあった。
「ここがARIEL TECH」坂部はそう言って、空いているデスクを顎で示した。「今日はあそこ使って。資料渡すんで、まず読んでて」
「わかりました。あの、坂部さんはどういう……」
「俺? テックリード。まぁよろしく」
それだけ言って、坂部はコンビニ袋を自分のデスクに置き、エナジードリンクを一本取り出してプルタブを開けた。昼前の時間帯に、すでに戦場の空気が漂っている。
陽太は指定されたデスクに座り、渡された資料の束に目を落とした。
表紙に、タイトルが書いてあった。
「プロジェクトECHO 概要資料 ver.0.4」
---
資料を読み始めて三分で、陽太は思った。
これは、無茶だ。
プロジェクトECHOの概要は、A4用紙五十ページに渡って書かれていた。文章と図表が混在した、丁寧なのか雑なのかよくわからない体裁の書類だ。しかし内容は明快だった。ひとことで言えば、「Vライバーとファンが同じ街で暮らせるメタバース空間を作れ」という話だった。
単なる配信プラットフォームではない。入場した全員がアバターを持ち、街を歩き回り、店に入り、ライバーとすれ違い、会話できる。既存のメタバースサービスと何が違うかと言えば、そのスケールだ。NEXUSは同時接続十万人という数字を目標として掲げていた。
十万人。
フルトラッキング対応で。
陽太はしばらく資料をめくる手を止めた。フルトラッキング、というのは、ユーザーの全身の動きをリアルタイムでアバターに反映させることだ。頭と両手だけを動かすヘッドセット型のVRと違い、脚も、腰も、指先も、首の角度も、ぜんぶ同期させる。
それを十万人分、同時に。
「……無理じゃないですか」
思わず声に出てしまった。
「そうだよ」
隣のデスクから声がした。陽太がそちらを向くと、大きなヘッドフォンを首にかけた女性が、こちらを見ていた。二十代後半くらい。髪を無造作に結んでいて、Tシャツには謎のキャラクターのプリントがある。
「物理的に無理」と女性は言った。「でも、やれって言われてる」
「あの、失礼ですが……」
「田中。サーバーサイド担当」
「水瀬です。今日からインターンで」
「知ってる。陽太くんでしょ。資料、意味わかった?」
「概要は。でも同接十万でフルトラは……」
「計算した?」
「えっと、ざっくり頭の中で」
「じゃあ聞かせて」
急な試問だったが、陽太は少し考えてから答えた。フルトラッキングで一人分の骨格データを毎秒送受信するとして、関節数を五十として、それぞれの位置と回転情報で最低でも数百バイト。レイテンシを許容できる範囲に収めるには更新頻度を落とすわけにもいかない。それが十万人分になると……。
「単純計算で、毎秒数十ギガバイトのデータ転送が必要になりますよね。今の通信インフラと、サーバーコストで賄える量じゃないはずで」
田中は満足そうに頷いた。
「正解。だからみんなで頭抱えてる。ようこそECHOへ」
---
昼になると、フロアの空気が少しだけゆるんだ。
みんながめいめいコンビニ弁当やカップ麺を持ち出して、デスクで食べている。会議室に向かう人、屋上に出る人。陽太は田中に誘われて、給湯室の前の小さなソファスペースに移動した。
「坂部さんって、どんな方ですか」と陽太は聞いた。
「テックリードにして、うちの狂人筆頭」
「狂人」
「いい意味で。あの人、前職でゲームエンジン作ってたんだよね。インディーで。商業では全然当たらなかったけど、エンジンの設計が天才的だって業界ではちょっと有名で。NEXUSがスカウトしてきた」
「へえ」
「プロジェクトECHOの基盤設計は全部坂部さんが書いてる。あの人が『理論上はいける』って言ったから、このプロジェクトが動き出した」
「理論上は、っていうのが怖いですね」
「そう」田中は弁当の蓋を開けながら言った。「理論上はいけるけど実装がクソ難しい、ってやつ。だから今、みんな死にそうな顔してる」
陽太はフロアを振り返った。確かに、誰も彼も顔色が悪い。それでも手は止まっていない。キーボードを叩き続けている。
「ECHOのコンセプト自体は」と陽太は言った。「経営側から来たんですか」
「そう。会長直々のアイデアだって聞いてる。『所属タレントがファンと二十四時間同じ空気を吸える街を作れ』って。最初に聞いたとき、みんな笑ったんだよね。ジョークだと思って」
「ジョークじゃなかった」
「ジョークじゃなかった。予算がついて、チームが組まれて、ロードマップが引かれた。私たちはリリース十二ヶ月前から動いてる」
「今は何ヶ月前なんですか」
「七ヶ月前」
七ヶ月で、この状況か。陽太は資料を思い出した。まだ解決していない技術的課題が、付箋みたいに貼り付けられていた。通信の問題、レンダリングの問題、物理演算の問題、音響の問題。
「陽太くんは、グラフィックス系が得意なんだっけ」
「はい。GPUプログラミングとか、シェーダーとか」
「じゃあ坂部さんのチームに入ることになると思う。うちで一番人手が足りてるのがそこだから」
「なんで足りてないんですか」
田中はおかずを一つ食べてから、少し間を置いて答えた。
「三人やめたから。半年で」
陽太は黙った。
「誤解しないでほしいんだけど」と田中は続けた。「ブラックだからやめたわけじゃないんだよね。みんな、技術的な壁にぶつかって、『俺には無理だ』って言って出て行った。坂部さんが求めるレベルが高すぎて、ついていけなかった、っていう話」
「……坂部さん、さっきエレベーターで色々聞かれました」
「そう、あの人すぐ面接するから。気に入られたっぽいね、つかまってたんでしょ」
「気に入られた?」
「話しかけない人には話しかけないから」
陽太は自分がOpenGLとVulkanについて答えた場面を思い出した。あの「ふーん」はどういう意味だったんだろう。
「まぁ、頑張ってみます」
「頑張ってみて。あ、ひとつ言っておくと」
田中が陽太の顔を真っ直ぐ見た。
「ここの人たちは、誰も手を抜いていない。生き残っているのは、本当にこのプロジェクトが好きな人たちだけ。そういうところだから、覚悟しておいてね」
---
午後から、陽太は坂部のチームに放り込まれた。
チームメンバーは坂部を含めて六人。全員が専用のグラフィックワークステーションを前に、何かを書いて、コンパイルして、動かして、舌打ちして、また書いている。陽太が挨拶を一通り終えると、坂部がすぐに課題を出してきた。
「これ、動かしてみて」
渡されたのは、Gitリポジトリへのアクセス権と、簡単な説明文だった。説明文にはこう書いてある。「LOD(Level of Detail)システムの試作。距離に応じてアバターのポリゴン数を自動で切り替える。現状、切り替わり時に一瞬ちらつく。直して」
LOD、つまり「距離に応じた描画品質の切り替え」は、3Dゲームでは基本的な最適化手法だ。近くにあるものは細かく描き、遠くにあるものはざっくり描く。それによって計算量を大幅に削れる。
しかし陽太が気づいたのは、この課題の文脈だ。同接十万人のフルトラッキングが物理的に不可能だとしたら、妥協点を設けるしかない。近くにいるユーザーはきちんと描き、遠くにいるユーザーはポリゴン数を落とす。あるいは、もっと極端に、2Dの板ポリゴンに差し替える。
つまりこのLODシステムは、ECHOの根幹を支える仕組みだった。
陽太はコードを開いた。C++と、GLSLのシェーダーコードが混在している。ざっと読んで、すぐにちらつきの原因がわかった。LODレベルの切り替え時に、古いメッシュを破棄するタイミングと新しいメッシュを描画するタイミングが一フレームずれていた。
「……あ、これか」
陽太はキーを叩き始めた。修正自体はシンプルだ。ダブルバッファリングを使って、新しいメッシュの準備ができてから古いものを捨てる。数十行の変更で済む。
三十分後、コンパイルが通った。動かしてみる。アバターが遠ざかっていく。切り替わる。ちらつかない。
陽太は自分のコードを確認してから、坂部に声をかけた。
「直りました」
坂部はエナジードリンクを片手に近づいてきて、モニターを覗き込んだ。陽太のコードを上から下まで読む。一分ほど沈黙があった。
「なんでダブルバッファにしたの」
「切り替えのタイミングを合わせるのが一番シンプルだと思って。あとは……切り替わり距離の前後で揺れ動かないように、ヒステリシスも入れました。距離が二十メートルでローポリに切り替わるなら、ハイポリに戻るのは二十二メートルまで近づいてから、みたいな感じで」
坂部がちらりと陽太を見た。
「ヒステリシスは頼んでない」
「あ、すみません。余計でした?」
「いや」坂部は少し間を置いた。「正しい。頼んでないのに入れた」
「ここを直さないと、境界付近で高頻度に切り替えが発生して、それはそれで重くなるし、見た目も悪いので……」
「うん。わかってる」
坂部はもう一度コードを見た。今度は少し長く。
「陽太くん、今日からここに座って」
陽太が割り当てられたデスクを指差した。それは、窓際の、ワークステーションが置いてある席だった。
---
夕方になると、フロアはさらに騒がしくなった。
「見て見て! あのバグまた出た!」
「どのバグ!」
「宇宙旅行バグ!」
陽太がそちらを向くと、テスト環境のモニターに映っていたアバターが、突然ものすごい勢いで上昇し始めた。ジャンプ、というか、もはや打ち上げに近い。アバターは空へ、空の上へ、空の向こうへ飛んでいき、やがてスカイボックスを突き抜けて画面から消えた。
「ああもう! 物理の数値どこ触った!」
「俺じゃないです!」
「じゃあ誰が触ったんだ!」
チームメンバー全員が一斉に自分のコードを見始めた。坂部だけが「また宇宙旅行か」と呟きながら、やや楽しそうにログを開いている。
陽太は小声で隣の先輩エンジニア、入社二年目の久保に聞いた。
「宇宙旅行バグって何ですか」
「物理エンジンの重力係数を誰かがいじるたびに発生するやつ」と久保は言った。「ジャンプ時の初速と重力の相殺計算がおかしくなって、アバターがマッハで飛んでいく。もう三十回は起きてる」
「毎回直せないんですか」
「直せるけど、また誰かがいじる。係数の共有設定がうまくできてなくて、各自がローカルで触った変更がマージされるたびに爆発する」
「設定ファイルの管理を……」
「そう、それが本当の問題。フォーマットが決まってないから。坂部さんが定義書を書くと言ってもう三週間経ってる」
「なぜ三週間」
「坂部さんが定義書を書こうとするたびに、別の致命的なバグが発生するから」
陽太は天井を見上げた。なるほど、これが現場か、と思った。大学の授業では、プロジェクト管理の教科書通りに物事が進む。でも現実は、一つを直せば別の穴が開き、その穴を塞ごうとする間にまた別の何かが爆発する。
宇宙旅行バグの解決には結局一時間かかった。犯人は誰でもなく、先週行ったリファクタリングの副作用だった、と判明したところでフロアに笑いが起きた。誰かが「またリファクタリングのせいかよ」と言い、誰かが「次からリファクタ禁止な」と言い、坂部が「禁止するわけないだろ、技術的負債が溜まる」と言って、笑いがさらに広がった。
陽太はその光景を見ながら、少し気持ちが軽くなるのを感じた。殺伐としているようで、どこかアットホームだった。みんな、本当にこれが好きなのかもしれない。
---
定時を二時間過ぎたところで、坂部がミーティングを招集した。
会議室に全員が集まると、坂部はホワイトボードにいくつかの数字を書いた。
「今日の時点で、フルトラッキング対応ユーザーを同時に処理できる上限が大体三千人。目標の十万に対して三十分の一」
誰も特に驚かない。みんな知っていることだ。
「LODシステムを入れても、全員をフルトラで動かすのは無理。だから戦略を変える」
坂部はホワイトボードに図を描いた。ユーザーを同心円で囲む図だ。
「ライバーを中心に置いて、近くにいるユーザーにはフルトラを割り当てる。ある程度離れたら骨格の更新頻度を下げる。さらに離れたらローポリに切り替える。端っこにいるやつは板ポリでもいい。誰も気づかないから」
「視覚的サボり術だ」と久保が言った。
「そう。でもばれないようにやらないといけない。切り替わりを自然に見せるのが今の課題。陽太くん、今日直してくれたLODの続きをやってほしい。特に、ローポリと板ポリの間のトランジションを滑らかにする方法を考えて」
「はい」
「あと」坂部はペンを置いた。「一つ共有しておく」
全員が坂部を見た。
「来週、ライバー側との最初の打ち合わせがある。ECHOの世界観をタレントに説明して、フィードバックをもらう。うちから誰か出席してほしいんだけど、名乗り出てくれる人は?」
しばらく沈黙があった。
「嫌なの?」と坂部が言う。
「嫌というか」と久保が言った。「俺たちはコード書きたいだけなんで、タレントさんと話すのが得意な人間が……」
「陽太くんはどう?」
急に名指しされて、陽太は少し固まった。
「えっと、俺でいいんですか」
「インターン生だから気楽でしょ。俺も出る。田中さんも来て」
「行きます」と田中が即答した。
「わかりました」と陽太も頷いた。
「誰が来るか、もう知らせてある?」と田中が坂部に聞いた。
「ああ。NEXUSからは凛宮リリスが担当になった」
フロアの空気が少し変わった。何人かが、おっ、という顔をした。
「凛宮さんか」と久保が言った。「あの人はしっかり言ってくれそうだな」
「言いすぎるくらい言うらしいよ」と坂部は言って、ペンキャップをカチカチさせた。「それが目的だから。技術者に遠慮しないで、使う側の感覚をぶつけてほしいって、向こうにお願いしてある」
陽太は凛宮リリスの名前を頭の中で転がした。もちろん知っている。知らないわけがない。NEXUSで最も長いキャリアを持つライバーの一人で、デビュー八年目。当初は深夜の雑談枠で細々と活動していたのが、あるゲームの大会配信がバズって一気に登録者が増えた。今では百万人を超えるファンがいる。
配信で見る彼女は、とにかく口が悪くて率直で、スタッフの失敗を容赦なく指摘することでも知られていた。「リリス先輩に詰められる」というのが、事務所スタッフの間で一種のあるあるになっているという噂も聞いたことがある。
「……手厳しそうな方ですね」と陽太は言った。
「そう」坂部はさっぱりした顔で言った。「だからいい。本当のことを言ってくれる人間じゃないと、意味がない」
---
帰り道、渋谷の雑踏を歩きながら、陽太はイヤフォンをつけた。
スマートフォンには、凛宮リリスのアーカイブ配信がいくつか保存されていた。準備しておくべきだと思った。どんな人間か、どんな感覚を持っているか、事前に知っておいて損はない。
再生すると、独特の低めのトーンの声が流れてきた。
「っていうかさ、このゲームのUI、誰が作ったの? 謝ってほしいんだけど。いや謝るだけじゃなくて改善してほしいんだけど。ねえ?」
チャットの流れる音がして、視聴者がゲラゲラ笑っているのが画面越しに伝わってくる。
「笑わないで。私は真剣に言ってる。メニューを開くたびにラグが0.3秒あるの、開発者は気づいてないの? それとも気づいてて放置してるの? どっちにしてもプロとして終わってる」
辛辣だ、と陽太は思った。でも確かに、0.3秒のラグはユーザー体験としては致命的だ。技術的には正しい指摘だった。
「あのさ」と画面の中のリリスは続けた。「こういうことを言うと、『そんな細かいことにこだわらなくていいじゃん』って言われる。でも細かいことにこだわるのがプロでしょ。誰も気づかないような0.3秒を削るために頑張れる人間が、本当にいいものを作れるんだと思う」
陽太は歩みを止めた。
スクランブル交差点の真ん中で、大勢の人が流れていく中に立って、イヤフォンから流れてくる声に耳を傾けた。
誰も気づかないような0.3秒を削るために頑張れる人間が、本当にいいものを作れる。
それは、坂部が「誰も気づかないような空の色のグラデーションを最後まで磨く」と言っていた話と、同じことを言っているように思えた。
作る側と、使う側。技術者と、そのものを体験する人間。全然違う立場にいるはずの二人が、同じことを言っている。
陽太はイヤフォンを外して、渋谷の夜空を見上げた。ビルに囲まれた四角い空は、どんよりと光って、星は見えなかった。
でも、その向こう側に何かがある気がした。
プロジェクトECHO。同接十万人のフルトラッキング。無茶なコンセプト。宇宙旅行バグ。それでも手を止めないエンジニアたち。
そして来週、初めて顔を合わせる、凛宮リリスという人間。
陽太はスマートフォンをポケットに入れた。リュックのショルダーベルトを握り直して、駅に向かって歩き出す。
夜の渋谷は、どこまでも明るくて、どこまでもうるさくて、どこまでも、誰かが作った光に溢れていた。




