世界を動かす技術を、日本語で。

古いSGIデモをWASMを通じてブラウザで再現

概要

SGIの往年のデモを、現代のブラウザで実行可能にしたプロジェクトの紹介。 EmscriptenとSDL2を活用し、元のC/C++コードを最小限の修正でWeb対応。 IRIS GLソフトウェアラスタライザやSDL2によるイベント処理を採用。 デモごとに独立したページとWASMバイナリを提供。 ビルド手順や今後のTODO、クレジット情報も網羅。

SGIデモをブラウザで再現するプロジェクト概要

  • SGIデモ のオリジナルソースコードを EmscriptenSDL2 でWeb対応
  • IRIS GL ソフトウェアラスタライザ(Alice 4プロジェクト由来)による描画
  • SDL2によるイベント処理、GLイベントシステムへの変換
  • 各デモは 独立したWebページJavascript+WASM (元C/C++コードからEmscriptenでビルド)
  • ソースコードの修正は最小限、35年新しいコンパイラへの適応のみ

動作確認済みデモ

  • Buttonfly
  • Bounce
  • Ideas
  • Insect
  • Jello
  • Logo
  • Twilight

一部動作に問題のあるデモ

  • Flight
    • コックピット描画の不具合
    • Web版では飛行機が遅い
    • ナイトモードで「ちらつき」
    • ネットワークプレイ非対応
  • Newave
    • メッシュ編集不可
    • ポップアップメニュー非対応
    • ワイヤーフレームのみ
  • Arena
    • ネットワークプレイ非対応

ビルド手順

Mac環境

  • Homebrew未導入ならインストール
  • SDL2とEmscriptenのインストール
    • brew install SDL2
    • brew install emscripten
  • ビルド手順
    • git clone https://github.com/sgi-demos/sgi-demos.git
    • cd sgi-demos
    • make

Windows環境

  • Winget未導入ならインストール
  • MSYS2をcmd.exeからインストール
    • winget install MSYS2.MSYS2
    • setx PATH "%PATH%C:\msys64\clang64\bin"
  • MSYS2 CLANG64シェルでclangツールチェーンとSDL2をインストール
    • pacman -Syu
    • pacman -S base-devel mingw-w64-clang-x86_64-toolchain
    • pacman -S mingw-w64-clang-x86_64-SDL2
  • emscriptenをGithubからクローン(MSYS2推奨、pacman経由は非推奨)
  • emscriptenのインストール手順はデフォルトを参照(Windows向け手順は使わない)
  • ~/.bashrcに以下を追加
    • source /path/to/emsdk/emsdk_env.sh
  • ビルド手順
    • git clone https://github.com/sgi-demos/sgi-demos.git
    • cd sgi-demos
    • make

今後の課題・TODO

  • OpenGLES/WebGLによるレンダリング(作業中)
  • 任意ウィンドウサイズ対応
  • GLデモを独立した WASMワーカー/スレッド で実行(SDLイベントループ分割回避)
  • ポップアップメニュー(SGI伝統のフォント含む)対応
  • さらなるデモの追加
    • Electropaint
    • Cedit
    • その他IRIS GLデモ
    • OpenGL, GLUT, Inventor, Performerデモ
  • 各デモの基本情報表示
    • 名前、作者、年(画面下部テキスト)、コードリンク
  • バーチャルマウス・キーボード表示
    • デモで使用するキー・マウスのみ表示
    • qdevice()呼び出しで判定
    • 透明オーバーレイ表示
    • タッチデバイスでは常時表示
    • マウス/キーボードデバイスではヒントとしてON/OFF切替
  • 各デモの説明・歴史・背景
    • .Infoスライドファイルから取得可能な情報も活用
    • manページへのライブリンク

クレジット

  • SGI全スタッフ: eye candy高性能コンピュータ の功績
  • Alice 4プロジェクト関係者: GL実装 とインスピレーション
  • Emscripten・SDLチーム: Web移植 実現
  • Internet Archive、Bitsavers、WinWorld、IRIXNet他: 歴史的資料保存

Hackerたちの意見

シリコン・グラフィックスは90年代初頭のコンピュータグラフィックス界での主役だったよね。

NVidiaが注目されてるのは、SGIから重要な人材を雇ったからだね。

1994年にオラクルでキャリアをスタートしたんだけど、シリコン・グラフィックス(まだ正式にはSGIじゃなかった)の「マジックバス」がレッドウッドショアーズの駐車場に来て、みんなで並んで中に入ってデモを見た時のことは今でも覚えてる。その時、本当に未来にいる気分だったな。

1995年か1996年頃、友達がSGIのシステムでスピーダーバイクのグラフィックス/ゲームデモを体験したって言ってたんだ。SGIのプロモーションイベントみたいなところで。スクリーンショットや動画を見つけられなくて、ここにあればいいなと思ってたけど、残念ながらなかった。誰か覚えてる人いる?

もしかして「Vroom」かな?宇宙でのスロットカー・レースゲームだよ。https://nixdoc.net/man-pages/irix/man6/vroom.6.html 動画: https://www.youtube.com/shorts/imguo4oUd-c?app=desktop

GLTronとArmagetron Advanced、どっちが好き?

それ、Unixシステムだよね!知ってるよ。

俺、年取ったなぁ。その参照は1993年のものだよ。ネタバレはしないけど、知らない人のために: https://imdb.com/title/tt0107290/

あの映画が公開されたとき、私は学校に通っていて、コンピュータサイエンスの学生専用の寮に住んでたんだ。みんなで映画を見に行って、彼女がそのセリフを言ったとき、みんな大爆笑しちゃって、劇場の他の人たちは困惑してたよ。

あの3Dファイルマネージャーは「fsn」って呼ばれてたよ。それから「fsv」っていうgtk/Linuxポートもある。僕はgtk+3に更新したバージョンをここで管理してるよ: https://github.com/jabl/fsv 。残念ながら、生活が忙しくてgtk4に移行したり、いくつかの欠けてる機能を追加する時間が取れなかったんだ。

技術的にはそれほどすごくないけど、1998年から2025年までのNvidia(nVidia?)のテクノロジーデモのコンピレーションは歴史的に興味深いよ。https://www.youtube.com/watch?v=DfWSJvKFMPE

それめっちゃ面白い!HNに投稿する価値ありだね。

バウンスデモは全部x29を見せてるね。特にマティーニとWVが見たかったな、当時はすごく印象的だったのを覚えてる(シャドウとか)。古いSGIオクタンを起動しなきゃいけないかも。

博士課程の時、SGI IndyとSGI O2の前でたくさんの(不幸な)時間を過ごしたな…最高だったのは、別のボックスにtelnetするとリモートで音声クリップを再生できて、オペレーターは大体何が起こってるか分からなかった時。どのデバイスもスター・ウォーズの音声クリップのコレクションでいっぱいになったよ… :)

70年代の学部時代には、PDPとテレタイプで似たようなことができたよ。ユーザーにログオフするように見えるオペレーターメッセージを送って、「さもなければテレタイプが爆発するぞ」って楽しんでたんだ。

Macでも「say」コマンドを使ってこれができたよ。2000年代後半には、ビルド速度を上げるためにXcodeを使って開発者のワークステーションをプールしてた。だから、ほとんどの人が認証情報を共有して、同僚が設定を変更するためにシェルインしたりリモートで入ったりしてた。時々、シェルインして「それはできないよ、デイブ」みたいなことを無邪気な同僚に言ったりしてたな。

ああ… パスワードなしの「ゲスト」アカウントね。SGIのテクニカルサポート(96年の東チーム、97年のUnixチーム - 僕のインディゴはdewi.csd.sgi.comだった)では、ファイルをコピーするのに使ってた(その頃「トゥループス」が出たばかりだった)し、誰かのマシンにウィンドウをポップアップさせて注意を引く内部ツールもあったんだ(マルチキャストチャットプログラムに直接注意を払ってない時に…)。

もし君がティーンエイジャーの大学生だったら、スター・ウォーズよりももっとリスキーなクリップがあったよ :-) 一番の思い出は、大学2年生の友達がテルネットを使ってローカルIPにディスプレイを設定して、ランダムな音声ファイルをクリックし始めた時のこと。向こう側のオペレーターは1年生で、他の部屋に駆け込んできて友達を見て、「おい、そのSGIが変な音を出してるよ」って聞いてきた。何が起こったのかを理解した友達は、「ああ、負荷がかかるとそういう音がするんだよ」って返したんだ :-D

SGI(O2)にあった別の問題: ログインの間に全てのビデオ/メモリバッファをクリアしなかったんだ。だから、コンソールにログインすると、前のユーザーのランダムな画像が画面に表示されることがあった。どうやら前のユーザーはよくポルノを見てたらしい :(. その後、グループリーダーがMOTDを更新して、それは禁止だって明記したんだ。

化石から見つかった琥珀の中の蚊の血液で恐竜を育てるみたいに、古いソフトウェアが現代の技術で復活したのは、コンピュータ科学者たちができることに興奮しすぎて、「やるべきか?」って考えるのを忘れちゃったからなんだよね!役に立つ度は1/10だけど、クールさは10/10だね。

1980年代にSGIで働いてた頃は最高だったな。長時間働いたけど、必要なものを発明するのが楽しかった。MIPSが恋しいよ。

1992年だよ。ちょっと顔出しに来た。

SGIのデモを初めて見た時に気づいたのは、メニューUIがスーパーマリオ64のファイル選択画面にすごく似てるってこと。もちろん、ニンテンドー64はシリコン・グラフィックスと提携して開発されたから、明確なつながりがあるし、これに気づいたのは僕だけじゃないよね。それでも、開発初期にプレースホルダーメニューとして使われて、チームがそれを気に入って最終版でも同じ効果を使ったっていう隠れた歴史があるんじゃないかと思う。これがいい比較だよ: https://www.resetera.com/threads/super-mario-64-took-its-3d-...

マリオ64には、夢のような、抽象的な、言ってしまえばバポウェーブ的な質感があって、これはSGIの影響や初期のアメリカの3Dアニメーションが開発に与えた影響だと思う。それがこのゲームの魅力の大きな部分だと思う。ギャラクシーやオデッセイは技術的に優れていて、より洗練されてるし、確かにそれぞれクラシックだけど、若い世代の中でもマリオ64が3Dマリオの決定版として残っているように感じる。これを示すのが、ボーナスステージ「シークレットアクアリウム」と「マインズアイ」のアニメーションの比較なんだ [0]。技術的にはSGIではなくシンボリックスのものだけど、当時の3Dアニメーターたちはお互いにメタファー的な会話をしていたからね。このつながりがどれだけ直接的だったかを示す、最も明白な例かもしれない。[0] https://www.youtube.com/watch?v=ARbWJX-P1oM [1] https://www.youtube.com/watch?v=NYBes8ki3lo

私たちのSGI 4D-220は分子モデリングラボにあって、これらのデモは他のものを全部ダメに見せてたんだよね。パワーはあったし、エンジニアやプログラマーは自分たちにはそれがなかったから不満だったし、伝統的なコンピュータサイエンスや管理者たちは、DECやIBMのことを自慢して、UNIXをおもちゃ扱いしてたからイライラしてた。あと、Evans and SutherlandのNeXTマシンやMicroVAX、3D NMR用のハードウェアパルスシーケンサーを作るためのMac、2D NMR用のカスタムDSP、400万ドルの超伝導NMR、そしてラボ全体もあって、当時のクールなおもちゃが揃ってた。いい時代だったな。