プロジェクト

全般

プロフィール

リファクタ #538

完了

日本語フォントを Zen Maru Gothic に統一して同梱フォント約25MBを削減する

リファクタ #538: 日本語フォントを Zen Maru Gothic に統一して同梱フォント約25MBを削減する

エージェント ちゃん さんが約2ヶ月前に追加. 約2ヶ月前に更新.

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

100%

予定工数:

説明

背景

ビルドレポート(2026-07-06 16:29、圧縮 91.1MB / 非圧縮 258.5MB)でフォント関連が非圧縮 33.7MB を占めることが判明。単一アセット最大は案内板(VisitorsInformationBoard)の MPLUSRounded1c-Medium SDF.asset = 静的4096×4096アトラス・5690文字で 16.5MB。ほかに SleepKit2 の HigureGothic が SDF の Dynamic 設定経由で生 TTF 6.3MB を同梱、LuraSwitch2 の NotoSans/Audiowide も同様に TTF 0.6MB を同梱。

案内板はプレイヤー名(任意の Unicode)を表示するため静的サブセット化は不可。動的アトラス化で任意文字対応と削減を両立する。yama-stream パッケージの UI が使う ZenMaruGothic-Regular.ttf(3.7MB)はどのみち同梱されるため、これを共通日本語フォントの軸にする(ユーザー確認済み 2026-07-06)。

対応内容

  • Assets に TMP フォントアセット「ZenMaruGothic-Regular SDF (Dynamic)」を新規作成(ソース = Packages/net.kwxxw.yama-stream の TTF、動的アトラス 1024、マルチアトラス有効)
  • 案内板の TMP 29箇所を新フォントに差し替え、アウトライン材質プリセット(MPLUSRounded1c-Medium SDF Material_outline)相当を新アトラス用に作成 → M+ SDF 16.5MB が同梱対象外に
  • SleepKit2 の TMP 91箇所(SDF / SDF Overlay 両系統。Overlay は専用材質を用意)を差し替え → HigureGothic TTF 6.3MB + SDF 2点 2MB が対象外に。SleepKit の旧 UI Text(非 TMP)が Higure を使っていないかも走査して確認
  • LuraSwitch2 の NotoSans-Light SDF / Audiowide-Regular SDF を Dynamic→Static 化(現在のグリフは固定 UI 文字のみ)してソース TTF 参照を解除 → TTF 0.6MB が対象外に
  • M+ / Higure のファイル自体はサードパーティ配布物のためリポジトリには残す(参照を外せば同梱されない)

完了条件

  • ビルドのフォント関連合計が 33.7MB → 10MB 以下(非圧縮)
  • 実機で: 案内板の参加者名表示(日本語名・英語名)、SleepKit UI、LuraSwitch の文字表示が正常
  • ZenMaru 収録外の文字(ハングル・絵文字等)は従来同様表示不可であることを許容(必要ならフォールバック追加を別途検討)

エージェント ちゃん さんが約2ヶ月前に更新 操作 #1

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

制作に着手しました。

  • ブランチ: feature/538
  • 対応方針: 案内板・SleepKit2 の TMP フォント参照を新規作成する ZenMaruGothic-Regular SDF (Dynamic) に差し替えて M+ / Higure の TTF・静的アトラスを同梱対象外にし、LuraSwitch2 の NotoSans-Light / Audiowide-Regular は使用文字を確認のうえ Dynamic→Static 化してソース TTF 参照を外す。

エージェント ちゃん さんが約2ヶ月前に更新 操作 #2

実装し、セルフレビューまで完了しました(feature/538,MRは未作成)。

対応内容

  • Assets/mcp-world/Font/ZenMaruGothic-Regular SDF.asset を新規作成(Dynamic・初期アトラス 1024・マルチアトラス有効、ソース = yama-stream の ZenMaruGothic-Regular.ttf)。アウトライン用(_outline)・SleepKit Overlay用(_overlay)の派生材質も作成。
  • 案内板(VisitorsInformationBoard.prefab): TMP 29箇所を MPLUSRounded1c-Medium SDF → ZenMaruGothic に差し替え。旧フォントを再適用する TMPFontAssetBulkChanger の参照先も合わせて更新。
  • SleepKit2: TMP 91箇所(通常 89 + Overlay 2)を HigureGothic-Light SDF / SDF Overlay → ZenMaruGothic に差し替え。旧 Higure 材質を固定参照していたワールドの VRCSceneDescriptor.DynamicMaterials も新材質に更新。旧 UI Text(非 TMP)で Higure を使う箇所はなし。
  • LuraSwitch2: NotoSans-Light SDF / Audiowide-Regular SDF の実使用文字(固定英数キャプションのみ)を確認し、英数・記号の安全セットをアトラスに焼き込んだ上で Dynamic(ソース TTF 参照あり)→ Static(参照なし)に変更。
  • M+ / Higure のフォントファイル自体はリポジトリに残しつつ(サードパーティ配布物)、参照を全て外したのでビルドには同梱されなくなります。

確認結果

  • プロジェクト全体(全プレハブ + シーン)をスキャンし、MPLUS / Higure / Higure Overlay への参照が TMP_Text 以外のコンポーネントも含めて 0 件であることを確認済み。
  • Unity Editor 上で案内板・SleepKit2 パネルの日本語表示を Scene view スクリーンショットで目視確認(文字化けなし)。
  • 新フォントアセット(埋め込みマテリアル+アトラス)+ 派生材質 2 点で合計 ≈ 2.1MB と、削減対象だった旧フォント関連データ(約25.4MB)を大幅に下回り、完了条件の「33.7MB→10MB以下」を満たす見込みです(実際のビルドレポートでの最終確認はユーザー側でお願いします)。
  • コミット: 1f0103d(feature/538)。

ユーザーに確認していただきたい点(実機・ビルド)

  1. 案内板: 参加者名(日本語・英語名)表示、特に ZenMaruGothic にない文字(ハングル・絵文字等)のプレイヤー名が入った場合の表示(仕様通り未対応で問題なしのはず)。
  2. SleepKit UI(時刻・アラーム・ミラー設定等)と LuraSwitch のラベル表示が実機で正常に見えるか。
  3. VRChat SDK Control Panel でのビルドレポートで、フォント関連合計が実際に 10MB 以下になっているかの数値確認。

MR は作成していません。内容をご確認いただき、問題なければ /mr で MR 作成に進みます。

エージェント ちゃん さんが約2ヶ月前に更新 操作 #3

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

対応が完了しました。

概要

案内板(VisitorsInformationBoard)・SleepKit2・LuraSwitch2で使われていた日本語フォント(M+/Higure)を、どのみち同梱されるyama-streamパッケージの Zen Maru Gothic に統一し、フォント関連の同梱サイズを削減しました。

変更点

  • Assets/mcp-world/Font/ZenMaruGothic-Regular SDF.asset を新規作成(Dynamic・初期アトラス 1024・マルチアトラス有効)。アウトライン用(_outline)・SleepKit Overlay用(_overlay)の派生材質も作成。
  • 案内板 prefab: TMP 29箇所を MPLUSRounded1c-Medium SDF → ZenMaruGothic に差し替え。TMPFontAssetBulkChanger の参照も更新。
  • SleepKit2 の4prefab: TMP 91箇所(通常 89 + Overlay 2)を HigureGothic-Light SDF/SDF Overlay → ZenMaruGothic に差し替え。ワールドの VRCSceneDescriptor.DynamicMaterials も新材質に更新。
  • LuraSwitch2 の NotoSans-Light SDF / Audiowide-Regular SDF: 実使用文字(固定英数キャプション)を確認し、安全セットをアトラスに焼き込んだ上で Dynamic→Staticに変更(ソースTTF参照を解除)。
  • M+ / Higure のフォントファイル自体はサードパーティ配布物としてリポジトリに残置(参照を外したのでビルドには同梱されない)。

確認

  • プロジェクト全体(全プレハブ+シーン、TMP_Text以外のコンポーネントも含め)をスキャンし、旧フォント・旧材質への参照が0件であることを確認。.meta対応とGUID/fileID参照の整合も確認済み。Unity Editor上で案内板・SleepKit2パネルの日本語表示を目視確認済み(文字化けなし)。
  • 要ユーザー確認: 実機での案内板参加者名表示・SleepKit UI・LuraSwitchラベルの表示、および VRChat SDK Control Panel でフォント関連合計が実際に10MB以下になっているかの数値確認。

関連 MR

  • !35 (feature/538 → main)

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