SFC開発SDK『OpenSNES』v0.37.0公開!DSP-1による本格的な3D透視投影に対応

SFC開発SDK『OpenSNES』v0.37.0公開!DSP-1による本格的な3D透視投影に対応

SFC/SNES向けのオープンソース開発SDK『OpenSNES』の最新版となるv0.37.0が、2026年9月3日に公開されました。今回のアップデートは「DSP-1 v2」と位置付けられており、DSP-1を利用した本格的な3D透視投影パイプラインが実装されています。

●v0.37.0 Release
https://github.com/k0b3n4irb/opensnes/releases/tag/v0.37.0

DSP-1といえば、『パイロットウイングス』や『スーパーマリオカート』などでも採用されたSFCカートリッジ用の補助演算チップです。今回のアップデートでは、この実チップが持つ演算機能を利用して、3D空間上の座標から画面上の位置を求める一連の処理を、OpenSNESから扱いやすくなっています。

DSP-1で世界座標から画面座標への透視投影が可能に

OpenSNESは、SFC向け開発環境として知られるPVSnesLibを土台に、C11対応コンパイラや各種ライブラリ、開発ツールなどを組み合わせたオープンソースSDKです。SFC向けのゲームやデモをC言語中心で制作できるようにするもので、今回公開されたv0.37.0ではDSP-1関連機能が大幅に強化されました。

追加された代表的なAPIが「dsp1Parameter」と「dsp1Project」です。dsp1Parameterで投影面やカメラに相当する条件を設定し、dsp1Projectに3D空間上のX/Y/Z座標を渡すことで、画面上の水平位置H、垂直位置Vに加えて、奥行きに応じたスケール値Mを取得できます。

つまり、単純に座標を回転させるだけではなく、遠くにあるものは小さく、近くにあるものは大きく見える「透視投影」に必要な計算をDSP-1側で処理できるというわけです。Releaseではこれを「true hardware perspective」と表現しており、透視除算そのものをDSP-1のベースとなっているNEC µPD77C25上で実行しています。

3Dデモ「dsp1_cube」も透視投影に対応

今回の機能を確認するためのサンプルとして用意されているのが「dsp1_cube」です。画面上に立方体の8つの頂点を表示し、それらを3D空間内で回転させるデモで、v0.37.0では従来の平行投影からDSP-1を使った透視投影へとアップグレードされています。

このサンプルでは、65816 CPUから回転行列と8つの頂点座標をDSP-1へ渡し、「dsp1Objective」で座標を変換。その後「dsp1Project」で透視投影を行い、返されたH/V座標を使ってCPU側が8つのスプライトを配置しています。実際のラスタライズやポリゴン描画までDSP-1が行っているわけではなく、あくまでも3D座標変換と投影計算を補助演算チップに任せる仕組みです。リポジトリには、このdsp1_cubeのスクリーンショットも掲載されています。

このほか、v0.37.0では「dsp1Distance」と「dsp1Range」も追加されています。dsp1Distanceは3Dベクトルの長さをDSP-1上で計算する機能で、平方根計算までハードウェア側で処理。dsp1Rangeは指定した座標が一定の球形範囲内に入っているかを判定できるもので、接近判定やLODの切り替え、追尾対象の検出といったゲームロジックへの利用が想定されています。

『スーパーマリオカート』などを支えたチップを現代のSFC開発でも活用

DSP-1は、NECのµPD77C25をベースにしたSFCカートリッジ用の補助演算チップです。行列やベクトル、三角関数、座標変換などの演算機能を備えており、『パイロットウイングス』や『スーパーマリオカート』の疑似3D表現を支えたチップとしても知られています。

SFC本体のCPUだけでこうした計算をリアルタイムに行うには大きな負荷が掛かりますが、DSP-1搭載カートリッジでは専用チップ側に演算を任せることができます。OpenSNES v0.37.0によって、その仕組みを現在のSFCホームブリュー開発から比較的扱いやすいC APIとして利用できるようになった点は、今回のアップデートで特に興味深い部分といえそうです。

ただし、今回追加されたのはSFC用ゲームを自動的に3D化するような機能ではありません。OpenSNESを利用してゲームやデモを制作する開発者向けの機能であり、DSP-1に演算させた結果をどのようにゲーム画面へ反映させるかについては、開発側で実装する必要があります。

DSP-1のファームウェアについては注意が必要

DSP-1を低レベルでエミュレートする環境では、DSP-1のファームウェアも必要になります。OpenSNESに付属するエミュレーター「luna」の場合はDSP-1BのROMデータを別途用意する必要があり、このファームウェアは著作権の関係からSDKには同梱されていません。

一方、Snes9xのようにDSP-1を高レベルでエミュレートする環境では、ファームウェアなしでも動作すると説明されています。また、チップが利用可能かを確認する「dsp1Present」も用意されており、DSP-1が存在しない環境で処理が停止することを避けられる仕組みも追加されています。

OpenSNES v0.37.0は、Windows x86_64、Linux x86_64/arm64、macOS arm64向けのパッケージがGitHubで公開されています。DSP-1の仕組みやAPIについて解説した新しいチュートリアルも追加されているので、SFCの特殊チップを利用したホームブリュー開発に興味がある人はチェックしてみてはいかがでしょうか。

ABOUT US
アバター画像
retrogamer