概要
本日もUDGP-ResultsとSPNFY2のプロジェクトで作業を行いました。UDGP-Resultsでは、レースページのYouTube動画埋め込み機能の最終調整と、関連ドキュメントの更新、そしてYouTubeの概要欄用チャプター情報の生成を行いました。SPNFY2では、リアルタイムのビニールレコードレンダリング機能の実装を続け、ユーザーからのフィードバックに基づいて、モアレの解消、リアルな溝表現、レーベル画像の表示など、詳細なシェーダー調整を繰り返しました。
作業内容
SlackFiles2GDrive
- Dropboxのフォルダリンクに対応するため、正規表現の更新とダウンロード関数の追加を行った
- フォルダ内のZIPファイルをダウンロードし、展開して個々のファイルをGoogleドライブにアップロードする処理を実装した
fflateを追加し、types.tsとindex.tsを更新してフォルダリンクを処理できるようにした- 複数のフォルダリンクが正常に処理され、合計10ファイルがアップロードされることを確認した
UDGP-Results
- レースページの勝者リンクが404になる問題を修正し、
/race1および/race2ページへ正しくリンクするようにした - 昨日の変更点についてCodexとCodeRabbitによるコードレビューを行い、指摘されたCritical/Highレベルの問題(キャッシュのスレッドセーフティ、WebSocket接続のクローズ、ボイスチャンネルIDガードなど)をすべて修正した
- レース詳細ページにYouTube動画を埋め込む機能を実装し、DBスキーマの変更、APIの拡張、フロントエンドコンポーネントの作成、管理UIの追加を行った
- YouTubeライブ動画からレース開始位置を自動検出するスクリプトを改良し、DBのレースデータと照合して正確なタイムスタンプを特定できるようにした
- 検出されたタイムスタンプを-3秒オフセットして、カウントダウンの「3-2-1-GO」が全て聞こえるように調整した
- YouTube動画埋め込みをページ最上部に移動し、管理ページからYouTube関連の設定UIを削除した(オフライン処理を推奨するため)
- ポストレースのYouTube動画処理に関する詳細なドキュメント「VIDEO_EMBED.md」と、管理者向けガイド「ADMIN_GUIDE.md」を更新した
- YouTubeの概要欄に貼り付けるための、レースごとのチャプター情報(レース名、参加パイロット、UDGP Resultsへのリンクを含む)を生成する機能を実装した
- プロダクションDBにYouTube動画URLとタイムスタンプ情報を適用し、本番サイトで動画埋め込みが正しく機能することを確認した
events.video_urlがnullになる問題が発生したが、手動で復旧し、原因としてAdmin UIからのstatus更新時に上書きされた可能性を特定した- Issue #10 の提案(YouTube Data API経由)とは異なる音声検出による自動化アプローチを採用した理由をGitHub Issueにコメントした
scripts/detect_race_starts.pyをエンドツーエンドのツールとして拡張し、APIからのレースデータ取得、検出結果のマッチング、オフセット適用、YouTubeチャプター出力、SQLファイル生成を可能にした- 全ての変更を
mainブランチにマージし、関連するドキュメント(AGENTS.md, README.md, web/README.md)を現在のコードベースに合わせて更新した
saqoo.sh
- Workersのカスタムドメインを
new.saqoo.shからsaqoo.shに更新し、ドキュメント内の参照箇所も全て修正した - ルート
/から/a/へのリダイレクトが既に実装されていることを確認し、/aから/a/へのリダイレクトを追加した - Cloudflareのダッシュボードで設定されていたルート
/から/aへのリダイレクトルールを削除し、Workerによる/から/a/への直接リダイレクトを有効にした - サイト共通のLayoutコンポーネントを使用したカスタム404ページを作成し、統一されたデザインで表示されることを確認した
SPNFY2
- リアルタイムでビニールレコードをレンダリングする技術について包括的なリサーチを行い、溝の表現、異方性反射、回折格子効果、パフォーマンス最適化に関する知見をまとめた
- keijiro/VinylGrooveShaderとAlan ZucconiのCD-ROMシェーダーの実際のGLSLコードを収集し、macroquadでの実装に必要な核心的な技術要素を抽出した
- macroquad 0.4.14でカスタムシェーダーが利用可能であることを確認し、1080x1080のウィンドウでビニールレコードをリアルタイムレンダリングする独立したアプリケーションを開発した
- プロシージャルな溝パターン、Ward異方性スペキュラー、フレネル反射、Zucconiの回折虹色効果、33⅓ RPMの回転、マウスによるインタラクティブなライティングを実装した
- 実際のビニールレコードの物理的仕様(溝の寸法、トラック間のギャップ、内外径など)をリサーチし、シェーダーに正確な寸法比率とトラック構造を反映させた
- 溝の粗さを調整するため、V字プロファイルの強化、ノーマルパータベーションの調整、オーディオモジュレーションの追加、谷部分の暗さの強調、スペキュラー強度の向上を行った
- モアレ(Moiré)の発生を解消するため、溝の周波数を下げ、回転速度をリアルな値に修正し、アンチエイリアシング処理を追加した
- トラックギャップの境界で溝のラインが不連続になる問題を修正するため、ディスク全体で単一の連続的な溝周波数を使用し、ギャップでは溝の深さとオーディオ変調強度のみを調整するようにアプローチを変更した
- 7インチディスプレイでレーベルが実寸大になるようにビニールディスクのスケールを調整し、それに伴うモアレの再発をGROOVE_FREQのさらなる調整で解消した
- Moiréの根本原因が高周波成分にあることを特定し、オーディオモジュレーションとマイクロストラクチャの周波数乗数を大幅に削減した
jacket.jpgをレーベル画像として表示するため、macroquadがJPEGをサポートしない問題に対応し、PNGに変換してテクスチャとしてバインドした- 最終的に、1DテクスチャにV-grooveの断面を焼き込み、miniquad APIでmipmap付きテクスチャとして生成することで、高周波の溝でもモアレなしでリアルな表現を実現した
Generated by CCDiary