デバッグと検証

コンパイルエラーの確認手順、mmdx12.log の見方、スタンドアロン検証ツール pack_check.exe、ヘッドレステスト方法を解説します。

コンパイルエラーへの対処

HLSL コードの記述中にスペルミスや型不一致などの文法エラーが発生しても、MMDX12 が強制終了することはありません:

  1. 安全なフォールバック: エラーが発生したモデルは自動的に MMD 標準シェーディングへ切り替わり、描画が破綻することなく作業を継続できます。
  2. 通知バナー: ウィンドウ上部に赤色のエラー通知バナーが表示されます。
  3. アプリ内診断: 上部「셰이더(シェーダー)」タブを開くと該当パックが「컴파일 오류(コンパイルエラー)」と表示され、右側の詳細パネルに DXC コンパイラの詳細な診断ログが出力されます。
  4. ログファイルの確認: MMDX12.exe と同じフォルダに生成される mmdx12.log 内の [E] で始まる行を確認することで、エラーが発生したファイル名と行番号を特定できます:
    [E] surface.hlsl:48:12: error: no matching function for call to 'smoothstep'

スタンドアロン検証ツール: pack_check.exe

MMDX12.exe と同じフォルダに同梱されている pack_check.exe は、GUI アプリを起動することなくコマンドラインからパックの整合性を検査できる専用ツールです。

実行構文

pack_check.exe <パックフォルダまたはパック.zip> [--compile]

主な検査内容

  • マニフェスト構造: pack.json の必須キー(version, name)、ID 命名規則、パラメータ数(最大 16 個)、材質分類ルールの構文。
  • パッケージ制約: 解凍時容量 32MB 以下、総ファイル数 200 個以内、許可されていないファイル形式やシンボリックリンクの有無。
  • オフラインコンパイル (--compile): DXC を呼び出し、ラスタライズおよびレイトレーシング用シェーダーを実際にコンパイルして構文エラーを検証します。

終了コードと CI 活用

  • 0: 検証成功(問題なし)
  • 1: エラーまたは仕様違反を検出

GitHub Actions や自動ビルド環境において、プルリクエスト時の自動チェックツールとして活用できます:

# CI スクリプトの記述例
pack_check.exe ./my_pack --compile
if [ $? -ne 0 ]; then
  echo "シェーダーパックの検証に失敗しました"
  exit 1
fi

テンプレート作成とリアルタイムホットリロード

  1. アプリ内のシェーダーマネージャーで「새 팩 만들기(新規パック作成)」をクリックし、公式テンプレートから新規プロジェクトを作成します。
  2. MMDX12 はバックグラウンドでパックフォルダの変更を常時監視します。
  3. pack.json、*.hlsl、*.hlsli、プレビュー画像をエディタで保存すると、数ミリ秒で自動的にキャッシュが更新され再コンパイルが走ります。
  4. エディタ上で Ctrl + S を押すだけで、アプリを操作することなくビューポートに変更が即座に反映されます。

ヘッドレストテスト(自動画像キャプチャ)

UI 操作を行わず、指定したフレームの描画結果を画像ファイルとして直接出力して仕上がりをテストできます:

MMDX12.exe --character "ModelName" --song "SongName" --autoplay --shader-pack my_pack --frames 600 --capture out.png

このコマンドは 600 フレーム目まで自動実行した後に画面を out.png に書き出して終了するため、シェーダーの見た目を比較・確認する自動テストに最適です。