2026年4月19日日曜日

MSX1風フィルタ研究概要

 # 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】など。