TerrariaとCelesteをWebAssemblyに移植!技術力がすごすぎる
引用元:https://news.ycombinator.com/item?id=44101175
ゲームをWebに移植するのって楽しい趣味なんだよね!Quake IIIとCave Storyを移植したことあるよ。この記事みたいに、マジで細かいところが勝負なんだ。ゲームが動くだけじゃなくて、スマホのタッチ操作とか、マルチプレイ、セーブ管理、今の画面サイズやフレームレート対応とか、最初の移植よりずっと時間かかるんだよね。詳しくはリンク見てね。
>”ブラウザで動くべきじゃないものがブラウザで動いてる”っていう変なプロジェクトのジャンルが好きなんだ。お気に入りは… Minecraft 1.12の直接再コンパイルとかね。へえ、Minecraftって元々Javaアプレットだったから、ブラウザで動くのはまさにふさわしいと思ってたよ。言いたいことは分かるんだけど、ちょっと面白いなと思って。
初期Minecraftは独立したアプリになる前にブラウザで動いてたし、最近それが再現されたんだ。classic.minecraft.net
>最近だって?6年前のことじゃない?https://news.ycombinator.com/item?id=19861584
もっと面白いのはね、サーバー側WebAssemblyをコンテナで動かして、それをオーケストレーションして、サンドボックス環境同士で通信させるっていうアイデアかな。なんか何かに似てる気がするんだけど、最近記憶が曖昧になってきてるな。/s
きっと1972年のVM/370のこと言ってるんでしょ?
WebSphereだ!
C#のバイナリを逆コンパイルして、WASMっていう全然違うターゲット向けに再コンパイルしたのが、どれだけそのまま動いたかっていうのは、本当にすごいね。
それから、最後にちゃんと完成させるために彼らがどんだけ頑張ったかも、本当にすごいと思うよ。
この記事、C#/WASMとかC#のネイティブコードリンクの知識がちょっと必要だね。前に、C#エンジンをWASMでウェブにコンパイルする可能性について、もっと基礎的な部分から説明した記事を書いたんだ。それも補足として読むといいかも。
So You Want To Compile Your C# Game Engine To The Web With WASM
https://kylekukshtel.com/csharp-wasm-game-engine-compile-web…
デモ試そうとしたら、Firebaseで”bandwidth quota exceeded”エラー出たよ。ただの静的サイトなら、こういう心配しなくていいはずなのに。
CloudflareとかGithub PagesみたいなCDNでホストしたらいいのに(無料だよ!)。
あ、ごめん!
Github Pagesに切り替えたよ。Cloudflare PagesはWASMファイルが容量制限超えるし、Github PagesはSharedArrayBufferに必要なヘッダー送れないんだ。
どちらもservice workerで回避できるけど、不安定になるから避けたいんだよね。
重いアセットに関しては、Cloudflare R3の方が向いてるかもね。AWS S3みたいなもんだけど、データ転送料がかからないのがクールなところだよ(最後に確認した時だけどね!笑)。
あと何年も経ってTerraria買っちゃいそう。アセット手に入れて、これ試したいだけのために。すごいね :)
ああ、Terrariaは絶対買う価値あるよ。友達と洞窟探検する時とか特にね。
個人的にはMinecraftより好きだな。
service workerの“jank”って言われてるやつ、概念的にはハックっぽいけど実際は全然不安定じゃないしユーザーもほぼ気づかないよ!
他のservice workerと組み合わせたい時以外は使いっぱなしで大丈夫(組み合わせは全然できないけど)。
参考リンクはこちら:
https://github.com/gzuidhof/coi-serviceworker
https://github.com/WebReflection/mini-coi
ファイルがどれだけうまく圧縮できるかにもよるけど、これ試してみるのもいいかも:
https://developer.mozilla.org/en-US/docs/Web/API/Compression…
そうそう:これ、最初にロードした時にservice workerがまだ読み込まれてないから、手動でリロードするまで真っ白なページになっちゃうよ。
service workerのインストールイベントでページを強制リロードすると直せるかも。
あとね:これめちゃくちゃクールだよ。書いてシェアしてくれてありがとう!
最近WASM+OpenGL+SDLでウェブ向けゲーム開発始めたんだけど、簡単にできてびっくり!
コードをウェブで動かすよりCMakeファイルいじってる時間の方が長かったくらい。
ウェブプラットフォームにはまだ粗い部分もあるけど、WindowsやMacOS向けにコンパイルするよりWASMの方がずっと楽だったよ。
バカな質問なんだけどさ:Wasm使う時ってブラウザの便利なテキスト描画機能とか使えるの?それとも結局canvasに描画するだけ?
この状況だとWASMとJSに違いはないんだ。
canvas使うことになったら自分でテキスト描画する必要があるよ。これはJSとかWASMのせいじゃなくて,壊れたweb APIスタックのせいなんだ(ちゃんとレイヤーになってないし,全体的に逆さまなんだ。例えばDOMの上にcanvasがあるべきなのに,canvasがDOMの上に座ってるんだ。)
Emscriptenっていうライブラリがあってさ,色んなものをWASMにクロスコンパイルできるんだ。
つまりね,SDL_ttfみたいなフォント描画のための依存関係を普通に引っ張ってこれるってことだよ。
著作権について心配してるよ。個人的な利用だけだよね?
ちなみにWASMでクラウドゲームサービスをやってるんだ(https://gaming.inlinestyle.it)。よかったら見て,改善点教えてくれると嬉しいな!
あなたの(?)ウェブサイト,リソース食いすぎてヤバすぎるんだけど。i5-7500Tでもまともに動かすのに苦労するよ。ブラウザ全体が崩壊する感じ。
そのサイトでjavascript無効にすると完璧に動くよ。
たぶんパフォーマンスを破壊してるのはこれだね:https://velzie.rip/static/background.js
WASMで動くCeleste Classic:https://midzer.de/wasm/celeste/
なぜかゲームが倍速で動いてるみたい。めっちゃ難しいね。
たぶんゲームはフレームレートが60hz固定だけど、君は120hzのディスプレイ使ってるんじゃない? ChromeとFFはこういう場合requestAnimationFrameを120hzで動かすらしいよ(Safariは60hzのままだけど)。
ああ、たぶんそうかも。確かに120hzのディスプレイ使ってるわ。それでも1600mまで行けたよ、良い挑戦になった。追記:改めて見たら2000mになってた。クソ難しいな。
倍速で山頂まで登ったよ。🍓x14 3:17:46 deaths:1981
ゲームの状態更新をフレームレートに紐づけるのはやめてほしいな。 requestAnimationFrameがある場合でも、「AI」でさえ知ってるんだぜ。俺、聞いたことあるから分かる。でも、描画とゲームの更新を切り離すように具体的に指示しないと、ダメな答えを出すんだよね。
もっとコメントを表示(1)
これ、未だに意外と難しい問題なんだよね。単純にフレーム時間測るだけだと(rAFのタイムスタンプ使っても)タイミングの揺れ(ジッター)が大きくて、マイクロスタッターの原因になるんだ(あと別の問題として、SpecterとかMeltdownの影響で、一部ブラウザはタイマー精度をミリ秒単位に制限してる。でも、ここではランダムな揺れのおかげで、十分なフレーム数で平均すれば正確なフレーム時間、例えば16.667とか8.333msの値が、15<=>17とか7<=>9msみたいにぶれる代わりに得られるから役に立つんだけどね)。
俺に言わせれば、それは言い訳にならないね。ブラウザは固定ハードウェアのコンソールじゃないんだから。正直、今どきコンソールだって固定ハードウェアじゃないんだけどさ…。
言い訳じゃなくて、可変タイムステップを実装しようとすると起きるマイクロスタッターの問題を解決するための、もっと良い方法をウェブプラットフォームは提供すべきだってことだよ。だって、今は「ユーザー空間」でちゃんとした解決策を出すのが無理なんだからさ(例えば、どんなノイズ除去フィルターも、ブラウザウィンドウを別のリフレッシュレートのディスプレイに移すとかでリフレッシュレートが突然変わると問題が起きる)。
これはめちゃくちゃクールだね。だけど、ブログ自体が俺のFirefoxだと60 FPS出てないんだ。たぶんあの背景エフェクトのせいかな?
あのエフェクト、邪魔だし集中できなくて嫌だったわ。インスペクターから消せるcanvas要素で描画されてるよ。
これ超いいね。Terrariaやったの2014年以来だわ。ちょっと不満なのは解像度高すぎて全部ちっちゃく表示されちゃうことかな。200%にスケールできたら文字とかアイコン見やすくていいんだけどなー。
クールだと思うんだけど、まだ動かせないんだよね。SteamからのオプションでTerrariaのassetsダウンロードしてるんだけど、1時間経ってもまだ5%だよ。
FNA/XNAのプロジェクトがブラウザで動くの見れるのいいね
これマジで最高!即行でChromebookで使うつもりだよ
iosのSafariだとマジでダメみたい、デモ3つともロード中にクラッシュしちゃうわ笑