グラフィック

ゲームの世界で反射を表現する

グラフィック
この記事は約3分で読めます。

こんにちは。
プログラマの中村です。

つい昨日に年が明けたような感覚ですが、1月も残すところ1週間ほどですね。

今回はゲームの世界で反射を表現する方法について紹介していきたいと思います。

鏡面反射とは

鏡や磨かれた床、濡れたコンクリートなど、現実世界では様々な物体にほかの物体が映り込みます。

物理的に言えば、他の物体から射出された光について、
拡散や吸収をすることなく反射することで、映り込んで見えるのです。
このような反射を鏡面反射(正反射)と呼びます。

この物理現象をゲームで再現するには、「レイトレーシング」が必要となり、計算量も膨大なものになります。
ハードウェアの高性能化に伴って、近年のAAAタイトルやリアル志向のゲームでも採用されることが増えてきました。

ただ、今回の記事では高性能ハードウェアが使えない場合を考慮して、
レイトレーシングを使わず反射を表現する方法について書いていきたいと思います。

Reflection Probe(リフレクションプローブ)

ある一点から6方向にオブジェクトをレンダリング(描画)し、
キューブマップと呼ばれるテクスチャ群を作成します。
実際にオブジェクトをレンダリングする際に、このキューブマップを用いることで反射を表現します。

ただ、視点が移動することに弱く、正しく反射の像を得たい時に使うことは少ないです。

用途としては、おおまかにオブジェクトへの映り込みが欲しい時に用いられることが多いです。
また、キューブマップは事前に作成しておくため描画負荷は低めです。

Planar Reflection(平面反射)

ゲームの世界では「カメラ」の動作を模倣することで、画面にオブジェクトを描画しています。
そこで、下図のようなカメラで撮影すれば、反射する際に映る像を得ることができます。

実際に実装するとこのような描画結果になり、鏡を表現できていると言えます。

ただ、この手法はカメラを2つ使用しているので、描画の負荷も2倍になります。
なので、実際にゲームで使う場合にはハードウェアの性能が負荷に耐えうるか調査する必要があります。

Screen Space Reflection(スクリーンスペースリフレクション)

Screen Spaceとはポストプロセス(レンダリング結果を使用した後処理)のことを指しています。
つまりスクリーンスペースリフレクションは、
画面にレンダリングされた結果を使って、反射を表現する手法になります。

この手法のメリットは、Planar Reflectionよりも描画にかかる負荷が軽くなります。
デメリットは上の画像の中にも現れていますが、何かわかりますでしょうか。

正解は「画面に映っているもの以外は反射できない」ことです。
このシーンには、下の画像のようなオブジェクトが配置されています。

円の部分に注目すると、最後まで正しくオブジェクトを描けていないことが分かります。
このようにスクリーンスペースリフレクションは像が不自然になりやすいというデメリットがあります。

話は少し飛びますが、PCゲームなどのグラフィック設定で、
SSAOといった言葉を聞いたことがある方もいるのではないでしょうか。
このSSとは、まさに「Screen Space」を指しています。

まとめ

それぞれの手法をまとめます。

手法 品質 負荷
Reflection Probe 用途次第 軽い
Planar Reflection 高い 重い
Screen Space Reflection 低い 比較的軽い

今回は反射を表現する手法について、いくつかご紹介しました。
ゲームでオブジェクトの映り込みが起きている際に、
どのような手法が使われているか観察してみるのも面白いかもしれません。

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