プロジェクト

全般

プロフィール

機能 #359

完了

機能 #344: [Phase 4] レンダリングと UI/スキン描画

スキン IR → 描画レンダラ

機能 #359: スキン IR → 描画レンダラ

エージェント ちゃん さんが15日前に追加. 14日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/21
期日:
進捗率:

100%

予定工数:

説明

目的

ferrhythm-skin の内部スキン IR を wgpu で描画するレンダラ。BMS の各画面はこれがカバーする。

スコープ

  • スキン IR の要素(画像/テキスト/数値/ゲージ等)を wgpu ドローコマンドへ写像
  • IR→描画の写像ロジックは可能な限りコンテナでテスト

検証

写像ロジックはコンテナ、実描画は Windows ホスト

担当

Claude 直(UI/スキン描画)

いづ さん さんが14日前に更新 操作 #1

私がBeatorajaで使用しているスキンを表示できればいい

samples/skin/

エージェント ちゃん さんが14日前に更新 操作 #2

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装に着手しました。

  • ブランチ: feature/359-skin-ir-renderer
  • 対応方針: LR2 スキン IR をドローコマンド列へ写像する描画エンジン+データパスを Claude 直で実装(画像/アニメ/数値/ゲージ、tint/blend/回転対応の GPU スプライト描画)。写像ロジックはコンテナで TDD、実描画は Windows ホスト検証。

エージェント ちゃん さんが14日前に更新 操作 #3

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

対応が完了しました。

概要

LR2 スキン IR を順序付きスプライト・ドローコマンド列へ写像するプラットフォーム非依存エンジンと、blend モード対応のインスタンス GPU スプライト描画パイプライン(Windows)を実装。ノーツ系は #358 担当のため対象外で、画面クローム(背景/パネル/ゲージ/数値)をカバーする。

変更点

  • skin_render: build_draw_list(skin, state, now_ms) で条件評価・アニメフレーム選択(div/cycle/timer)・キーフレーム補間(LR2 easing)・alpha/tint/blend/回転を解決。Image/Button/JudgeLine/ImageSetNumberBarGraphSlider/GrooveGauge(後者はベストエフォート)に対応。SkinState トレイト+MapSkinState
  • skin_atlas: スキン画像のアトラス化、画像内 src 矩形→アトラス UV 解決(境界クランプ)、blend 連続区間で GpuSpriteInstance をバッチ分割(背→前順保持)。
  • sprite_renderershaders/sprite.wgsl: blend モード別パイプライン、インスタンス毎の tint+回転。NoteRenderer を踏襲し Windows ホストで動作。
  • 変更ファイル: crates/ferrhythm-render/src/{skin_render,skin_atlas,sprite_renderer}.rssrc/shaders/sprite.wgslsrc/lib.rstests/skin_draw_list.rs ほか計 6 件。

テスト

  • cargo test : 成功(ferrhythm-render 79 unit + 統合、全クレートグリーン)。cargo clippy --all-targets / cargo fmt --all -- --check クリーン。
  • env-gated 統合テストを実 WMII_FHD play スキンで通過(951 draws → 57 batch / 870 instance)。

関連 MR

  • !23 (feature/359-skin-ir-renderer → develop)

残課題 / 補足

  • GPU 実描画(回転・加算/乗算 blend の見た目)と Slider/GrooveGauge のベストエフォート挙動は Windows ホストで要確認(#360 含めフェーズ最後にまとめて実機確認予定)。
  • beatoraja Lua スキンは別レイヤー(パーサ)の別チケットに切り出し。フルスキンでアトラスが 6404×6330 と肥大→アトラス分割は #360 でフォローアップ候補。

他の形式にエクスポート: PDF Atom