XNA Game Studio 4.0で追加された新しいビルトイン・エフェクト
訳者注:今回はちょっと口語訳っぽくしてみました。途中までフォーマルな感じで訳していたのですが、原文の雰囲気と合わなかったので、合わせて口語訳にしてみました。
この記事は記録(?)されたもので、Shanwは今いません(今週末に結婚するんだ、俺)(訳注:死亡フラグみたいですが、Shawnは無事に結婚して、新婚旅行から帰ってきました)
チェス盤と麦(もしくは米)の問題を聞いたことがあるかい?シェーダープログラマーは同じ問題を抱えているんだ。
<チェス盤と麦の問題とは>
13世紀のアラビアの数学者イブン・アル・バンナがチェス(西洋将棋)の問題解法で等比級数の解法について述べています。それによると、
むかし、チェスの発案者が、そのほうびに何がほしいといわれたとき、その人は控えめに、
「チェス盤の第一のマスに1粒のムギ、第二のマスに2粒のムギ、第三のマスに4粒のムギ、・・・・・・というように次々に二倍してチェス盤の全部を埋める分のムギ粒をください。」
と言ったといいます。
チェス盤は64に仕切られていますので、
1+2+22+23+・・・+263=264-1=18 446 744 073 709 551 615(粒)
となり、大豊作のすべての麦を集めてもまかないきれない量になります。
引用元: http://www.nichinoken.co.jp/column/essay/sansu/2008_m02.html
</チェス盤と麦の問題とは>
僕たちは対応したいパラメーター(ライティング、テクスチャ、頂点カラー、フォグ、アニメーション、環境マッピング、マルチテクスチャ)並べることから始めたんだ。しかし、ブーリアン値をひとつ加えるごとに書かなければいけないシェーダーの数も、倍々に増えていき、”2のN乗”とか言う前に手に負えない数になってしまう。
プログラマブルシェーダーはこのジレンマを解決する最良の方法だ。確かに全ての組み合わせの数は途方もないものになるけど、実際のゲームではチェス盤の数マス分程度しか必要としないからね。プログラマブルということは、ゲームにあわせて開発者が必要な分だけ自由に実装できるってことだね。
しかし、現状、Windows Phoneではプログラマブル・シェーダーは使うことはできないんだ。
これはコメント欄での突っ込みどころ:僕個人的にシェーダーは大好きだし、将来的にサポートしたい機能のひとつ。でも、僕たちは時間的な問題でこの機能を今回のリリース向けに完成させることはできなかったんだ。将来リリースについて言える事はなにもないというのが現状(訳注:正式発表以外でスケジュールに関することに言及してはダメという大人の事情)。
そのかわりに、幾つかのビルトイン・エフェクトを提供することにした。これらのエフェクト(特に初心者にとって便利だと思うよ)はWindows、Xbox 360の両方でも使えるけど、目的としてはプログラマブル・シェーダーの使えないWindows Phone向けに設計、最適化されているんだ。
ビルトイン・エフェクトとして必要な機能はなにか?
- 僕達はゲーム開発にとって便利なものを列挙。それはとても長~いリストになった
- そのリストの中からWindows Phone上で快適に動作しないと思われるものを削除。それでも、まだ長いリストだ
- スケジュールを見て、50個のシェーダーを実装、テスト、最適化できる時間があることが判った
- log2(50)とすると、大体6個のブーリアン値をパラメーターとして持てるぞ。でも、僕らのリストには6個より遥かに多いシェーダーがある!
時には妥協しなくてはいけない。スケジュールは変更できない。僕らは対応したい機能リストから、しぶしぶながら削除を繰り返し、6個の機能まで絞り込み、さらに考えられるパラメーターの組み合わせに対応することを諦めるしかなかった。本当に必要とする機能のみに絞り込んだお陰で、2のN乗という指数的な量の作業量をせずに済んだ。幾つかのパラメーター、World、View、Projectionとフォグ関連のパラメーターは全てのエフェクトに共通してあり、その他は多少の差がある。例えば、BasicEffectとSkinnedEffectは同じライティングモデルを使っているけど、DualTextureEffectはライティングをサポートしていないなど。
最終的にXNA Game Studio 4.0では5つのビルトイン・エフェクトをサポートすることになり、それらは78のシェーダーの組み合わせからなっている。
BasicEffect | SkinnedEffect | EnvironmentMapEffect | DualTextureEffect | AlphaTestEffect | |
World, View, Projection | ○ | ○ | ○ | ○ | ○ |
DiffuseColor | ○ | ○ | ○ | ○ | ○ |
Alpha | ○ | ○ | ○ | ○ | ○ |
Fog | 設定可 | 設定可 | 設定可 | 設定可 | 設定可 |
VertexColor (頂点カラー) | 設定可 | × | × | 設定可 | 設定可 |
Diffuse Lighting (拡散光ライティング) | 設定可 | 必須 | 必須 | × | × |
Specular Lighting (反射光ライティング) | 設定可 | 必須 | × | × | × |
ピクセル単位ライティング | 設定可 | 設定可 | × | × | × |
テクスチャ | 設定可 | 必須 | 必須 | 必須 | 必須 |
追加プロパティ | WeightsPerVertex, SetBoneTransforms | EnvironmentMap, EnvironmentMapAmount, EnvironmentMapSpecular, FresnelFactor | Texture2 | AlphaFunction, ReferenceAlpha |
原文:
http://blogs.msdn.com/shawnhar/archive/2010/04/28/new-built-in-effects-in-xna-game-studio-4-0.aspx