真・簡単(かもしれない)日本語表示

2012年6月4日追記 新しい機能を追加したものを投稿しました  いままで、ひにけにXNAではXNAで日本語表示する為の投稿を複数回してきました。 続・簡単(かもしれない)日本語表示: ツールによる日本語文字の追加 簡単(かもしれない)日本語表示: プロセッサー・パラメーターを使った日本語文字の追加 Content Pipeline その3 そのカスタマイズ: XNA 1.0時代のコンテント・パイプラインのカスタマイズの例として紹介 こうやって見返すと、今までの投稿ではいかにして簡単に日本語文字を追加するのかということを紹介してきました。 XNA標準のフォントプロセッサーでは、これ以外にも以下の基本的な問題があります。 OpenTypeフォントが使えない 大量の文字を処理させると時間が掛かる これらの問題を解決するには新しいフォントプロセッサーを作ることですが、独自のフォントプロセッサーを作ってしまうと、それに伴って独自の表示プログラムも用意しないといけません。XNAで用意されているSpriteFont描画に慣れている人達が多く居るなかで、似たような、だけどちょっとだけ違う文字表示APIを作るというのには抵抗がありました。 ですが、XNBファイルフォーマットが公開され、Silverlight 5のToolkitの中ではXNA 4.0のコンテント・パイプラインをそのまま使用し、Windows用のXNBファイルから直接3Dモデルなどを読み込んで、Silverlight 5で表示することができると知ったときに思いついたのが「同じデータを出力してSpriteFontになりすまことができれば、実行時にXNAの文字描画APIをそのまま使うことができるかも?」というアイディアが浮かんだので試してみたら、思ったよりも良い物ができたので公開することにしました。 WPF フォントプロセッサー 今回紹介するのはWPFを使用したWPFフォントプロセッサーです。WPFを知らない人の為に補足しておくと、WPFはWindows Presentation Foundationの略で今までのGDI/GDI+を使ったUIフレームワークとは違い、GPUアクセラレーションを利用した新しいUIフレームワークです。SilverlightはWPFのサブセットでWindows Phone 7でも使われいて、Windowsの後継OSであるWindows 8の新しいアプリケーションモデルの1つであるXAMLアプリケーションはこのWPFが元となっています。 WPFフォントプロセッサーはその名の通り、WPFの文字描画を使用したフォントプロセッサーです。特徴としては以下の3つがあります。 OpenTypeフォント対応 処理速度の高速化 JIS漢字追加機能 文字装飾 WPFは今までのようにTrueType、そしてOpenTypeフォントに対応しています。OpenTypeフォントはOpenの名が示すとおりOSに依存しないフォントフォーマットで、現在広く普及しているフォントフォーマットです。OpenTypeフォント対応によって、これらの多くのフォントをXNAで作られたゲームでも簡単に使えるようになりました。 そして、処理速度の高速化ですが、XNA標準のフォントプロセッサーは生成したテクスチャをできるだけコンパクトにまとめる為のアルゴリズムを採用しています。ですが、文字数の増加に対して指数関数的に処理時間が掛かってしまうという問題があります。ゲーム内で使われる文字だけを抽出して生成する場合は1,500文字程度で収まるので大きな問題とはならないのですが、常用漢字やJIS漢字といった2千文字を超えてくると極端に時間が掛かるようになり、場合によっては20分近く掛かってしまうということがありました。 そこで、WPFフォントプロセッサーでは漢字などの大量の文字を処理するのに適したアルゴリズムを採用して処理速度の高速化をしています。以下は私のPCで測定した結果です。 文字数 XNAフォント プロセッサー WPFフォント プロセッサー 速度差 常用漢字を含む2,331字 3分20秒 0.6秒 333倍 JIS第1水準漢字を含む3,438字 10分28秒 0.82秒 765倍 JIS第2水準漢字を含む6,974字 N/A 1.63秒…

0

乗算済みアルファとは? その2: コンポジション

前回の投稿からものすごーく間があきましたが、乗算済みアルファの話がTwitterの方で盛り上がったので、思い出したように続きを書いてみます。 前回は今まで多く使われてきた補間アルファの問題とそれを解決するための乗算アルファの紹介をしました。今回は乗算済みアルファの真骨頂である半透明を使ったコンポジションを紹介します。 コンポジションの使い道 レースゲームでは、ゲーム内で複数の車を購入でき、さらに購入した車の各パーツを変更することができるという機能は一般的なものです。中には自分で描いた絵を車に張るなんて言うこともできるものもあります。こういったレースゲームでは、購入した車の一覧はガレージメニュー内でサムネイル表示され、車を選択すると3Dモデルが読み込まれ、自分がチューンナップした車のモデルを見ることができます。 では、このサムネイル画面はどうやって表示するのでしょうか? こういった3Dモデルをカスタマイズできるゲームでは、あらかじめサムネイル画像を用意するということはできません。なぜなら、その組み合わせは膨大な数になってしまうのと、ユーザーが描いた絵までは用意することはできないからです。そこで良く用いられるのが、3Dモデルを変更した時にセーブデータ領域などに3Dモデルをレンダリングした結果をサムネイル画像として保存し、それをメニュー画面で使用するという手法です。 単に矩形型のサムネイルを用意するだけだったら問題は無いのですが、このサムネイル画像をビルボードとして使い、メニュー画面の背景の上に重ね合わせて描画したい場合、例えば車のボディ部分のような不透明部分は不透明に、車のウィンドウ部分のような半透明部分はメニュー画面が透けて見えたりするといった重ね合わせ処理をコンポジション(Composition、日本語で「合成」)と呼びます。 コンポジションの基本 コンポジョン処理をする場合の基本として、描画するオブジェクトA,B,Cがあった場合、以下の式が成り立たないといけません。 A + B + C = (A + B) + C = A + (B + C) この式のA+B+Cという部分はオブジェクトA,B,Cの順に描画するという意味で、(A+B)+CはAとBをまとめて描画した結果を描画した後にCを描画、A+(B+C)はAを描画した後にBとCをまとめて描画した結果を描画するという意味になります。言い換えると()で囲まれたオブジェクトは別のレンダーターゲットに描画し、そのレンダーターゲットの描画結果を他のオブジェクトの描画と合成(コンポジット)できるということです。もしくは前述のレースゲームの中のサムネイル画像がカッコ内の部分に相当します。 結論から言うと、上記の式は補間アルファでは成り立たず、乗算済みアルファでは成り立ちます。つまり、補間アルファではできなかったコンポジションが乗算済みアルファではできるということです。 実際に上の式に補間アルファと乗算済みアルファのブレンディング計算式を当てはめると証明できるのですが、長くなるし、読んでもつまらないし、本題から外れるので、ここでは割愛します。 コンポジション比較 では、実際に乗算済みアルファと補間アルファでコンポジションした場合の結果を見比べてみましょう。まずは、レンダーターゲットを使わずに背景を描画した後に赤い不透明の四角形、半透明の緑色の四角の順に描画してみましょう。 乗算済みアルファ、補間アルファ、どちらも同じ結果になっていますね。 では、次に赤と緑の四角形をレンダーターゲットへ描画し、その結果をテクスチャとして使って背景を描画した後に描画してみましょう。 補間アルファを使った方は緑の半透明部分がより薄くなっており、不透明であるはずの赤い部分も半透明になってしまっています。対照的に乗算済みアルファの方は全く同じ描画結果となっています。つまり、補間アルファではコンポジッションが上手くいかなかったのが、乗算済みアルファではコンポジションができるということです。   XNA 4.0でコンポジション処理 では、実際にXNA 4.0でコンポジション処理をする時にどんなコードを書くのか見ていきましょう。 まずは、コンポジション用のレンダーターゲットの生成と、そこへ描画するコードです。通常のレンダーターゲットを使った描画と殆ど同じものですが、ここではColor.Transparentでクリアするのがポイントとなっています。このTransparent(透明色)はRGBA値が(0,0,0,0)になっています。 // コンポジション用のレンダーターゲットの生成 RenderTarget2D layer = new RenderTarget2D(GraphicsDevice, 1280, 720); // **** コンポジション用のレンダーターゲットへの描画 **** // レンダーターゲットをグラフィクスデバイスへ設定する…

0

XNA Game Studio 4.0 Language Pack(日本語)がリリースされました

日本語のXNA Game Studio 4.0Language Packがリリースされました。これでVisual Studioのメニューやプロジェクトテンプレートが日本語化されるのはもとより、日本語のヘルプドキュメントも付いているので英語を読むのが苦手という人でも安心してXNA 4.0を使えるようになりました。 注意点としてはLanguage Packとしての提供になるので一旦英語版をインストールした後にLanguage Packをインストールする必要があります。英語版のインストール方法については以前の記事が参考になると思います。また、英語版を既にインストールしている場合はLanguage Packをインストールするだけで日本語化されます。 Windows Phone Developer Toolsのダウンロード (Windows Phone開発キットに含まれている) XNA Game Studio 4.0スタンドアロン版をダウンロードする (Xbox 360/Windowsのみ開発できる) XNA Game Studio 4.0 Language Pack (日本語) のダウンロード 詳細は以下のニュースリリースを見てください。 http://create.msdn.com/ja-JP/home/news/xnags40jpnlangprel

0

XNA Game Studio 4.0 Connectのリリース予定とインディーズゲーム

これからXNA Game Studio Connect正式リリースするまでの流れを時系列に沿って紹介します。 現在、インディーズゲームとしてピアレビューへ提出するゲームはXNA Game Studio 3.1で作られたものに限られます。 今秋、XNA Game Studio Connect正式リリースされ、その日からXNA Game Studio 4.0で作られたゲームをピアレビューへ提出することができるようになります。 XNA Game Studio Connectリリース日から90日の間、XNA Game Studio 3.1で作られたゲームもピアレビューに提出することでがきます。 XNA Game Studio Connectリリース日から90日後、ピアレビューに提出できるのは4.0で作られたゲームのみとなり、3.1で作られたゲームはピアレビューに提出できなくなります。 まとめると、 近日中にゲームが完成、ピアレビューに提出できるのであれば3.1で作る 今からゲームを作り始めるのであれば4.0にアップグレードする XNA Game Studio Connectの正式リリース日の発表はXNA Game Studioチームのブログ、App Hubサイトに掲載されます(このブログでも情報が来次第に紹介します) 情報元: http://blogs.msdn.com/b/xna/archive/2010/10/12/xna-game-studio-4-0-submissions-for-xbox-live-indie-games.aspx

0

XNA Game Studio 4.0のリリースはいつ?

2006年11月のXNA Game Studio Expressのリリース以来、XNA Game Studioは大体一年毎にリリースしてきました。さて、XNA Game Studio 3.1がリリースしたのが去年の6月ですから、既に1年と3ヵ月が過ぎました。では、XNA Game Studio 4.0のリリースはいつなのでしょうか? この質問の答えは答える相手によって変わってきます。 ゲーム開発者への答え: 来週の9月16日(北米時間)の時点でリリースされるXNA Game Studio 4.0を使ってWindows Phone 7、Windows、そしてXbox 360の全てのプラットフォーム向けのゲーム開発を開始することができます。 ゲームで遊びたい人達への答え: XNA Game Studio 4.0で作られたゲームが遊べるようになるのは年内   正式には9月16日にリリースされるのはWindows Phone 7向けの開発ツールであるWindows Phone Developer Toolsであり、その中にはXNA Game Studio 4.0も含まれています。 この時点で開発環境としてのXNA Game Studio 4.0は完成、リリースとなり、Windows Phone 7はもちろんのこと、WindowsとXbox 360用のプロジェクトを作成することができます。 また、同日にはXbox 360上でゲームを配置、デバッグさせる為に必要な開発者向けのXNA Game Studio Connect Toolのベータ版がリリースされる予定です。このツールを含め、Xbox LIVE インディーズゲームとして投稿するといったXbox 360向けの機能は年内リリース予定です。

0

コード探偵 ファイル01「パフォーマンス殺害事件」

PCやゲーム機の仕組みが非常に複雑になった現在、処理落ちしている状態、つまりパフォーマンス問題がある場合、その原因究明にはシャーロック・ホームズ(もしくは、コナン君、金田一君、夢羽など)と同じような探偵としてのスキルが求められます。 もちろん、ここでいうスキルというのは、殺人事件に出くわす確立が異常に高いというものではなく、事件を解決する能力です。 パフォーマンスは死んだ 誰が殺したか? この事件を解決するには、探偵と同じように仮定を立て、証拠を集め、推理力を働かせることで犯人(パフォーマンス低下の原因)を特定しないといけません。 幸い、小説やマンガの中の探偵のように生命の危機に立たされることはないし(っていうか、コナン君とか金田一君に出会うこと自体が死亡フラグだよね)、なにより時間を巻き戻して殺害現場(パフォーマンス問題がある場所)を何度も繰り返し再生することで、パフォーマンスを殺す凶器になりそうなものを断定することができます。 例えば、氷の塊(氷の剣のトリックのタネ)があったとしたら、この氷の塊に該当するコードを一時的に取り除いて、殺害シーンを再生。もし、パフォーマンスが死ななかったら、この氷の塊がパフォーマンスを殺した凶器と断定できます。氷の塊を取り除いてもパフォーマンスが死んだ場合、氷の塊は凶器ではないということなので、つぎに凶器となりそうなコードを見つける作業を続けます。 プロファイリングの準備 犯罪捜査では犯人を特定するのにプロファイリングと呼ばれるものがありますが、プログラムの世界でもパフォーマンスを殺した犯人を特定する方法を同じくプロファイリング(性能解析)と呼びます。 XNA Game Studioでプロファイリングをするには、以下の下準備をします。 プロファイル用のソリューション構成を設定する(省略可、でもあると便利) Update設定をプロファイル用に設定する プロファイル用のソリューション構成をするには以下のステップを踏みます。 1. ビルドメニューから、構成マネージャを選択 して、構成マネージャを表示する 2. 構成マネージャダイアログ内の、アクティブ ソリューション構成のコンボボックス内の「<新規作成…>」を選択して「新しいソリューション構成」を表示する。 3. 新しいソリューション構成ダイアログで、名前を「Profile」、設定のコピー元にReleaseを設定し、OKボタンを押して決定。 4. プロジェクト・プロパティ画面で構成にProfileを選択し、条件付コンパイル シンボルに「PROFILE」を追加する。 これで、プロファイル用の構成ができました。 次に、プロファイルをするのに必要なUpdate設定にします。これは、IsFixedTimeStepにfalseを指定して可変更新に設定し、SynchronizeWithVerticalRetraceにfalseを指定して垂直帰線期間同期(V-Sync)を待たない設定にします。#if PROFILE // プロファイル用コード // ここではV-Syncを解除し、可変更新モードに変更している graphics.SynchronizeWithVerticalRetrace = false; IsFixedTimeStep = false; #endif 上のコードでは、プロファイル用構成を設定したときに作ったPROFILEシンボルを使って#if、#endifでコードを囲むことによって、このコードがプロファイル用構成にしたときにのみにコンパイルされるようにしています。 ここで気をつけないといけないのは、プロファイル時には可変更新にする必要があるので、ゲームが固定更新向けに作られている、つまりGameTimeの値を無視している場合にはゲームの実行速度が変わってしまうということです。処理落ちがない状態だと、ゲーム更新速度が速くなりすぎて、時にはゲームをプレイするのが不可能なくらい速くなってしまうことがあります。処理落ちしている場合は逆にゲームの実行速度が遅くなるので、スローモーションでプレイしているようになります。プロファイルが必要なのは処理落ちしている状態なので、ゲームが速すぎるという問題はないでしょう。 また、IsFixedTimeStepはゲーム実行中に変更することができるので、プロファイルしたい場面までは固定更新にして、必要になったら可変更新に切り替えるということもできます。 つづく… 元ネタ: https://blogs.msdn.com/shawnhar/archive/2008/03/14/understanding-gpu-performance.aspx

0

XNA Game Studio 4.0の新機能

  最近、私の忙しさの尺度はこのブログの更新頻度に反比例しているということに気づきました。去年の秋あたりから忙しくなり、今年に入ってGamefest、GDC、そしてMIXへ向けての作業に追われる毎日でした。で、ちょっとだけひと段落したので、またいろいろと記事を書いていこう思っています。 まず最初のニュースはXNA Game Studio 4.0についてです。XNA Game StudioはWindows、Xbox 360、そしてZuneと対応プラットフォームを増やしてきましたが、4.0ではWindows Phone 7シリーズへの対応が決まりました。 Windows Phone 7シリーズでは要望の多かった3D APIが追加されています。ただし、Xbox 360やWindowsなどと比べると非力な携帯デバイスなので、複数のプラットフォームでゲームを作る場合にはプラットフォーム間のパフォーマンス差を考慮する必要があります。 この労力を軽減するために4.0では、”Reach(リーチ)”と”HiDef(ハイデフ)”の二つのCapsを設けました。ReachはWindows Phone 7シリーズを含めたどのプラットフォームでも動作させることのできるAPI群からなり、HiDefはXbox 360やハイエンドWindowsマシン上で動作することを前提にしたAPI群からなります。HiDefではReachの全APIが使えるようになっています。 以下はXNA Game Studio 4.0の主な新機能です。 XNA Game Studio 4.0の新機能 Visual Studio 2010に対応 グラフィクスAPIを機能的に”Reach(リーチ)”と”HiDef(ハイデフ)”にカテゴリ分け ダイナミックオーディオ マイク BasicEffectに加えて以下の基本的エフェクトクラスの追加 SkinnedEffect (スキンモデル用のエフェクト) EnvironmentMapEffect (環境マップ用のエフェクト) DualTextureEffect (デュアルテクスチャ用のエフェクト) AlphaTestEffect (アルファテスト用のエフェクト) これらの詳細は今週開催されているGDC、そして来週開催されるMIXで公開される予定です。 http://blogs.technet.com/microsoft_blog/archive/2010/03/09/game-developers-have-a-great-opportunity-with-windows-phone-7-series.aspx http://blogs.msdn.com/shawnhar/archive/2010/03/09/in-which-hints-become-facts-xna-game-studio-4-0.aspx#comments http://klucher.com/blog/achievement-unlocked-xna-game-studio-4-0-for-windows-phone/

0

「プロジェクトの種類がこのインストールでサポートされていません」と言われたら

最近一児のパパになった、Aaron Stebnerから「日本でも同じ問題にあっている人がいるから日本語に訳してよ」とのリクエストがあったので、この投稿を訳しました。 XNA Game Studioで作ったプロジェクトを開こうとすると、 プロジェクトの種類がこのインストールでサポートされていません と、いうエラーメッセージが表示される場合があります。このエラーメッセージの原因と対処方法を幾つか紹介したいと思います。 問題1:システムにインストールされていないバージョンのプロジェクトファイルを開こうとした システムにインストールされているバージョンと違うプロジェクト(例えば、クリエーターズ・クラブ・オンラインのサンプルプロジェクトなど)を開こうとした場合、このエラーメッセージが出る可能性があります。 XNA Game Studioにはプロジェクトファイルの自動更新機能もありますが、この機能がサポートしているのは以下のケースのみです。 インストールされている XNA Game Studioのバージョン 自動更新が対応している プロジェクトファイルのバージョン XNA Game Studio 2.0 XNA Game Studio Exrepss 1.0/1.0 Refresh XNA Game Studio 3.0 XNA Game Studio 2.0 XNA Game Studio 3.1 XNA Game Studio 2.0/3.0 これ以外のケースでは、このエラーメッセージが表示されます。 例えば、XNA Game Studio 3.0で作られたプロジェクトわXNA Game Studio 2.0しかインストールされていない環境、もしくはVisual Studio 2008しかインストールされているけど、XNA Game…

0