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

ソフトウェアレンダリングが大好きです

概要

  • ソフトウェアレンダリング の魅力と現代での体験について解説
  • DOS時代のゲーム を高解像度・高フレームレートで楽しむ方法
  • ソフトウェアレンダリングの 画質的特徴 とハードウェアレンダリングとの違い
  • 必要なハードウェア環境 とDOSで動かす際の注意点
  • おすすめタイトル も紹介

ソフトウェアレンダリングの魅力

  • ソフトウェアレンダリング とは、CPUがすべてのピクセルを直接描画する方式
    • 3Dカード (GPU)は使用せず、各フレームをゲーム自身のコードで計算し、ビデオメモリへ直接書き込む
    • 代表作: Doom、 Duke Nukem 3D、 Blood、 Quake 初代
  • 1990年代は、 低解像度のソフトウェア描画 か、 3Dカードによる加速版 のどちらかが主流
    • 現代では、十分に速いPCで 高解像度のソフトウェアレンダリング が可能
  • 画質の特徴
    • テクスチャが ピクセル単位でシャープ に描かれる
    • 初期3Dカードの バイリニアフィルタ は滑らかだが、逆に ぼやけた印象 になる
    • 256色パレット による照明は階調が荒く、 グリット感のある質感 を生む
    • ハードウェアレンダリングではこの 粗さ が失われる
  • ゲーム本来の設計
    • Quake や Doom などはソフトウェアレンダリングを前提に開発
    • 3Dfx対応版(GLQuake、Bloodの3dfxモード等)は後発
    • タイトルによっては 加速版の方が見栄えが良い 場合もある(例:Tomb Raiderの水中表現)

ソフトウェアレンダリングの現代的活用

  • 現代PCの高性能CPU で、当時不可能だった高解像度・高フレームレートを実現
    • 例: Dell OptiPlex 380 で Quake を800×600・60fpsで動作
  • Buildエンジン系ゲーム (Duke Nukem 3D、Blood等)は高解像度で重く、 強力なCPU が必要
    • Shadow Warrior を1600×1200で動かすには、3.3GHzクアッドコアXeonでも力不足
  • 本来のDOS環境 で動かす意義
    • ソースポート (Windows上で動く現代的移植版)もあるが、 オリジナルDOS版 の挙動や雰囲気は格別
    • DOSBox も選択肢だが、 実機のDOS でしか再現できない動作やレスポンスも存在

ハードウェアとサウンドの課題

  • DOS実機 を使う場合、 対応サウンドカード が必要
    • 現代PCには レガシーなサウンドカード が搭載されていない場合が多い
    • SBEMU などのエミュレーションソリューションも存在するが、完全な互換性には課題

おすすめのゲームタイトル

  • Quake (800×600以上のソフトウェアレンダリング推奨)
  • Duke Nukem 3D、 Blood (Buildエンジン系、VESA高解像度推奨)
  • Screamer
  • Tomb Raider
  • Doom (Core i7+SBEMUによるDOSネイティブ動作も体験価値あり)

まとめ

  • ソフトウェアレンダリング は、独特の シャープさ と グリット感 を持つ表現
  • 高性能PC+DOS実機 で、当時体験できなかった 高解像度・高fps を楽しめる
  • サウンドカード と 互換性 の問題があるため、環境構築には工夫が必要
  • 懐かしさ だけでなく、 現代的な新鮮さ も感じられる体験

Hackerたちの意見

これ、タイトルは「ピクセル化されたテクスチャが大好き」ってした方がいいよ。

「3Dカードはバイリニアフィルタリングでテクスチャをスムーズにする」 それ、やらなくてもいいんじゃない?

└

おそらく、ビデオカードで処理してその強化機能を無効にすれば、CPUでやるよりもかなりエネルギー効率が良くなると思うよ。そうすると、(a) ラップトップのバッテリーが長持ちするし、(b) 解像度を上げるために特に強力なCPUが必要なくなる可能性もある。ビデオハードウェアがその作業をやってくれるからね。プログラミングの観点からは、CPUにすべての作業を任せたい気持ちもわかるけど、絶対にすべてをコントロールしたいなら、特にゲームがシングルスレッドの場合は簡単だよね。

└

Valveは25周年のアップデートでHalf-Lifeにこれをオプションとして追加したんだけど、感謝してるよ。見た目がずっとクールになった。

└

本当のPSXゲーム体験をしたいなら、すべての頂点座標を次のピクセルに丸めて、ノンパースペクティブ補間を強制することもできるよ。

└

ゲームがニアレストや専用のピクセルアートシェーダーを使うのが好き。バイリニアは、特に全画面スケーリングに使われると、手抜きに見えちゃうんだよね!AppleのLanczosも少し気持ち悪いと思う。これのせいでiPadの表示スケーリングには耐えられない。

└

同意する。CPUとGPUのレンダリングを混同してる感じがする。見た目に直接影響を与えるわけじゃないし。記事は後でOSの比較やSteamのIon Furyについてもさらに混同してるね。

└

ピクセル化された2Dグラフィックスが今「8ビット」って呼ばれてるのと同じだね。

└

限られたオプションでGPUがゲームをレンダリングしたら、ゲームプレイはどうなるんだろうね。時々、高いFPSだと物理エンジンと変な感じで絡むことがあって、24fpsに制限されてた時にできた動きが60fpsではできなかったりすることもあったりするし。

私も著者と同じ意見だな。ただ、その当時のディスプレイデバイスは今とは違ったことも忘れちゃいけない。今見るシャープなピクセル化されたテクスチャは、その頃のCRTではちょっと違って見えたはず。彼(と私)が憧れるシャープで gritty な見た目は、当時はもう少しぼやけてたかもしれないね。

└

ちょっとぼやけてたけど、当時はそれほど重要じゃなかったよね。ソフトウェアレンダラーを使ってたら、320x200で動いてたかもしれないし、どんなモニターでもLCDディスプレイみたいに見えたと思う。技術的にはエッジが少しぼやけてたけど、まだ大きなピクセルはぼやけてなかった。640x480でも、ぼやけずに目立つブロック感があったしね。モニターは、コンソールが出力していたテレビよりもシャープに設計されていたんだ。ソフトウェアレンダリングで、ぼやけて見えるほどの解像度はスライドショーみたいになっちゃうよ。

└

テレビのCRTでプレイしていない限り、そうは思わないな。当時のPCモニターはかなりシャープだったから。

これはソフトウェアレンダリングじゃなくて、空間アンチエイリアスをオフにすることだよ。今の最新ゲームでもそれはできる。ソフトウェアレンダリングは、CPUがゲームをプレイ中に4x4の行列を掛け算するだけじゃなくて他にもやることがあるから、GPUのシェーダーコアにシフトしたんだ。著者が話している見た目や感じ、影やテクスチャのLUTも、テーブルをシェーダーに定数の読み取り専用ストレージバッファとして渡すことでGPUでもできるから、ソフトウェアレンダリング特有のものじゃないよ。現代のソフトウェアレンダラー(LLVMpipe/Lavapipe、OpenSWR、WARP)は、実際には独自のD3D/OpenGL/Vulkanデバイスで、シェーダーコンパイラーも含まれていることを言っておくべきだね。それに、現代の空間アンチエイリアスは、ピクセル内(あるいは隣接するピクセル)でマルチサンプリングして平均を取ることで機能していて、単一サンプルのピクセルをフィルタリングするよりも、品質が大幅に向上する。DLSSやXeSS、FSR、そして多くのゲームにあるTAA実装を含む時間的および機械学習AA技術も忘れちゃいけないよ。

Hacker Newsで議論の続きを見る