1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
3<!-- InstanceBegin template="/Templates/default_template.dwt" codeOutsideHTMLIsLocked="false" -->
4<head>
5<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6<meta http-equiv="Content-Style-Type" content="text/css" />
7<!-- InstanceBeginEditable name="CSS の相対パス指定" -->
8<link href="../../../common/manual.css" rel="stylesheet" type="text/css" />
9<!-- InstanceEndEditable -->
10<!-- InstanceBeginEditable name="ページのタイトル" -->
11<title>書き込みテスト</title>
12<!-- InstanceEndEditable -->
13</head>
14<body>
15<div>
16  <div class="body"> <!-- InstanceBeginEditable name="本文のタイトル" -->
17    <h1>書き込みテスト</h1>
18    <!-- InstanceEndEditable --> <!-- InstanceBeginEditable name="本文" -->
19    <p>書き込みテストは、フラグメントの情報を参照値として、実際にフレームバッファへ書き込むかどうかの判定を、フラグメントごとに行う処理のことです。</p>
20    <p>判定基準を指定することで、条件に満たない不要なフラグメントは描画の対象からとり除かれます。</p>
21    <p> 表 1 書き込みテストの種類</p>
22    <table>
23      <thead>
24        <tr>
25          <th>種類</th>
26          <th>説明</th>
27        </tr>
28      </thead>
29      <tbody>
30        <tr>
31          <th>アルファテスト</th>
32          <td>フラグメントのアルファ値とアルファテスト用にここで設定する値を比較します。</td>
33        </tr>
34        <tr>
35          <th>ステンシルテスト</th>
36          <td>フラグメントのステンシルテスト用にここで設定する値と書き込み先「ステンシルバッファ」の値を比較します。<br />
37            比較結果に応じて書き込み先の値を上書きします。</td>
38        </tr>
39        <tr>
40          <th>デプステスト</th>
41          <td>フラグメント単位のカメラからの奥行き情報「デプス値」と書き込み先「デプスバッファ」上の値を比較します。<br />
42            判定により、使用が決まったフラグメントのデプス値で書き込み先を上書きします。</td>
43        </tr>
44      </tbody>
45    </table>
46    <p class="new_hint">補足:<br />
47      書き込みテストは、「アルファテスト」 →「 ステンシルテスト」→「 デプステスト」の順番で処理されます。</p>
48    <p class="hint_warn">注意:<br />
49      各書き込みテストを使用すると処理負荷が増加します。デフォルトでは、すべてのフラグメントテストと操作は無効になっています。 </p>
50    <h2>アルファテスト</h2>
51    <p>アルファテストは、フラグメントの「アルファ値」と「アルファテスト用の参照値」を比較した結果で、使用するフラグメントを決める処理のことです。</p>
52    <ul>
53      <li>比較条件を満たさないとき、そのフラグメントを描画の対象からとり除きます。</li>
54      <li>比較条件を満たしたフラグメントは、「ステンシルテスト」の処理へと渡されます。<br />
55        この状態を「通過」と表現します。</li>
56    </ul>
57    <p class="new_hint">用途:<br />
58      テクスチャ画像等のアルファ値を用いた半透明表現等に使用されます。</p>
59    <h3>アルファテストの比較関数</h3>
60    <p>アルファテストで、「アルファ値」と「参照値」を比較する為に使用する計算式です。</p>
61    <p>CreativeStudio では、 8 種類の比較関数から選択することができます。</p>
62    <p>表 2 アルファテストの比較関数の種類</p>
63    <table>
64      <thead>
65        <tr>
66          <th>比較関数</th>
67          <th>関数名</th>
68          <th>説明</th>
69        </tr>
70      </thead>
71      <tbody>
72        <tr>
73          <th>アルファ値 &lt; 参照値</th>
74          <th>LESS</th>
75          <td>フラグメントのアルファ値が参照値より小さければテストを通過します。</td>
76        </tr>
77        <tr>
78          <th>アルファ値 ≦ 参照値</th>
79          <th>L_EQUAL</th>
80          <td>フラグメントのアルファ値が参照値と等しい、もしくは小さければテストを通過します。</td>
81        </tr>
82        <tr>
83          <th>アルファ値 = 参照値</th>
84          <th>EQUAL</th>
85          <td>フラグメントのアルファ値が参照値と等しければテストを通過します。</td>
86        </tr>
87        <tr>
88          <th>アルファ値 ≧ 参照値</th>
89          <th>G_EQUAL</th>
90          <td>フラグメントのアルファ値が参照値と等しい、もしくは大きければテストを通過します。</td>
91        </tr>
92        <tr>
93          <th>アルファ値 &gt; 参照値</th>
94          <th>GREATER</th>
95          <td>フラグメントのアルファ値が参照値より大きければテストを通過します。</td>
96        </tr>
97        <tr>
98          <th>アルファ値 ≠ 参照値</th>
99          <th>NOT_EQUAL</th>
100          <td>フラグメントのアルファ値が参照値と等しくなければテストを通過します。</td>
101        </tr>
102        <tr>
103          <th>すべて通過させる</th>
104          <th>ALWAYS</th>
105          <td>常にテストを通過します。</td>
106        </tr>
107        <tr>
108          <th>すべて通過させない</th>
109          <th>NEVER</th>
110          <td>常にテストを通過しません。</td>
111        </tr>
112      </tbody>
113    </table>
114    <p>図 1 アルファテストの処理</p>
115    <img class="user_guide_chart" src="assets/write_test_alpha_test.png" alt="アルファテスト"/>
116    <h2>ステンシルテスト</h2>
117    <p>ステンシルテストは、「ステンシル用の参照値」と「ステンシルバッファの値」を比較した結果で、使用するフラグメントを決める処理のことです。</p>
118    <p class="hint_warn">注意:<br />
119      CreativeStudio の「ステンシルテストの設定」は、マテリアルパネルの「詳細モード」で設定します。</p>
120    <ul>
121      <li>比較条件を満たさないとき、そのフラグメントを描画の対象からとり除きます。</li>
122      <li>比較条件を満たしたフラグメントは、「デプステスト」の処理へと渡されます。<br />
123        この状態を「通過」と表現します。</li>
124    </ul>
125    <p>通過したフラグメントの値でステンシルバッファを更新することができます。</p>
126    <p class="new_hint">用途:<br />
127      ステンシルテストは主に描画する領域を限定する「マスク処理」に使用されます。</p>
128    <h3>ステンシルテストの比較関数</h3>
129    <p>ステンシルテストで、「ステンシルバッファの値」と「参照値」を比較する為に使用する計算式です。</p>
130    <p>CreativeStudio では、 8 種類の比較関数から選択することができます。</p>
131    <p>表 3 ステンシルテストの比較関数の種類</p>
132    <table>
133      <thead>
134        <tr>
135          <th>比較関数</th>
136          <th>関数名</th>
137          <th>説明</th>
138        </tr>
139      </thead>
140      <tbody>
141        <tr>
142          <th>すべて不通過</th>
143          <th>NEVER</th>
144          <td>常に通過しません。</td>
145        </tr>
146        <tr>
147          <th>すべて通過</th>
148          <th>ALWAYS</th>
149          <td>常に通過します。</td>
150        </tr>
151        <tr>
152          <th>ステンシルバッファの値より小さければ通過</th>
153          <th>LESS</th>
154          <td>参照値がステンシルバッファの値より小さければ通過します。</td>
155        </tr>
156        <tr>
157          <th>ステンシルバッファの値以下であれば通過</th>
158          <th>L_EQUAL</th>
159          <td>参照値がステンシルバッファの値と等しい、もしくは小さければ通過します。</td>
160        </tr>
161        <tr>
162          <th>ステンシルバッファの値と等しければ通過</th>
163          <th>EQUAL</th>
164          <td>参照値がステンシルバッファの値と等しければ通過します。</td>
165        </tr>
166        <tr>
167          <th>ステンシルバッファの値以上であれば通過</th>
168          <th>G_EQUAL</th>
169          <td>参照値がステンシルバッファの値と等しい、もしくは大きければ通過します。</td>
170        </tr>
171        <tr>
172          <th>ステンシルバッファの値より大きければ通過</th>
173          <th>GREATER</th>
174          <td>参照値がステンシルバッファの値より大きければ通過します。</td>
175        </tr>
176        <tr>
177          <th>ステンシルバッファの値と等しくなければ通過</th>
178          <th>NOT_EQUAL</th>
179          <td>参照値がステンシルバッファの値と等しくなければ通過します。</td>
180        </tr>
181      </tbody>
182    </table>
183    <p>図 2 ステンシルテストの処理</p>
184    <img class="user_guide_chart" src="assets/write_test_stencil_test.png" alt="ステンシルテスト"/>
185    <h4>ステンシルテストの詳細な制御</h4>
186    <h5>テストマスク</h5>
187    <p>ステンシルテストでは、「テストマスク」で設定した値を利用して、ステンシルテスト値の範囲を指定できます。</p>
188    <p>デフォルトの値は 255 で、全範囲が指定されています。</p>
189    <h5>ステンシルテストとデプステストの結果への処理</h5>
190    <p>ステンシルテストとデプステストの結果に対する処理を設定できます。</p>
191    <p>表 4 「ステンシルテスト」と「デプステスト」の結果</p>
192    <table>
193      <thead>
194        <tr>
195          <th>項目</th>
196          <th>説明</th>
197        </tr>
198      </thead>
199      <tbody>
200        <tr>
201          <th>ステンシルテスト失敗時の処理</th>
202          <td>フラグメントが、ステンシルテストに失敗したときです。それ以降の処理<em>デプステスト</em>は行われません。</td>
203        </tr>
204        <tr>
205          <th>デプステスト失敗時の処理</th>
206          <td>フラグメントが、ステンシルテストの判定により使用が決まり、デプステストに失敗したときです。</td>
207        </tr>
208        <tr>
209          <th>デプステスト成功時の処理</th>
210          <td>フラグメントが、ステンシルテストとデプステストの両判定により使用が決まったときです。</td>
211        </tr>
212      </tbody>
213    </table>
214    <p>テストの結果が上記に当てはまる場合、CreativeStudio は、ステンシル値の操作を次の 8 種類の関数から選ぶことができます。</p>
215    <p>表 5 ステンシル値に対して操作可能な関数</p>
216    <table>
217      <thead>
218        <tr>
219          <th>項目</th>
220          <th>関数名</th>
221          <th>説明</th>
222        </tr>
223      </thead>
224      <tbody>
225        <tr>
226          <th>現在の値を保持</th>
227          <th>KEEP</th>
228          <td>デフォルト設定です。現在のステンシル値を保ちます。ステンシルバッファの値は更新されません。</td>
229        </tr>
230        <tr>
231          <th>0 に置き換え</th>
232          <th>ZERO</th>
233          <td>ステンシルバッファの値を 、0 で更新します。</td>
234        </tr>
235        <tr>
236          <th>参照値に置き換え</th>
237          <th>REPLACE</th>
238          <td>ステンシルバッファの値を、ステンシルテスト参照値で指定した値で更新します。</td>
239        </tr>
240        <tr>
241          <th>増加 ( 極値処理 : クランプ ) </th>
242          <th>INCR</th>
243          <td>ステンシルバッファの値を 1 増やします。<br />
244            ステンシル値は 0 または 2 の n 乗 -1 にクランプ処理されます。 n はステンシルバッファのビット数です。</td>
245        </tr>
246        <tr>
247          <th>増加 ( 極値処理 : 回り込み ) </th>
248          <th>INCR_WRAP</th>
249          <td>ステンシルバッファの値を 1 増やします。<br />
250            ただし、ステンシルバッファの値が 1 を超えて増加した場合、値はラップ ( 回り込み ) されます。</td>
251        </tr>
252        <tr>
253          <th>減少 ( 極値処理 : クランプ ) </th>
254          <th>DECR</th>
255          <td>ステンシルバッファの値を 1 減らします。<br />
256            ステンシル値は 0 または 2 の n 乗 -1 にクランプ処理されます。 n はステンシルバッファのビット数です。</td>
257        </tr>
258        <tr>
259          <th>減少 ( 極値処理 : 回り込み ) </th>
260          <th>DECR_WRAP</th>
261          <td>ステンシルバッファの値を 1 減らします。<br />
262            ただし、ステンシルバッファの値が 0 を超えて減少した場合、値はラップ ( 回り込み ) されます。</td>
263        </tr>
264        <tr>
265          <th>ビット単位での反転</th>
266          <th>INVERT</th>
267          <td>ステンシルバッファの値をビット単位で反転させます。</td>
268        </tr>
269      </tbody>
270    </table>
271    <h2>デプステスト</h2>
272    <p>デプステストは、フラグメントの「デプス値」と「デプスバッファのデプス値」を比較した結果で、使用するフラグメントを決める処理のことです。</p>
273    <ul>
274      <li>比較条件を満たさないとき、そのフラグメントを描画の対象からとり除きます。</li>
275      <li>比較条件を満たしたフラグメントは、デプステストを「通過」します。</li>
276    </ul>
277    <p> デプステストを通過したフラグメントは、ブレンダの処理を経てフレームバッファへ書き込まれます。</p>
278    <p>「デプスマスク」を有効にすると、通過したフラグメントのデプス値でデプスバッファを更新できます。</p>
279    <p class="new_hint">用途:<br />
280      通常、視点から見えない隠れたポリゴン面を処理対象からとり除く「陰面除去」に使用されます。</p>
281    <h3>デプステストの比較関数</h3>
282    <p>デプステストで、「デプス値」と「デプスバッファの値」を比較する為に使用する計算式です。</p>
283    <p>CreativeStudio では、 8 種類の比較関数から選択することができます。</p>
284    <p>表 6 デプステストの比較関数の種類</p>
285    <table>
286      <thead>
287        <tr>
288          <th>比較関数</th>
289          <th>関数名</th>
290          <th>説明</th>
291        </tr>
292      </thead>
293      <tbody>
294        <tr>
295          <th>デプス値 &lt; デプスバッファの値</th>
296          <th>LESS</th>
297          <td>フラグメントのデプス値がデプスバッファのデプス値より小さければ、テストを通過します。</td>
298        </tr>
299        <tr>
300          <th>デプス値 ≦ デプスバッファの値</th>
301          <th>L_EQUAL</th>
302          <td>フラグメントのデプス値がデプスバッファのデプス値と等しい、もしくは小さければテストを通過します。</td>
303        </tr>
304        <tr>
305          <th>デプス値 = デプスバッファの値</th>
306          <th>EQUAL</th>
307          <td>フラグメントのデプス値がデプスバッファのデプス値と等しければテストを通過します。</td>
308        </tr>
309        <tr>
310          <th>デプス値 ≧ デプスバッファの値</th>
311          <th>G_EQUAL</th>
312          <td>フラグメントのデプス値がデプスバッファのデプス値と等しい、もしくは大きければテストを通過します。</td>
313        </tr>
314        <tr>
315          <th>デプス値 &gt; デプスバッファの値</th>
316          <th>GREATER</th>
317          <td>フラグメントのデプス値がデプスバッファのデプス値より大きければテストを通過します。</td>
318        </tr>
319        <tr>
320          <th>デプス値 ≠ デプスバッファの値</th>
321          <th>NOT_EQUAL</th>
322          <td>フラグメントのデプス値がデプスバッファのデプス値と等しくなければテストを通過します。</td>
323        </tr>
324        <tr>
325          <th>すべて通過させる</th>
326          <th>ALWAYS</th>
327          <td>常にテストを通過します。</td>
328        </tr>
329        <tr>
330          <th>すべて通過させない</th>
331          <th>NEVER</th>
332          <td>常にテストを通過しません。</td>
333        </tr>
334      </tbody>
335    </table>
336    <p>図 3 デプステストの処理</p>
337    <img class="user_guide_chart" src="assets/write_test_depth_test.png" alt="デプステスト"/> <!-- InstanceEndEditable --> </div>
338  <div class="footer" />
339</div>
340</body>
341<!-- InstanceEnd -->
342</html>
343