こんにちは。Unityサポートエンジニアの黒河です。

このコーナーでは、クロカワが雑談形式でツラツラといろんなことを喋っていきます。
今すぐ役に立つTIPSというよりも今すぐ役に立つチップスというよりも、いつか役立つかもしれない事をつらつらと喋っていきます。

前回では、リアルタイムレンダリングとオフラインレンダリングについて喋りました。
リアルタイムレンダリングでは真面目に計算せずにそれっぽく見せるための手法を使うので、速くレンダリング出来るという話をしてきました。

今回はオフラインレンダリングのベーステクノロジーであるレイトレース方式と、リアルタイムレンダリングのベーステクノロジーであるラスタライズ方式について喋りたいと思います。

レイトレース方式

我々が現実世界で物を見ることが出来るのは、

  1. 光源から光が発せられる
  2. 物体に当たって反射した光が目に入る


というステップを踏んでいるからです。

レイトレース方式では、この現象を出来る限り忠実に再現してレンダリングを行っております。
実際にはカメラの側からレイ(光線)の経路を追跡していきます。
これを塗りつぶすピクセル毎に処理していきます。フルHDの画像をレンダリングする場合は1920×1080回分 光線の経路を追跡してることになります。

レイトレース方式の特徴としては、
・現実の事象に則した形でシミュレーションをしている
・その分計算する量が多くなる

ラスタライズ方式

一方のラスタライズ方式は全く違うアプローチでレンダリングしています。
それっぽくでも良いので速く処理が終わるようにしています。

  1. 3次元空間にある頂点を、カメラのパラメーターを用いて2次元空間にマッピングします
  2. 2次元空間にマッピングされた頂点間をマテリアルや光源等を考慮して塗りつぶし(ラスタライズ)していきます

このような手順でレンダリングされます。
一回輪郭を形とってから、色を塗っていくとい手順なので、我々が絵を描いていく手順に似ていますね。

ラスタライズ法では正しく光のシミュレーションを行っていないため、よりリアリスティックに見せるには様々な技法を駆使する必要が出てきます。
例えば影を落としたりするにはシャドウマップという技法を用いていたり、反射についてはSSR(ScreenSpaceReflection)等を用いて再現したりといった形です。
Unityが影を落とす仕組みについてはコチラ、UnityでのSSRについてはコチラをご覧ください。

レイトレース方式では方式そのものが現実のシミュレーションでしたので様々な見た目を担保できたのですが、ラスタライズ方式ではそうはいかず色々なテクニックを用いてリアリスティックに見せる必要が出てきます。

ラスタライズ方式の特徴としては
・それっぽく見せる方式でレンダリングが速い
・正しくシミュレーションしていないが故に足りない部分があり、そこはテクニックでうまい事何とかする

余談

POLYPHONY DIGITALさんが「ゲーム開発のためのレイトレーシング」と言う講演をされており、30ページ目からの解説がわかりやすいです。
こちらから資料をダウンロードしてみてみてください。

まとめ

レイトレース方式では、光の軌跡を追跡していってレンダリングしていく方式です。計算量が多くレンダリング時間はかかりますが、正しくシミュレーションした絵が出ます。
対してラスタライズ方式では、一回2次元空間に落として色を塗っていく方式です。速いのですが、正しいシミュレーションではありません。リアリスティックに見せるには技法が必要になってきます。

そんな形で、今回はレイトレース方式ラスタライズ方式について喋りました。
次回は、事前に仕込みを入れておいてより綺麗に見せる「ライトベイク」について喋ります!