<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>ひにけにGD</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/ito/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/ito/feed.xml</link>
    <description />
    <lastBuildDate>Thu, 02 Apr 2015 08:27:55 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>メタセコイア・パイプライン Ver. 1.3</title>
      <link>https://docs.microsoft.com/archive/blogs/ito/ver-1-3</link>
      <pubDate>Fri, 18 Jul 2014 22:42:00 GMT</pubDate>
      <dc:creator><![CDATA[Yuichi Ito - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ito/2014/07/18/ver-1-3/</guid>
      <description><![CDATA[メタセコイア 4.2がリリース
メタセコイア...]]></description>
      <content:encoded><![CDATA[<h3>メタセコイア 4.2がリリース</h3>
<p><a href="https://metaseq.net/jp/index.html">メタセコイア 4.2</a>がリリースされました。4.2では作業中のサムネイル画像をMQOファイルにThumbnailチャンクとして保存できるようになりました。</p>
<p>そこで、この変更に対応したメタセコイア・パイプライン、バージョン1.3を公開します。</p>
<p>メタセコイア・パイプラインを使ったサンプル(アセンブリファイルも含む) <br /><a href="https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.3.140718.0-sample.zip">https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.3.140718.0-sample.zip</a></p>
<p>メタセコイア・パイプライン: コンテント・パイプライン用アセンブリファイル <br /><a href="https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.3.140718.0-bin.zip">https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.3.140718.0-bin.zip</a></p>
<p>メタセコイア・パイプライン: ソースコードとプロジェクト <br /><a href="https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.3.140718.0-src.zip">https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.3.140718.0-src.zip</a></p>
<p>例によって例のごとく、不具合を見つけたら、お手数ですがご連絡ください。</p>]]></content:encoded>
    </item>
    <item>
      <title>メタセコイア・パイプライン Ver. 1.2</title>
      <link>https://docs.microsoft.com/archive/blogs/ito/ver-1-2</link>
      <pubDate>Wed, 30 Oct 2013 22:19:00 GMT</pubDate>
      <dc:creator><![CDATA[Yuichi Ito - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ito/2013/10/30/ver-1-2/</guid>
      <description><![CDATA[メタセコイア 4.2が出力するMQOファイル読み込みに対応した「メタセコイア・パイプライン Ver. 1.3」を公開しました  メタセコイア 4.0がリリース  メタセコイア...]]></description>
      <content:encoded><![CDATA[<strong>メタセコイア 4.2が出力するMQOファイル読み込みに対応した<a href="https://blogs.msdn.com/b/ito/archive/2012/04/30/metasequioa-pipeline-1-3.aspx">「メタセコイア・パイプライン Ver. 1.3」</a>を公開しました</strong>  <h3>メタセコイア 4.0がリリース</h3>  <p><a href="https://metaseq.net/jp/index.html">メタセコイア 4.0</a>がリリースされました。4.0でセーブされたMQOファイルではバージョン番号が1.1になり、tripatchチャンクが追加されていることを確認しました。</p>  <p>そこで、この変更に対応したメタセコイア・パイプライン、バージョン1.2を公開します。</p>  <p>メタセコイア・パイプラインを使ったサンプル(アセンブリファイルも含む)    <br /><a href="https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.2.131030.0-sample.zip">https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.2.131030.0-sample.zip</a></p>  <p>メタセコイア・パイプライン: コンテント・パイプライン用アセンブリファイル    <br /><a href="https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.2.131030.0-bin.zip">https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.2.131030.0-bin.zip</a></p>  <p>メタセコイア・パイプライン: ソースコードとプロジェクト    <br /><a href="https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.2.131030.0-src.zip">https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.2.131030.0-src.zip</a></p>  <p>例によって例のごとく、不具合を見つけたら、お手数ですがご連絡ください。</p>]]></content:encoded>
    </item>
    <item>
      <title>PowerShellと大規模ゲーム開発</title>
      <link>https://docs.microsoft.com/archive/blogs/ito/powershell</link>
      <pubDate>Wed, 26 Dec 2012 06:51:00 GMT</pubDate>
      <dc:creator><![CDATA[Yuichi Ito - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ito/2012/12/26/powershell/</guid>
      <description><![CDATA[今回の投稿からブログのタイトルが「ひにけにXNA」改め「ひにけにGD(Game...]]></description>
      <content:encoded><![CDATA[<p>今回の投稿からブログのタイトルが「ひにけにXNA」改め「ひにけにGD(Game Development)」となりました。これからはXNAに限らず、ゲーム開発全般についての記事を書いていこうと思っています。</p>
<p>最初の投稿はPowerShell Advent Calendar 2012への記事になります。</p>
<p>&nbsp;</p>
<h3>大規模ゲーム開発の見えづらい問題点</h3>
<p>個人的にPowerShellが大好きで、<a href="https://atnd.org/events/34319" target="_blank">Advent Calendar 2012</a>投稿へのお誘いを受けたのは嬉しいことなんですが、まだまだ周りの人達から教えてもらうことの方が多く、既に知られている記事になってしまいそうだなぁということで、今回は100人を超える大規模ゲーム開発現場でPowerShellがどのように使われているのか紹介します。</p>
<p>&nbsp;</p>
<p>現在、私が携わっているゲーム開発ではシアトルを本拠地として、世界の数ヶ所に開発拠点があり、約150人がゲーム開発に関わっています。つまり、実質1日24時間体制でゲーム開発が行われています。1日24時間といっても土日は休みになるので年中無休ではありません(少なくとも現状ではw)</p>
<p>これだけの大人数での開発を支える為に120台程のサーバーがあり、その役割として、100近いVisual Studioのプロジェクをはじめとしたソースコードのバージョン管理ソフト用サーバーや、数百GBに達するコンテント処理をして最終的なメディアに変換するためのビルドサーバー等があります。</p>
<p>大規模プロジェクトでは、ゲーム開発に直接関わる作業以外の見えずらいコストが問題になってきます。</p>
<ul>
<li>
<p>数百台あるPCのプログラマーやアーティスト、そしてサーバーの初期設定や更新コスト</p>
</li>
<li>
<p>ツールやスクリプトの学習コスト</p>
</li>
</ul>
<h3>開発環境を整える</h3>
<p>大規模ゲーム開発で、チームメンバー数の増減はプロジェクトの最中でも頻繁に起こります。それに加えて開発環境に必要なものも多くあり、プログラマーにはVisual Studio、TFS、.Net Framework、Xbox 360 SDK、各ミドルウェアSDK、アーティストには3D Studio Max、Photoshop、内製のツール群、そしてバグ追跡用ツールなどのプログラマーとアーティストの両方に必要なツールなどを新しいチームメンバのPC初期設定、そして常に最新の状態にしておく必要があります。</p>
<p>その為に"setup.exe"という名前のシンプルなGUIベースのツールがあり、ずらーっと並んだチェックボックスやコンボボックスからインストールする物や設定する項目を選択できるようになっています。選択項目は沢山ありますが、基本的にはプログラマーかアーティストかを選択して「Go」ボタンを押すだけで済むようになっています。</p>
<p>「Go」ボタンを押すとPowerShellが起動され、選択した項目を自動的にインストールまたは設定するスクリプトが実行されるようになっています。私がチームに入った当日、朝に「Go」ボタンを押し、待っている間に必要なドキュメントを読み、ランチから帰ってきた時にはゲーム開発の準備が整っていました。この理由から開発用PCにはWindows Serverを使用しています。</p>
<p>このツールは開発PCの初期設定の他にも自動更新等にも使用されています。例えばレジストリキーを変更する必要があった時、PowerShellスクリプトに数行の変更を加えるだけで全ての開発PCに同じ変更を適用することができました。同様のPowerShellスクリプトは100台以上あるビルドサーバーの設定を変更する時にも使用されています。</p>
<p>&nbsp;</p>
<p>プログラマーの場合、開発用のPowerShellウインドウが用意されていて、開発に有用なモジュール、スクリプト、エリアスなどを使うことができるようになっています。</p>
<p>このPowerShellウインドウから、"vs"エリアスでカスタム環境設定を適用したVisual Studioを起動したり、"Set-DebugConfigs" スクリプトでデバッグ用パラメーターを設定したり、"Prop-Build" スクリプトでXbox 360上でゲームを実行するのにテスト設定ファイルを含む必要なコンテントファイルや実行ファイルをXbox 360開発機へと転送したりするといった毎日の作業に役立つスクリプトなどを使用することができます。</p>
<h3>学習コストの削減</h3>
<p>PowerShellスクリプトの素晴らしい点は、スクリプトのパラメーターを扱う機能やUsageを表示する機能などが標準で提供されていることです。大規模なプロジェクトでは、その全てを詳細まで把握できる人は存在せず、開発期間中に今まで一度も触ったことのないツールやスクリプトを使う必要に迫られるケースもあります。そういう時、使い方を学ぶ必要がありますが、その時間は極力少なく、もしくは使い慣れていないツールを学ぶ時間を取ることができないことも少なくはありません。</p>
<p>PowerShell導入以前は小さなツールやスクリプトは複数の方法で作られていました。メイン処理の行数よりもコマンドラインオプションを処理する行数が多くなってしまうDOSのバッチファイル、コンパイルする必要のあるC#で書かれたプログラム、更に今ではすっかり読める人が少なくなってしまったPerlスクリプトまでありました。</p>
<p>複数の方法で作られた多数の小さなツールやスクリプトは使うのもメンテナンスするのも困難です。あるツールは「/」をオプション指定の接頭文字に使い、他のツールは「-」を使う。また、あるツールは接頭文字を指定する必要がないものもあります。複数のファイルの指定の仕方は？Usage表示の仕方やそのフォーマットは？それぞれの差異は小さくてもその量が多いと把握するのは難しくなり、個々の小さなツールを使うのに時間が掛かってしまいます。１人がそれぞれのツールを使うのに掛かる時間自体は多くなくても、全体で見ると無視できない量のコストとなってしまいます。</p>
<p>これがPowerShellだとParameterアトリビュートによる各パラメーターの検証、説明の記述ができるので「help スクリプト名」という共通のコマンドで全スクリプトの使用方法を即座に把握でき、タブキーによる自動補完機能を前提としてパラメーター名は多少冗長になっても理解しやすさを重視しています。これらの機能による学習コストや些細なミスを未然に防ぐことによる生産性向上は決して少なくはありません</p>
<h3>モダンシェル</h3>
<p>その他にも、PowerShellには単純な違いに思えるけど非常に有益な機能の一つに、テキストの代わりにオブジェクトベースのパイプ処理になっていることです。</p>
<p>多くの小さなツールがある状況で毎日の作業効率を上げる為に、それらのツールを組み合わせたツールやスクリプトを作るのは自然なことです。例えば「指定したXbox 360開発機に幾つかのファイルを配置したいけど、それらはユーザー毎の設定ファイルによってコントロールしたい」という要求があった場合、既にある「指定したファイルをXbox 360開発機へ配置するスクリプト」と「ユーザー設定を表示するスクリプト」、そして配置したいファイルリストを組み合わせます。ポイントとして「ユーザー設定を表示するスクリプト」がテキストを返す場合、そのテキストの受け取り側のスクリプトで受け取ったテキストの中から欲しい情報を抽出処理する必要があります。対照的にPowerShellはオブジェクトを返すので、受け取り側で単に「$_.プロパティ名」と指定するだけで済みます。つまり、他のスクリプトへの依存関係を少なくすることができるということです。</p>
<p>これらのスクリプトを組み合わせる時に非常に有用なのがデバッグ機能です。初めて使うスクリプトでもデバッガを使ってその流れを追うことで短時間で理解することができ、複雑なスクリプトでもその問題点を見つけ出すのに他のスクリプトでは定番になっている「Printfデバッグ」に比べて遥かに短時間で問題点を洗い出すことができます。</p>
<p>&nbsp;</p>
<p>最後に、最も重要なPowerShellの機能として.Net Frameworkとの連携があります。今携わっているプロジェクトではWPFで作られたゲームエディタを初めとし、.Netベースのツールが数多くあり、その多くの機能はエディタ以外にもコンテントビルド中に使われます。</p>
<p>例えばテクスチャコンパイラーと呼ばれるツールがありますが、このツールはC++/CLIで作られていて、ゲームエンジンの機能を流用すると同時に.Netアセンブリとして使いやすいインターフェースを提供しています。このアセンブリはWPFツールから参照され、エディター上でコンパイルされたテクスチャの表示やサムネイルの生成機能などを提供し、MSBuildのプロジェクトから参照され、ビルドサーバー上でテクスャをコンパイルする為の機能を提供、そしてもろちんPowerShellスクリプトからも参照され、コンパイルされたテクスャ情報のデータマイニング、ゲーム中UIで使われるテクスチャーを別途処理するのに使われています。</p>
<h3>PowerShellを使おう</h3>
<p>北米のゲーム開発現場では「<a href="https://en.wikipedia.org/wiki/Speed_bump" target="_blank">スピード・バンプ(Speed Bump)」</a>という言葉が良く使われます。これは駐車場等で車の速度制限する為に必要なものですが、ゲーム開発においての「スピード・バンプ」とは開発速度を落とす、取り去るべきものとして扱われています。PowerShellはこのスピード・バンプの多くを取り除き、開発速度の平均速度向上に非常に役立っています。</p>
<p>PowerShellを実際のプロジェクトで毎日のように使ってみて「PowerShellは大規模ゲーム開発でも使用可能」と、考えるようになり、今では「大規模ゲーム開発にPowerShellは必要不可欠なもの」と考えるようになりました。</p>
<p>今までPowerShellを触ったことのない人も、これを機にPowerShellを使ってみてはどうでしょうか？</p>]]></content:encoded>
    </item>
    <item>
      <title>XNA Game Studio 4.0 Refreshに更新しよう</title>
      <link>https://docs.microsoft.com/archive/blogs/ito/xna-game-studio-4-0-refresh</link>
      <pubDate>Sat, 09 Jun 2012 20:49:00 GMT</pubDate>
      <dc:creator><![CDATA[Yuichi Ito - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ito/2012/06/09/xna-game-studio-4-0-refresh/</guid>
      <description><![CDATA[XNA Game Studio 4.0 Refreshに更新しよう
去年の10月にXNA Game Studio 4.0 Refreshが公開されました。これは、Windows Phone SDK...]]></description>
      <content:encoded><![CDATA[<h2>XNA Game Studio 4.0 Refreshに更新しよう</h2>
<p>去年の10月にXNA Game Studio 4.0 <strong>Refresh</strong>が公開されました。これは、<a href="https://www.microsoft.com/downloads/ja-jp/details.aspx?familyid=0a373422-6680-46a7-89e1-e9a468a14259" target="_blank">Windows Phone SDK 7.1</a>の中に含まれる形でリリースされ、内容もWindows Phone 7.1の<a href="https://msdn.microsoft.com/ja-jp/library/ff637516(v=vs.92).aspx" target="_blank">新機能追加</a>が主だったので私もツイッターの方でつぶやく程度で済ませてました。</p>
<p>ですが、Windows Phone向けの新機能以外にもVisual Basic対応やバグフィクスが含まれているので、WindowsやXbox 360で開発している人でも更新する価値は十分にあると思うのでここでも紹介します。</p>
<p>まず、新機能としてVisual Basicに正式に対応したこと、これはWindows Phoneはもちろん、Xbox 360やWindowsでもXNA Game StudioをVisual Basicを使って開発できるようになりました。</p>
<p>そして、バグフィクスの中で比較的重要だと思われるのが「<a href="https://blogs.msdn.com/b/ito/archive/2007/03/08/2-update.aspx" target="_blank">固定更新</a>時、速いPCやフレーム内の処理量が少ない時に更新時間計算の誤差が大きくなり、見かけのフレームレートが下がってしまう」という問題が修正されていることです。</p>
<p>また、<strong>Refresh</strong>という名前の通り、既存APIからの変更は無くバイナリ互換となっているので3.1から4.0へ更新の時とは違って既存のプロジェクトやコードはそのままコンパイル、実行することができるので現在4.0で開発中の人でも安心して更新することができます。</p>
<p>&nbsp;</p>
<h2>XNA Game Studio 4.0 Refreshへ更新する</h2>
<p>幾つかのケースがあると思うので、それぞれのケースでXNA Game Studio 4.0 Refreshをインストールする方法を紹介します。</p>
<p>&nbsp;</p>
<ol>
<li><strong>Windows Phone SDK 7.1をインストールしている <br /> <br /></strong>なにもする必要はありません。前述のようにXNA Game Studio 4.0 RefreshはWindows Phone SDK 7.1に含まれています。 <br /> </li>
<li><strong>Windows Phone Developer Tools (7.0)をインストールしている <br /> <br /></strong>Windows Phone Developer Toolsをアンインストールし、<a href="https://www.microsoft.com/downloads/ja-jp/details.aspx?familyid=0a373422-6680-46a7-89e1-e9a468a14259" target="_blank">Windows Phone SDK 7.1(日本語)</a>をインストールします。 <br /> </li>
<li><strong>XNA Game Studio 4.0 + Language Pack(日本語)をインストールしている <br /></strong> <br /><a href="https://www.microsoft.com/en-us/download/details.aspx?id=27599" target="_blank">XNA Game Studio 4.0 Refresh</a>をインストールします。Refreshは更新プログラムなのでXNA Game Studio 4.0やLanguage Packをアンインストールする必要はありません。 <br /> </li>
<li><strong>XNA Game Studio 4.0のみをインストールしている <br /></strong> <br /><a href="https://www.microsoft.com/en-us/download/details.aspx?id=27599" target="_blank">XNA Game Studio 4.0 Refresh</a>をインストールします。必要であれば<a href="https://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=b3929d3b-3fe1-49dd-9cb1-c701b88d049d&amp;displayLang=ja" target="_blank">XNA Game Studio 4.0 Language Pack(日本語)</a>をインストールします。</li>
</ol>]]></content:encoded>
    </item>
    <item>
      <title>動的テクスチャとその注意点</title>
      <link>https://docs.microsoft.com/archive/blogs/ito/63</link>
      <pubDate>Tue, 05 Jun 2012 23:27:00 GMT</pubDate>
      <dc:creator><![CDATA[Yuichi Ito - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ito/2012/06/05/63/</guid>
      <description><![CDATA[パーティクルシステムなどで動的に頂点データを変更する場合、GPUとCPUが競合しないように、DynamicVertexBuffer(動的頂点バッファ)、そしてNoOverwriteとDiscardオプ...]]></description>
      <content:encoded><![CDATA[<p>パーティクルシステムなどで動的に頂点データを変更する場合、GPUとCPUが競合しないように、DynamicVertexBuffer(動的頂点バッファ)、そしてNoOverwriteとDiscardオプションを使う方法を<a href="https://blogs.msdn.com/b/ito/archive/2011/05/22/no-overwrite-or-discard.aspx" target="_blank">以前紹介</a>しました。</p>
<p>では、テクスチャを動的頂点バッファのように扱うにはどうしたら良いでしょうか？そもそもDynamicTexture2Dというクラスもないし、<a href="https://msdn.microsoft.com/ja-jp/library/microsoft.xna.framework.graphics.texture2d.setdata.aspx" target="_blank">Texture2D.SetData</a>に<strong>SetDataOptions</strong>を受け取るメソッドもない&hellip;&hellip;。</p>
<p>その答えは</p>
<blockquote>
<p><strong>XNA Game Studio 4.0でのTexture.SetDataメソッドはSetDataOptions.Discardを指定した時と同じ振る舞いをする<span style="color: #ff0000;" color="#ff0000">(但し注意点あり)</span></strong></p>
</blockquote>
<p>となります。</p>
<p>振る舞い的にはTexture2D/Texture3D/TextureCube、それぞれDiscardオプションを指定した時と同じように、指定したテクスチャがGPUで使われていた場合、内部で自動的に同じサイズ、フォーマットのテクスチャを生成し、その新しいテクスチャへデータを書き込むようになっています。</p>
<p>但し、この時にSetDataに渡されるパラメーターがテクスチャの<strong>一部分を書き換える設定</strong>になっていると、以前のテクスチャからデータを新しいテクスチャへコピーするようになっています。コピーだけならそれ程時間が掛からないのですが、このコピーする際に<strong>以前のテクスチャをGPUが使い終わるまで待って</strong>からコピーするようになっているので、結局はDiscardオプションをつけていない時と同じ状態になってしまいます。</p>
<p>私のところでテストしたところ、256x256のテクスチャの一部分を書き換えた時、以下のような結果になりました。</p>
<table style="width: 400px;" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td width="199" valign="top">
<p align="center">方法</p>
</td>
<td width="199" valign="top">
<p align="center">SetDataに掛かった時間</p>
</td>
</tr>
<tr>
<td width="199" valign="top">
<p align="right">同じテクスチャでSetData</p>
</td>
<td width="199" valign="top">
<p align="right">6.8ミリ秒</p>
</td>
</tr>
<tr>
<td width="199" valign="top">
<p align="right">テクスチャを切り替えてSetData</p>
</td>
<td width="199" valign="top">
<p align="right">0.3ミリ秒</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>まとめると、</p>
<ol>
<li>テクスチャ全体を書き換える場合は、パフォーマンス問題は発生しない</li>
<li>テクスチャの一部分を書き換える場合、複数のテクスチャを切り替えながら書き込むようにしないと遅くなる</li>
</ol>
<p>となります。</p>
<p>テクスチャを切り替えながらSetDataを呼ぶ方法としては<a href="https://blogs.msdn.com/b/ito/archive/2009/05/07/more-bones-07.aspx" target="_blank">「頂点テクスチャでスキンアニメーション」</a>の記事のサンプルコード内にあるFlipTexture2D.csが参考になるでしょう。</p>]]></content:encoded>
    </item>
    <item>
      <title>続・真・簡単(かもしれない)日本語表示</title>
      <link>https://docs.microsoft.com/archive/blogs/ito/73</link>
      <pubDate>Mon, 04 Jun 2012 23:21:00 GMT</pubDate>
      <dc:creator><![CDATA[Yuichi Ito - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ito/2012/06/04/73/</guid>
      <description><![CDATA[問題報告をツイッターでつぶやくと&hellip;&hellip;
以前紹介したWPFフォントプロセッサーを使ってくれている人からツイッターの方で不具合報告がありました。
不具合報告は太いアウトライ...]]></description>
      <content:encoded><![CDATA[<h3>問題報告をツイッターでつぶやくと&hellip;&hellip;</h3>
<p>以前紹介した<a href="https://blogs.msdn.com/b/ito/archive/2012/02/19/wpf-font-processor.aspx">WPFフォントプロセッサー</a>を使ってくれている人からツイッターの方で不具合報告がありました。</p>
<p>不具合報告は太いアウトライン描画をすると下図のような状態になるというものでした。</p>
<p align="center"><img width="132" height="132" title="Issue" style="display: inline; background-image: none;" alt="Issue" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/2678.Issue_2B3C6C48.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/2678.Issue_5F00_2B3C6C48.png" border="0" /></p>
<p>これはWPFのアウトライン描画時の使用するペンに線を繋げる時の方法を指定する<a href="https://msdn.microsoft.com/ja-jp/library/system.windows.media.penlinejoin.aspx" target="_blank">PenLineJoint</a>というプロパティがあり、それがMiterになっていることが原因でした。これをBevel、もしくはRoundにすると問題は解決します。</p>
<p>また、アウトラインを描画するとフォントの上にラインを描画するので、小さなサイズのフォントでは1、2ピクセルの太さのアウトライン描画をすると下図のようにアウトラインが文字に覆いかぶさった状態になってしまいます。</p>
<p align="center"><img width="965" height="93" title="StrokeOverFill2" style="display: inline; background-image: none;" alt="StrokeOverFill2" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/7065.StrokeOverFill2_71B95C50.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/7065.StrokeOverFill2_5F00_71B95C50.png" border="0" /></p>
<p>今回、不具合を報告してくれた方がしていた方法として、アウトライン描画をした後にもう一度アウトライン無しで文字を描画することで、小さい文字でも綺麗に見えるようにしていました。同じ方法はAdobe After Effectのテキスト描画の時にアウトラインを先に描画するのか、後に描画するかを指定できるようになっています。</p>
<p align="center"><img width="965" height="93" title="FillOverStroke" style="display: inline; background-image: none;" alt="FillOverStroke" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/5305.FillOverStroke_38364C59.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/5305.FillOverStroke_5F00_38364C59.png" border="0" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>WPFフォントプロセッサーが更新される</h3>
<p>この二つの機能は便利なので早速WPFフォントプロセッサーに取り入れることにしました。今回追加したのは以下の二つのプロセッサーパラメーターです。</p>
<ul>
<li><strong>アウトライン形状</strong></li>
<li><strong>アウトライン描画方法</strong></li>
</ul>
<p><strong>アウトライン形状</strong>には、Miter(鋭角)、Bevel(ベベル)、そしてRound(円形)のいずれかを設定できるようになっています。それぞの違いは下図の、特に「W」の文字で違いが分かると思います。</p>
<p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/2158.StrokeShape_12DDF964.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/2158.StrokeShape_5F00_12DDF964.png" target="_blank"><img width="644" height="338" title="StrokeShape" style="display: inline; background-image: none;" alt="StrokeShape" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/6763.StrokeShape_thumb_24537B9E.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/6763.StrokeShape_5F00_thumb_5F00_24537B9E.png" border="0" /></a></p>
<p>そして、<strong>アウトライン描画方法</strong>には以下の３つの方法を指定することができます。</p>
<ul>
<li>StrokeOverFill 文字本体描画の後にアウトラインを描画する</li>
<li>FillOverStroke アウトラインを描画した後に文字本体描画する</li>
<li>StrokeOnly アウトラインのみを描画する</li>
</ul>
<p>&nbsp;</p>
<h3>WPFフォントプロセッサー サンプル</h3>
<p>いつものように、今回もサンプルプログラムとWPFフォントプロセッサーのソースコードを公開します。</p>
<p>サンプルプログラムはWindows, Xbox 360,そしてWindows Phone 7 (7.1)のプロジェクトが用意されています。このサンプルプログラムでは複数のフォントを使った文字描画をしています。Xbox 360コントローラーのスティック、キーボードの上下キー、マウスのホイールスクロール、そしてタッチとフリック操作で文字をスクロールさせることができます。</p>
<p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/1385.Untitled-4_2FCAE67C.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/1385.Untitled_2D00_4_5F00_2FCAE67C.jpg" target="_blank"><img width="644" height="379" title="Untitled-4" style="display: inline; background-image: none;" alt="Untitled-4" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/7142.Untitled-4_thumb_716522C8.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/7142.Untitled_2D00_4_5F00_thumb_5F00_716522C8.jpg" border="0" /></a></p>
<p>サンプルは以下のURLからダウンロードできます。</p>
<p><a href="https://higeneko.net/hinikeni/sample/xna40/WpfFont20120604.zip">https://higeneko.net/hinikeni/sample/xna40/WpfFont20120604.zip</a></p>
<p>XNA 4.0で用のWpfFontPiepline.dllは以下のURLからダウンロードできます。</p>
<p><a href="https://higeneko.net/hinikeni/sample/xna40/WpfFontPipeline20120604.zip">https://higeneko.net/hinikeni/sample/xna40/WpfFontPipeline20120604.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>ネットワークゲームに関する記事まとめ</title>
      <link>https://docs.microsoft.com/archive/blogs/ito/83</link>
      <pubDate>Sat, 05 May 2012 23:06:00 GMT</pubDate>
      <dc:creator><![CDATA[Yuichi Ito - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ito/2012/05/05/83/</guid>
      <description><![CDATA[ツイッターの方でネットワークゲームに関する話題が上がったので、以前投稿したネットワークゲームに関する物をまとめてみました。これらの記事はXNA向けに書かれた物ですが、基本的な考え方やテクニックはどのプ...]]></description>
      <content:encoded><![CDATA[<p>ツイッターの方でネットワークゲームに関する話題が上がったので、以前投稿したネットワークゲームに関する物をまとめてみました。これらの記事はXNA向けに書かれた物ですが、基本的な考え方やテクニックはどのプラットフォームでも同じなので参考になれば幸いです。</p>
<p><a href="https://blogs.msdn.com/b/ito/archive/2008/01/07/network-01-latency.aspx">ネットワーク その1 レイテンシ</a> <br /><a href="https://blogs.msdn.com/b/ito/archive/2008/01/09/network-02-packet-loss.aspx">ネットワーク その2 パケットロス</a> <br /><a href="https://blogs.msdn.com/b/ito/archive/2008/01/23/network-03-packet-header.aspx">ネットワーク その3 帯域</a> <br /><a href="https://blogs.msdn.com/b/ito/archive/2008/01/25/network-04-voice.aspx">ネットワーク その４ 帯域 ボイスチャットについて</a> <br /><a href="https://blogs.msdn.com/b/ito/archive/2008/01/29/network-05-compression.aspx">ネットワーク その５ 圧縮</a> <br /><a href="https://blogs.msdn.com/b/ito/archive/2008/01/31/network-06-quantization.aspx">ネットワーク その６ 量子化で圧縮</a> <br /><a href="https://blogs.msdn.com/b/ito/archive/2008/02/07/network-07-bitfields.aspx">ネットワーク その７ ビットフィールドで圧縮</a> <br /><a href="https://blogs.msdn.com/b/ito/archive/2008/02/08/network-arithmetic-encoding.aspx">ネットワーク その８ 算術符号化圧縮</a> <br /><a href="https://blogs.msdn.com/b/ito/archive/2008/02/11/network-09-just-say-no.aspx">ネットワーク その９ 究極の圧縮方法</a> <br /><a href="https://blogs.msdn.com/b/ito/archive/2008/02/12/network-10-object-ownership.aspx">ネットワーク その１０ オブジェクト所有権</a></p>
<p>また、AppHubの方にあるネットワーク関連のサンプルへのリンクもまとめてみました。</p>
<p><a href="https://create.msdn.com/ja-JP/education/catalog/sample/network_prediction">ネットワーク予測</a> <br /><a href="https://create.msdn.com/ja-JP/education/catalog/sample/network_cs">ネットワーク アーキテクチャー: クライアント/サーバー</a> <br /><a href="https://create.msdn.com/ja-JP/education/catalog/sample/network_game_state_management">ネットワーク ゲームの状態管理</a> <br /><a href="https://create.msdn.com/ja-JP/education/catalog/sample/network_p2p">ネットワーク アーキテクチャー: ピア ツー ピア</a> <br /><a href="https://create.msdn.com/ja-JP/education/catalog/sample/invites">招待</a> <br /><a href="https://create.msdn.com/ja-JP/education/catalog/utility/lobby_chat_icons">ネットワーク ロビーおよびチャット用アイコン</a> <br /><a href="https://create.msdn.com/en-US/education/catalog/sample/net_rumble">Net Rumble (英語版)</a> <br /><a href="https://create.msdn.com/ja-JP/education/catalog/sample/tic_tac_toe">HTTP マルチプレイヤー: Tic Tac Toe (Windows Phone用)</a> <br /><a href="https://create.msdn.com/ja-JP/education/catalog/starterkit/yacht">Yacht (Windows Phone用)</a></p>]]></content:encoded>
    </item>
    <item>
      <title>メタセコイア・パイプライン Ver. 1.1</title>
      <link>https://docs.microsoft.com/archive/blogs/ito/ver-1-1</link>
      <pubDate>Mon, 30 Apr 2012 00:51:00 GMT</pubDate>
      <dc:creator><![CDATA[Yuichi Ito - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ito/2012/04/30/ver-1-1/</guid>
      <description><![CDATA[メタセコイア 4.2が出力するMQOファイル読み込みに対応した「メタセコイア・パイプライン Ver. 1.3」を公開しました  メタセコイア...]]></description>
      <content:encoded><![CDATA[<p><strong>メタセコイア 4.2が出力するMQOファイル読み込みに対応した<a href="https://blogs.msdn.com/b/ito/archive/2012/04/30/metasequioa-pipeline-1-3.aspx">「メタセコイア・パイプライン Ver. 1.3」</a>を公開しました</strong></p>  <p><strong>メタセコイア 4.0が出力するMQOファイル読み込みに対応した<a href="https://blogs.msdn.com/b/ito/archive/2012/04/30/metasequioa-pipeline-1-2.aspx">「メタセコイア・パイプライン Ver. 1.2」</a>を公開しました</strong></p>  <h3>メタセコイア 3.0がリリース</h3>  <p><a href="https://www.metaseq.net/metaseq/index.html">メタセコイア 3.0</a>がリリースされたので、早速ダウンロードして軽く以前紹介したメタセコイアサンプルプログラムの動作テストをしてみました。</p>  <p><a href="https://blogs.msdn.com/b/ito/archive/2010/12/23/metasequoia-and-xna-part-4.aspx">Mkxエクスポーター</a>はそのまま使えるのを確認しましたが、MQOファイルを直接読み込む<a href="https://blogs.msdn.com/b/ito/archive/2010/12/22/metasequoia-and-xna-part3.aspx">メタセコイア・パイプライン</a>はそのままでは3.0から出力したMQOファイルを読み込めませんでした。これは、2.2の時には無かったチャンクが3.0で出力したMQOファイルに存在するのが原因でした</p>  <p>そこで、3.0で出力したMQOファイルも読み込めるように修正したバージョン1.1を公開します。</p>  <p>メタセコイア・パイプラインを使ったサンプル(アセンブリファイルも含む)    <br /><a href="https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.1.120430.0-sample.zip">https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.1.120430.0-sample.zip</a></p>  <p>メタセコイア・パイプライン: コンテント・パイプライン用アセンブリファイル    <br /><a href="https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.1.120430.0-bin.zip">https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.1.120430.0-bin.zip</a></p>  <p>メタセコイア・パイプライン: ソースコードとプロジェクト    <br /><a href="https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.1.120430.0-src.zip">https://higeneko.net/hinikeni/sample/xna40/MetasequoiaPipeline-1.1.120430.0-src.zip</a></p>  <p>&#160;</p>  <p>メタセコイア 3.0の新機能として彫刻機能があります。下図は球体に1分くらいで適当に彫刻したモデルをメタセコイア・パイプライン Ver. 1.1を使ってXNAで表示したものです。こういった複雑な形状のモデルが直ぐに作ることができ、そのままXNA上で表示できるというのはゲーム制作に大いに役立つことでしょう。</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/3603.20120430-Metasequoia3_41D5DCE5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/3603.20120430_2D00_Metasequoia3_5F00_41D5DCE5.png" target="_blank"><img title="20120430 Metasequoia3" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="20120430 Metasequoia3" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/3000.20120430-Metasequoia3_thumb_7EAA5EB7.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/3000.20120430_2D00_Metasequoia3_5F00_thumb_5F00_7EAA5EB7.png" width="639" height="484" /></a></p>  <p>&#160;</p>  <p>まだメタセコイア3.0はリリースされたばかりなので、これ以外にもパイプラインに不具合があるかもしれないので、もし見つけたら気軽に連絡ください。</p>]]></content:encoded>
    </item>
    <item>
      <title>真・簡単(かもしれない)日本語表示</title>
      <link>https://docs.microsoft.com/archive/blogs/ito/103</link>
      <pubDate>Sun, 19 Feb 2012 20:45:00 GMT</pubDate>
      <dc:creator><![CDATA[Yuichi Ito - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ito/2012/02/19/103/</guid>
      <description><![CDATA[2012年６月4日追記...]]></description>
      <content:encoded><![CDATA[<p><span style="color: #ff0000;">2012年６月4日追記</span> <a href="https://blogs.msdn.com/b/ito/archive/2012/06/04/wpf-font-processor-part2.aspx">新しい機能を追加したものを投稿しました</a></p>
<p>&nbsp;いままで、ひにけにXNAではXNAで日本語表示する為の投稿を複数回してきました。</p>
<ol>
<li><a href="https://blogs.msdn.com/b/ito/archive/2011/07/04/display-japanese-text-without-content-pipeline.aspx" target="_blank">続・簡単(かもしれない)日本語表示</a>: ツールによる日本語文字の追加</li>
<li><a href="https://blogs.msdn.com/b/ito/archive/2008/02/22/simple-japanese-message.aspx" target="_blank">簡単(かもしれない)日本語表示</a>: プロセッサー・パラメーターを使った日本語文字の追加</li>
<li><a href="https://blogs.msdn.com/b/ito/archive/2007/05/02/content-pipeline-part3.aspx" target="_blank">Content Pipeline その３ そのカスタマイズ</a>: XNA 1.0時代のコンテント・パイプラインのカスタマイズの例として紹介</li>
</ol>
<p>こうやって見返すと、今までの投稿ではいかにして簡単に日本語文字を追加するのかということを紹介してきました。</p>
<p>XNA標準のフォントプロセッサーでは、これ以外にも以下の基本的な問題があります。</p>
<ol>
<li>OpenTypeフォントが使えない</li>
<li>大量の文字を処理させると時間が掛かる</li>
</ol>
<p>これらの問題を解決するには新しいフォントプロセッサーを作ることですが、独自のフォントプロセッサーを作ってしまうと、それに伴って独自の表示プログラムも用意しないといけません。XNAで用意されているSpriteFont描画に慣れている人達が多く居るなかで、似たような、だけどちょっとだけ違う文字表示APIを作るというのには抵抗がありました。</p>
<p>ですが、<a href="https://create.msdn.com/en-US/sample/xnb_format" target="_blank">XNBファイルフォーマットが公開</a>され、<a href="https://silverlight.codeplex.com/releases/view/78435" target="_blank">Silverlight 5のToolkitの中</a>ではXNA 4.0のコンテント・パイプラインをそのまま使用し、Windows用のXNBファイルから直接3Dモデルなどを読み込んで、Silverlight 5で表示することができると知ったときに思いついたのが<strong>「同じデータを出力してSpriteFontになりすまことができれば、実行時にXNAの文字描画APIをそのまま使うことができるかも？」</strong>というアイディアが浮かんだので試してみたら、思ったよりも良い物ができたので公開することにしました。</p>
<h3>WPF フォントプロセッサー</h3>
<p>今回紹介するのはWPFを使用したWPFフォントプロセッサーです。WPFを知らない人の為に補足しておくと、WPFは<a href="https://ja.wikipedia.org/wiki/Windows_Presentation_Foundation" target="_blank">Windows Presentation Foundation</a>の略で今までのGDI/GDI+を使ったUIフレームワークとは違い、GPUアクセラレーションを利用した新しいUIフレームワークです。SilverlightはWPFのサブセットでWindows Phone 7でも使われいて、Windowsの後継OSであるWindows 8の新しいアプリケーションモデルの1つであるXAMLアプリケーションはこのWPFが元となっています。</p>
<p>WPFフォントプロセッサーはその名の通り、WPFの文字描画を使用したフォントプロセッサーです。特徴としては以下の3つがあります。</p>
<ul>
<li>OpenTypeフォント対応</li>
<li>処理速度の高速化</li>
<li>JIS漢字追加機能</li>
<li>文字装飾</li>
</ul>
<p>WPFは今までのようにTrueType、そしてOpenTypeフォントに対応しています。OpenTypeフォントはOpenの名が示すとおりOSに依存しないフォントフォーマットで、現在広く普及しているフォントフォーマットです。OpenTypeフォント対応によって、これらの多くのフォントをXNAで作られたゲームでも簡単に使えるようになりました。</p>
<p>そして、処理速度の高速化ですが、XNA標準のフォントプロセッサーは生成したテクスチャをできるだけコンパクトにまとめる為のアルゴリズムを採用しています。ですが、文字数の増加に対して指数関数的に処理時間が掛かってしまうという問題があります。ゲーム内で使われる文字だけを抽出して生成する場合は1,500文字程度で収まるので大きな問題とはならないのですが、常用漢字やJIS漢字といった2千文字を超えてくると極端に時間が掛かるようになり、場合によっては20分近く掛かってしまうということがありました。</p>
<p>そこで、WPFフォントプロセッサーでは漢字などの大量の文字を処理するのに適したアルゴリズムを採用して処理速度の高速化をしています。以下は私のPCで測定した結果です。</p>
<table style="width: 545px;" border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td width="204" valign="top">
<p align="center">文字数</p>
</td>
<td width="107" valign="top">
<p align="center">XNAフォント <br />プロセッサー</p>
</td>
<td width="115" valign="top">
<p align="center">WPFフォント <br />プロセッサー</p>
</td>
<td width="116" valign="top">
<p align="center">速度差</p>
</td>
</tr>
<tr>
<td width="204" valign="top">
<p align="right">常用漢字を含む2,331字</p>
</td>
<td width="107" valign="top">
<p align="right">3分20秒</p>
</td>
<td width="115" valign="top">
<p align="right">0.6秒</p>
</td>
<td width="116" valign="top">
<p align="right">333倍</p>
</td>
</tr>
<tr>
<td width="204" valign="top">
<p align="right">JIS第1水準漢字を含む3,438字</p>
</td>
<td width="107" valign="top">
<p align="right">10分28秒</p>
</td>
<td width="115" valign="top">
<p align="right">0.82秒</p>
</td>
<td width="116" valign="top">
<p align="right">765倍</p>
</td>
</tr>
<tr>
<td width="204" valign="top">
<p align="right">JIS第2水準漢字を含む6,974字</p>
</td>
<td width="107" valign="top">
<p align="right">N/A</p>
</td>
<td width="115" valign="top">
<p align="right">1.63秒</p>
</td>
<td width="116" valign="top">
<p align="right">N/A</p>
</td>
</tr>
</tbody>
</table>
<p>このように処理速度の劇的な高速化ができたので、大量の文字を必要とするゲームも手軽に作れるようになりました。これだけ速くなると、今までは処理速度の関係で使うのを躊躇していたJIS基本漢字も使いたいところです。そこでWPFフォントプロセッサーではプロセッサー・パラメーターで<a href="https://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisx0208.html" target="_blank">JIS基本漢字</a>を簡単に追加できるようになっています。</p>
<p>WPFの文字描画では色々な装飾を施すことができるようになっています。WPFフォントプロセッサーでは、グラデーション文字、アウトライン文字をプロセッサー・パラメーターで指定できるようになっています。以下の画像はグラデーション、アウトライン、そしてそれらを組み合わせた文字の例です。</p>
<p><img width="779" height="237" title="20120219 WpfFont" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" alt="20120219 WpfFont" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/8321.20120219-WpfFont_29BD530A.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/8321.20120219_2D00_WpfFont_5F00_29BD530A.png" border="0" /></p>
<p>WPFではこれ以外にも様々な文字描画カスタマイズができるようになっています。WPFフォントプロセッサーでは、文字描画部分が仮想メソッドとなっているので、カスタム・コンテント・プロセッサーをWPFフォントプロセッサーのクラスから派生させることにより自分の好きな描画に差し替えることができるようになっています。</p>
<h3>WPF フォントプロセッサーの使い方(基本編)</h3>
<p>WPFフォントプロセッサーを使うのは以下の２つのステップで完了します。</p>
<ol>
<li>WpfFontPipeline.dll(ダウンロードURLはページの最後)をコンテント・プロジェクトの参照設定に追加する</li>
<li>Spritefontファイルのコンテンツ プロセッサに「WPF フォントプロセッサー」を選択する</li>
</ol>
<p>WPFフォントプロセッサーは、既存のXNAのSpritefontファイルをそのまま使うことができます。また、プロセッサー自体(WpfFontDescriptionProcessor)もXNA標準のプロセッサー(FontDescriptionProcessor)と互換なので、FontDescriptionProcessorから派生したカスタムプロセッサーの派生元をWpfFontDescriptionProcessor、つまり派生元クラス名の頭に「Wpf」と三文字追加するだけで、そのまま動作します。</p>
<p><img width="468" height="403" title="WpfFontProcessor01" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" alt="WpfFontProcessor01" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/2541.WpfFontProcessor01_79B30188.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/2541.WpfFontProcessor01_5F00_79B30188.png" border="0" /></p>
<h3>WPF フォントプロセッサーの使い方(プロセッサー・パラメーター編)</h3>
<p>WPFフォントプロセッサーには20のプロセッサー・パラメーターがあります。今まで紹介してきたプロセッサよりもパラメーターの数が多いですが、基本は以下の３つに分類されます</p>
<ol>
<li>追加文字の指定</li>
<li>文字装飾の設定</li>
<li>文字テクスチャーフォーマット指定</li>
</ol>
<p><img width="445" height="688" title="WpfFontProcessor02" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" alt="WpfFontProcessor02" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/2133.WpfFontProcessor02_786E68A9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/2133.WpfFontProcessor02_5F00_786E68A9.png" border="0" /></p>
<p>追加文字のプロセッサーパラメーターでは半角英数時であるASCII文字、<a href="https://www.asahi-net.or.jp/~ax2s-kmtn/ref/jisx0208.html" target="_blank">JIS基準漢字</a>で定義されている、記号、全角英数字、ひらがな、かたかな、ギリシャ文字、キリル文字、罫線、そして第1、第2水準漢字を指定することができます。前述の通り、これら全部の文字を含めて7千文字を追加しても数秒で生成できますが、これだけの文字数になるとテクスチャサイズが<a href="https://blogs.msdn.com/b/ito/archive/2010/09/26/reach-and-hidef.aspx" target="_blank">Reachプロファイルの上限</a>である2048x2048のテクスチャサイズに収まらなくなるので注意が必要です。</p>
<p>「追加文字 テキスト」パラメーターでは直接追加したい文字を指定することができます。追加文字処理では常に重複する文字を生成しないようになっているので「ああいいうう」という文字を指定しても、実際に生成されるのは「あいう」の３文字になるようになっています。</p>
<p>「追加文字 テキストファイル名」には<a href="https://blogs.msdn.com/b/ito/archive/2008/02/22/simple-japanese-message.aspx" target="_blank">以前紹介した方法</a>のように指定されたテキストファイル内で使われている文字を追加することができます。今回は追加機能としてセミコロン(;)で区切って複数のファイル名を指定できるようになっています。サンプルでもメッセージが入ったソースコードファイルを指定するという小技を使っています。また、文字エンコーディングはOSデフォルト設定にしてあるので日本語版Windowsで使用していればSJISで書かれたテキストファイルをそのまま読むことができます。</p>
<p>文字装飾では文字の色、アウトラインの太さや色、グラデーションの開始色、終端色、角度などを指定することができます。アウトラインの太さには1.5といった小数点を指定することができます。</p>
<p>文字テクスチャフォーマットでは、フォーマットを自動選択するAuto、Bgra4444、そしてColorを選択することができます。Autoを選択すると、単色文字では独自の圧縮処理をするDXT3圧縮(1/4サイズ)、アウトラインを使用するとBgra4444(1/2サイズ)、そしてグラデーションを使用するとColorを使用するようになっています。今年になってXbox Live インディーズゲームに投稿できる<a href="https://blogs.msdn.com/b/ito/archive/2012/01/04/more-big-games.aspx" target="_blank">ゲームサイズ上限値が変更</a>されたので、テクスチャサイズが大きくても綺麗な文字が使いたい場合などに変更すると良いでしょう。</p>
<h3>WPFフォントプロセッサー サンプル</h3>
<p>いつものように、今回もサンプルプログラムとWPFフォントプロセッサーのソースコードを公開します。</p>
<p>サンプルプログラムはWindows, Xbox 360,そしてWindows Phone 7 (7.1)のプロジェクトが用意されています。このサンプルプログラムでは複数のフォントを使った文字描画をしています。Xbox 360コントローラーのスティック、キーボードの上下キー、マウスのホイールスクロール、そしてタッチとフリック操作で文字をスクロールさせることができます。</p>
<h3><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/3173.20120219-WpfFontSample_74947258.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/3173.20120219_2D00_WpfFontSample_5F00_74947258.png" target="_blank"><img width="644" height="378" title="20120219 WpfFontSample" style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" alt="20120219 WpfFontSample" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/80/32/metablogapi/2500.20120219-WpfFontSample_thumb_65116089.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-80-32-metablogapi/2500.20120219_2D00_WpfFontSample_5F00_thumb_5F00_65116089.png" border="0" /></a></h3>
<p>&nbsp;</p>
<p><span style="color: #ff0000;"></span></p>
<p><span style="color: #ff0000;">2012年６月4日追記</span> <a href="https://blogs.msdn.com/b/ito/archive/2012/06/04/wpf-font-processor-part2.aspx">新しい機能を追加したものを投稿しました<br /></a></p>
<p>サンプルは以下のURLからダウンロードできます。</p>
<p><a title="https://higeneko.net/hinikeni/sample/xna40/WpfFont.zip" href="https://higeneko.net/hinikeni/sample/xna40/WpfFont.zip">https://higeneko.net/hinikeni/sample/xna40/WpfFont.zip</a></p>
<p>XNA 4.0で用のWpfFontPiepline.dllは以下のURLからダウンロードできます。</p>
<p><a title="https://higeneko.net/hinikeni/sample/xna40/WpfFontPipeline.zip" href="https://higeneko.net/hinikeni/sample/xna40/WpfFontPipeline.zip">https://higeneko.net/hinikeni/sample/xna40/WpfFontPipeline.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Xbox LIVE インディーズゲームの上限数変更</title>
      <link>https://docs.microsoft.com/archive/blogs/ito/xbox-live</link>
      <pubDate>Wed, 04 Jan 2012 12:31:00 GMT</pubDate>
      <dc:creator><![CDATA[Yuichi Ito - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ito/2012/01/04/xbox-live/</guid>
      <description><![CDATA[あけましておめでとうございます！おかげさまで昨年はXbox Liveインディーズゲームの作品登録数が全世界で2,200本を超えました。...]]></description>
      <content:encoded><![CDATA[<p>あけましておめでとうございます！おかげさまで昨年はXbox Liveインディーズゲームの作品登録数が全世界で2,200本を超えました。</p>  <p>2012年も沢山の面白いゲームを登録していただけるように、皆様から要望の多かったゲームサイズや登録数の制限数を上げることとなりました。</p>  <h3></h3>  <h3>CCGAMEファイルが最大500MBに</h3>  <p>ゲームのサイズ上限は<strong>CCGAMEファイル</strong>(圧縮ファイル)のサイズによって決まりますが、この上限が以下のようになりました。</p>  <table style="width: 358px" border="1" cellspacing="0" cellpadding="2"><tbody>     <tr>       <td valign="top" width="108">         <p align="center">値段</p>       </td>        <td valign="top" width="116">         <p align="center">旧</p>       </td>        <td valign="top" width="132">         <p align="center"><strong>新</strong></p>       </td>     </tr>      <tr>       <td valign="top" width="107">         <p align="right">240, 400MSP</p>       </td>        <td valign="top" width="116">         <p align="right">150MB</p>       </td>        <td valign="top" width="132">         <p align="right"><strong>500MB</strong></p>       </td>     </tr>      <tr>       <td valign="top" width="107">         <p align="right">80MPS</p>       </td>        <td valign="top" width="116">         <p align="right">50MB</p>       </td>        <td valign="top" width="132">         <p align="right"><strong>150MB</strong></p>       </td>     </tr>   </tbody></table>  <h3>登録できるタイトル数は20タイトルに</h3>  <p>また、登録できるゲームの数が以前は10タイトルまででしたが、この上限が<strong>20タイトル</strong>までとなりました。</p>  <p>今年も沢山の面白いゲームを是非Xbox LIVE インディーズゲームへと是非登録してください！</p>  <p>&#160;</p>  <p>公式発表(英文)    <br /><a title="https://blogs.msdn.com/b/xna/archive/2012/01/04/happy-new-year-xbox-live-indie-games.aspx" href="https://blogs.msdn.com/b/xna/archive/2012/01/04/happy-new-year-xbox-live-indie-games.aspx">https://blogs.msdn.com/b/xna/archive/2012/01/04/happy-new-year-xbox-live-indie-games.aspx</a></p>]]></content:encoded>
    </item>
  </channel>
</rss>