# MSX1風フィルタ研究概要
近年、MSX1(TMS9918搭載)の独特な16色パレットや水平方向8ドット2色の制限、ドット絵の階調などをエミュレートする**JavaScript/WebGLフィルタ**はほとんど見当たりません。見つかった主な手法は、ドット単位で色を量子化・ディザリングする画像変換ツールやShaderToyなどのシェーダ実験で、MSX1専用ライブラリはごく僅かです。例えば開発者Harayoki氏が公開した**「MSX1エフェクト(MMSXX_MSX1PaletteQuantizer)」**は、AfterEffects/CLI向けにMSX1表示を再現するC++実装(MITライセンス)で、15色パレットを用い8x1ドット内2色制限を満たす手法を採用しています【8†L37-L44】【31†L41-L42】。一方、JavaScript実装としてはPhaserの組み込みパレット(MSX風16色、MIT)【38†L348-L357】や、Construct 3用のGLSLフィルタ(PX_MSX)【78†L398-L402】が存在します。また、汎用のカラー量子化ライブラリ(例:RgbQuant.js【84†L262-L270】)やWebGL効果ライブラリ(glfx.js【92†L278-L280】)をMSXパレット指定で使う方法も考えられます。以下に主要な候補をまとめ、特性・ライセンス・実装例を分析します。
## 候補一覧
- **Harayoki MSX1PaletteQuantizer(C++ AEプラグイン&CLI)** – MITライセンス【31†L24-L26】。AfterEffects向けエフェクトとWindowsコマンドライン版が同梱され、MSX1の画像特性(15色パレット、2色/8ドット、階調型ディザなど)を再現します。内部でまず92色(きれいなディザ用)に量子化→横8ドットごとに2色選択する処理を行う【31†L41-L42】。設定次第で自動ディザやコントラスト調整も可能です。
【68†embed_image】*Harayoki氏作成MSX1変換フィルタの出力例【8†L37-L44】(オリジナル:PC-88「グラムキャッツ」タイトル画面)*
*評価:* パレット精度・ディザ再現性が高く、MSX1制約も踏襲する一方、C++版でWeb実装はないため導入にはWindows環境が必要。コマンド例などはNote記事を参照【28†】。
- **Phaser.Create.Palettes.MSX(JavaScript)** – Phaserゲームエンジン標準搭載の16色パレット定義(MIT)【38†L348-L357】。MSX風に調整された色配列を返します。
```js
const MSX_PALETTE = {
0: '#000', 1: '#191028', 2: '#46af45', 3: '#a1d685',
4: '#453e78', 5: '#7664fe', 6: '#833129', 7: '#9ec2e8',
8: '#dc534b', 9: '#e18d79', A: '#d6b97b', B: '#e9d8a1',
C: '#216c4b', D: '#d365c8', E: '#afaab9', F: '#fff'
};
```
*(Phaser公式ソースより【38†L348-L356】)*
*評価:* MSX1パレットに近い16色を提供【38†L348-L357】しますが、単なるカラーデータなのでディザやスキャンラインなどは含まず、エンジン内での適用(パレットマッピング等)は別途実装が必要です。
- **Construct 3 Low Computer: PX_MSXフィルタ(GLSL)** – Construct 3向け商用アセット(PX_MSX_6bit_RGB)で、WebGLポストプロセスエフェクトを提供。MSX色パレットで画面を量子化し、8ビット風演出を行います【78†L398-L402】。
*評価:* 実行は容易(Constructにプラグインとして組込むだけ)ですが、商用でソース非公開。MSXパレット適用のみでディザ処理や8x1制約の表現は不明。ライセンスもクローズドで高価。
- **RgbQuant.js(JavaScript)** – 任意の色数に量子化できるJSライブラリ(MIT)【84†L262-L270】。色数やパレットを指定可能で、ディザリング(誤差拡散)機能もサポート。MSXの15/16色パレットを`initColors`や`palette`オプションで指定すれば、MSX風変換に利用できます。
*評価:* 汎用度高くMSXパレット指定可能ですが、レトロVDPの行単位制限などは自動考慮しないため、必要なら自作で制約処理を追加する必要があります。
- **glfx.js(JavaScript/WebGL)** – WebGL用の画像エフェクトライブラリ(MIT)【92†L278-L280】。ブラーや色調調整フィルタを備え、独自シェーダーの作成も可能。直接「MSXフィルタ」はないものの、Hue/SaturationやPosterize系の組合せで雰囲気を近づける手段として利用できます。
*評価:* 既成のMSX専用機能はなし。任意のGLSLフィルタを自作可能で、msxパレットマップやディザシェーダも実装できますが、一から開発が必要です。
- **Harayoki MSX1 Effect(C++/AEプラグイン)** – 既述のMSX1PaletteQuantizerと同一エンジンのAfterEffects/プレミア向けプラグイン版(MIT)【31†L24-L26】。GPU非対応ながらリアルタイムプレビューも可能。
*評価:* 大規模映像作品向けで、画像1枚単位の連続変換には向かない。MSX制約を忠実に再現し、色補正オプションも豊富です【31†L41-L42】。
- **(参考)Shadertoy上のMSX風シェーダ** – ShaderToyなどに投稿された「MSXっぽいピクセル描画」のサンプルコードがあります(ユーザーによる自作例)。公式ドキュメントはありませんが、16色やディザを用いたリアルタイム効果が試せます。
*評価:* インタラクティブなデモ用途には面白いですが、コードは公開場所依存でフォークが難しく、製品への流用も不向きです。
- **(参考)Canvas手描きフィルタ例** – HTML5 Canvasでピクセル単位に色情報を操作し、MSXパレット制約に合わせて手動処理するアプローチ(JavaScriptでImageDataを操作)。公開ライブラリは少ないものの、自作も可能です。
*評価:* フレームワーク不要で自由度高い反面、自前でMSXルール実装が必要で開発コスト高。
## 比較表(主要8件)
| 名称/ソース | パレット精度 | ディザリング | スキャンライン | 8ドット2色制限 | スプライト再現 | 使い勝手 | ライセンス |
|:-------------------------------------|:------------|:---------------------|:--------------|:---------------|:--------------|:---------------|:-------------|
| **MMSXX_MSX1PaletteQuantizer** (Harayoki,C++)【31†L24-L26】【31†L41-L42】 | ◎ 実機15色に準拠 | ◎ (HSBベース誤差拡散) | – | ◎ (実装済) | – | 高機能だがC++/Win必須 | MIT【31†L24-L26】 |
| **Harayoki MSX1 Effect (AE用プラグイン)**【31†L24-L26】【31†L41-L42】 | 同上 | 同上 | – | ◎ (実装済) | – | AE/Premiere上で可 | MIT【31†L24-L26】 |
| **Phaser MSXパレット** (JS)【38†L348-L357】 | ◯ Phaser版16色 | × なし | – | × なし | – | Phaser導入前提 | MIT【38†L328-L332】 |
| **Construct3 PX_MSXフィルタ**【78†L398-L402】 | ◯ MSX風色16色 | × (不明) | – | × なし | – | Constructで即使用可 | 独自商用 |
| **RgbQuant.js (JS)**【84†L262-L270】 | △(任意パレット指定可) | △(誤差拡散可) | – | × なし | – | 汎用量子化ライブラリ | MIT【84†L262-L270】 |
| **glfx.js (JS/WebGL)**【92†L278-L280】 | △(HSL調整等のみ) | × なし | – | × なし | – | GLエフェクト多数 | MIT【92†L278-L280】 |
| **Shadertoy MSXデモ例** | △(コード次第) | △(例あり) | – | △(任意実装可) | – | 研究・デモ向き | ?(作者依存) |
| **手作りCanvasフィルタ例** | △(実装次第) | △(実装次第) | – | △(実装次第) | – | 自由だが作業負荷大 | – |
- ※パレット精度:実機色再現度(◎=ほぼ実機準拠、◯=近似、△=実装次第)。
- ※スプライト再現:いずれもスプライト制約は未再現(全候補×)。
本調査では、純粋なJavaScript/Canvas/WebGL実装のMSX1専用フィルタはほぼ見当たりませんでした。主にHarayoki氏のC++ベースツールが最も再現性が高く、PhaserやConstructの機能を組み合わせる方法が続く形です。用途や開発環境に応じて、商用ツールや既存ライブラリを活用しつつ、足りない部分を自作補完するのが実践的と考えられます。
**参考資料:** Harayoki氏のMSX1フィルタ解説記事【8†L37-L44】【31†L24-L26】【31†L41-L42】、Phaser公式ドキュメント【38†L348-L357】、Constructアセット説明【78†L398-L402】、RgbQuant.js GitHub【84†L262-L270】など。