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

問題報告をツイッターでつぶやくと…… 以前紹介したWPFフォントプロセッサーを使ってくれている人からツイッターの方で不具合報告がありました。 不具合報告は太いアウトライン描画をすると下図のような状態になるというものでした。 これはWPFのアウトライン描画時の使用するペンに線を繋げる時の方法を指定するPenLineJointというプロパティがあり、それがMiterになっていることが原因でした。これをBevel、もしくはRoundにすると問題は解決します。 また、アウトラインを描画するとフォントの上にラインを描画するので、小さなサイズのフォントでは1、2ピクセルの太さのアウトライン描画をすると下図のようにアウトラインが文字に覆いかぶさった状態になってしまいます。 今回、不具合を報告してくれた方がしていた方法として、アウトライン描画をした後にもう一度アウトライン無しで文字を描画することで、小さい文字でも綺麗に見えるようにしていました。同じ方法はAdobe After Effectのテキスト描画の時にアウトラインを先に描画するのか、後に描画するかを指定できるようになっています。     WPFフォントプロセッサーが更新される この二つの機能は便利なので早速WPFフォントプロセッサーに取り入れることにしました。今回追加したのは以下の二つのプロセッサーパラメーターです。 アウトライン形状 アウトライン描画方法 アウトライン形状には、Miter(鋭角)、Bevel(ベベル)、そしてRound(円形)のいずれかを設定できるようになっています。それぞの違いは下図の、特に「W」の文字で違いが分かると思います。 そして、アウトライン描画方法には以下の3つの方法を指定することができます。 StrokeOverFill 文字本体描画の後にアウトラインを描画する FillOverStroke アウトラインを描画した後に文字本体描画する StrokeOnly アウトラインのみを描画する   WPFフォントプロセッサー サンプル いつものように、今回もサンプルプログラムとWPFフォントプロセッサーのソースコードを公開します。 サンプルプログラムはWindows, Xbox 360,そしてWindows Phone 7 (7.1)のプロジェクトが用意されています。このサンプルプログラムでは複数のフォントを使った文字描画をしています。Xbox 360コントローラーのスティック、キーボードの上下キー、マウスのホイールスクロール、そしてタッチとフリック操作で文字をスクロールさせることができます。 サンプルは以下のURLからダウンロードできます。 http://higeneko.net/hinikeni/sample/xna40/WpfFont20120604.zip XNA 4.0で用のWpfFontPiepline.dllは以下のURLからダウンロードできます。 http://higeneko.net/hinikeni/sample/xna40/WpfFontPipeline20120604.zip

5

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

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

PDC10で行われたXNAセッション紹介

昨日、一昨日と二日間に渡ってMicrosoftキャンバス内で開催されたPDC10の中で行われた多数のセッションはストリーミング配信され、記録された動画も公開されています。そのセッションの中には二つのXNA関連のセッションがありました。 「Things You Need to Know Before Building XNA Games for Windows Phone 7(Windows Phone 7でXNAゲームを作る前に知っておきたいこと)」 http://player.microsoftpdc.com/Session/b8100382-1fdf-482e-b4ec-2b1f0315987f 「Real-World Analysis and Optimization of XNA Framework Games on Windows Phone 7(Windows Phone 7のXNAゲームにおける分析と最適化の実践)」 http://player.microsoftpdc.com/Session/6a4f4c01-5984-4b33-9e27-e725791980b1 オリジナル音声は英語ですが、日本語同時通訳のオーディトラックを選択できるようになっています。プレイヤーの右下にあるAudioボタンを押すとリストが以下のように表示されるのでJapaneseを選択することで日本語音声で視聴することができます。 「Things You Need to Know Before Building XNA Games for Windows Phone 7(Windows Phone 7でXNAゲームを作る前に知っておきたいこと)」のセッションの中ではShawn Heargreavesがゲーム制作の過程をIdea(発想)、Implement(実装)、Optimize(最適化)、Polish(仕上げ)、そしてSell(セールス)の5つに分け、そのうちのOptimize、Polish、そしてSellについて話しています。 Optimize(最適化)の中ではゲームの中で大半を占めるコンテントの最適化をすることで、ゲームが始まるまでの時間短縮、コンテント自体の読み込みの高速化などに触れています。Polish(仕上げ)の中ではWindows Phone 7向けのゲームを快適にプレイする為の手法を紹介しています。 このセッションの中ではApp Hubサイトにあるサンプルコードであるゲーム状態の管理(Windows Phone向けのサンプルは英語版のみ)と、複数の画像ファイルを一つにまとめることで読み込みや描画の高速化(テクスチャの切り替えが少なくなるため)に役立つスプライトシート(4.0用プロジェクトは英語版のみ)を紹介しています。…

0

APP HUBへようこそ!!

Xbox 360とWindows Phoneのアプリを発信できる お待たせしました。数日間のメンテナンス期間を経て、Creators Club OnlineサイトがAPP HUB(アップ・ハブ)として生まれ変わりました。これを機にURLアドレスも新しくなりました。 APP HUB 英語版 http://create.msdn.com/ APP HUB 日本語版 http://create.msdn.com/ja-JP APP HUBサイトでは従来どおり、XNA Game Studioに関する情報やサンプルがあり、プレミアム会員の場合はインディーズゲームの発信ができるのに加えて新たにWindows Phone用のゲームが発信できるようになりました。 Windows Phoneでの開発に興味がある人はラーニング ロードマップのページが参考になると思います。 また、日本語版からのリンクからはまだ見ることができないXNA Game Studio 4.0の新機能に関するサンプルも英語版のEducation Catalogから見ることができます。例えばエコーサンプルなどはダイナミックサウンド機能を使い始める上で参考になるでしょう。

0

XNA Game Studio 4.0、グラフィクスAPI・リファクタリング

XNA Frameworkの歴史 XNAチームは発足当初から他のMicrosoftのプロダクトチームに比べると非常に少ない人数です。人数的に見て他のチームがXNAチームの10倍の規模なんていうのは普通にあることで、時には100倍の人数規模のチームと仕事をするなんてこともあります。 私達がXNA Game Studio 1.0の時にFrameworkを設計したときにはXbox 360上で.Net CFを動くようになったのは最初のリリースの四ケ月程前でした。もちろん、たった四ケ月という期間と少ない人員でFrameworkの設計、実装、そしてテストをすることはできないので、Xbox 360上で.Net CFが動くまでの間に平行して他の作業を進めました。 この時点で私達が設計、実装ができたのはWindows上のみだったので、自然とManaged DirectXの設計を参考にする機会が多くなり、どちらかというとDirectX 9.0のラッパーのようなものが多くなりました。 この方針は設計期間を短くすることに繋がったのですが、後になってXbox 360とWindows上の動作に違い、例えばRenderTarget2Dの振る舞いの違いなどがあることに気づいた時には既にAPIの仕様を変更するには遅すぎる時期になってしまい、結局はXbox 360とWindowsの動作の違いはそのままにすることになってしまいました。 また、追加してしまつた機能を削除するのは、新しく機能を追加するよりも遥かに難しいということを実感したのもXNA Game Studio Express 1.0をリリースした後になってからでした。 一度追加してしまった機能は、使用頻度が少なくとも削ってしまうと、それまで動作していたゲームが動かないということになってしまいます。この使用頻度が低いAPIというのが厄介で、いかに使用頻度が低くてもAPIとして提供している以上はそのAPIが動作しているかどうか確認するためのテストをする必要があります。そして、前述のように人員の少ないXNAチームでは、このテストに掛かる時間が多くなってしまい、そのことで新機能を追加する時間が少なくなってしまうというのは問題です。 将来を見越したリファクタリング XNA Game Studio 4.0でWindows Phone 7シリーズへの対応が決まった時、私達はこれがリファクタリングをするにはいい機会だと考えました。 特にグラフィクスに関しては今までスマートフォーン向けのGPU用のDirectXドライバは存在せず、ドライバの設計はもちろん、ハードウェアベンダーとの話し合いからすることができた(しなければいけなかった)ので、XNAチーム側からの意見の多くが採用されました。 ここで私達は今まで経験から、できるだけ長い間使えるAPIになるようにDirectX10 APIを元にしたAPIへとリファクタリングをすることにしました。と、言うと「ジオメトリシェーダーが使える!」と、考える人がいると思いますが、残念ですがXNA Game Studio 4.0の段階でDirectX 10特有の機能はサポートしていません。 XNA Game Studio 4.0ではDirectX 9世代のGPUもサポートしているので、DirectX 10 APIをDirectX 9世代のGPU上で使用する、D3D10Level9と同等のことをしています。 XNA Game Studio 4.0のグラフィクスではこの他にも以下のようなリファクタリングが施されています。 Capsメカニズムの廃止、Reach、HiDefのシンプルなフィーチャーレベルの採用 RenderStateを廃止し、BlendState、SampleState、DepthStencilState、そしてRasterizerStateとして分別 RenderTarget2DをTexture2Dから派生したクラスにし、深度バッファとの統合 アルファテスト関連のステートの廃止(代わりにAlpheTestEffectを使用) トライアングルファン・プリミティブの廃止 ポイント・スプライトの廃止…

0

細分化されたXNA Game Studio 4.0アセンブリファイル

SilverlightからXNAフレームワークを使用する Windows Phone 7 シリーズでアプリケーションを作る場合は、SilverlightとXNA Frameworkを使うことができます。SilverlightはMicrosoft Expression Blendとの連携で簡単にUI構築ができるという利点があり、XNA Frameworkは3Dを筆頭に高パフォーマンスが求められるゲームアプリに向いています。 Silverlightでアプリケーションを作っているときにXNA フレームワークの機能、特に追加されたばかりのダイナミックオーディオ機能や、GamerServices機能を使いたいというケースがあります。 細分化されたアセンブリファイル このことを実現するために、4.0ではアセンブリファイルが機能ことに細分化され、それぞれが独立して機能するように変更が加えられています。 XNA Game Studio 3.1までは実行時に必要なアセンブリファイルはMicrosoft.Xna.Framework.dllとMicrosoft.Xna.Framework.Game.dllの二つでしたが、4.0のReachプロファイルでは以下の様に各機能毎に分割されています。 Microsoft.Xna.Framework.dll Math、オーディオ、メディア Microsoft.Xna.Framework.Game.dll Gameクラス関連 Microsoft.Xna.Framework.GamerServices.dll GamerProfile、Achievement、Leaderboard等 Microsoft.Xna.Framework.Graphics.dll グラフィクス関連 Microsoft.Xna.Framework.Input.Touch.dll TouchPanelクラス これらのアセンブリファイルはMicrosoft.Xna.Framework.dllへの依存する以外はそれぞれ独立したアセンブリとして使用することができます。これで前述のように、SilverlightとXNA Frameworkの機能を組み合わせて使えるようになっています。同様にWindows上でもWPFやWinForm用のプロジェクトから、XNAのそれぞれのアセンブリを自由に使用することができるようになっています。 このアセンブリの細分化を言い換えると、Microsoft.Xna.Framework.Graphics.dll以外のアセンブリはからグラフィクスへの依存がなくなったとも言えます。 この副作用として、以前はTexture2DだったものがStreamを返すように変更されています。例えばGamerProfile.GamerPictureプロパティやメディアライブラリ内のPicture.GetTextureメソッドはGetImageメソッドに名称変更されているというようにです。 ここで返されるStreamは.Netフレームワークで読み込むことのできる一般的な画像フォーマットファイルとなっているので、SilverlightやWPF上で簡単にDataBinding先として使用することができます。 逆にこのストリームデータをゲーム内でテクスチャとして使うためにTexture2D.FromStreamメソッドが追加されています。

0

Windows Phone Developer Tools CTP版リリース

昨日のMIXのキーノート内で発表された通り、Windows Phone開発用ツールのCTP版がダウンロードできるようになりました。 Windows Phone開発者用ページ http://developer.windowsphone.com/ Windows Phone開発者用ツールCTP版ダウンロードページ http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&displaylang=en リリースノート http://download.microsoft.com/download/D/9/2/D926FB38-BB43-4D87-AE5A-1A3391279FAC/ReleaseNotes.htm このツール群の中にはXNA Game Studio 4.0 CTPを使うために必要な以下のものが含まれています。 XNA Game Studio 4.0 CTP Visual Studio 2010 RC1とVisual Studio 2010 for Windows Phoneに対応 Visual Studio 2010 Express for Windows Phone Windows Phone Emulator GPUアクセラレーションを使用するにはDirectX 10に対応しているビデオカードが必要(対応していない場合はソフトウェア描画となる) XNA Game Studio 4.0として使う場合の注意点 今回公開されたのはReach、HiDefのプロファイルのうちのReachプロファイル部分のみとなっていることに注意してください。これに加えて以下のことに注意する必要があります。 Reachプロファイルのみ対応 Xbox 360版は未対応(Reach版のコードは書くことはできる) 自動スケーラー未対応 Windows Phone上では常に480x800のポートレート画面を使う必要がある。ランドスケープ にする場合はランドスケープ用のRenderTargetにゲーム画面を描画してから、最後にSpriteBatchを使って回転して描画する必要があります。 XNA Game…

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