【エフェクトの作り方】描画優先度とは?

便利な小ネタ・まとめ

※ 新人研修用資料として、作成中のページを先行開示します。
(校閲前のため誤字脱字など読みにくい点があることを、あらかじめご了承ください。)

スポンサーリンク

描画優先度とは?

現実では 近いものは手前に見え、遠いものは奥に見えます。
ゲームエンジンの描画に関しても同じように再現しようとしますが、必ず完璧にはできません。

描画優先度の認識が狂うと、以下のような問題がおきます。

  • 描画の前後が入れ替わる(表示されるべきものが消える)
  • Z-Fightingが起きる

これをコントロールするために、原因と対応をある程度理解しておく必要があります。

スポンサーリンク

描画の前後が入れ替わる

描画の前後が入れ替わることによって、見た目に違和感が生じたり、本来表示されるべきものが見えなくなったりします。

描画の位置関係が事故を起こさない距離にあっても、Particle System の描画優先強度によっては前後が誤認されます。
その結果、前にあるものであっても Order in Layer の指示などによって後ろに追いやられてしまうことがあります。
その結果、本来表示されるべきものが表示されなくなってしまうことがあります。

ただしこれは一概に問題とはいえず、”うまく嘘をつくテクニック” としても使用されます。
(Layer で強制的に前後を入れ替えたり、透明効果を加算したりすることで面白い演出が作れます。)

スポンサーリンク

Z-Fightingが起きる

Z-Fighting とは Mesh のちらつきが起こる原因の一種です。

Mesh同士が近すぎると、どちらを前に表示したらよいかが分かりにくくなり、高速で前後位置が入れ替わります。
Z(奥行き・Depth)に関わる領域内で位置関係を争うため、Z-Fightingと呼ばれます。

また、ParticleでもOpaqueを使用する際に、Z-Fightingが顕著に出る場合があります。
描画負荷を気にするようになると見えてくる問題でもあるため、あらかじめ問題の認識だけはしておいた方が良いです。

よくある原因は、以下のような点です。

キャラと衣装が近すぎてZ-Fighting

キャラクター動きが多いため、キャラの動きとカメラとの位置関係によりZ-Fightingが発生しやすいです。

  • 肌が必要ない部分は削除しておく
  • 可動部分まわりの制御は厳密に行う
  • フリフリの多いキャラ(ポリゴンの多いキャラ)は振り回し過ぎないようにする

などで干渉対策をしているようです。

窓ガラスと明かりの板が近すぎてZ-Fighting

静的な背景の家などは、カメラから離れた際に窓ガラスがZ-Fightingを発生しやすいです。
これは、窓ガラスと内部画像(明かりの板 など)が近すぎるために起きてしまいます。

  • 2つのものを平行に配置する際は、必要のない限りは十分に距離を離す

というのが、シンプルですが効果的な対策です。

描画範囲が広すぎてZ-Fighting

描画する範囲が広ければ広いほど、高い演算能力が必要となります。
そのためカメラの描画範囲を絞り、必要な部分だけを綺麗に描画させる必要があります。

  • Clipping plane の Near の下限値を決め、それよりカメラに近接させなければならない演出を避ける(カメラから0.01mを下限値とする など)
  • Clipping plane の Far の上限値を決め、それをもとにMap構成を検討していく

上記の Near / Far の間を描画しますが、当然ながらカメラに近い方をより細かく見ます。
そのため Far をしぼるよりも、Near の小数点以下の桁数をしぼる方が圧倒的に効果的でした。

実際には Near が、0.01 → 0.05 程度の修正では問題解決には至らないことが多く、
0.01 → 0.1 など桁が変わる際にしっかりと問題が解決されることが多かったです。

また、狭い場所での演出時に Far を 1000 → 100 にしてみてもキャラの問題がほぼ解決されなかったことから、突拍子もない数値ではない限り Far は Z-Fighting にはあまり影響しないようです。

スポンサーリンク

まとめ

描画をコントロールするためには、以下の点に気を付けてください。

  • 適切な描画ルールを認識する
  • 必要十分な距離を空ける
  • 不要にカメラに寄り過ぎる演出は避ける

現実と同じように描画するためには、高い演算能力が必要になってしまいます。
多くの人が楽しめるように、避けられる問題はあらかじめ避けておいてください。

コメント

タイトルとURLをコピーしました