<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/mifm20110827/">
    <title>Make It Fun Meeting wiki</title>
    <link>http://w.atwiki.jp/mifm20110827/</link>
    <atom:link href="https://w.atwiki.jp/mifm20110827/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>Make It Fun Meeting wiki</description>

    <dc:language>ja</dc:language>
    <dc:date>2016-10-16T21:06:11+09:00</dc:date>
    <utime>1476619571</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/mifm20110827/pages/19.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mifm20110827/pages/17.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mifm20110827/pages/18.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mifm20110827/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mifm20110827/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mifm20110827/pages/16.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mifm20110827/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mifm20110827/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mifm20110827/pages/6.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mifm20110827/pages/7.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/mifm20110827/pages/19.html">
    <title>頂点シェーダの機能</title>
    <link>https://w.atwiki.jp/mifm20110827/pages/19.html</link>
    <description>
      *頂点シェーダの機能

**１．頂点シェーダとは何をするものか？
-レンダリング対象の各頂点に対し、座標・色・テクスチャ UV などを変更したりする。
-処理の相手は頂点なので、頂点シェーダは頂点の数だけ実行される。
-プログラマーは、基本的には座標・色・テクスチャ UV のセットを行うが、それ以外にも「光源から見て各頂点がどこの位置にあるか」など、ピクセルシェーダに渡すための独自のパラメータを計算・セットしておける。
--プログラマーが自分で処理を書ける半面、固定機能パイプラインなら自動で行ってくれるポリゴン頂点計算も、プログラマーが行わなくてはいけない。&amp;br()（ SetTexture などでソースコード上からセットしたテクスチャなどはちゃんと描画される）

**２．頂点シェーダの使用例
　※以下の例では、頂点シェーダのほか、ピクセルシェーダの処理も必要となる。ピクセルシェーダについては将来解説する。
-デプスシャドウ
　　影付けの一種。頂点シェーダは、光源から見た各頂点へのベクトルなどを独自セットするのに使われる。
-バンプマッピング
　　頂点シェーダは、頂点の法線情報をセットするのに使われる。このほかに、凹凸を描いたテクスチャも必要。
-HLSL によるスキニング（ボーンによるメッシュ形状の変形のこと）
　　あらかじめ、ボーンを曲げるための行列データをソースコード上にてセットしておき、その行列を頂点シェーダで計算して保持する。

**３．最も簡単な頂点シェーダはどんなコードか？
　以下のようなもの。
　※Takashi Imagire T-Pot 本より、シェイプアップして引用

#highlight(linenumber, c#){{
float4 VS() : POSITION				// 引数なし、座標を float4 で返す
{
    return float4( 0, 0, 0, 1 );		// 適当な座標
}

technique Tshader				// シェーダの管理単位「テクニック」
{
    pass P0					// テクニックの管理単位「パス」
    {
        // シェーダ
        VertexShader = compile vs_1_1 VS();	// シェーダのバージョンを指定
    }
} }}
　８行目の、pass P0 のスコープ内で、ピクセルシェーダの指定も行うが、今回は省略。
　実際、ピクセルシェーダを指定しなくてもプログラムは動くが、その場合の動作は不定。（固定機能パイプラインが使用される？）
　&amp;bold(){&amp;color(brown){原則的に頂点シェーダもピクセルシェーダも指定すべきである。}}

**４．頂点シェーダの引数と戻り値
　引数と戻り値として指定可能な型は以下のとおり。
　　　参照：「ゲームつくろー！　頂点シェーダ編　その1 多分必須！頂点変換の基本」
　　　　http://marupeke296.com/DXPS_S_No1_VertexTransformation.html
|BGCOLOR(#FFFFC0):セマンティクス|BGCOLOR(#FFFFC0):意味|
|POSITION|ローカル空間の頂点の位置座標|
|BLENDWEIGHT|ブレンディングの重み|
|BLENDINDICES|ブレンドのインデックス|
|NORMAL|法線ベクトル|
|PSIZE|ポイントサイズ|
|DIFFUSE|ディフューズ色|
|SPECULAR|スペキュラ色|
|TEXCOORD0～|テクスチャ座標|
|TANGENT|接線|
|BINORMAL|従法線|
|TESSFACTOR|テセレーション係数|

　さらに、引数にも戻り値にも、これら単体だけでなく、いくつかを持たせた構造体を使うことが可能。
　構造体の記述の仕方は以下のとおり。

#highlight(linenumber, c#){{
struct VS_OUTPUT
{
    float4 Pos     : POSITION;		// 頂点座標
    float2 TexA    : TEXCOORD0;		// テクスチャ UV その１
    float2 TexB    : TEXCOORD1;		// テクスチャ UV その２
    float2 TexC    : TEXCOORD2;		// テクスチャ UV その３
    float4 Diffuse : DIFFUSE;		// ディフューズ色
}; }}

**５．シェーダプログラムのデバッグ方法
　DirectX SDK に付属の「 PIX for Windows 」（英語）を使うことで、HLSL コードのデバッグができる。
　残念ながら自作のシェーダサンプルは PIX for Windows を通して動かなかった。

　この PIX for Windows は、WPF 用のパフォーマンス監視アプリと同じく、ビルドが完了した実行形式のファイルに対して使用するためのもので、VisualStudio のコンパイラのようなソースチェックはしてくれない。（と思われる。）

　なお、PIX for Windows は日本語を含んだパスにあるファイルを扱えないようだ。
　そのような EXE を PIX から実行させようとすると、エラーが発生し、実行に失敗する。

**６．参考画像
　デプスシャドウ、バンプマッピング、HLSL によるスキニングを行っているサンプルをキャプチャした画像。
　このサンプルでは、頂点シェーダとピクセルシェーダ処理の両方を行っている。

#ref(ShaderSample Cap 2010_04_04 00.jpg)
#ref(ShaderSample Cap 2010_04_04 01.jpg)
#ref(ShaderSample Cap 2010_04_04 02.jpg)    </description>
    <dc:date>2016-10-16T21:06:11+09:00</dc:date>
    <utime>1476619571</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mifm20110827/pages/17.html">
    <title>第 2 回 : 2010.05.10</title>
    <link>https://w.atwiki.jp/mifm20110827/pages/17.html</link>
    <description>
      * 発表内容
-[[C++ namespace]]
-[[頂点シェーダの機能]]    </description>
    <dc:date>2016-10-16T20:00:34+09:00</dc:date>
    <utime>1476615634</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mifm20110827/pages/18.html">
    <title>C++ namespace</title>
    <link>https://w.atwiki.jp/mifm20110827/pages/18.html</link>
    <description>
          </description>
    <dc:date>2016-05-16T09:43:59+09:00</dc:date>
    <utime>1463359439</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mifm20110827/pages/13.html">
    <title>top</title>
    <link>https://w.atwiki.jp/mifm20110827/pages/13.html</link>
    <description>
      *Make it Fun Meeting とは？
2 週間に 1 回くらいのペースで主に某カフェで開催している、プログラム関連中心の勉強会です。

お互いに調査した内容を発表することで、新しいことを取り入れ、
自身の技術向上に繋げることで、より良い品質の『モノ』を作れるようになることを目標としています。

最終的にそれらの『モノ』を使用する方が喜んで頂けると、作り手としても嬉しい限りです。
そんな『モノ』作りをしていけたらと思っています。

『Make it Fun Meeting』では、勉強する自分達が楽しくないと意味が無いということで、
色んな意味で『楽』を追求しています。
テーマは『モノ作りに役立つ何か』、そしてモットーは『楽しく』!!
(どんな小さな発表内容でも良いので、必ず準備を行うようにしています。)
(各発表時間は 5 分 ～ 30 分程度。長くなりそうな場合は複数回に分けるようにしています。)

Make it Fun Meeting の名前の由来は、この辺りから来ています。
(Make it Fun Meeting → 『楽しくやろうミーティング』という意味です。)


*発表内容一覧
-[[第 1 回 : 2010.03.23]]
-[[第 2 回 : 2010.05.10]]    </description>
    <dc:date>2016-05-11T09:27:17+09:00</dc:date>
    <utime>1462926437</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mifm20110827/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/mifm20110827/pages/2.html</link>
    <description>
      **メニュー
//-[[トップページ]]
-[[top]]
-発表内容
--[[第 1 回 : 2010.03.23]]
--[[第 2 回 : 2010.05.10]]
----
-[[メニュー]]
//-[[プラグイン紹介&gt;プラグイン]]
//-[[メニュー2]]

// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります


//**更新履歴
//#recent(20)

&amp;link_editmenu(text=ここを編集)    </description>
    <dc:date>2016-05-10T16:19:25+09:00</dc:date>
    <utime>1462864765</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mifm20110827/pages/16.html">
    <title>プログラマブルシェーダの概要</title>
    <link>https://w.atwiki.jp/mifm20110827/pages/16.html</link>
    <description>
      *プログラマブルシェーダの概要

**１．プログラマブルシェーダとは何か？
　　&amp;bold(){&amp;color(darkblue){DirectX の Direct3D レンダリング処理の一部を、プログラマが記述できるようにしたもの。}}

　　DirectX 8 から利用可能で、DirectX バージョンによって利用可能な機能が違うが、
　　DirectX 10 まででは、以下の種類のシェーダがある。
　　（なお、2012.06.25 現在の最新 DirectX SDK バージョンは 2009 年リリースの DirectX 11.0 ）

***・頂点シェーダ (Vertex Shader)　（DirectX 8.0 から利用可能）
　　　プログラマブルシェーダの中では最初に実行される。
　　　頂点変換処理と、ピクセルシェーダへの情報引渡しを行う。
***・ジオメトリシェーダ (Geometry Shader)　（DirectX 10.0 から利用可能）
　　　&amp;bold(){&amp;color(brown){このシェーダは後述の Shader Model 4.0 以上でのみ使うことができる。}}
　　　頂点シェーダの後に実行される。
　　　プログラムにしたがって頂点を増減する。今回は取り扱わない。
***・ピクセルシェーダ (Pixel Shader)　（DirectX 8.0 から利用可能）
　　　頂点シェーダとジオメトリシェーダの後に実行される。
　　　頂点シェーダから渡された情報を使って、ラスタライズ後のピクセル処理を行う。
　　　&amp;bold(){&amp;color(brown){※Expression Blend では、ピクセルシェーダしか使えない。}}
***・ハルシェーダ (Hull Shader)　と　ドメインシェーダ (Domain Shader)
　　　テッセレーション（頂点分割）のために実行される。今回は取り扱わない。

**２．プログラマブルシェーダが使われているのはどんなときか？
　　アンマネージドな DirectX , XNA Game Studio , SlimDX , WPF , etc...
　　ゲーム、デモアプリ、企業製作の独自デバイスのテストショーアプリ、シェーダを利用した画像生成処理、etc...

**３．プログラマブルシェーダで何ができる？
　　きれいな画像を高速描画（^ω^ ）
　　レンダリング過程の途中データの出力・保持、Z バッファをバイナリデータ出力する、など。

**４．プログラマブルシェーダを使うには何が必要か？
　　DirectX 8.0 以上の 3D の初期化ができるグラフィックボード。
　　さらに、対象とする Shader Model のバージョンにグラフィックボードが対応していないといけない。
　　&amp;bold(){&amp;color(darkblue){（なお Shader Model 2.0 が使えるのは DirectX 9.0 から）}}

**５．ゲームがユーザーに要求する PC スペックの落としどころは？
　　&amp;bold(){CPU やメモリよりも、新しいDirectX や新しいシェーダモデルを使えるグラフィックボードかどうかがポイント。}
　　高速 PC でも、DirectX 9 の初期化ができないグラフィックボードはある。

　　Shader Model はバージョンが高いほど高速・高性能だが、現実的には DirectX 9.0 で
　　Shader Model 2.0 あたりを使うのが妥当か。
　　CPU やメモリは今や多くの PC で十分パワーがあるので気にしない。（作るゲームによる）

**６．シェーダモデル (Shader Model) について
　　頂点シェーダ・ピクセルシェーダ・ジオメトリシェーダそれぞれのシェーダ処理で使う関数や構文の、
　　数・種類を決定する、機能のセット。シェーダ処理を記述する際、必ずこれを指定する。

　　これらの各シェーダは、別に全部同じバージョンを指定する必要はなく、ユーザーは１回の
　　シェーダ処理の中で好きなバージョンを組み合わせられる。
　　　→頂点シェーダは 1.1 を使い、ピクセルシェーダは 3.0 を使うなど。

　　以下の種類があり、2012.06.25 現在の最新シェーダモデルは 5.0。
　　（出典：wikipedia「シェーダ」→ http://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%BC%E3%83%80）
|DirectX Version|Vertex Shader|Pixel Shader|Geometry Shader|
|8.0|1.0, 1.1|1.0|-|
|8.1|1.2, 1.3, 1.4|1.1|-|
|9.0|2.0|2.0|-|
|9.0a|2_A, 2_B|2.x|-|
|9.0c|3.0|3.0|-|
|10.0|4.0|4.0|4.0|
|10.1|4.1|4.1|4.1|
|11.0|5.0|5.0|5.0|

**７．新しい DirectX SDK を使うことの欠点
　　古い SDK に入っていたヘッダが除かれていたりするので、ゲームで古いバージョンの
　　Direct3D を使っていると、ビルドできないケースがある。
　　&amp;bold(){&amp;color(brown){＝ 古いバージョンから最新バージョンの DirectX SDK への移行コスト（ソース修正の手間）がかかる。}}

**８．用語解説
-&amp;bold(){FX ファイル}
　　頂点シェーダとピクセルシェーダの処理を記述したテキストファイル。
　　いわばシェーダのソースファイル。エフェクトファイルともいう。
-&amp;bold(){エフェクト}
　　FX ファイルによる頂点シェーダやピクセルシェーダを通した、一連のシェーディング処理のこと。
-&amp;bold(){HLSL}
　　DirectX でシェーダを記述するための言語。FX ファイルはこの言語で書く。
　　DirectX 8 ではアセンブラライクだったが、後に C ライクになった。
-&amp;bold(){PS ファイル}
　　Expression Blend で独自ピクセルシェーダを使う際に必要になる、コンパイル済みエフェクトファイル。
　　（ PS は Pixel Shader の略か？）

----    </description>
    <dc:date>2012-11-11T02:30:25+09:00</dc:date>
    <utime>1352568625</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mifm20110827/pages/14.html">
    <title>第 1 回 : 2010.03.23</title>
    <link>https://w.atwiki.jp/mifm20110827/pages/14.html</link>
    <description>
      *発表内容
-[[キャパビリティクエリ]]
-[[プログラマブルシェーダの概要]]    </description>
    <dc:date>2012-06-27T23:15:38+09:00</dc:date>
    <utime>1340806538</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mifm20110827/pages/15.html">
    <title>キャパビリティクエリ</title>
    <link>https://w.atwiki.jp/mifm20110827/pages/15.html</link>
    <description>
          </description>
    <dc:date>2012-06-18T13:07:11+09:00</dc:date>
    <utime>1339992431</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mifm20110827/pages/6.html">
    <title>プラグイン/編集履歴</title>
    <link>https://w.atwiki.jp/mifm20110827/pages/6.html</link>
    <description>
      * 更新履歴
@wikiのwikiモードでは
 #recent(数字)
と入力することで、wikiのページ更新履歴を表示することができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/17_117_ja.html


-----


たとえば、#recent(20)と入力すると以下のように表示されます。


#recent(20)
    </description>
    <dc:date>2011-08-27T22:44:38+09:00</dc:date>
    <utime>1314452678</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mifm20110827/pages/7.html">
    <title>プラグイン/アーカイブ</title>
    <link>https://w.atwiki.jp/mifm20110827/pages/7.html</link>
    <description>
      * アーカイブ
@wikiのwikiモードでは
 #archive_log()
と入力することで、特定のウェブページを保存しておくことができます。
詳しくはこちらをご覧ください。
＝＞http://atwiki.jp/guide/25_171_ja.html


-----


たとえば、#archive_log()と入力すると以下のように表示されます。
保存したいURLとサイト名を入力して&quot;アーカイブログ&quot;をクリックしてみよう


#archive_log()
    </description>
    <dc:date>2011-08-27T22:44:38+09:00</dc:date>
    <utime>1314452678</utime>
  </item>
  </rdf:RDF>
