AlphaZeroTest

窓ガラスの向こうに見えないはずのモノが見えるのをなんとかする。

 PIを作っている時に、しばしばテクスチャを切り抜いて窓なんかを再現したりしますが、たまに困ったことが起きます。
 切り抜いたところから見えないはずの向こう側が見えてしまったりするんですね。
 何でそんなことが起こるのか、という詳しい解説は別ページに譲って、ここではカスタマイザを使ってなんとかしてみようと思います。

■ alpha-testerを使う

 アルファ・テスターとは、アルファ・ゼロ・テストともいいますが、簡単に言えばあるポリゴンの貼られたテクスチャが完全に透けているところを「無かったことにする」機能です。
 もうちょっと詳しく言うと、α値がゼロの領域をZバッファに書き込まないようにします。
 まあとにかく、透けすぎるのを防ぐ機能だと思ってもらってかまいません。
 とりあえず使い方の例。
Object3D "Model" {
  ModelFileName = "Model.x";
  ModelScale = 1.0;
  AlphaZeroTest = 1,4;  ←これ
  Joint3D "_LOCAL" {
    AttachCoord = ( 0.0, 0.0, 0.0);
    LocalCoord = ( 0.0, 0.0, 0.0);
  }
}
 透過部分を持つテクスチャが指定されている素材の番号を0から順に数えて記入すればOK。
 カンマでいくつでも指定できます。

 すっきり透過しているときはこれでいいんですが、半透明だとうまくいきません。そこで次善の策です。

■ shadow-inhibitorを使う

 それって影の制御でしょぉ~?と思った方、正解です。
 確かにこのカスタマイザは影の制御です。
 が、今回使うTransparentはちょっと毛色が違います。
 影を受けず、落とさず、一番最後に描写されるんですね。
 重なって見えなくなってしまうかもしれないポリゴンを先に描写することで、透けすぎるのを防止します。

 ところがこれも万能ではありません……一番最後に、てところがミソです。
 一番最後はひとつしか存在し得ません。ですから複数の素材を指定すると結局透けてしまうことがあるのです。
 世の中ままなりませんね。

■ じゃあどうしろってんだよ

 ひとつのモデル内ならば、モデル内での描写順をいじることで透過ポリゴンによる透けすぎを回避できます。
 カスタマイザで回避する方法は最後の手段だと思いましょう。覚えておいて損はないですが。
 適切な手段を適切なタイミングで使うのが一番大切なんです。

 あと、レイアウトに配置した時にそれぞれのPIの半透明ポリゴン同士がケンカすることがあるんですが、ぶっちゃけた話これはもうどうにもなりません。
 全部のポリゴンを一元的に読み込んで順番に描写するように改造でもしない限り改善はほぼ不可能なので、どうしようもない時もある、とは覚えておいてくださいね。

 ではまた!

名前:
コメント:

すべてのコメントを見る
最終更新:2017年03月02日 15:01
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。