半透明のトリック

前回、Zバッファの弱点を紹介しました。今回は、その弱点をなんとかしようというトリックです。

Zのエラー

写真は、Zバッファへの書き込みを停止した状態です。最前列に不透明のキャラクター、後列に半透明キャラクターを配置しています。手前から順番に描画されると、不透明キャラクターに上書きされ、前後関係がおかしなことになります。

これを解決するためのトリックが、Zソートです。

Zソートを実行

Zソートを行うと、写真のように正しく描画できるようになります。これで解決!となれば万歳ですが、Zソートには図形交差時に前後判断ができないという重大な欠点があります。
1つのエミッターから放出されたパーティクルを単位として、Zソートが行われるため、パーティクル群同士が交差した場合、Zソートは失敗します。
Zバッファ、Zソート、それぞれ一長一短ですが、その特性を理解して適切に使い分けることで、希望する表示を得ることができます。

次期バージョンには、詳細な制御を可能にする次の2つの設定が追加されます。

Zチェック

Zバッファの泣き所

3Dグラフィックを実現するグラフィックカードは、一般的にZバッファをベースに動作しています。メモリーが限られていた3Dグラフィックの黎明期は、ポリゴンの前後判断がもっとも難しい問題でした。現在は、潤沢なメモリーが利用できるようになり、高速で確実に前後判断ができるZバッファという仕組みが使われています。

このZバッファ、原理的にシンプルでしかも強力です。

Z停止
Zバッファを停止した場合の画面です。手前のキャラから描いています。後ろのキャラクターが、後から描かれるため、手前のキャラクターを上書きしてしまいます。これだと前後関係がおかしいことになります。

Z有効
Zバッファへの書き込みを有効にすると、前後判断が適切に行われ、前後関係が正しく描かれます。Zバッファは、画面のピクセル単位で判断できるため、どんなに複雑な形でも正しく描画できます。

このZバッファ、画面のピクセル単位で比較するという原理からくる大きな弱点が存在します。

判断失敗
それは、写真のように半透明の場合です。
手前の半透明キャラが先に描かれると、後から描く奥のキャラクターは、手前のキャラが前方にいると判断して重なる部分が描画されません。半透明に透けて見えるようになるのが好ましいのですが。

半透明を多用するパーティクルやガラスは、このような理由で前後判断ができません。ただし、どんな場合でも逃げ道はあるもので、ある種のトリックを使うと、「前後判断をしている」風の描画を実現できます。これは、次回のアップデータで提供できる予定です。