レンダリングは、コンピュータグラフィックスを使って3D画像を作る際の最後のステップです。レンダリングは、基本的なモデル、テクスチャ、ライトを使用し、完全な画像に仕上げます。レンダリングには、従来のオフラインレンダリングと、ゲームやインタラクティブメディアで使用されるリアルタイムレンダリングの2種類があります。オフラインレンダリングは高品質の画像を生成することに重点を置き、リアルタイムレンダリングはビジュアル品質とパフォーマンスのバランスをとることを目的としています。両方のレンダリングの仕組みを知ることで、アーティスト、テクニカルディレクター、開発者は、3Dレンダリングを最大限に活用することができます。
レンダリングのパイプラインとは、モデル、テクスチャ、ライト、カメラ設定などの3Dデータを2D画像に変換するプロセスのことです。このプロセスは、オフラインレンダリングとリアルタイムレンダリングの両方で重要ですが、その目的は異なります。オフラインレンダリングは、映画、アニメーション、プリレンダリングが必要なシーンで使用され、時間はかかりますが、最高の品質を実現することに重点を置いています。ビデオゲームやVRのようなリアルタイムレンダリングでは、品質と高速パフォーマンスのバランスを取ることに重点を置いています。
オフラインレンダリングでもリアルタイムレンダリングでも、パイプラインは複雑なタスクをより小さなステップに分割するので、GPUやCPUは大量のデータをより効率的に処理できるようになります。このプロセスには、3Dモデルを変換、照明の適用、テクスチャの処理、そして最後に完成した画像を表示するなどがあります。
より技術的な解説は、Clickety Clackがの動画が非常にわかりやすいです:
レンダリングパイプラインは、レンダリングプロセスを整理し、シェイプからライティングまで、シーンのすべてを明確な順序で段階的に処理するようにします。この方法により、プロセスの各部分が最適化されるため、何百万ものポリゴンや テクスチャがある複雑なシーンも効率的にレンダリングできます。
速度よりも品質が重視されるオフラインレンダリングでは、パイプラインによってレイトレーシングのような高度なエフェクトを使用し、リアルな影や反射を作成できます。リアルタイムレンダリングでは、Zバファリング、バックフェイスカリング、LOD(レベルオブディテール)などの方法を使用して作業負荷を軽減しながら、ビジュアルクオリティを維持することで、スピードに最適化されています。
具体的な手順は、使用するレンダラーやゲームエンジンによって異なるかもしれませんが、主なステージは似ています:
ビデオゲームのようなリアルタイムでの使用でも、映画のようなオフラインのプロジェクトでも、レンダリングは、生の3Dデータを最終的な画像に変える一連のプロセスを踏みます。このプロセスの各段階では、レンダリングの品質と速度の両方を向上させることができます。これらの段階を分解し、リアルタイムレンダリングとオフラインレンダリングの主な違い、特にラスタライズとオフラインレンダリングで使用される手法の違いに注目してみましょう。
ジオメトリ処理では、主に3Dオブジェクトを元のモデル空間からカメラ空間に変更します。これは、モデルとビューのマトリクスや プロジェクションのマトリクスなど、3Dシーンを2Dスクリーン上に表示できるように準備する重要なマトリクス変換を使用して行われます。
リアルタイムレンダリングでもオフラインレンダリングでも、Zバッファリングは非常に重要です。この技術では、カメラからオブジェクトまでの距離をチェックして、最終画像でどのオブジェクトを表示するかを決定します。
ラスタライゼーションとは、幾何学図形(主に三角形)を2D画面上の断片(潜在的なピクセル)にするプロセスである。しかし、リアルタイムレンダリングでは、オフラインレンダリングと比べて、ラスタライゼーションの使われ方と依存度がかなり異なります。
シェーディングとは、オブジェクトの表面特性とシーンの照明に基づいて、各フラグメントやピクセルの最終的な色を決定するプロセスです。ここでシェーダーが使用されます。シェーダーは、光がサーフェスとどのように相互作用するかを決定する小さなプログラムです。
シーンのジオメトリが処理され、各フラグメントにシェーディングとライティングが施されると、最終的な画像が作成されます。この段階では、すべての情報を最終的な2D画像にまとめます。
リアルタイムレンダリングとオフラインレンダリングのパイプラインは、どちらも基本的なステージは同じですが、そのアプローチと重点は大きく異なります。リアルタイムレンダリングは、スピードと効率性を重視し、ラスタライズや光の近似などのテクニックを使用して、高いフレームレートで魅力的なビジュアルを作成します。これとは対照的に、オフラインレンダリングは正確さとディテールに重点を置き、多くの場合、スピードを犠牲にして、高いレベルのリアリズムを提供するレイトレーシングのようなテクニックを使用します。
技術の進歩に伴い、2つのパイプラインの差は徐々に小さくなっています。リアルタイム・レイトレーシングが一般的になり、リアルタイム・アプリケーションでより正確なライティングと反射が可能になりましたが、オフライン・レンダリングの品質にはまだ及びません。どちらの技術も発展を続けており、それぞれの分野で可能性の限界を広げています。
OpenGLはリアルタイムレンダリングパイプラインの良い例です:
オフラインレンダリングでは、このパイプラインはレイトレーシングで強化することができますが、リアルタイム状況でのOpenGLは速度を優先します。
シェーダーは、頂点、フラグメント、ピクセルの処理方法を決定する小規模なプログラムです。オフラインとリアルタイムの両方のパイプラインで、シェーダーはアーティストや開発者が独自のカスタマイズされたエフェクトを作成することを可能にします。
オフラインレンダリングでは、シェーダは複雑なマテリアル、サブサーフェススキャッタリング、高度なライティングモデルを扱うことができます。リアルタイムアプリケーションでは、フラグメントシェーダは、テクスチャ、カラー、およびライティング効果をすばやくレンダリングするために非常に重要です。速度を維持するために、多くの場合、簡略化された近似値を使用して、パフォーマンスを低下させることなく優れた品質を実現します。
古いレンダリングシステムは固定機能パイプラインを使用しており、ステップ(頂点変換やライティングなど)はあらかじめ設定されており、変更することはできませんでした。VulkanやDirect3Dのような最新のAPIはプログラマブルなパイプラインを提供し、開発者はレンダリングプロセスの各段階を制御するカスタムシェーダーを記述できるため、より柔軟で優れたビジュアル品質が実現します。
従来のオフラインレンダリングでは、可変パイプラインにより、皮膚やガラスなどのマテリアルをシミュレートできる、詳細なカスタムシェーダーを作成できます。リアルタイムパイプラインでは、パフォーマンスとビジュアルクオリティのバランスをよりコントロールできます。
レンダリングパイプラインは、3Dシーンをスクリーン上の2D画像に変換するための連続したステップです。ハイエンドのビジュアルエフェクトや アニメーションのオフラインレンダリングでも、ビデオゲームのリアルタイムレンダリングでも、基本的なプロセスはほぼ同じです。しかし、最高のリアリズムを目指すか、スムーズな操作のために最短でフレームを生成するかなど、目的によってアプローチは変わります。
このプロセスは、テクスチャ、照明、カメラの位置とともに、頂点、エッジ、面で構成されるモデルを含む、未加工の3Dデータから始めます。これらの3Dモデルはそれぞれのオブジェクトの位置関係を定義するモデル空間に存在します。この3Dデータを平らな2D画面に表示するには、一連の変換が必要です。これには、3D空間内の各頂点の位置を、行列演算を使用して2D画面座標に変換します。この変換には、カメラの位置に基づいてシーンを調整するビューイング変換や、遠くの物体を小さく見せることで遠近感を作り出すプロジェクション変換などがあります。
3Dモデルが2D座標に変換された後、次の重要なステップはライティングとシェーディングで、表面と光の影響を計算します。このステップでは、表面が光をどのように反射するか、影がどのように形成されるか、シーンの照明に基づいてテクスチャやマテリアルがどのように表示されるかを決定します。オフラインレンダリングでは、このプロセスは非常に正確に行われます。パストレーシングのような技術は、オブジェクトから跳ね返る光線を追跡し、反射、屈折、ソフトライティングのような詳細をキャプチャすることで、リアルな照明をシミュレートするためによく使用されます。この手法には多くの計算能力が必要で、1フレームのレンダリングに数時間から数日かかることもありますが、リアルな画像を作成できます。一方、リアルタイムレンダリングでは、スピードが最優先されます。ビデオゲームなどに必要なパフォーマンスを維持するために、ライティング計算ではさまざまなショートカットや近似値が使用されます。
スクリーンに表示されているものに基づいて反射を作成するスクリーン空間反射や、ライティングを事前に計算して保存するベイクしたライティングなどの技術は、処理の高速化につながります。これらの方法は、オフラインレンダリングと比較してリアリズムは多少低下するものの、システムが高いフレームレートを維持することができます。最近のリアルタイムレイトレーシングのようなGPU技術の向上は、オフラインレンダリングほど詳細ではないものの、フレームレートを滑らかに保ちながら、よりリアルなライティング効果が可能になりつつあります。
パイプラインの次のステップはラスタライズで、2Dスクリーン座標を実際のピクセルに変換します。このプロセスでは、シーンの幾何学的形状(主に三角形)が、断片またはピクセルデータに変換されます。画面上の各ピクセルは、3Dオブジェクトのテクスチャ、色、反射率などのマテリアル・プロパティと、光がそれとどのように影響し合うかに基づいて、その色が付けられます。簡単に言うと、この段階では、オブジェクトの表面上のどこにあるか、照明がその表面にどのように影響するかによって、最終画像の各ピクセルの見え方が決まります。
オフラインレンダリングでは、シーンがラスタライズされた後、複数のレンダーパスが使用されることがよくあります。各パスは画像を別々のレイヤーに分割し、反射、影、照明などの異なる要素に焦点を当てます。これらのレイヤーは、後にポスプロ用ソフトウェアで個別に微調整します。このレイヤーを重ねる方法は、高度なコントロールが可能で、アーティストは驚くほどのディテールとリアリズムを達成することができます。例えば、あるパスでは直接光をキャプチャし、別のパスでは表面から跳ね返る光を処理することで、柔らかい影や微妙な照明効果まで正確に表現することができます。
しかし、リアルタイムレンダリングでは、パイプライン全体を1秒のわずかな時間で完了させる必要があり、通常、毎秒60フレームのスムーズなフレームレートを維持するためには16ミリ秒以下でなければなりません。この時間制限のため、リアルタイムエンジンには、マルチパスを贅沢に使用する余裕はありません。その代わり、モーションブラーやブルームのようなエフェクトは、良好なパフォーマンスを維持しながらビジュアル品質を向上させるために、シングルパスで素早く適用されます。
最終的に、レンダリングパイプラインは未加工の3Dデータを、スクリーンに表示するための最終的な画像を生成します。オフラインレンダリングとリアルタイムレンダリングの主な違いは、精度と速度のバランスです。オフラインレンダリングでは、レイトレーシングやパストレーシングのようなテクニックを使用して、非常にリアルな画像を実現します。一方、リアルタイムレンダリングでは、最適化やショートカットを使用して、インタラクティブな使用に十分な速さで画像を作成します。技術の向上、特にGPUベースのリアルタイムレイトレーシングの進歩に伴い、この2つの手法の差は縮まりつつあり、リアルタイムアプリケーションによりリアルさをもたらしています。
例えばUnityでは、開発者はパフォーマンス向上のために設計されたUniversal Render Pipeline(URP)と、高度なシェーダーとレンダリング技術で最高の品質を提供することを目的としたHigh Definition Render Pipeline(HDRP)のいずれかを選択できます。HDRPには、ボリューメトリック・ライティングやレイトレーシングなどの機能が含まれ、オフライン・レンダラーの品質に近づいています。しかし、映画やアニメーションで使用されるプリレンダリングシーンと同じレベルのディテールにはまだ到達できていません。Unityユーザーや Unityに興味がある人のために、Brendan Dickinsonが動画で、Unityが提供するさまざまなレンダーパイプラインを紹介しています:
レイトレーシング、グローバルイルミネーション、物理ベースレンダリング(PBR)のような高度な技術は、オフラインレンダリングで使用される主な手法であり、まるで現実のような画像を作成します。リアルタイムレンダリングは、ディファードシェーディングやリアルタイムレイトレーシングなどの手法によって追いつきつつありますが、これらの手法はまだ新しく、オフラインレンダリングに見られる詳細レベルには及びません。
オフラインレンダリングでは、所要時間をあまり気にすることなく品質に重点を置いた処理が行われるため、グローバルイルミネーションやコースティクス、複雑なシェーダー計算など、計算に何時間もかかるようなエフェクトも可能になります。対照的に、リアルタイムレンダリングは速度を優先して最適化され、よりシンプルなライティングモデルとショートカットを使用して、より高速なパフォーマンスを実現します。
機械学習とAIを活用したレンダリングの発展に伴い、オフラインとリアルタイムのレンダリングプロセスの両方で、ノイズの低減と最適化が改善されています。さらに、リアルタイムレイトレーシングは、リアルタイムレンダリングの能力を向上させ、オフライン手法との差を徐々に縮めています。
オフラインレンダリングでもリアルタイムレンダリングでも、複雑なシーンを効果的に処理するには最適化が不可欠です。クリッピング、LOD(Level of Detail)、シェーダの詳細設定などのテクニックはリアルタイムレンダリングのパフォーマンス向上に役立ち、サンプリングやアダプティブサブディビジョンなどの手法はオフラインレンダリングの最適化に重要です。
Pixarのような映画スタジオからEpic Gamesのようなゲーム開発者まで、さまざまな業界が印象的なビジュアルを作成するために高度なレンダリングパイプラインを使用しています。映画スタジオでは、詳細で高品質な画像を作成するために、主にオフラインレンダリングに頼っていますが、ゲーム開発では、高速で応答性の高いパフォーマンスに最適化されたリアルタイムレンダリングパイプラインを使用しています。
従来のオフラインレンダリングとリアルタイムレンダリングのパイプラインの詳細を理解することで、3Dアーティストと開発者は、プロジェクトのビジュアルとパフォーマンスの目標を達成するために最適なツールとテクニックを選択できます。