アットウィキロゴ

PDI (Playdate Image)

Playdateにおける PDI とは、Playdate Image の略称であり、Playdateの実機およびシミュレータで高速に描画するために最適化されたコンパイル済みの画像ファイル形式です。
開発者が用意したソース素材(PNGなど)は、ビルド時にPlaydateコンパイラ(pdc)によってこの独自形式に変換されます。


概要

1. PDIの役割と特徴
Playdateの画面は1ビット(白黒2色)のメモリLCDであるため、PDIはそれに特化した設計になっています。
最適化
実機のCPU負荷を最小限に抑えつつ、VRAMへ高速に転送できるバイナリ構造を持っています。
1ビットモノクロ
黒と白の2色のみを保持します。ソースがカラーやグレースケールの場合は、ビルド時に自動的にディザリング(網点処理)が行われます。
透過(Transparency)
アルファチャンネル(透明度)をサポートしており、1ビット画像でありながら「透明」か「不透明」かを定義できます。
非可逆・バイナリ形式
PDIは一般的な画像エディタ(Photoshopなど)で直接開くことはできません。編集が必要な場合は、元のPNGファイルを修正して再ビルドする必要があります。

2. アセット・パイプライン
画像がゲームに組み込まれるまでの流れは以下の通りです。
  1. ソース作成: .png や .gif 形式で画像を作成します
  2. コンパイル: pdc(Playdate Compiler)を実行します
  3. 変換: pdc がソース画像を .pdi へ変換し、.pdx(ゲーム本体のフォルダ)内に格納します
  4. 実行: プログラムからパスを指定してロードします

3. 実装での扱い (Lua / C)
コードから読み込む際、拡張子の .pdi を意識する必要はありません。SDKが自動的に適切なファイルを探索します。
Luaでの例
local gfx = playdate.graphics
-- 拡張子を除いたパスを指定。ビルド後は自動的に images/hero.pdi が読み込まれる
local playerImage = gfx.image.new("images/hero")
playerImage:draw(100, 100)
C APIでの例
// C言語でも同様に、ビルド後の最適化されたリソースをロードする
LCDBitmap* bitmap = playdate->graphics->loadBitmap("images/hero", &error);

4. 関連フォーマットとの違い
PDIは「単一の画像」を指しますが、Playdateには他にも画像関連の拡張子が存在します。
拡張子 名称 用途
.pdi Playdate Image 単一の静止画アセット
.pdt Playdate Imagetable アニメーションやタイルセット用の、複数のコマが連結された画像
.pdv Playdate Video Playdate独自の動画フォーマット

開発時のヒント
自動ディザリング
コンパイラに任せるのではなく、あらかじめグラフィックソフト側で1ビット(インデックスカラー)化しておくと、意図しないボケやノイズを防げます。
リバースエンジニアリング
.pdi から .png に戻すためのコミュニティ製ツール(pdi2png など)も存在しますが、基本的にはソースのPNGを紛失しないように管理することが重要です。

関連ページ

最終更新:2026年04月28日 23:08