実装Read this article in English

画像に焼き込まれた文字をどう翻訳するか(そして焼き込まない設計)

タイトルロゴ。扉の上に掛かっている店の看板。矢印とラベルの入ったチュートリアルの図。「PRESS START」と書かれたスプラッシュ画面のテクスチャ。メニューの隅に置いた「NEW」のバナー。これらはどれも文字列テーブルに入っていません。だから文字数にも数えられず、翻訳者に渡すファイルにも現れません。

そして多くの場合、リリース後にプレイヤーのスクリーンショットで発見されます。画像に焼き込まれた文字は、ローカライズで最も確実に忘れられる部分であり、1文字あたりのコストが最も高い部分でもあります。修正が翻訳作業ではなく作画作業になり、しかもその作画は言語の数だけ、絵を変えるたびに繰り返されるからです。

解決策は気合ではありません。一覧を作ること、アセットごとに方針を決めること、二つある方式のどちらかを選ぶこと、そして同じことが二度と増えないように設計を変えることです。

スクリーンショットで指摘されるまで見えない理由

ローカライズ関連のツールはすべて文字列を対象にしています。文字数集計、未翻訳の検出、疑似ローカライズ、ビルド間の差分。どれもテキストファイルを読むものです。画像はそのすべてにとって中身の見えない塊で、ピクセルで「SHOP」と描かれたPNGを警告してくれるツールは、あなたのパイプラインにはありません。

人間のレビューもすり抜けます。理由はもう少し微妙です。翻訳ビルドを確認する人は文字を読んでおり、絵は「背景」として無意識に分類されます。そのレビュアーが元の言語の話者であれば、元の言語で書かれた看板はそもそも未翻訳には見えません。ただの絵に見えます。

潜んでいる場所も、思いつきやすいものより広く分布しています。ロゴやUI画像のほかに、スプライトやUIのアトラス、エフェクトのテクスチャ、3Dモデルに貼られたテクスチャ(看板、ポスター、本の表紙)、事前レンダリングしたカットシーン動画、スプラッシュとロード画面、操作説明の図、地名の入った地図、実績アイコン、ゲーム内の告知バナー、そしてシェーダーが実行時に合成するものすべてです。

まず棚卸しをする

一覧がなければ、範囲も費用も決められません。そしてこの一覧を自動で作ってくれるツールはありません。ただし探索範囲は絞れます。素材のソースフォルダを走査し、logo・title・sign・banner・tutorial のように文字が入っていそうなファイル名で絞り込み、そのうえで一度、誰かがすべての画面をスクリーンショットしながら通しでプレイし、文章ではなく絵を読むという作業をします。

見つけたアセットごとに同じ項目を記録します。費用を最も左右するのは「レイヤー分けされた元データが今も残っているか」です。統合済みの書き出しだけが残っていて元のプロジェクトファイルが失われている場合、作画をやり直すことになり、テキストレイヤーを差し替えるのとはまったく別の規模の作業になります。

棚卸しは一度やったら、その一覧を生かし続けてください。文字を含む新しいアセットは、スクリーンショットで見つかった日ではなく、作った日に1行追加します。この習慣があるかどうかが、一度きりの調査で終わるか、プロジェクトとともに膨らみ続ける発掘作業になるかの分かれ目で、作った人の手間は10秒程度です。

  • アセットのパスと、ゲーム内のどこに出るか
  • そこに見えている文字の内容
  • プレイするために読む必要があるのか、装飾なのか
  • レイヤー付きの元データが残っているか、使用フォントは何か
  • 方針: 翻訳する / 文字をなくす方向に作り直す / そのまま残す

アセットごとに、翻訳・作り直し・現状維持を決める

文字が入っているものすべてを翻訳する必要はありません。全部か無かで考えることが、この作業を着手できない大きさにしてしまう原因です。一つずつ、三つのいずれかに振り分けます。

翻訳するのは、プレイするために読む必要があるものです。チュートリアルや操作説明の図、地名入りの地図、単語が入ったUI画像、指示やシステム名を伝えているもの。元の言語が読めないプレイヤーが詰まったり誤解したりするなら、それは装飾ではありません。

作り直すのは、そのとき文字が手軽だったというだけの理由で文字が入っているものです。「SHOP」と書かれたボタン画像はアイコンにできますし、文字入りの看板は記号にできますし、図の注釈は番号と形で代替できます。文字を一度なくすほうが、以後すべての言語で永遠に訳し続けるより確実に安く、たいていは見た目もよくなります。

そのまま残すのは、世界の一部としての文字です。架空の街のネオンサイン、壁の落書き、背景に置いた新聞、プレイヤーにとって異国であることを感じさせたい店構え。これらは美術であり、翻訳すると雰囲気を壊すことすらあります。残すのは十分に正しい判断ですが、「誰も気づかなかった漏れ」ではなく「一覧に記録された判断」である必要があります。

真ん中の分類を見分ける簡単な方法があります。その文字をただの図形に置き換えても画面の意味が通じるなら、それは装飾なので設計で消せます。

方式は二つ: 言語別アセットか、絵の上に文字を描くか

一つ目は、言語ごとにアセットの差分を用意し、フォルダ名やファイル名の規約で読み込み時に切り替える方式です。組版を完全に制御できるので、文字そのものがデザインであるタイトルロゴにはこちらが正解です。ただし代償は現実的です。アセット数とメモリが言語数の分だけ増え、絵を修正するたびに言語数ぶんやり直しになり、差分が欠けたときのフォールバックを決めておく必要があり、有効な言語だけを読み込む仕組みがなければ配布サイズも膨らみます。

二つ目は、文字の入っていない絵を用意し、その上に通常のテキスト描画で文字列を重ねる方式です。アセットは全言語で1つで済みます。文字は既存のパイプラインを通るので、集計され、チェックされ、レビューされ、他の文字列と同じように修正できます。あとから文言を変えるコストもゼロです。代わりに、絵の側に文字を置ける余白が必要で、手描きのような凝った組版はできず、言語によって文字が長くなる分の余裕を確保しておく必要があります。

既定は二つ目にして、一つ目は「文字が本当に絵そのものである」ごく少数に限定するのが実務的です。多くのプロジェクトではタイトルロゴとその周辺だけです。看板類には良い折衷案があります。伸縮できる9スライスの板を絵として用意し、その上に通常のテキストラベルを載せる方式で、1つのアセットで任意の幅・任意の言語の看板を作れます。

// 言語別アセット(規約で解決)
art/ui/title_logo.ja.png
art/ui/title_logo.en.png
art/ui/title_logo.de.png

// 絵の上に文字を描く(アセット1つ+キー1つ)
art/ui/sign_plate.png  +  key: shop.signLabel

二度と焼き込まないための作り方

焼き込み文字が高くつくかどうかは、ローカライズしようとした瞬間ではなく、絵を作った瞬間にほぼ決まっています。制作段階のいくつかの決め事で、将来のコストの大半は消えます。

  • 文字は必ず独立したレイヤーに置き、レイヤー付きの元データを書き出し済みアセットと一緒にバージョン管理に入れる
  • 文字をラスタライズして統合しない。使用したフォントファイルを元データと一緒に保存し、サイズ・字間・効果もメモしておく
  • 横方向に余白を残す。訳文のラベルは元の言語より幅を必要とすることが多い
  • ローカライズする可能性がある文字を、曲面・回転・パースのかかった面に置かない。作り直しが最も高くつく形状
  • アニメーションのコマや動画の中に文字を入れない。動画のローカライズは言語ごとの再レンダリングになる
  • 文字を含むアセットの命名規約を統一し、棚卸しを通しプレイではなく検索で再生成できるようにする

費用の見積もりと、出荷前の確認

焼き込み文字のコストは翻訳費ではありません。作画時間 × 言語数であり、しかも元の絵を変えるたびに同じ計算が繰り返されます。おおよその見積もりは「翻訳すると決めたアセット数 × 言語数 × 1枚あたりの作業時間」で、さらに将来その絵を改訂するたびに同じ係数がもう一度かかります。この繰り返し部分こそが、焼き込み文字の多いプロジェクトを一度きりではなく何年も続く負担にします。着手前に一覧を思い切って削るべき理由もここにあります。

動画は別枠で警告しておく価値があります。突出して条件が悪いからです。フレームに文字を焼き込んだ事前レンダリング映像は言語ごとに再レンダリングが必要で、そのたびに元のプロジェクトファイル、フォント、そしてその編集環境を操作できる人が揃っている必要があります。しかもそれは何年も先かもしれません。将来ローカライズする可能性のある映像なら、文字は字幕トラックか実行時のオーバーレイとして持たせるほうが、組版の自由度を失ってでも割に合います。

差分を作り終えたあとの確認は、言語ごと、そしてほぼ目視です。

  • 翻訳対象にしたアセットに全言語の差分があり、欠けている場合の挙動が定義され、目に見えること(元言語の絵に静かに戻る実装は、半分だけローカライズされた状態で出荷される原因)
  • 差分の寸法・解像度・透明部分が元と一致していること。サイズ違いで書き出された差分は周囲のレイアウトをずらす
  • 絵の上に描いた文字が、元の言語だけでなく最も長い言語でも板に収まること
  • 重ねる文字に使うフォントが、絵が想定したサイズで対象言語の字形をすべて持っていること
  • 動画と事前レンダリングのカットシーンを個別に確認したこと(通常のアセット制作フローの外で作られていることが多い)
  • 翻訳対象アセットが写る画面を、言語ごとにスクリーンショットで一巡すること

関連記事