国内最大規模のゲーム業界カンファレンス「CEDEC2023」が、2023年8月23日(水)から8月25日(金)までの日程で開催されました。最終日となる8月25日には、スクウェア・エニックス プログラマー 中原 勇氏が登壇し、「FORSPOKENでのアラビア語対応について」と題した講演を行いました。
右から左に書かれる文章や、隣接する文字によっては表示が変わる字形など、数多くの課題に対応する具体的な手法が解説された本講演をレポートします。
国内最大規模のゲーム業界カンファレンス「CEDEC2023」が、2023年8月23日(水)から8月25日(金)までの日程で開催されました。最終日となる8月25日には、スクウェア・エニックス プログラマー 中原 勇氏が登壇し、「FORSPOKENでのアラビア語対応について」と題した講演を行いました。
右から左に書かれる文章や、隣接する文字によっては表示が変わる字形など、数多くの課題に対応する具体的な手法が解説された本講演をレポートします。
TEXT / セレナーデ☆ゆうき
EDIT / 神山 大輝
『FORSPOKEN』は2023年1月14日にPS5・PC向けに発売されたアクションRPG。「アーシア」という異世界に飛ばされた若きニューヨーカー・フレイの旅を描く内容で、魔法の力を利用したパルクールで縦横無尽に世界を駆け抜け、状況に合わせた多種多様な魔法を使って戦略的なバトルを展開します。
『FORSPOKEN』はマルチプラットフォーム対応のハイエンド向けゲームエンジン「Luminous Engine」で開発されていますが、Luminous Engine自体がアラビア語に未対応のため、今回はエンジンの機能レベルでアラビア語に対応する必要がありました。
Luminous Engineは14言語に対応しており、言語ごとにテキストやフォントを対応する仕様に切り替えることが可能です。また、ヤード・ポンド法やメートル法など、国によって違う測量法についても対応しており、国ごとの数値表記の違いもサポートされています。
しかし、例外がある言語では、別途特別な対応が必要となるケースも存在します。その最たる例が、本講演で扱われるアラビア語。
講演の冒頭では「明るさ設定」を意味する文字列を例に、日本語や英語、そしてアラビア語など、複数言語に切り替えるデモが表示されました。
多くの言語は左から右に文字を入力していきますが、アラビア語は右から左に入力していきます。また、文章の後半(画像の中央)の文字列は隣の文字とつながって表記されています。
Luminous Engineをアラビア語に対応させるにあたって、実装は9つの手順で行われました。中原氏はこれを「戦いの歴史」と述べ、これらの実装について項目ごとに解説を行いました。
アラビア語を実装する上で最初に行ったのは、それぞれの文字のプロパティを知るためのUnicode Character Databace(以下、UCD)の組み込みでした。今回はUnicodeコンソーシアムの管理するテクニカルサイトに存在するUCDを基に実装が進められています。
アラビア語の対応に必要なUCDは3種類。「UnicodeData」にはUCD内の中心的な情報が内包されており、各文字のプロパティを知ることができます。これがないと「その文字がアラビア語の文字かどうか」という判別が付かないため、必須の項目です。
続いて「BidiMirroring」は、BIDI(バイダイ)処理をした後の鏡像処理に必要な情報です。
最後の「ArabicShaping」は、隣接するアラビア文字が結合する場合に、正しい文字へと置換するための情報です。文字種によって隣接するアラビア文字が繋がってしまう場合に、正しく表記するための情報がこのArabicShapingのデータベースに存在します。
続いて行われたのは、双方向テキスト、通称BIDIの実装。BIDIはBi-directionalの略称で、双方向という意味があります。日本語や英語などと同じ、左から右に書く記法(LTR)と、アラビア語のように右から左に書く記法(RTL)の混在するテキストを双方向テキストと呼んでいます。
例えば、「1234ABC」という文字を入力した際、日本語や英語は入力した順番通り左から右に並びます。一方、アラビア語のように右から左へ並ぶ言語は「ABC」にあたる文字列が逆転し、「CBA1234」という表記となります。
「1234」はLTR言語の数字のため、右揃えで左から右に1234と表記されます。その後RTL記法に則り、数字のあとに「ABC」が“右から左という順”で入力されます。このような処理を行うのがBIDIです。
BidiMirroringは、BIDI処理後にグリフ(字形・字体などのこと)が正しく表示されるように行われる処理です。ここでは、BidiMirroringのUCDを参照します。
括弧などを扱う際には、日本語などのLTR言語では左側から先に入力します(“[”など)。しかし、RTL言語で同じ入力をしてしまうと、この“[”は右側に来てしまい、“][”で文字列が挟まれる形になってしまいます。これを解決するのがBidiMirroringであり、アラビア語で括弧を使うケースでは必須となるUCDです。
これまでも何度か話題に上がりましたが、アラビア文字は隣接するアルファベットによって結合する可能性があります。このコンテキスト依存グリフの処理では、文字が結合する場合に、正しい文字へと置換することが可能になります。ここでは、UnicodeDataとArabicShapingのUCDを参照します。
コンテキスト依存グリフ処理を行うと、対応前は「ق」「ل」「م」と分かれている文字が「قـلـم」と繋がった形になります。
合字とは複数の文字を合成して1文字にまとめたもので、「抱き字」や「連字」とも呼ばれます。本講演では、ユリウス・カエサルの表記「Julius Cæsar」の「æ」部分が例として挙げられました。
この合字はアラビア語にも存在するため、対応が必要となります。ここではUnicodeDataを参照して処理を行います。
アラビア語には「لا(ラー)」という文字がありますが、この文字は「ل(ラーム)」と「ا(アリフ)」の合字となっています。実例となる上記スライドでは、合字対応前にはアルファベットの「U」のような形になっている文字が、合字対応後には正しく「لا」の形になっているのが分かります。
この「لا」はNo(いいえ)を意味し、使用頻度が非常に高いとのこと。そのため、合字についても「絶対に対応しなくてはいけない要素」と中原氏は述べています。
カシーダ(タトウィール)とは、アラビア系文字の表記において、単語の横幅を引き伸ばすために使用される連結線のことを指します。可読性を高めるほか強調や装飾にも使われるそうですが、カシーダの有無によって語の意味が変わることはありません。
Unicodeでのコードポイントは「U+0640」となっており、カシーダに関してはこのコードポイントを直接参照して実装されました。
中原氏によると、これがゲームで使用されることはそう多くないとのことですが、中原氏自身がプライベートで受講しているアラビア語講座のテキストでは「これでもか」と言うほど多用されているそうです。
複数の文字を1文字にまとめる合字とは逆に、「か」と「゛(濁点)」から「が」を作るように、2つのパーツから1文字を作ることもあります。このとき、先行する文字の後に、組み合わせるようにつくような部分(この場合は濁点)を結合文字と呼びます。結合文字は、UnicodeDataのUCDを参照して実装しています。
コンテキスト依存グリフの処理により、アラビア文字は隣接した文字によって自動的に連結されるようになっています。一方、連結したくない場合において使われるのが、ZWNJ(Zero Width Non-Joiner)とも呼ばれるこちらのゼロ幅非接合子です。
スペースと似たような働きをしますが、こちらは幅がゼロのため、ZWNJを挟んだ文字がスペースよりも離れないのが特徴です。こちらもUnicodeでのコードポイント「U+200C」を直接参照して使用されます。
ゼロ幅非接合子とは逆に、本来は結合しない形で表示される文字の後ろにつけることで、結合する形で表示されるのが、こちらのゼロ幅接合子(Zero Width Joiner)です。こちらはコードポイント「U+200D」を直接参照します。
例えば、「アイン(ع)」というアラビア文字アルファベットは、前後の文字によって形が大きく変わります。本来は隣接する文字によってしか変形しませんが、文字単体を変形させた状態で表示したいときなどにこのZWJを用いることがあります。
アラビア語には、コンテキスト依存グリフ処理で隣接文字が結合されて表示されることや、文字が右から左に書かれるといった、他の言語にはない特徴があります。そのため、アラビア語に対応するにあたって、一部機能が抑制されています。
例えば「テキストのランダマイザ」。これは文字単位で位置をランダムにずらしたり、文字の大きさの倍率を変えたりする機能ですが、隣の文字との繋がりなどの特性が担保できなくなってしまうため、この機能はアラビア語においてはOFFとなるという対応が取られました。
また、「タイプライター的な文字入力の演出」についても、アラビア語ではOFFとなってしまうとのこと。タイピングのシーンなどで見られる、1文字ずつ入力していくような演出ですが、文字の流れる方向が逆であることや、機能との相性が良くないことが理由に挙げられました。
本作においてアラビア語を実装する際、当初はUI内のテキスト部分のみの差し替えで対応していたと話す中原氏。しかし、ローカライズQAから、アラビア語では不自然だという指摘を多数受け取っていたとのこと。講演の後半では、指摘内容ならびに対応方法が一部紹介されました。
まずは、文字を左詰めから右詰めへと変更。LTR言語の場合は左詰めで違和感がありませんが、RTL言語では右詰めが一般的になります。例えばUIメニューにおいて、左詰めでは違和感となるため、アラビア語対応の過程で右詰め処理を行っています。
UIデータは全言語共通ですが、言語ごとにUIアニメーションを切り替える機能がLuminous Engineに搭載されていたため、デザイナーにはこの機能を利用してもらうことで対応したとのこと。
「いくつかの例外はありつつも、あくまでデータの修正なので、プログラム単位の対応は不要だった」と中原氏は語っています。
本作では、主に経験値などの表示の際、単位と数値の表現を逆転させています。例えば、「EXP:+3」のような表記は、アラビア語では「3+:EXP」といった表記に変更されています。
こちらも先程と同じく、UIアニメーションのデータをアラビア語専用のアニメーションに修正する形で対応できたとのこと。
『FORSPOKEN』のアプリケーション側でアラビア語に対応したものの多くは、UIデータ側での対応にとどまったため、プログラム側の修正は少なかったそう。しかし、その一方でUIデータ修正の工数は決して少なかったわけではなく、その結果ほかの言語に比べてアラビア語対応にかかるコストが高くなってしまった点が課題として挙げられました。
また、タイプライターのような演出などに使える「1文字ずつの表示」という機能にアラビア語が未対応なため、なんらかの形で対応したいと展望が語られました。
講演の最後に、アラビア語対応をするにあたって「何から始めればいいのか分からない」と途方に暮れた中原氏が本件を解決するに至ったきっかけとなる、トニー・グラハム氏著の「Unicode標準入門」という書籍が紹介されました。中原氏は「アラビア語について触れている本はこれ以外おそらく見たことがない」と述べ、この書籍を出版した「翔泳社」が中原氏の前職であったという素晴らしい縁のカミングアウトと共に本講演を締めくくりました。
『FORSPOKEN』公式サイトFORSPOKENでのアラビア語対応について - CEDEC2023ゲームのタイムアタックを中心に、ストリーミングサイト・Twitchで活動をしているストリーマー。ゲームイベントの紹介記事など、WEBメディアでの活動実績もあるが、繰り出されるダジャレのクオリティには賛否両論がある。
西川善司が語る“ゲームの仕組み”の記事をまとめました。
Blenderを初めて使う人に向けたチュートリアル記事。モデル制作からUE5へのインポートまで幅広く解説。
アークライトの野澤 邦仁(のざわ くにひと)氏が、ボードゲームの企画から制作・出展方法まで解説。
ゲーム制作の定番ツールやイベント情報をまとめました。
CEDEC2024で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブル2024で行われた講演のアーカイブ動画・スライドをまとめました。
CEDEC2023で行われた講演レポートをまとめました。
東京ゲームショウ2023で展示された作品のプレイレポートやインタビューをまとめました。
UNREAL FEST 2023で行われた講演レポートをまとめました。
BitSummitで展示された作品のプレイレポートをまとめました。
ゲームメーカーズ スクランブルで行われた講演のアーカイブ動画・スライドをまとめました。
UNREAL FEST 2022で行われた講演レポートやインタビューをまとめました。
CEDEC2022で行われた講演レポートをまとめました。