<HEAD>
<TITLE>W-Buffering 2nd</TITLE>
</HEAD>

<BODY BACKGROUND="../Image/Back2.GIF"
	TEXT="#E0E0E0"
	BGCOLOR="#191919"
	LINK="#90D0FF"
	VLINK="#4080D0"
	ALINK="#0000FF">

<BASEFONT SIZE="3" FACE="ＭＳ Ｐ明朝">

<BR>
<CENTER>
<FONT SIZE="7" COLOR="80FF80"><I>W-Buffering<BR>2nd</I></FONT>
<P>
<P>
</CENTER>

<CENTER>
<IMG SRC="../Image/Bar2.gif" ALT "-------------------------------------------" width=100% height="8">
</CENTER>
<P>

<P>
<DL>
<DT>
<FONT SIZE="3" COLOR="#FFFF80"><B><I>98/08/02（日）　</I></B></FONT>
<FONT SIZE="4"><B>− W-Buffering 2nd − 謎は解けた...ってか？</B></FONT>
<P>
<DD>
　<FONT COLOR ="#FF9090">DirectX6</FONT>の新機能である
<FONT COLOR ="#FF9090">W-Buffering</FONT>。
前は結局正確な情報を得られないままに終ってしまったが、ついにその謎が解けた。
とか言ったりしてみたが、実際にはあの記事を書いた後すぐに分かったことなので、
今頃になってここに書くのは遅すぎるという話もあるが....お許しを...m(__)m
<P>
　さて、前にこのコーナーで取り上げた時何が謎だったかというと、
この<FONT COLOR ="#FF9090">新機能W-Buffering</FONT>とは、
結局<FONT COLOR ="#FF9090">何</FONT>なのか？
そして<FONT COLOR ="#FF9090">今までと正確に何が違う</FONT>のか？
ということである。
そして私は前回の時点では、<FONT COLOR ="#FF9090">
DirectX5以前</FONT>の<FONT COLOR ="#FF9090">Z-Buffer</FONT>では、
<FONT COLOR ="#FF9090">Zテストに使うZ座標は視点座標系でのZ座標をそのまま使っていた</FONT>
（正確には線形に写像するが）と思い込んでいた。
というのも、ほとんどの情報では、<FONT COLOR ="#FF9090">
「W-Bufferはこれまでのように z を使うのではなく、
1/z を使うため、近距離のZ精度が高くなる」</FONT>と書かれていたからだ。
<BR>
　前にも書いたが、<FONT COLOR ="#FF9090">Zテストに z をそのまま使うと、
投資変換後のポリゴンの平面性が保持されない</FONT>。
そのため、<FONT COLOR ="#FF9090">
線形補間では正確なz値を計算できず</FONT>、z方向に長いポリゴンとそうでない
ポリゴンが相関（突き抜けたりとかね）する場合などに、正確なzテストを実行できず、
ポリゴンが破綻する可能性がある。
<BR>
　それで、<FONT COLOR ="#FF9090">
「DirectX5以前て、なんていい加減な計算方法を取っているんだ」</FONT>
などと思ってしまった訳だ。
ところが情報を集めて結果、<FONT COLOR ="#FF9090">DirectX5以前でも 1/z で
Zテスト用の座標を計算している</FONT>ことが分かってしまった。
つまり、別に<FONT COLOR ="#FF9090">いい加減な計算ではなかった</FONT>のだ。
<P>
　ということは、どうやら<FONT COLOR ="#FF9090">W-BufferingとZ-Bufferの違い</FONT>とは、
<FONT COLOR ="#FF9090">「テストそのものを浮動小数点で行うか否か」</FONT>
ということだけのようである。
浮動小数点で行うと、例えば<FONT COLOR ="#FF9090">フレームバッファ上のマウス座標から
表示されているポリゴンの座標値を逆算</FONT>したい場合などに、
より精度を高めることができるだろう。
<BR>
　しかし、それ以外にはあまり大きなメリットは思い付かない。
浮動小数点だとzバッファに<FONT COLOR ="#FF9090">最低32bit必要</FONT>になるが、
32bitもあれば、整数でもかなりの精度を期待できるからだ。
近クリップから遠クリップまでの範囲で、
<FONT COLOR ="#FF9090">約42億段階ものz座標値に分割できる</FONT>のである。
これで精度が低いというのは通常考えられないだろう。
W-Bufferingによる劇的な変化というのはあまり無いのではなかろうか？
とまあ、これは個人的な意見。
<P>
　ところで、<FONT COLOR ="#FF9090">W-Bufferingについての
正確な情報があまりに乏しい</FONT>と感じるのは私だけだろうか？<BR>
上でも書いたが、たいがいの記述では
<FONT COLOR ="#FF9090">
「W-Bufferingはこれまでのように z を使うのではなく
1/z を使うため、近距離のZ精度が高くなる」</FONT>
となっているのである。
<FONT COLOR ="#FF9090">
DirectX5以前でも 1/z を使っていたのなら、このような記述は明らかに誤り</FONT>である。
しかも、<FONT COLOR ="#FF9090">浮動小数点がうんぬん</FONT>という話はほとんど出て来ない。
<BR>
　何故なんだろうねぇ。
</DL>

<!-- Signature -->
<FONT SIZE="3" FACE="ＭＳ Ｐ明朝">

<CENTER>
<IMG SRC="../Image/Bar2.gif" ALT "-------------------------------------------" width=90% height="16">
</CENTER>

<UL>
	<A HREF="index.html"><B><I>Masa's Column</I></B>に戻る</A>

	<TABLE>
	<TR>
	<TD>
	<A HREF="../index.html"><IMG SRC="../Image/MasaPlate.gif" BORDER="0" WIDTH="112" HEIGHT="48"></A>
	</TD>
	<TD><A HREF="../index.html">ホームページに戻る</A></TD>
	</TR>
	</TABLE>

	本ページの御意見・御感想は<BR>
<B>
<ADDRESS>
	<A HREF="mailto:masa@daionet.gr.jp">
		<I>E-Mail: masa@daionet.gr.jp</I></A>
</ADDRESS>
</B></UL>

</FONT>
<!-- Signature -->

</BODY>
