リアルタイムのコンピューターグラフィックス
リアルタイムコンピューターグラフィックスまたはリアルタイムレンダリングは、リアルタイムでの画像の生成と分析に焦点を当てたコンピューターグラフィックスのサブフィールドです。この用語は、アプリケーションのグラフィカルユーザーインターフェイス(GUI)のレンダリングからリアルタイムの画像分析に至るまであらゆるものを指すことができますが、通常はグラフィックスプロセッシングユニット(GPU)を使用した、インタラクティブな3Dコンピューターグラフィックスに関して最もよく使用されます。この概念の一例は、変化する3D環境をすばやくレンダリングして動きの錯覚を作り出すビデオゲームです。
コンピューターは、発明以来、リアルタイムで単純な線、画像、ポリゴンなどの2D画像を生成することができました。ただし、詳細な3Dオブジェクトを迅速にレンダリングすることは、従来のVon Neumannアーキテクチャベースのシステムにとっては困難な作業です。この問題に対する初期の回避策は、スプライト、3Dグラフィックを模倣できる2D画像の使用でした。
現在、レイトレーシングやラスタライズなど、さまざまなレンダリング手法が存在します。これらの技術と高度なハードウェアを使用して、コンピューターはユーザー入力を同時に受け入れながら動きの錯覚を作成するのに十分な速度で画像をレンダリングできるようになりました。これは、ユーザーがレンダリングされた画像にリアルタイムで応答し、インタラクティブなエクスペリエンスを生成できることを意味します。
リアルタイム3Dコンピュータグラフィックスの原理
コンピュータグラフィックスの目標は、特定の望ましい指標を使用して、コンピュータ生成の画像またはフレームを生成することです。そのようなメトリックの1つは、1秒間に生成されるフレームの数です。リアルタイムコンピューターグラフィックスシステムは、非リアルタイムグラフィックスが通常レイトレーシングに依存しているという点で、従来の(つまり、非リアルタイム)レンダリングシステムとは異なります。このプロセスでは、詳細なレンダリングのためにカメラから世界に向けて数百万または数十億の光線が追跡されます。この高価な操作には、1つのフレームのレンダリングに数時間または数日かかることがあります。
リアルタイムグラフィックシステムは、各画像を1/30秒未満でレンダリングする必要があります。レイトレーシングは、これらのシステムには遅すぎます。代わりに、Zバッファートライアングルラスタライズの手法を採用しています。この手法では、すべてのオブジェクトが個々のプリミティブ(通常は三角形)に分解されます。各三角形は画面上に配置、回転、拡大縮小され、ラスタライザーハードウェア(またはソフトウェアエミュレーター)が各三角形内にピクセルを生成します。次に、これらの三角形は、ディスプレイ画面に表示するのに適したフラグメントと呼ばれる原子単位に分解されます。フラグメントは、いくつかのステップで計算される色を使用して画面に描画されます。たとえば、保存された画像に基づいてテクスチャを使用して三角形を「ペイント」し、シャドウマッピングを使用して、光源の視線に基づいてその三角形の色を変更できます。
ビデオゲームグラフィックス
リアルタイムグラフィックスは、時間とハードウェアの制約を受けて画質を最適化します。 GPUやその他の進歩により、リアルタイムグラフィックスが生成できる画質が向上しました。 GPUはフレームあたり数百万の三角形を処理でき、currentDirectX 11 / OpenGL 4.xクラスのハードウェアは、シャドウボリューム、モーションブラー、三角形生成などの複雑な効果をリアルタイムで生成できます。リアルタイムグラフィックスの進歩は、実際のゲームプレイグラフィックスと、ビデオゲームで伝統的に見られる事前にレンダリングされたカットシーンとの間の漸進的な改善に表れています。通常、カットシーンはリアルタイムでレンダリングされ、インタラクティブな場合もあります。リアルタイムグラフィックスと従来のオフライングラフィックスの品質の差は縮まっていますが、オフラインレンダリングはずっと正確です。
長所
通常、リアルタイムグラフィックスは、対話性(プレーヤーのフィードバックなど)が重要な場合に採用されます。映画でリアルタイムグラフィックスを使用する場合、ディレクターは各フレームに何を描画するかを完全に制御できます。人々のチームは通常、これらの意思決定に関与しています。
リアルタイムのコンピューターグラフィックスでは、ユーザーは通常、入力デバイスを操作して、ディスプレイに表示しようとしているものに影響を与えます。たとえば、ユーザーが画面上のキャラクターを動かしたい場合、システムは次のフレームを描く前にキャラクターの位置を更新します。通常、ディスプレイの応答時間は入力デバイスよりもはるかに遅くなります。これは、人間の動きの(速い)応答時間と人間の視覚システムの(遅い)遠近法の速度の大きな差によって正当化されます。この違いには他の効果もあります。入力デバイスは人間の動きの応答に対応するには非常に高速でなければならないため、入力デバイス(たとえば、現在のWiiリモコン)の進歩は通常、ディスプレイデバイスの同等の進歩よりもはるかに長い時間がかかります。
リアルタイムコンピュータグラフィックスを制御するもう1つの重要な要素は、物理学とアニメーションの組み合わせです。これらの技術は、主に画面に何を描画するか、特にシーンのどこにオブジェクトを描画するかを決定します。これらの手法は、現実世界の行動(空間次元ではなく時間次元)を現実的に模倣するのに役立ち、コンピューターグラフィックスのリアリズムの度合いを高めます。
特に照明効果を調整する場合、グラフィックソフトウェアを使用したリアルタイムプレビューにより、作業速度が向上します。画像の変更をリアルタイムで表示しながら、フラクタル生成ソフトウェアの一部のパラメーターを調整できます。
レンダリングパイプライン
グラフィックスレンダリングパイプライン(「レンダリングパイプライン」または単に「パイプライン」)は、リアルタイムグラフィックスの基盤です。その主な機能は、仮想カメラ、3次元オブジェクト(幅、長さ、深さを持つオブジェクト)、光源、照明モデル、テクスチャなどに関連して2次元画像をレンダリングすることです。
建築
リアルタイムレンダリングパイプラインのアーキテクチャは、アプリケーション、ジオメトリ、およびラスタライズという概念的な段階に分けることができます。
適用段階
アプリケーションステージは、「シーン」、つまり2Dディスプレイに描画される3D設定を生成します。この段階は、開発者がパフォーマンスのために最適化するソフトウェアに実装されます。この段階では、ユーザー入力の処理に加えて、衝突検出、高速化手法、アニメーション、フォースフィードバックなどの処理を実行できます。
衝突検出は、アプリケーションの段階で実行される操作の例です。衝突検出は、アルゴリズムを使用して(仮想)オブジェクト間の衝突を検出し、応答します。たとえば、アプリケーションは、衝突するオブジェクトの新しい位置を計算し、振動するゲームコントローラなどのフォースフィードバックデバイスを介してフィードバックを提供します。
アプリケーション段階では、次の段階に向けてグラフィックデータも準備します。これには、テクスチャアニメーション、3Dモデルのアニメーション、変換によるアニメーション、ジオメトリモーフィングが含まれます。最後に、シーン情報に基づいてプリミティブ(ポイント、ライン、および三角形)を生成し、それらのプリミティブをパイプラインのジオメトリステージに送ります。
ジオメトリステージ
ジオメトリステージは、ポリゴンと頂点を操作して、描画するもの、描画する方法、描画する場所を計算します。通常、これらの操作は専用のハードウェアまたはGPUによって実行されます。グラフィックハードウェア全体のバリエーションは、「ジオメトリステージ」が実際にいくつかの連続したステージとして実装されることを意味します。
モデルとビューの変換最終的なモデルが出力デバイスに表示される前に、モデルは複数の空間または座標系に変換されます。変換は、頂点を変更してオブジェクトを移動および操作します。 変換は、ポイント、ライン、またはシェイプの形状または位置を操作する4つの特定の方法の一般的な用語です。
点灯モデルをよりリアルな外観にするために、通常、変換中に1つ以上の光源が確立されます。ただし、最初に3Dシーンをビュースペースに変換しない限り、この段階に到達することはできません。ビュー空間では、観察者(カメラ)は通常、原点に配置されます。右手座標系(標準と見なされる)を使用する場合、観測者は負のz軸の方向を見て、y軸は上を向き、x軸は右を指します。
投影投影は、2D空間で3Dモデルを表すために使用される変換です。投影の主な2つのタイプは、正射投影(平行投影とも呼ばれます)と透視投影です。正投影の主な特徴は、変換後も平行線が平行のままであることです。透視投影では、観測者とモデルの間の距離が長くなると、モデルが以前よりも小さく見えるという概念を利用します。基本的に、透視投影は人間の視覚を模倣します。
クリッピングクリッピングは、ラスタライザーの段階を容易にするために、ビューボックスの外側にあるプリミティブを削除するプロセスです。これらのプリミティブが削除されると、残っているプリミティブは次の段階に到達する新しい三角形に描画されます。
スクリーンマッピングスクリーンマッピングの目的は、クリッピング段階でプリミティブの座標を見つけることです。
ラスタライザーステージラスタライザステージは色を適用し、グラフィック要素をピクセルまたは画像要素に変換します。
歴史
コンピュータアニメーションは1940年代と1950年代から存在していましたが、3D技術が実装されたのは1970年代と1980年代まででした。
3Dグラフィックスに向けた最初のステップは、1972年にエドウィンキャットマルとフレッドパークによって行われました。それらの実装は、ワイヤーフレーム画像を使用して作成されたコンピューター生成の手と顔を特徴としていました。 1975年まで、ワイヤーフレーム画像は3D画像の作成に使用された唯一のデジタル技術でした。
3Dグラフィックスは、アニメーション化された人間がほぼ完全にリアルに見えるようになりました。最終的には、人間は、撮影された人間とアニメーション化された人間の違いを見分けることができないかもしれません。
映画Beowulfは、人間の目を欺く3Dグラフィックスを紹介しています。このフィルムは、3Dモーションキャプチャテクノロジーを使用して作成されました。