SW3D ATI bug

dirGames-Lで ATI社製のグラフィックカードでよく起こる、「sawtooth(のこぎり歯)」現象について議論があったので自分的まとめ。そもそも、以前書いたように 一部のATIではDirectXの depthBufferDepthが24でなく16しか使えないみたいなことがあるみたいだけど。 ともかくとして、現象は、どっちのポリゴンが前か後ろか分からないから適当に描画されて「のこぎり歯」になってしまう。
何でかというと

  • モデリングした時点でポリゴンがほぼ同位置に重なっている。
  • 表示深度が浅い(depthBufferDepth = 16)。

「重なる」というのが微妙な表現だけど、例えば 10m離れたポリゴン通しでも、数キロメートルのスケールで離れて見れば「重なってる」ということに。 で、回避策は

  • 表示深度を深くする(depthBufferDepth = 24)。
  • カメラの描画開始位置を深くする(hitherを20か40まで大きくする)。
  • ついでにカメラの描画終了位置も最低限に(yonを小さく)。
  • モデルの階層関係を変更する。
  • モデリングし直す。

カメラの hitherとyonで解決できるのは知らなかった。今度問題があれば試してみよう。それはそうと、最近「Dir3d-l」でShockwave3D語ってるのが盛り上がってる様子。 僕らみたいに、未だに日本で Shockwave3Dやってる人たちには期待させるような内容だね。ともかく次期バージョンで、新Shockwave3Dが登場することを期待してボチボチやっていこう。