操作
機能 #358
完了
エージェント ちゃん さんが14日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/358-note-instanced-atlas - 対応方針: #357 の wgpu/DX12 基盤の上に、テクスチャアトラス+インスタンス描画によるノートフィールド描画サブシステムを Claude 直で新設する。
スコープ確定(ユーザー確認済み)¶
- 描画範囲: ノートフィールドのみ。レーン+流れるノート(スキンのノート画像でテクスチャ/インスタンス描画/アトラス)に集中し、背景・ゲージ・数値・BGA 枠などスキン全体の IR レンダラは #359 に委ねる。
-
ノート位置:
ferrhythm-timingのTimingMapによるサンプルクロック導出を使用(beat_to_sampleで曲フレーム位置→プレイヘッドからの相対で画面 y を導出)。 -
アトラス素材:
samples/skin/WMII_FHDの実ノート画像。スキン IR(#351)からノート系 SRC/レーン配置(DST_NOTE)を読み、実 PNG をデコードしてアトラス化。 -
ホスト検証: 実サンプル譜面(
samples/bms/...)をferrhythm-chartで解析→TimingMap→実ノートを流す example を追加。
実装構成(ferrhythm-render)¶
-
atlas(プラットフォーム非依存・TDD): RGBA スプライト群を 1 枚のアトラスへ shelf パッキングし、正規化 UV 矩形を返す。 -
notefield(非依存・TDD): レーン幾何+ノート曲フレーム+プレイヘッド+ハイスピードから、可視ノートのインスタンス列を導出(サンプルクロック導出の中核)。LN は head/tail/body を生成。 -
skin_layout(非依存・skin IR 依存・TDD):SkinIR からノートフィールド幾何(レーン x/幅・判定ライン y)とノートスプライト矩形を抽出(note のみ。全要素は #359)。 -
note_renderer(wgpu・コンテナで型検査/ホストで実行): アトラステクスチャ+インスタンス化矩形を 1 ドローで描画する WGSL パイプライン。 -
examples/note_flow.rs(ホスト検証): WMII_FHD スキン+実 BMS を読み、アトラス/レーン構築・プレイヘッドを進めてノート流れを present。
コンテナ検証=atlas/notefield/skin_layout のユニットテスト+wgpu 型検査+cargo check --target x86_64-pc-windows-gnu。実描画(DX12 実体・present・実画像表示)は Windows ホスト検証。
エージェント ちゃん さんが14日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
#357 の wgpu/DX12 描画基盤の上に、LR2 スキン(WMII_FHD)の実ノート画像をテクスチャアトラスへパックし、1 ドローコールのインスタンス描画で流れるノートを描くノートフィールド描画サブシステムを新設。ノート位置は ferrhythm-timing の TimingMap によるサンプルクロック導出を使用。背景/ゲージ等スキン全体の IR レンダラは #359 に委ねた。
変更点¶
-
atlas(非依存・TDD): RGBA スプライト群を 1 枚のアトラスへ shelf パッキングし正規化 UV を返す。 -
notefield(非依存・TDD): サンプルフレーム+プレイヘッド+スクロール速度から画面 y を導出(スクロールの中核)。tap/mine/LN(head/body/tail) 生成と画面外カリング。 -
skin_layout(非依存・TDD): スキン IR からノートフィールド(レーン x/幅・判定ライン y・ロール別スプライト矩形)を抽出。(object_id, role)で SRC を引き可視 DST をレーン化。 -
note_renderer(Windows・コンテナで型検査/ホストで実行): インスタンス化テクスチャ矩形パイプライン+アトラスアップロード。 -
shaders/notes.wgsl/examples/note_flow.rs(ホスト検証): WMII_FHD+実 BMS を読みノート流れを present。 - workspace に
image、render に dev-deps(image/ferrhythm-chart/ferrhythm-timing)追加。 - 変更ファイル:
crates/ferrhythm-render/src/{atlas,notefield,skin_layout,note_renderer,lib}.rs・shaders/notes.wgsl・examples/note_flow.rs・tests/skin_note_field.rs・Cargo.tomlほか計 11 件。
テスト¶
-
cargo test: 成功(ワークスペース全緑、render lib 49 件。実スキン統合テストは env 駆動で 16レーン抽出→実PNGアトラス化を検証)。 -
cargo clippy --all-targets -- -D warnings/cargo fmt --all -- --check: 成功(Linux/x86_64-pc-windows-gnu 両ターゲット)。 - Windows ホストでの実描画確認済み(ノート流れ表示)。
関連 MR¶
- !22 (feature/358-note-instanced-atlas → develop)
操作