console.familogふぁみちらし
蚘事䞀芧プロフィヌル

🪄 Wasm のたほう

Wasm を甚いお䞖の矎少女ゲヌムのコスト削枛ずパフォヌマンス向䞊ずプラットフォヌム拡倧を目指す。

  • 性DEC
  • Advent Calendar 2024
  • WebAssembly
  • ゚ロゲ
  • 䜜成日時: 2024/12/15 12:00:00
  • 曎新日時: 2024/12/15 12:00:00
  1. はじめに
    1. 察象読者
    2. 䜙談
      1. 「矎少女ゲヌム」衚蚘
      2. タむトルに぀いお
  2. プログラミング蚀語の皮類
    1. コンパむル方匏蚀語
      1. アセンブリの玹介
      2. 䜿甚䟋
    2. むンタプリタ方匏蚀語
      1. むンタプリタずは
      2. 欠点1: コンパむルし exe ずしお配垃するこずができない
      3. 欠点2: 倧量の挔算凊理が遅い
  3. Wasm の登堎
    1. 特城
      1. 蚀語非䟝存
      2. 実行環境
    2. 採甚事䟋
      1. Artemis Engine
      2. Unity
      3. その他
    3. ず蚀われたしおも  
  4. 矎少女ゲヌムず Wasm
    1. 事䟋1: 察応プラットフォヌムの圧倒的な増加
    2. 事䟋2: クラりドプレむのコスト倧幅削枛
      1. Wasm 察応は事業者偎にメリットだらけ
      2. クラりドプレむの問題の9割は Wasm で解決する過蚀
    3. 同人ゲヌム制䜜においお
  5. Wasm に限らないパフォヌマンス向䞊
  6. おわりに

はじめに

Webをメむンにいろんなずころでいろんな蚀語でプログラマヌをやっおいる琎音ふぁみず申したす。

今回は、2017幎3月にバヌゞョン1.0、2022幎6月にバヌゞョン2.0がリリヌスされた比范的新しい技術である WebAssembly (Wasm) の抂説ず、矎少女ゲヌムのコスト削枛およびパフォヌマンス向䞊に぀いお語らせおいただきたす。

この蚘事は性DEC Advent Calendar 2024に参加しおいたす。

察象読者

この蚘事の察象読者は、以䞋のような人です。

  • 珟圚同人ゲヌムを䜜っおいる人特に、Web がベヌスずなる゚ンゞンを䜿甚しおいる人
  • 新しい技術に興味がある人
  • Unity/UE/Godotなどに物足りない感じがする人
  • ゲヌム゚ンゞンから自䜜しおいる人
  • なんずなく矎少女ゲヌムのありうる未来が芋たい人

そのため、たったく技術に興味のない人からするず倧倉぀たらない蚘事になっおいるこずかず思いたす。ご容赊ください。

䜙談

「矎少女ゲヌム」衚蚘

この蚘事では、あえお「矎少女ゲヌム」ず衚蚘させおいただきたす。

理由は䞻に二぀ありたす。

䞀぀は、この蚘事が゚ロゲに限った話ではないこず。 ゚ロゲはノベルゲヌムず゚ンゞンや仕組みが倧たかに共通しおいるため、今回の蚘事においおぱロシヌンがあるかどうかはさほど重芁ではありたせん。 䜕なら、ノベルゲヌムでなくずもアクションゲヌムやRPG、さたざたなゞャンルに適甚できたす。「矎少女ゲヌム」を「ゲヌム」ず読み替えおもらっおも構いたせん。

もう䞀぀は、この蚘事は電車内で執筆されおいるこずです。 コメントは控えたす。

タむトルに぀いお

たた、この蚘事のタむトルは同人ゲヌム制䜜に励む女子高生たちを描く挫画「ステラのたほう」を元ネタずさせおいただきたした。

同じように Rust ずいうプログラミング蚀語ず Wasm を䜿甚しおゲヌム開発を行う蚘事に「ラストのたほう」ずいうものがありたす。 この蚘事では䞻に Wasm に焊点を圓おおいきたいのでこのタむトルずなりたしたが、たさか元ネタが被るずは思っおいたせんでした  

䜙談の䜙談で宣䌝ですが、私は珟圚サヌクルで癟合觊手えっち同人ゲヌムを開発䞭です。 ブランドの名前は「すおらそふず」です。偶然っおすごいですね。

執筆埌远蚘今芋たら12月1日に「Rustのたほう2」ができおたした。○○のたほうシリヌズ、増えおる  

プログラミング蚀語の皮類

では、先ほどから挙げおいる Wasm ずいう技術は䜕がすごくお、どのあたりが矎少女ゲヌムず関連性があるか解説させおいただきたす。

  ずいきたいずころですが、たずは Wasm を語る前に既存のプログラミング蚀語に぀いお少し解説したす。 「コンパむル方匏」「むンタプリタ方匏」が䜕なのかわかっおいる人は、このセクションは適圓に飛ばしおください。

コンパむル方匏蚀語

アセンブリの玹介

たず、軜くコンピュヌタヌのプログラムが䜕でできおいるかをご玹介したす。

以䞋は数倀の匕数を 2 ぀受け取り、その 2 ぀の数倀を足した倀を返す単玔な関数を、C 蚀語で実装したものです。

int add(int num1, int num2) {
    return num1 + num2;
}

それでは、これに察しおコンピュヌタヌが解釈できる蚀語である機械語に翻蚳するコンパむルを行いたす。 結果は以䞋の通りです。

add(int, int):
    push    rbp
    mov     rbp, rsp
    mov     DWORD PTR [rbp-4], edi
    mov     DWORD PTR [rbp-8], esi
    mov     edx, DWORD PTR [rbp-4]
    mov     eax, DWORD PTR [rbp-8]
    add     eax, edx
    pop     rbp
    ret

なんだかよくわからない圓瀟比文字列が出おきたした。

これがアセンブリず蚀い、コンピュヌタヌが読み、実際に内郚で実行しおいる呜什正確には、掲茉しおいるものはバむナリではなく文字で衚したものです。

䟋えば、Windows で䜿甚される exe ファむルや Mac の app ファむル正確には、その䞭身のバむナリファむルなどは、機械語で蚘述されおいたす。

アセンブリにコンパむルできる蚀語をコンパむル方匏蚀語ずいい、今䜿甚したC蚀語やC++、GoやRustなど、様々なものがありたす。

䜿甚䟋

ずいうこずは、みなさんがよく実行されおいる exe ファむルは、䜕のプログラミング蚀語で曞いおあろうず䞭身はアセンブリであり、それをコンピュヌタヌが解釈しお実行しおいるずいうこずです。

みなさんが鑑賞あるいは〝䜿甚〟されおいる矎少女ゲヌムの倧半は exe ファむルでしょうから、したがっおこの䞖の矎少女ゲヌムの倧半もアセンブリが少なからず䜿われおいるずいうこずになりたす。

むンタプリタ方匏蚀語

䞀方で、むンタプリタ方匏蚀語ずいう蚀語もこの䞖には存圚したす。

むンタプリタ方匏蚀語ずしお、䞀番簡単なものずしお JavaScript が挙げられたす。この䟋も芋おみたしょう。

function add(num1, num2) {
    return num1 + num2;
}

これは先ほどの add 関数を JavaScript で実装したものです。

むンタプリタずは

ではコンパむル方匏蚀語ず比べお䜕が「むンタプリタ」なのかずいうず、これらの蚀語は実行する際に「むンタプリタ」を必芁ずするからです。

䟋えば、アセンブリを陀くすべおのプログラミング蚀語で蚘述されたファむルは機械語ではないため、コンピュヌタヌがそのたた実行するこずはできたせん。

コンパむル方匏蚀語では事前にコンパむルを行い、機械語に倉換する䜜業を行っおいたした。 しかしむンタプリタ方匏蚀語では、これらのコヌドを解釈しお実行する「むンタプリタ」ずいう実行ファむル぀たり、むンタプリタ自䜓はアセンブリで蚘述されおいるがあり、その「むンタプリタ」がこれらのコヌドを解釈しお実行しおいるのです。

これにはコンパむル方匏蚀語ず異なり、人間が読みやすく曞きやすい、即座に修正し実行しやすいなどの利点がありたす。

欠点1: コンパむルし exe ずしお配垃するこずができない

䟋えば、あなたが珟圚芋おいるこの Web ペヌゞでは JavaScript が動䜜しおおり、それによっお䞀郚の画面衚瀺が行われおいたす。 しかし、先ほど瀺したようにむンタプリタ方匏蚀語はむンタプリタが必須ずなりたす。 そのため、むンタプリタなしには実行するこずができないのです。

぀たり、むンタプリタ方匏蚀語でプログラムを曞いお配垃するだけでは exe ファむルずしお実行しおもらえないのです。

欠点2: 倧量の挔算凊理が遅い

これがこの蚘事においお最重芁な点です。

むンタプリタ方匏蚀語は、䞀床むンタプリタを経由しおいたす。 機械語より「読む」「解釈する」ずいったフェヌズが挟たるため、䞀般的には速床が遅いずいう欠点も同時に存圚したす。 䟋えば JavaScript を䜿甚する Node.js やそこから掟生した Deno, Bun など、ずおも高速なむンタプリタも存圚したす。しかしそれはむンタプリタの実装にずお぀もない劎力ず時間ず人員がかけられた結果であり、むンタプリタ方匏蚀語は基本的にコンパむル方匏蚀語より遅いず蚀っおも間違いではありたせん。 よっお、高速で倧量に挔算する凊理を実装するのにも適しおいたせん。

そのため、ゲヌムでよく䜿われる3Dの凊理などには、むンタプリタ方匏蚀語はなかなか採甚されにくいのです。

Wasm の登堎

そんな䞭、WebAssembly が登堎したす。

WebAssembly は、2017幎にバヌゞョン 1.0 が発衚された新しいアセンブリの衚珟方法であり、「Web 䞊で動䜜するむンタプリタ方匏蚀語である JavaScript の実行速床が遅い」ずいう問題を解決するために䜜成されたした。 Wasm は機械語そのものではありたせん。実行の際にはやはりむンタプリタを必芁ずしたす。 しかし機械語にずおも近い構文を持っおいるので、他のむンタプリタ方匏蚀語より早いコンパむルず高速な呜什の実行が可胜です。 ただし、JavaScript に限っおはあたりに高速すぎお、[JavaScript を実行する時間] ≒ [Wasm をコンパむルする時間] + [Wasm を実行する時間] のような珟象も起きるこずがありたす。

特城

蚀語非䟝存

Wasm は新しい機械語のようなものです。

今たでコンパむル方匏蚀語のコンパむラは、実行される環境に合わせお機械語を生成しおいたした。 しかし、コンパむラが Wasm に察応するWasm を出力できるようになるず、䞀぀の Wasm プログラムで Windows, macOS, Linux などいろいろな環境で動かせるのです。

たた、コンパむラが察応すればその蚀語から Wasm プログラムは䜜成できるため、C 以倖にも Go や Rust、すでに様々なコンパむル方匏蚀語から Wasm にコンパむルできるようになっおいたす。

実行環境

Wasm は䞻に Web ブラりザで動䜜するこずを目的ずしお䜜成された芏栌ですが、Wasm は汎甚性が高く、Web の機胜や特城に䟝存しおいたせん。 そのため、Web ブラりザ以倖にもさたざたなプラットフォヌムで動かすこずができ、Docker のようなコンテナの代替技術ずしお泚目されおいたす。

採甚事䟋

ですが、そもそも Web ブラりザは Web ペヌゞを芋るためのものですから、Wasm が必芁になるほど Web ブラりザで倧量の蚈算が必芁な堎面は珟圚あたりないず蚀えたす。 そしお Web ブラりザ以倖では、ただ WASI 芏栌今回の蚘事では解説したせんも䞍十分であり実甚的ではありたせん。

では、どんなずころで利甚されおいるのでしょうか 実は、みなさんおなじみ矎少女ゲヌムにすでに Wasm の技術は取り入れられ、Web 䞊でもスマホでも、いろんなプラットフォヌムで動く時代がすでに来おいるのです。

Artemis Engine

ずくに有名なものには、Artemis Engine が挙げられたす。 この゚ンゞン自䜓が Wasm に察応しおおり、Artemis Engine で補䜜されたゲヌムはすべお Wasm ぞコンパむルし Web 䞊で動䜜させるこずが可胜です。

Artemis Engine を採甚しおいるブランドのひず぀ずしおたどそふずが挙げられたすが、たどそふずが初めお Artemis Engine を採甚した「ラズベリヌキュヌブ」から最新䜜の「セレクトオブリヌゞュ」たで、すべお Web で䜓隓版をプレむするこずができたす。 この Web 䜓隓版は、䜿甚しおいる゚ンゞンである Artemis Engine の Wasm 察応によっお成り立っおいたす。

ずいうか、私が Wasm を知ったきっかけ自䜓がたどそふず䜜「ハミダシクリ゚むティブ」のWeb䜓隓版です。 圓時、「artemis.wasm」ずいう謎のファむルですべおが凊理されおいるこずに察しおめちゃくちゃ驚きたした。

Unity

たたおなじみの Unity では、Web 䞊でプレむする際に Wasm が䜿甚されおいたす。

Artemis Engine ずは違い、Unity は3Dゲヌム制䜜フレヌムワヌクです。 そのような特性䞊、物理挔算などのリ゜ヌスを倚く䜿甚する蚈算をしたり、3Dオブゞェクトをレンダリングするような倧量の蚈算を行いたす。 ここで Wasm を䜿甚するこずで、Unity 補ゲヌムの Web 䞊での快適なプレむが実珟されおいたす。

Unity 6 では、Build Profiles で Web を指定するず、Web で動䜜する圢匏でビルドされたす。

その他

今回の蚘事の目玉ではないので玹介はあたりできたせんが、矎少女ゲヌム以倖にも取り入れられおいるアプリケヌションはありたす。

䟋えばすでに廃止され䜿甚できなくなっおいる Flash を実行できる拡匵機胜「Ruffle」は、Flash ゚ミュレヌタヌを Rust で蚘述しお、Wasm にコンパむルしお動䜜させおいたす。

ほかにも、Google Meet では背景のがかし凊理などの重い䜜業に利甚されおいたす。

たた、少々倉態的な事䟋ずなりたすが、Wasm は既存の C 蚀語などで蚘述されたコヌドからコンパむルするこずもできるため、Web 䞊で仮想マシンを動かす WebVM なる詊みも存圚しおいたす。 個人的にはこれに興味があるんですよね。ゲヌムに時々ある「操䜜できるPC」、操䜜アクションを起こすずLinuxが動いたらあたりにも楜しそうじゃないですか  

ず蚀われたしおも  

たあ、ここたで話しおも「別に今たでの exe ファむル圢匏でいいのでは」ず蚀われるず個人的に反論できない郚分もありたす。

しかし、この Wasm の蚀語非䟝存・プラットフォヌム非䟝存をフル掻甚すれば、矎少女ゲヌム界隈においおも exe 圢匏を倧きく䞊回るメリットが埗られるのではないかず考えおいたす。

矎少女ゲヌムず Wasm

ずいぶん長くなりたしたが、矎少女ゲヌム界隈では Wasm を甚いお以䞋のようなこずができるず考えおいたす。

事䟋1: 察応プラットフォヌムの圧倒的な増加

もちろん、先ほど挙げたそのたたの理由で、察応プラットフォヌムを䜎コストで増やすこずができたす。

今たでのゲヌム゚ンゞンにも Android や iOS など、モバむル察応アプリケヌションをビルドした事䟋はありたすが、蚀語がネむティブ察応しおいない等でネむティブアプリの開発知識が倚く必芁になるこずがありたす。 Wasm なら、この問題を解決できたす。Wasm は統䞀された芏栌であるため、Wasm むンタプリタを導入するだけで、モバむル察応も可胜です。

もちろん、圓初の目的であった Web で動䜜させるずいうこずも可胜です。 いずれにしろ、むンタプリタさえあれば動䜜する機械語のようなものなわけですから、䞀床のコンパむルで数倚くのプラットフォヌムぞの察応が芋蟌めたす。

事䟋2: クラりドプレむのコスト倧幅削枛

䞀方でこの技術は、䜕もゲヌム補䜜者のみに限らず、珟圚の販売プラットフォヌム運営者DLsiteやFANZA等などのコストを倧幅に削枛できるポテンシャルを秘めおいるのです。

FANZA では珟圚ベヌタ版で矎少女ゲヌムを Web でプレむできる「矎少女ゲヌムブラりザ版β」ずいう機胜が提䟛されおいたす。 この機胜は、ペヌゞをご芧になればわかる通り、クラりド䞊で矎少女ゲヌムを動䜜させ、その画面を配信するこずによっお成り立っおいたす。

しかし、この配信にはデメリットが数倚く存圚したす。 たず、蚘茉されおいるように画質を䞊げるほど、時間単䜍で通信量が増えおいきたす。 たた、むンタヌネット品質によっおは動きが滑らかでなかったり、堎合によっおは切断されおしたったり、快適なプレむずは蚀えたせん。

ここで Wasm を採甚すれば、䞀床ダりンロヌドすればロヌカルで動かせるため、画質やフレヌムレヌトを気にする必芁はありたせん。 特に矎少女ゲヌムはテキスト・絵・BGMなど、蚈算量が少ないシステムのみで成り立っおいるこずが倚いため、モバむル端末でもダりンロヌドしおプレむできたす。

Wasm 察応は事業者偎にメリットだらけ

ここたで、ナヌザヌのメリットを挙げおきたしたが実は事業者偎のほうがメリットが倚いのです。

たず、クラりド䞊で Windows マシンを実行させる必芁がないのでその分の経費が浮きたす。 動画配信システムも䞍芁なので、その分の経費も浮きたす。 そしお通信費も浮きたす。䞀床ナヌザヌがダりンロヌドするだけ、か぀ Wasm ずゲヌムのアセットは静的ファむルであるためです。

クラりドプレむの問題の9割は Wasm で解決する過蚀

なおこの話は゜シャゲのWeb版でも同じこずが蚀えたす。 ゜シャゲも同様の動画配信技術を甚いたクラりドプレむを実装しおいる堎合が倚いためです。

同人ゲヌム制䜜においお

䟋えば、最終的な出力圢匏が exe 圢匏で動䜜するものであれば、Wasm を導入しおもらうこずで恩恵を受けられる可胜性がありたす。 「自分が䜿甚しおいる゚ンゞンが Wasm に察応しおいない」ずいったこずのほうが倚いず思いたすが、そんな方も頭の片隅にでも眮いおおいおもらい、実装されたず聞いたずきに少しでも怜蚎しおいただければ幞いです。

たた今ゲヌム゚ンゞンを自䜜しおいる方は、ぜひ Wasm ぞのコンパむルをご採甚いただき、Web 䜓隓版などの幅広いプラットフォヌム察応をご怜蚎いただけたらず思いたす。

Wasm に限らないパフォヌマンス向䞊

今回は Wasm に限った蚘事でしたが、JavaScript のみで蚘述された゚ンゞンであっおも、Web 暙準の統䞀に぀れフレヌムワヌク等様々な遞択肢が増えおきたこずによっお、既存のアプリケヌションにもパフォヌマンス向䞊の芋蟌みがありたす。 この蚘事では解説したせんが、Tauri ずいう新しいフレヌムワヌクを䜿甚するこずで、ツクヌルやティラノビルダヌ補ゲヌムのアプリケヌションサむズを 150 MB 以䞊削枛できたす。 性DEC Advent Calendar 参加者向けメッセヌゞ気が向いたか぀蚘事を曞くこずができれば、アドベントカレンダヌに滑り蟌み登録する可胜性がありたす

おわりに

矎少女ゲヌムにおいお Wasm を甚いる利点に぀いお、ほがほがプログラミングの話しかせずずいぶん長く語っおしたいたした。

Wasm に限らず、既存のゲヌム゚ンゞンでも新しい技術の組み蟌みに興味がない人は倚い圓瀟調べので、この蚘事で少しでもパフォヌマンス向䞊やコスト削枛に興味を持っおいただけたら幞いです。

最埌に䞀蚀、癟合゚ロゲの䟛絊量を増やしおください

琎音ふぁみ

むンタヌネット魔法少女