

レンダリングとは、 3D モデルなどの入力データから画像を生成するプロセスです。「レンダリング」という言葉は、元々はアーティストが現実または想像上のものを描写する際に行う作業を意味していました(完成した作品も「レンダリング」と呼ばれます)。今日では、「レンダリング」とは、多くの場合、アーティスト(または複数のアーティスト)がインタラクティブな 3D モデリング ソフトウェアを使用して作成した正確な仕様に基づいて、コンピューターを使用して画像を生成することを一般的に意味します。レンダリングされる画像の種類には、静止画像と映画やビデオゲームのフレームの両方が含まれます。[ 1 ] [ 2 ] [ 3 ] [ 4 ]
コンピュータグラフィックスの文脈では、標準的な用法では、「レンダリング」という言葉は単独で3Dシーンのレンダリングを意味しますが、[ a ]より広い意味で使われることもあります。曖昧さが生じる可能性がある場合(例: 3Dレンダリング)には、「2D」や「3D」などの修飾語が使用されます。[ 6 ] [ 7 ]: 2.1、38.1 [ 8 ]:序文
レンダリングを実行するソフトウェアアプリケーションまたはコンポーネントは、レンダリングエンジン[ 9 ] 、レンダリングエンジン、レンダリングシステム、グラフィックスエンジン、または単にレンダラーと呼ばれます。
画像が即座に生成・表示されるリアルタイムレンダリング(理想的には動きやアニメーションの印象を与えるのに十分な速さ)と、画像や映像フレームを後で表示するために生成されるオフラインレンダリング(プリレンダリングとも呼ばれる)には区別がある。オフラインレンダリングでは、低速で高品質なレンダラーを使用できる。ゲームなどのインタラクティブなアプリケーションは、プリレンダリングされたコンテンツを組み込むことはできるものの、基本的にはリアルタイムレンダリングを使用する必要がある。
レンダリングは、 3D空間の座標を使用して定義されたシーンやオブジェクトの画像を、特定の視点から表示します。これは、光学、視覚知覚の研究、数学、ソフトウェアエンジニアリングの知識とアイデアを使用し、ビデオゲーム、シミュレータ、映画やテレビの視覚効果、デザインの視覚化、医療診断などの用途があります。リアルなレンダリングには、レンダリング方程式を適用するなどして、環境における光の伝播をモデル化する必要があります。
リアルタイムレンダリングでは、形状のリストを処理し、各形状がどのピクセルを覆っているかを判断する高性能ラスタライズアルゴリズムが使用されます。よりリアルさが求められる場合(建築ビジュアライゼーションや視覚効果など)、代わりにレイトレーシングなどの低速なピクセル単位のアルゴリズムが使用されます。(レイトレーシングは、ラスタライズレンダリング中に選択的に使用して、照明や反射のリアリズムを向上させることもできます。)パストレーシングと呼ばれるレイトレーシングの一種は、現在、フォトリアリスティックレンダリングで最も一般的な手法です。パストレーシングは、3Dアニメーション映画のフレームなど、高品質の非フォトリアリスティック画像を生成するためにもよく使用されます。ラスタライズとレイトレーシングの両方は、 GPUと呼ばれる特別に設計されたマイクロプロセッサによって高速化(「アクセラレーション」)できます。
ラスタライズアルゴリズムは、多角形やテキストなどの2D形状のみを含む画像を生成するためにも使用されます。このタイプのレンダリングは、2Dレンダリングと呼ばれることもあり、[ 7 ]: 3.6、そのアプリケーションには、デジタルイラストレーション、グラフィックデザイン、2Dアニメーション、デスクトップパブリッシング、ユーザーインターフェイスの表示などがあります。
歴史的には、レンダリングは画像合成と呼ばれていましたが[ 10 ] : xxi 、今日ではこの用語はAI画像生成を意味する可能性が高いです。[ 11 ]ニューラルネットワークが画像を生成する主要な手段であるが、出力画像に対するある程度の制御が提供される場合に、「ニューラルレンダリング」という用語が使用されることがあります。 [ 12 ]ニューラルネットワークは、パストレース画像からノイズを除去するなど、従来のアルゴリズムを置き換えることなくレンダリングを支援することもできます。
コンピュータグラフィックス研究の大部分は、写真に似た画像を生成することを目指して行われてきた。これを可能にする基礎技術は1980年代に発明されたが、1980年代末の時点では、複雑なシーンにおけるフォトリアリズムは依然として遠い目標と考えられていた。[ 13 ]: x現在では、オフラインレンダリングではフォトリアリズムは日常的に実現可能となっているが、リアルタイムレンダリングでは依然として困難である。[ 14 ]: 1-2
リアルな画像を生成するには、レンダリングでは、光源からの光がどのように伝わり、シーン内の物体によって反射、屈折、散乱(多くの場合、何度も)され、カメラのレンズを通過し、最終的にカメラのフィルムまたはセンサーに到達するかをシミュレートする必要があります。これらのシミュレーションで使用される物理法則は主に幾何光学であり、光の粒子は(通常は直線である)光線と呼ばれる線に沿って進みますが、一部の状況(石鹸の泡の表面のような薄膜をレンダリングする場合など)では、光の波動性を考慮する必要があります。[ 15 ] [ 16 ]
シミュレーションが必要となる可能性のある影響には、以下のようなものがあります。
現実的なシーンでは、物体は光源から直接届く光(ほとんど遮られることなく空気中を通過した後)と、シーン内の他の物体から反射した光の両方によって照らされます。この複雑な照明のシミュレーションは、グローバルイルミネーションと呼ばれます。以前は、間接照明は(特にアニメーション映画のレンダリング時に)シーン内に隠れた光源を追加することで擬似的に表現されることが多かったのですが、現在ではパストレーシングを用いて正確にレンダリングされています。[ 18 ] : 3 [ 17 ] : 108
真のフォトリアリズムを実現するには、写真撮影に使用したカメラをシミュレートする必要があります。薄レンズ近似により、透視投影と被写界深度(およびボケ)のエミュレーションを組み合わせることができます。レンズの構成要素による光の屈折の仕方をモデル化することで、カメラレンズのシミュレーションをよりリアルにすることができます。フィルムやビデオのフレームをレンダリングする場合は、モーションブラーがシミュレートされることがよくあります。 [ 15 ] [ 19 ]画像を主観的に明るく見せるために、シミュレートされたレンズフレアやブルームが追加されることもあります(ただし、実際のカメラの設計ではこれらの効果を軽減しようとしています)。[ 8 ]: 12.4
リアルなレンダリングでは、さまざまな表面材料が光を反射する様子を数学的に記述したものが用いられます。これは反射モデル、または(物理的に妥当な場合は)双方向反射率分布関数(BRDF)と呼ばれます。[ 15 ]大理石、植物の葉、人間の皮膚などの材料をレンダリングするには、表面下散乱と呼ばれる効果をシミュレートする必要があります。これは、光の一部が材料内部に入り込み、散乱され、再び外部に戻ってくる現象です。[ 17 ] : 143色や粗さなどの特性が表面上でどのように変化するかは、テクスチャマッピングを用いることで効率的に表現できます。[ 8 ] : 6.1
一部のアプリケーション(3D モデリングの初期段階を含む)では、特に材質や表面の詳細が定義されておらず、オブジェクトの形状のみがわかっている場合、ワイヤーフレーム レンダリングなどの簡略化されたレンダリング スタイルが適切である場合があります。 [ 20 ]: 5.3ゲームやその他のリアルタイム アプリケーションでは、芸術的またはデザイン上の選択として、あるいは低スペックのハードウェアでより高いフレーム レートを可能にするために、より単純で非現実的なレンダリング テクニックを使用する場合があります。
正投影図と等角投影図は、様式化された効果を得るため、またはCADレンダリングにおいて平行線が平行に表現されるようにするために使用できます。[ 8 ]: 4.7 [ 20 ]: 3.7
非写実的レンダリング(NPR)は、エッジ検出やポスタリゼーションなどの技術を用いて、技術イラスト、漫画、その他の描画や絵画のスタイルに似た3D画像を生成する。[ 8 ]: ch 15
2Dコンピュータグラフィックスでは、形状の位置とサイズは3D座標(x、y、z)ではなく2D座標(xとy)を使用して指定されます。2DレンダリングAPIは、多くの場合、解像度に依存しない座標系を使用し、ビューポートが座標をデバイス座標と呼ばれるピクセルインデックスに変換する方法を決定します。[ 21 ]: 46形状をレンダリングする前に、スケーリング、平行移動、回転などの変換を適用できます。これらのアフィン変換は、多くの場合3×3行列で表され、変換の合成が容易になります。[ 21 ]: 245~255
SVGレンダラーなどの高品質な2Dレンダリングエンジンは、通常、ラスタライズされた線や形状のエッジのギザギザ感を軽減するためにアンチエイリアシングを実装しています。 [ 22 ]: 2.5.6重なり合う形状をレンダリングする場合、レンダラーは一般的に「ペインターモデル」を使用します。これは、形状が何らかの決定された順序で描画されるか、入力の順序に依存する可能性のあるブレンド操作を使用して各ピクセルへの寄与が合成されるモデルです。 [ 22 ]: 3.3レンダラーは、レンダリングまたはブレンドの順序を指定するために、形状に「zインデックス」または「スタッキング順序」を与えることを可能にする場合があります(3Dレンダリングで使用されるz座標とは異なり、この3番目の座標は距離ではなく順序のみを示し、x座標およびy座標と一緒に意味のある回転を行うことはできません)。[ 22 ]: 3.4
2Dレンダリングでは通常、光の伝播はシミュレートされません(そのためには、形状の3D位置や厚みを指定する必要があるでしょう)。ドロップシャドウや透明度などの効果は、物理的な根拠のない数学的関数によって定義されます。[ 23 ] : 9.12 [ 24 ] : 5
印刷出力用の2Dレンダリングでは、非常に高い解像度、例えば一般的なレーザープリンターでは600または1200 DPI 、イメージセッターやプレートセッターでは2400 DPI以上が必要となる場合があります。グレースケール画像とカラー画像には、ハーフトーン(または何らかのディザリングやストキャスティックスクリーニング)と色分解が必要です。ラスターイメージプロセッサ(RIP)と呼ばれるレンダリングエンジンは、PDFファイルなどの入力データを、プリンターで使用される高解像度ビットマップ画像に変換します。[ 25 ]: Ch1–2
3Dシーンや2D画像をレンダリングするには、レンダリングソフトウェアが理解できる形式で記述する必要があります。従来、2Dおよび3Dレンダリングの入力は通常テキストファイルであり、これはバイナリファイルよりも人間が編集やデバッグしやすいという利点がありました。3Dグラフィックスにおいては、テキスト形式はより効率的なバイナリ形式や、インタラクティブなアプリケーションがディスク上にファイルを生成せずにレンダリングコンポーネントと直接通信できるAPIにほぼ取って代わられています(ただし、シーン記述は通常、レンダリング前にメモリ上に作成されます)。[ 6 ]: 1.2、3.2.6、3.3.1、3.3.7
従来のレンダリングアルゴリズムは、3Dシーンまたは2D画像の幾何学的記述を使用します。現実世界からスキャンされたデータや科学シミュレーションの視覚化をレンダリングするアプリケーションやアルゴリズムは、異なる種類の入力データを必要とする場合があります。
PostScript形式(デスクトップパブリッシングの台頭に大きく貢献したとされることが多い)は、2Dグラフィックスとページレイアウトを記述するための標準化された相互運用可能な方法を提供する。スケーラブルベクターグラフィックス(SVG)形式もテキストベースであり、PDF形式は内部的にPostScript言語を使用している。対照的に、多くの3Dグラフィックスファイル形式は標準化されているものの(VRMLやX3Dなどのテキストベースの形式を含む)、異なるレンダリングアプリケーションは通常、それぞれのニーズに合わせた形式を使用するため、独自の形式とオープン形式が乱立し、バイナリファイルの方が一般的になっている。[ 6 ]: 3.2.3、3.2.5、3.3.7 [ 26 ]: vii [ 27 ] [ 7 ]: 16.5.2. [ 28 ]
ベクターグラフィック画像の説明には以下が含まれる場合があります。[ 26 ] [ 27 ]
幾何学的シーンの説明には以下が含まれる可能性があります: [ 6 ] : Ch. 4-7、8.7 [ 29 ]
個々の3Dオブジェクト、すなわち「モデル」を保存するためのファイル形式は数多く存在します。これらはより大きなシーンにインポートしたり、レンダリングソフトウェアやゲームによってオンデマンドで読み込んだりすることができます。リアルなシーンでは、家庭用品、乗り物、樹木など数百ものアイテムが必要になる場合があり、3Dアーティストはしばしば大規模なモデルライブラリを利用します。ゲーム制作においては、これらのモデル(テクスチャ、オーディオファイル、アニメーションなどの他のデータとともに)は「アセット」と呼ばれます。[ 28 ] [ 30 ]:第4章
科学および工学の可視化では、3D スキャンまたはシミュレーションによって生成された体積データのレンダリングが必要になることがよくあります。おそらく、このようなデータの最も一般的なソースは、診断のためにレンダリングする必要がある医療用CTおよびMRIスキャンです。体積データは非常に大きくなる可能性があり、特にボリュームが疎(データを含まない空の領域がある)の場合は、それを効率的に保存するために特殊なデータ形式が必要です。 [ 8 ] : 14.3.1 [ 31 ] [ 32 ]
レンダリング前に、ボリュームデータのレベルセットを抽出して、例えばマーチングキューブアルゴリズムを用いて三角形メッシュに変換することができます。また、ボリュームデータと直接連携するアルゴリズムも開発されており、例えば雲や煙による光の散乱や吸収の様子をリアルに表現するレンダリングなどに用いられています。この種のボリュームレンダリングは、映画の視覚効果で広く利用されています。低解像度のボリュームデータを補間せずにレンダリングする場合、個々の立方体、すなわち「ボクセル」が見えることがありますが、これはゲームグラフィックスで意図的に用いられる効果です。[ 33 ]: 4.6 [ 8 ]: 13.10、Ch. 14、16.1
実世界の物体の写真は、3Dオブジェクトのテクスチャとして使用することで、レンダリングされたシーンに組み込むことができます。シーンの写真をつなぎ合わせてパノラマ画像や環境マップを作成することもできます。これにより、シーンを非常に効率的にレンダリングできますが、単一の視点からのみレンダリングされます。構造化光またはライダーを使用して実世界の物体やシーンをスキャンすると、空間内の数百万個の個々の点の座標からなる点群が生成されます。点群には、色情報が含まれる場合もあります。これらの点群は、直接レンダリングすることも、レンダリング前にメッシュに変換することもできます。(注:「点群」は、ワイヤーフレームレンダリングと同様に、あらゆる3Dジオメトリに使用できるミニマルなレンダリングスタイルを指す場合もあります。)[ 8 ]: 13.3、13.9 [ 6 ]: 1.3
より最近の実験的なアプローチは、空間の各点における入射光の色、強度、方向を定義する放射輝度場を使用してシーンを記述することです。(これは概念的にはホログラムによって記録される光場に似ていますが、同一ではありません。)実用的な解像度では、放射輝度場のデータ量が非常に大きいため、それを体積データとして直接表現することは非現実的であり、近似関数を見つける必要があります。これらの近似を生成および評価するために、通常はニューラルネットワークが使用され、場合によってはビデオフレーム、または異なる角度で撮影されたシーンの写真のコレクションを「トレーニングデータ」として使用します。[ 34 ] [ 35 ]
ニューラルネットワークに関連するアルゴリズムは、最近、シーンを3Dガウス分布として近似するために使用されています。結果として得られる表現は点群に似ていますが、点の代わりに、さまざまな寸法と方向を持つぼやけた半透明の塊を使用します。ニューラル放射輝度場と同様に、これらの近似は写真やビデオフレームから生成されることがよくあります。[ 36 ]
レンダリングの出力は、画面上に即座に表示される場合(ゲームなどのリアルタイムレンダリングの場合は1秒間に何度も)、またはJPEGやPNGなどのラスターグラフィックスファイル形式で保存される場合がある。ハイエンドのレンダリングアプリケーションでは、一般的にOpenEXRファイル形式が使用される。この形式は、より細かい色の階調や高ダイナミックレンジの照明を表現できるため、後からトーンマッピングなどの調整を適用しても画質が劣化しない。[ 37 ] [ 38 ]: Ch. 14、Ap. B
高速レンダリングされたアニメーションはビデオファイルとして直接保存できますが、高品質レンダリングの場合、個々のフレーム(クラスタまたはレンダーファーム内の異なるコンピュータでレンダリングされる場合があり、レンダリングに数時間または数日かかる場合もあります)は個別のファイルとして出力され、後でビデオクリップに結合されます。[ 39 ] [ 30 ]: 1.5、3.11、8.11
レンダラーの出力には、RGB カラー値以外にも情報が含まれる場合があります。たとえば、スペクトルは複数の波長の光を使用してサンプリングしたり、深度 (カメラからの距離) や画像内の各点の材質などの追加情報を含めることができます (このデータは、合成時やリアルタイム レンダリング用のテクスチャ マップを生成する際に使用したり、パス トレーシング 画像からノイズを除去する際に使用したりできます)。透明度情報を含めることで、レンダリングされた前景オブジェクトを写真やビデオと合成できます。また、異なるライトや鏡面反射光と拡散光の寄与を別々のチャンネルとして保存して、レンダリング後に照明を調整できるようにすると便利な場合もあります。OpenEXRフォーマットでは、1 つのファイルに多数のチャンネルのデータを保存できます。BlenderやPixar RenderManなどのレンダラーは、任意出力変数 (AOV) と呼ばれるさまざまな構成可能な値をサポートしています。[ 37 ] [ 38 ] : Ch. 14, Ap. B [ 40 ]
3Dシーンのレンダリング方法を選択する際には、通常、速度、メモリ使用量、リアリズム(ただし、リアリズムが常に望ましいとは限らない)の間でトレードオフが生じます。長年にわたって開発されてきたアルゴリズムは、おおまかな進歩を遂げており、計算能力とメモリ容量の向上に伴い、より高度な手法が実用化されてきた。最終的な画像を作成するために、複数の手法が用いられる場合もある。
重要な違いは、画像内のピクセルを反復処理する画像順序アルゴリズムと、シーン内のオブジェクトを反復処理するオブジェクト順序アルゴリズムとの間にある。単純なシーンでは、オブジェクトの数がピクセルの数よりも少ないため、オブジェクト順序の方が通常は効率的である。[ 41 ]:第4章
上記の各手法には多くのバリエーションがあり、一部重複する部分もあります。パストレーシングは、独立した手法とみなすことも、レイトレーシングの一種とみなすこともできます。[ 10 ]: 846、1021レイトレーシングとパストレーシングに関連する用語の使用法は、時間の経過とともに大きく変化していることに注意してください。[ 42 ]: 7

レイマーチングは、レイキャスティングで使用されるアルゴリズム群であり、体積データセットや符号付き距離関数で定義されたサーフェスなどの複雑なオブジェクトとレイとの交点を見つけるために使用されます。それ自体はレンダリング手法ではありませんが、レイトレーシングやパストレーシングに組み込むことができ、ラスタライズによってスクリーン空間反射やその他の効果を実装するために使用されます。[ 42 ] : 13
フォトンマッピングと呼ばれる技術は、光源から物体までの光子の経路を追跡し、放射照度に関するデータを蓄積します。このデータは、従来のレイトレーシングまたはパストレーシングで使用されます。[ 10 ] : 1037-1039光源からカメラまで追跡された光線のみを使用してシーンをレンダリングすることは、現実により近いものの、膨大な数の光子をシミュレートする必要があり、そのうちごく一部しか実際にカメラに到達しないため、実用的ではありません。[ 45 ] : 7-9 [ 21 ] : 587
一部の著者は、従来の光線追跡を「逆方向」光線追跡と呼び、これはカメラから光源まで光子の経路を逆方向に追跡するためである。一方、光源から経路をたどる(フォトンマッピングのように)ことを「順方向」光線追跡と呼ぶ。[ 45 ]: 7-9しかし、これらの用語の意味が逆になる場合もある。[ 46 ]光源から始まる光線を追跡することは、粒子追跡または光追跡とも呼ばれ、この曖昧さを回避することができる。[ 18 ]: 92 [ 47 ]: 4.5.4
ビデオゲームのグラフィックスを含むリアルタイムレンダリングでは、通常ラスタライズが使用されますが、レイ トレーシングやパス トレーシングと組み合わせることが増えています。[ 14 ] : 2リアルなグローバル イルミネーションを実現するために、リアルタイム レンダリングでは、静止オブジェクトに対して事前にレンダリングされた (「ベイク済み」) ライティングに依存することがよくあります。移動オブジェクトの場合、ライト プローブと呼ばれる手法を使用することがあります。これは、空間内の選択された点 (補間を容易にするためにグリッド上の点であることが多い) でシーンの全方向ビューをレンダリングすることによってライティングを記録するものです。これらは環境マップに似ていますが、通常は非常に低い解像度または球面調和関数などの近似を使用します。[ 48 ] (注: Blender では、反射マップを含む、より一般的なクラスの事前に記録されたライティング データに対して「ライト プローブ」という用語を使用しています。[ 49 ] )

ラスタライズという用語は(広義には)2Dレンダリングやリアルタイム3Dレンダリングに用いられる多くの技術を包含する。レイトレーシングやパストレーシングが実用化される以前は、3Dアニメーション映画はラスタライズによってレンダリングされていた。
レンダラーは、ラスタライズとジオメトリ処理(ラスタライズに特有のものではない)およびピクセル処理を組み合わせて、表示のためにフレームバッファに格納するRGBカラー値を計算する。[ 8 ] : 2.1 [ 41 ] : 9
ラスタライズの主なタスク(ピクセル処理を含む)は次のとおりです。[ 8 ]: 2、3.8、23.1.1
3Dラスタライズは通常、グラフィックスパイプラインの一部であり、アプリケーションがレンダリングする三角形のリストを提供し、レンダリングシステムがそれらの座標を変換および投影し、ビューポートで表示可能な三角形を決定し、最終結果を画面に表示する前に上記のラスタライズおよびピクセル処理タスクを実行します。[ 8 ] : 2.1 [ 41 ] : 9
歴史的に、3Dラスタライズでは、任意の多角形を処理でき、多数の形状を同時にラスタライズできるワーノックアルゴリズムやスキャンラインレンダリング(「スキャン変換」とも呼ばれる)などのアルゴリズムが使用されていました。このようなアルゴリズムは2Dレンダリングでは依然として重要ですが、現在の3Dレンダリングでは通常、形状を三角形に分割し、より単純な方法を使用して個別にラスタライズします。[ 50 ] [ 51 ] [ 21 ]: 456、561–569
アンチエイリアス処理された線を含む2D 線、楕円、塗りつぶされた三角形をラスタライズするための高性能アルゴリズムが存在します。2D ラスタライズの重要な特殊ケースはテキスト レンダリングであり、文字の形状が歪むのを避け、間隔、密度、鮮明さを維持するために、座標の慎重なアンチエイリアス処理と丸め処理が必要です。 [ 41 ] : 9.1.1 [ 52 ]
3D座標が画像平面に投影された後、ラスタライズは主に2Dの問題ですが、3次元目では隠面除去が必要になります。初期のコンピュータグラフィックスでは、形状の隠面を除去するために幾何アルゴリズムやレイキャスティングを使用するか、形状を深度(カメラからの距離)でソートして奥から手前にレンダリングするペインターズアルゴリズムを使用していました。深度ソートは、後にスキャンラインレンダリングアルゴリズムに深度比較を組み込むことで回避されました。zバッファアルゴリズムは、フレームバッファに深度または「z」値を含めることで間接的に比較を実行します。ピクセルは、その形状のz値がバッファ内の現在のz値よりも低い(カメラに近いことを示す)場合にのみ、その形状で覆われます。zバッファは追加のメモリ(発明当時は高価なリソース)を必要としますが、ラスタライズコードを簡素化し、複数回のパスを可能にします。現在ではメモリはより高速で豊富になり、zバッファはほぼ常にリアルタイムレンダリングに使用されています。[ 53 ] [ 54 ] [ 21 ] : 553–570 [ 8 ] : 2.5.2
基本的なZバッファアルゴリズムの欠点は、各ピクセルが単一のオブジェクトで完全に覆われるか、背景色で塗りつぶされるかのどちらかになり、最終画像にギザギザのエッジが生じることです。初期のアンチエイリアシング手法では、ピクセルが形状によって部分的に覆われていることを検出し、覆われた領域を計算することでこの問題を解決していました。Aバッファ(およびその他のスーパーサンプリングやマルチサンプリング技術)は、精度は劣るもののパフォーマンスは向上させ、この問題を解決します。リアルタイム3Dグラフィックスでは、アンチエイリアシングを実行するために複雑なヒューリスティック(さらにはニューラルネットワーク)を使用することが一般的になっています。 [ 54 ] [ 55 ] [ 41 ] : 9.3 [ 8 ] : 5.4.2
3Dラスタライズでは、色は通常、ピクセルシェーダーまたはフラグメントシェーダーと呼ばれる、各ピクセルに対して実行される小さなプログラムによって決定されます。シェーダーはシーン全体の3Dデータに直接アクセスしません(またはアクセスできません)(これは非常に遅くなり、レイトレーシングに似たアルゴリズムになります)。そのため、テクスチャマッピングと複数回のパスのみを使用して影や反射などの効果をレンダリングするためのさまざまな技術が開発されています。[ 41 ]: 17.8
古い、より基本的な3Dラスタライズ実装ではシェーダーはサポートされておらず、フラットシェーディング(各三角形に対して一度だけライティングを計算し、それを単一の色でレンダリングする)、グーローシェーディング(頂点で定義された法線ベクトルを使用してライティングを計算し、各三角形全体に色を補間する)、フォンシェーディング(各三角形全体に法線ベクトルを補間し、各ピクセルに対してライティングを計算する)などの単純なシェーディング手法が用いられていた。[ 41 ]: 9.2
比較的最近まで、ピクサーはアニメーション映画のレンダリングにラスタライズを使用していた。リアルタイムグラフィックスで一般的に使用されるレンダラーとは異なり、ピクサーのRenderManソフトウェアのReyesレンダリングシステムは、非常に小さな(ピクセルサイズの)ポリゴンのレンダリングに最適化されており、レイトレーシングにより一般的に関連付けられている確率的サンプリング技術が組み込まれていた。[ 6 ]: 2、6.3 [ 56 ]
3Dシーンをレンダリングする最も簡単な方法の1つは、視点(「目」または「カメラ」)から始まる光線がシーン内の幾何学的形状のいずれかと交差するかどうかをテストし、各ピクセルごとに異なる光線方向を使用してこのテストを繰り返すことです。この方法はレイキャスティングと呼ばれ、初期のコンピュータグラフィックスにおいて重要であり、より高度なアルゴリズムの基本的な構成要素となっています。レイキャスティングは、構成的ソリッドジオメトリ(CSG)操作によって定義された形状をレンダリングするために使用できます。[ 42 ]: 8-9 [ 57 ]: 246-249
初期のレイキャスティング実験には、1960年代のアーサー・アペルの研究が含まれる。アペルは、各可視表面点から光源に向かって追加のレイを投射することで影をレンダリングした。彼はまた、光源からオブジェクトに向かってランダムなレイを投射し、交点をプロットすることで照明の密度をレンダリングしようとした(後のフォトンマッピングと呼ばれる技術に似ている)。[ 58 ]

多数のオブジェクトを含むシーンをレンダリングする場合、光線と各オブジェクトとの交差判定は非常にコストがかかります。この処理を高速化するために、多数のオブジェクト(カメラの後ろにあるオブジェクトなど)を迅速に除外できる特殊なデータ構造が使用されます。これらの構造は、関連するオブジェクトを見つけるためのデータベースインデックスに類似しています。最も一般的なのは、オブジェクトツリーの各ブランチに対して事前に計算されたバウンディングボックスまたは球体を格納するバウンディングボリューム階層(BVH)と、空間を再帰的に2つの部分に分割するkd木です。最近のGPUには、BVH交差判定のためのハードウェアアクセラレーションが含まれています。kd木は、初期のコンピュータグラフィックスで頻繁に使用されたバイナリ空間分割の特殊なケースです(ペインターズアルゴリズムのラスタライズ順序を生成することもできます)。歴史的に人気のあるもう1つの手法であるオクツリーは、現在でもボリュームデータによく使用されています。[ 14 ] : 16–17 [ 59 ] [ 57 ] [ 7 ] : 36.2
球、多角形、多面体などの形状と光線の交点を求めるには幾何学的公式で十分ですが、ほとんどの曲面には解析解が存在しないか、精度が限られた浮動小数点数では交点を正確に計算することが困難です。ニュートン法などの根探索アルゴリズムが使用される場合もあります。これらの複雑さを回避するために、曲面はしばしば三角形のメッシュとして近似されます。ボリュームレンダリング(雲や煙のレンダリングなど)やフラクタルなどの一部の曲面では、基本的なレイキャスティングではなく、レイマーチングが必要になる場合があります。[ 60 ] [ 42 ] : 13 [ 8 ] : 14,17.3

レイキャスティングは、シミュレートされたカメラから光線を逆方向に追跡することで画像をレンダリングするために使用できます。光線の起点となる表面上の点を見つけた後、光源に向かって別の光線を追跡し、その点に影が落ちているかどうかを判断します。影が落ちていない場合は、反射モデル(マット面の場合はランバート反射、光沢面の場合はフォン反射モデルなど)を使用して、光源から到着した光子がカメラに向かって反射される確率を計算し、これを光の明るさで乗算してピクセルの明るさを決定します。光源が複数ある場合は、各光源の明るさの寄与を合計します。カラー画像の場合は、複数の波長の光(赤、緑、青など)について計算を繰り返します。[ 8 ] : 11.2.2 [ 42 ] : 8
古典的なレイ・トレーシング(ホイット式または再帰的レイ・トレーシングとも呼ばれる)は、この方法を拡張して、鏡や透明な物体をレンダリングできるようにします。カメラから逆方向に追跡されたレイが鏡上の点から始まる場合、幾何光学の反射公式を使用して反射光線の方向を計算し、その方向に別のレイを逆方向に投げます。レイが透明な表面から始まる場合、反射光線と屈折光線の両方についてレイを逆方向に投げます(屈折方向を計算するためにスネルの法則を使用)。そのため、レイ・トレーシングは分岐するレイの「ツリー」をサポートする必要があります。単純な実装では、各レイを追跡するために再帰関数が呼び出されます。[ 8 ] : 11.2.2 [ 42 ] : 9
レイトレーシングは通常、各ピクセルに対して複数のサンプルの平均を取ることでアンチエイリアシングを実行します。また、被写界深度やモーションブラーなどの効果にも複数のサンプルを使用する場合があります。これらの機能それぞれに等間隔のレイ方向または時間を使用すると、多くのレイが必要となり、エイリアシングが残ります。クック式、確率的、またはモンテカルロレイトレーシングは、等間隔のサンプルの代わりにランダムサンプリングを使用することで、この問題を回避します。このタイプのレイトレーシングは、確率分布からレイをサンプリングするため、一般的に分布レイトレーシングまたは分布レイトレーシングと呼ばれます。分布レイトレーシングは、影のテスト時に光源上の点のランダムサンプルを使用することで、大きな光源からのリアルな「ソフト」な影をレンダリングすることもできます。また、光のスペクトルから複数の波長をサンプリングすることで、色収差をシミュレートすることもできます。[ 42 ] : 10 [ 45 ] : 25
実際の表面材料は、小さな(または微細な)突起や溝があるため、ほぼすべての方向に少量の光を反射します。分布レイトレーサーは、可能なレイの方向をサンプリングすることでこれをシミュレートでき、光沢のある表面や金属表面からのぼやけた反射をレンダリングできます。ただし、この手順を再帰的に繰り返して現実的な間接照明をシミュレートし、各表面点で複数のサンプルを取得すると、レイのツリーがすぐに巨大になります。パストレーシングと呼ばれる別の種類のレイ トレーシングは、分岐を回避して間接光をより効率的に処理し、光源からカメラまでのすべての可能なパスの分布が偏りのない方法でサンプリングされることを保証します。[ 45 ] : 25–27 [ 44 ]
レイトレーシングは、パストレーシングが映画レンダリングの標準となるまで、アニメーション映画の反射をレンダリングするためによく使用されていました。シュレック2やモンスターズ・ユニバーシティなどの映画では、ラスタライズを使用してレンダリングする前に、シーンやフレームの間接照明を事前に計算するために、分布レイトレーシングまたはパストレーシングも使用されました。[ 17 ]: 118-121
GPU技術の進歩により、ゲームでリアルタイムレイトレーシングが可能になったが、現在ではほぼ常にラスタライズと組み合わせて使用されている。[ 14 ] : 2これにより、曲面や相互反射オブジェクトからの反射[61]:305や、広範囲の距離や表面の向きにわたって正確な影[62]:159-160など、ラスタライズだけでは難しい視覚効果が可能になる。レイトレーシングのサポートは、 DirectX、Metal、Vulkanなどのゲームで使用されるグラフィックスAPIの最新バージョンに含まれている。[ 63 ]
光線追跡法は、光線シミュレーション中に時空の曲率と相対論的効果を考慮することにより、シミュレートされたブラックホールや光速に近い速度で移動する物体の外観をレンダリングするために使用されてきました。 [ 64 ] [ 65 ]


ラジオシティ(同名の放射量にちなんで名付けられた)は、粗い表面やマットな表面から反射する光によって照らされたオブジェクトをレンダリングする方法です。この種の照明は、間接光、環境照明、拡散照明、または拡散相互反射と呼ばれ、これをリアルにレンダリングする問題は、グローバルイルミネーションと呼ばれます。ラスタライズと基本的なレイ トレーシング(分布レイ トレーシングとパス トレーシングを除く)では、間接光を大まかに近似することしかできません。たとえば、アーティストが選択した均一な「環境」照明量を追加するなどです。ラジオシティ技術は、ラスタライズや従来のレイ トレーシングでは難しい、長方形の蛍光灯パネルなどのエリア ライトを含むシーンのレンダリングにも適しています。ラジオシティは物理ベースの方法と考えられており、物理学の方程式と実験データを使用して環境内の光の流れをシミュレートすることを目的としていますが、多くの場合、すべての表面が不透明で完全にランバートであると仮定するため、リアリズムが低下し、適用範囲が制限されます。[ 8 ] : 10, 11.2.1 [ 10 ] : 888, 893 [ 66 ] [ 67 ] : 6
元々のラジオシティ法(1984年に初めて提案された)は、現在では古典的ラジオシティと呼ばれていますが、シーン内の表面と光源はパッチと呼ばれる断片に分割されます。このプロセスはメッシュ化と呼ばれ、有限要素法となります。レンダリングコードは、各パッチから放射または拡散反射(散乱)される光のうち、他の各パッチが受け取る光の割合を決定する必要があります。これらの割合は、形状係数または視係数と呼ばれます(最初に工学分野で放射熱伝達をモデル化するために使用されました)。形状係数は、受光面のアルベドで乗算され、行列に格納されます。シーン内の照明は、線形代数の手法で解くことができる行列方程式(または同等の線形方程式系)として表現できます。[ 66 ] [ 68 ]: 46 [ 10 ]: 888、896
放射輝度方程式を解くと、各パッチから放射および反射される光の総量が得られ、これを面積で割ると放射輝度と呼ばれる値が得られます。この値は、ラスタライズまたはレイトレーシング時に、パッチの可視部分に対応するピクセルの色を決定するために使用できます。リアルタイムレンダリングの場合、この値(またはより一般的には、局所的な表面アルベドに依存しない放射照度)を事前に計算してテクスチャ(放射照度マップと呼ばれる)に保存するか、3D モデルの頂点データとして保存することができます。この機能は、建築ビジュアライゼーション ソフトウェアで、照明を計算した後、建物の内部をリアルタイムでウォークスルーできるようにするために使用されました。[ 10 ] : 890 [ 8 ] : 11.5.1 [ 67 ] : 332
古典的な放射輝度法で使用される行列のサイズが大きい(パッチ数の二乗)ため、現実的なシーンでは問題が生じます。実際の実装では、ヤコビ法またはガウス・ザイデル法による反復計算が用いられることがありますが、これは(少なくともヤコビ法の場合)光の伝播を一度に1回ずつ反射させ、表面に吸収されていない光の量が無視できるほど少なくなるまでシミュレーションすることと同等です。必要な反復回数(反射回数)はシーンに依存し、パッチ数には依存しないため、全体の計算量はパッチ数の二乗に比例します(対照的に、ガウス消去法を用いて行列方程式を解くには、パッチ数の三乗に比例する計算量が必要です)。完全な行列をメモリに格納することを避けるため、必要に応じて形状係数を再計算することができます。[ 10 ]: 901、907
レンダリングの品質はパッチのサイズによって決まることが多く、例えば、影のエッジを正確に描写するには非常に細かいメッシュが必要です。重要な改善点として階層型ラジオシティがあり、これは互いに遠く離れた表面間の光の伝達をシミュレートするために粗いメッシュ(大きなパッチ)を使用し、必要に応じてパッチを適応的に細分化します。これにより、ラジオシティをはるかに大規模で複雑なシーンに適用できるようになります。[ 10 ]: 975、939
ラジオシティ法の代替バージョンや拡張バージョンは、光沢面や鏡面などの非ランバート面をサポートし、表面パッチだけでなくオブジェクトのボリュームや「クラスター」を使用することもあります。確率的またはモンテカルロラジオシティは、さまざまな方法でランダムサンプリングを使用します。たとえば、すべてのパッチにわたって積分する代わりに、入射光のサンプルを取得します。これによりパフォーマンスは向上しますが、ノイズが発生します(このノイズは、パストレーシングノイズとは異なり、最終ステップとして決定論的反復を使用することで低減できます)。ラジオシティの簡略化されたバージョンや部分的に事前計算されたバージョンは、リアルタイムレンダリングで広く使用されており、光場の近似値を格納するオクツリーラジオシティなどの技術と組み合わせて使用されます。[ 10 ] : 979,982 [ 68 ] : 49 [ 69 ] [ 8 ] : 11.5
物理ベースレンダリングと呼ばれる手法の一環として、パストレーシングは、映画のエフェクトを含むリアルなシーンをレンダリングするための主要な技術となっています。[ 70 ]例えば、人気のオープンソース3DソフトウェアであるBlenderは、Cyclesレンダラーでパストレーシングを使用しています。[ 71 ]グローバルイルミネーションにパストレーシングを使用して生成された画像は、一般的にラジオシティ(リアルなライティングのための主要な競合アルゴリズム)を使用した場合よりもノイズが多くなりますが、ラジオシティは複雑なシーンへの適用が難しく、放射照度のテッセレーション表現を使用することから生じるアーティファクトが発生しやすいという欠点があります。[ 70 ] [ 10 ] : 975-976, 1045
分散レイ トレーシングと同様に、パス トレーシングはモンテ カルロ法または準モンテ カルロ法による積分を用いる確率的またはランダム化レイ トレーシングの一種です。これは、1986 年にジム カジヤによってレンダリング方程式と同じ論文で提案され、命名されました。カジヤは、カメラから一度に 1 つのパスのみをトレースすることで、分散レイ トレーシングの複雑さの多くを回避できることに気付きました (カジヤの実装では、この「分岐なし」ルールは、各サーフェスの交点から各光源上のランダムに選択された点に追加のレイをトレースすることで破られました)。カジヤは、パスの各ステップでどのレイをたどるかを選択するなどのランダムな決定を行うために、層化サンプリングと重点サンプリングを使用することで、出力画像に存在するノイズを減らすことを提案しました。これらの技術を使用しても、分散を許容レベルまで減らすのに十分なサンプルを生成する計算コストが高すぎたため、当時のコンピュータを使用して映画レンダリングにパス トレーシングを実用的に使用することはできませんでした。パストレーシングのみを使用してレンダリングされた最初の長編映画である『モンスター・ハウス』は、20年後まで公開されなかった。[ 44 ] [ 70 ] [ 72 ]
基本的な形式では、パス トレーシングは、コースティクスや光が狭い空間を通して間接的に入射するシーンのレンダリングには非効率的です (サンプルが多すぎるため)。1990 年代には、これらの弱点に対処する試みが行われました。双方向パス トレーシングは、光源とカメラから別々に光線をトレースし、これらのパスを接続する方法を見つけるという点でフォトン マッピングに似ています(ただし、フォトン マッピングとは異なり、通常はすべてのピクセルに対して同じキャッシュ データを使用するのではなく、各ピクセルに対して新しい光パスをサンプリングします)。メトロポリス光輸送は、以前にトレースされたパスを変更することによってパスをサンプリングし、他の「明るい」パスに似たパスの探索により多くの時間を費やすことで、さらに明るいパスを発見する可能性を高めます。多重重要度サンプリングは、特に一部のサンプルが他のサンプルよりもはるかにノイズが多い場合に、複数のサンプリング方法からのサンプルを組み合わせるときに分散を減らす方法を提供します。[ 70 ] [ 18 ]
この後の研究は、エリック・ビーチの1997年の博士論文で要約され、さらに発展させられ、コンピュータグラフィックスコミュニティにおけるパストレーシングへの関心を高めるのに役立った。1998年に初めてリリースされたArnoldレンダラーは、パストレーシングが映画のフレームのレンダリングに実用的であり、映画業界でバイアスのない物理ベースのレンダリングに対する需要があることを証明した。他の商用およびオープンソースのパストレーシングレンダラーが登場し始めた。計算コストは、 CPUとクラスタのパフォーマンスの急速な進歩によって対処された。[ 70 ]
パス トレーシングは比較的単純で、モンテ カルロ法(ピクセルごとに数百または数千のパスをサンプリング)であるため、 GPUに実装するのが魅力的です。特に、Nvidia のRTXやOptiXなどのレイ トレーシング アクセラレーション技術をサポートする最近の GPU ではそうです。[ 73 ]しかし、双方向パス トレーシングとメトロポリス光輸送は、GPU に効率的に実装するのがより困難です。[ 74 ] [ 75 ]
パス追跡の出力からノイズを除去する技術が開発され、許容できる品質を達成するために必要なパスの数を減らしていますが、詳細が失われたり、ノイズよりも不快な小規模なアーティファクトが導入されたりするリスクがあります。[ 76 ] [ 77 ]ニューラルネットワークは現在、この目的で広く使用されています。[ 78 ] [ 79 ] [ 80 ]
パス追跡の改善に関する研究は継続されています。双方向パス追跡とメトロポリス光輸送の多くのバリエーションが検討され、パス追跡とフォトンマッピングを組み合わせる方法も検討されています。[ 81 ] [ 82 ]最近のパス誘導アプローチでは、空間の各ボリュームにおける光場確率分布の近似を構築し、パスをより効果的にサンプリングできるようにしています。[ 82 ]
ノイズ除去とハードウェアレイトレーシングアクセラレーションを組み合わせることで、パストレーシングをリアルタイムレンダリングに使用することが実用的になりました。パフォーマンスの制約により、放射輝度キャッシュなどのバイアス技術が組み込まれる場合があります。空間時間リザーバーリサンプリング(ReSTIR)は、以前のフレームと隣接するピクセルからのサンプル(パス)を再利用することで、リアルタイムパストレーシングの品質を向上させ、より複雑なライティングを可能にすることを目的としています。[ 83 ]: 16.2.4 [ 84 ]
2003年時点で、機械学習(ML)技術は、テクスチャ合成、点群へのサーフェスの適合、モーションキャプチャデータへの曲線の適合など、コンピュータグラフィックスの他の分野で使用されていました。 [ 85 ]レンダリングへのMLの使用は、ニューラルネットワーク(特に 畳み込みニューラルネットワーク)を高速に評価できるGPUが利用可能になったことで拡大しました。
ニューラルネットワークとガウス混合モデルは、パストレーシングなどのレンダリング技術と組み合わせて、双方向反射率分布関数(BRDF)をエンコードしたり、空間内の点におけるキャッシュされた放射輝度をエンコードしたり(レンダリングのバイアス加速やパスガイドのため)するために使用されてきました。ニューラル放射輝度場(NeRF)は、後者のアプローチを極限まで推し進め、ボリューム内のすべての点における放射輝度をエンコードし、この近似値の評価を主要なレンダリング方法として使用します。[ 86 ]: 16.3.2
レンダリングにおける機械学習の最も広く用いられている応用例の一つは、パストレーシング画像のノイズ除去である(実際には、現在ほとんどのパストレーシングでこのようなノイズ除去器が用いられていると考えられる)。ノイズの多い画像とノイズの少ない画像(あるいは相関のないノイズを含む画像)のペアで学習させたニューラルネットワークは、レンダリング画像に加えて、表面法線やアルベドなどのデータを利用することで、ぼやけやアーティファクトを軽減し、テクスチャを保持することができる。また、パストレーシングで頻繁に発生する「ホタル」と呼ばれる散乱した明るいピクセルを除去するのにも効果的である。リアルタイムレンダリングに特化したノイズ除去器は、非常に少ないサンプル数でも動作し、時間的な一貫性を向上させてちらつきを軽減することができる。[ 86 ] : 16.3.2 [ 14 ] : 26.5
レンダリングは通常、利用可能な計算能力とメモリ帯域幅によって制限されるため、特にリアルタイムレンダリングにおいては、レンダリング速度を向上させる(「アクセラレーション」する)ための専用ハードウェアが開発されてきた。ラスターグラフィックス用のフレームバッファなどのハードウェア機能は、レンダリング結果をリアルタイムでスムーズに表示するために必要となる。
ハードウェアアクセラレーションは、レンダリングにおけるソフトウェアの使用を置き換えるものではなく、専用回路を使用して特定の操作や計算を高速化したり、ソフトウェアのコードの一部を別の種類のプロセッサで実行したりするものです。
ベクターモニター(カリグラフィディスプレイとも呼ばれる)の時代には、ディスプレイ処理ユニット(DPU)は、視覚要素のリストを保持し、電子ビームを制御することで画面上にそれらを連続的に再描画する専用のCPUまたはコプロセッサでした。Evans & SutherlandのLine Drawing System-1(および1980年代まで製造された後期のモデル)などの高度なDPUは、ワイヤーフレーム画像のレンダリングを高速化するために3D座標変換機能を組み込んでいました。[ 21 ]: 93–94、404–421 [ 87 ] Evans & Sutherlandは、星とワイヤーフレームグラフィックの両方をレンダリングできるベクターディスプレイであるDigistarプラネタリウム投影システムも製造しました(ベクターベースのDigistarとDigistar IIは多くのプラネタリウムで使用され、現在でも稼働しているものもあるかもしれません)。[ 88 ] [ 89 ] [ 90 ] Digistarのプロトタイプは、映画『スター・トレックII カーンの逆襲』の3D星空をレンダリングするために使用され、長編映画で初めて見られた3Dコンピュータグラフィックスシーケンスの1つとなった。[ 91 ]
1970 年代から 1980 年代初頭にかけてのシェーディング 3D グラフィックス レンダリングは、通常、ユタ大学の研究者が使用していたPDP-10などの汎用コンピュータで実装されていました[ 92 ] [ 54 ] 。複雑なステップのパイプラインが伴い、通常は CPU のみが提供するデータ アドレス指定、意思決定、計算機能が必要となるため、専用ハードウェアを使用して高速化することは困難でした (ただし、特定の操作を高速化するための専用回路が提案されていました[ 92 ] )。スーパー コンピュータや特別に設計されたマルチ CPU コンピュータまたはクラスタが、レイ トレーシングに使用されることもありました。[ 57 ] 1981 年、James H. ClarkとMarc Hannah は、 3D ラスタライズ パイプラインのいくつかのステップを実行するVLSIチップである Geometry Engine を設計し、この技術を商用化するためにSilicon Graphics (SGI) 社を設立しました。[ 93 ] [ 94 ]
1980年代の家庭用コンピュータやゲーム機には、ディスプレイの領域をスクロールしたり塗りつぶしたり、スプライトや線を描画したりできるグラフィックス コプロセッサが搭載されていましたが、リアルな画像をレンダリングするには役立ちませんでした。 [ 95 ] [ 96 ] 1980年代後半になると、3D レンダリング アクセラレーションを備えたPC グラフィックス カードやアーケード ゲームが登場し始め、1990 年代にはそのような技術が一般的になりました。今日では、低消費電力のモバイル プロセッサでさえ、通常は 3D グラフィックス アクセラレーション機能を搭載しています。[ 93 ] [ 97 ]
1990年代の3Dグラフィックスアクセラレータは、現代のGPUへと進化しました。GPUはCPUと同様に汎用プロセッサですが、個々のピクセルのレンダリングなど、多くの小さく類似した、ほとんど独立したサブタスクに分割して並列実行できるタスク向けに設計されています。つまり、GPUはこのようにサブタスクに分割できるあらゆるレンダリングアルゴリズムを高速化できます。これに対し、1990年代の3Dアクセラレータは、特定のラスタライズアルゴリズムや単純なシェーディングおよびライティング効果を高速化するためだけに設計されていました(ただし、より一般的な計算を実行するためのトリックは使用できました)。[ 8 ] : ch3 [ 98 ]
GPU はその起源から、従来型の 3D ラスタライズパイプラインの一部のステップ(z バッファを使用した隠面除去やミップマップを使用したテクスチャマッピングなど)に対して、専用のハードウェア アクセラレーションを今でも提供しているが、これらの機能はもはや常に使用されているわけではない。[ 8 ] : ch3最近の GPU には、レイ トレーシングとパス トレーシングのすべてのバリアントを高速化するために、レイとバウンディング ボリューム階層の交点を見つけるのを高速化する機能、[ 59 ]また、レンダリングに役立つこともあるニューラル ネットワークアクセラレーション機能も備えている。[ 99 ]
GPU は通常、高解像度のリアルタイム レンダリングの読み書き帯域幅要件をサポートするために高帯域幅メモリ システムと統合されています。特に、フレームをレンダリングするために複数回のパスが必要な場合に重要です。ただし、メモリレイテンシはCPU よりも高くなる可能性があり、アルゴリズムのクリティカル パスに多くのメモリ アクセスが含まれる場合は問題となる可能性があります。GPU 設計では、高いレイテンシは避けられないものとして受け入れられており (多数のスレッドがメモリ バスを共有しているため)、スレッドを効率的に切り替えることでそれを「隠蔽」しようとします。これにより、最初のスレッドが読み書きの完了を待っている間に、別のスレッドが計算を実行できます。[ 8 ] : ch3 [ 100 ] [ 101 ]
レンダリングアルゴリズムは、ほとんど同じ操作を実行する少数のスレッドグループを使用して実装できる場合にのみ、GPU 上で効率的に実行されます。この要件を満たすコードの例として、単純なレイトレーシング画像で小さな正方形のピクセルをレンダリングする場合、すべてのスレッドが同じオブジェクトと交差するレイを処理し、同じ照明計算を実行することになります。パフォーマンスとアーキテクチャ上の理由から、GPU は、ワープまたはウェーブフロントと呼ばれる 16 ~ 64 個のスレッドのグループを同期して実行します(グループ内のすべてのスレッドが同時に同じ命令を実行します)。グループ内のすべてのスレッドが特定のコードブロックを実行する必要がない場合 (条件による)、一部のスレッドはアイドル状態になるか、計算結果が破棄され、パフォーマンスが低下します。[ 8 ] : ch3 [ 101 ]
歴史的に、ハードウェア レンダリング(おそらく「ハードウェア アクセラレーテッド レンダリング」または「ハードウェア アシスト レンダリング」の略語)という用語は、ハードウェア アクセラレーテッド ラスタライズ パイプラインを使用したレンダリング(通常はリアルタイム レンダリング用)を意味することがありました。 [ 67 ]:243、249、284、324対照的に、ソフトウェアレンダリングは、グラフィックス ハードウェアの機能に制限されず、よりリアルで高品質な技術を使用できるソフトウェアを使用したオフラインレンダリングを意味していました。 [ 6 ]: 1.5ハードウェアとソフトウェアの両方が進化しており、これらの用語は今でも使用されていますが、その意味は文脈に依存する可能性があります。
1990年代にOpenGLとDirect3Dが導入されたとき、 3Dグラフィックスのハードウェアアクセラレーションを持たないコンピュータでこれらのAPIを使用する必要がありました。特別なハードウェアを必要としない「フォールバック」レンダリング実装が提供され、これらは「ソフトウェアレンダラー」と呼ばれることもあります(今日ではハードウェアアクセラレーションはほぼ常に利用可能であり、これらのCPUのみの実装は主にテストに使用されます)。[ 102 ]: Ch2、13最近では、「ソフトウェアレンダリング」は、OpenGL、 Metal、Direct3D、VulkanなどのグラフィックスAPIを使用しないレンダリングを意味することもあります。[ 103 ]: Intr.
かつて「ソフトウェアレンダラー」と呼ばれていたタイプのレンダラー(例えば、映画のオフラインレンダリングに使用されるパストレーシングレンダラー)は、現在では一般的にGPUアクセラレーションを使用しており、多くの場合、グラフィックスに特化していないCUDAやOpenCLなどのAPIを介して行われます。これらのAPIはGPU上でC++コードを実行できるため、同じレンダリングコードをCPUまたはGPUのどちらでも実行できるようになりました。[ 73 ]
以下は、頻繁に言及されるレンダリング技術の概略的なタイムラインであり、現在の研究分野も含まれています。特定の論文でアイデアが言及された場合でも、ほとんどの場合、同じ分野で複数の研究者やチームが研究を行っていたことに注意してください(以前の関連研究も含む)。手法が最初に提案された時点では、多くの場合非常に非効率的であり、それを有用な技術にするには、追加の研究と実践的な努力が必要です。[ 10 ]: 887
このリストは学術研究に焦点を当てており、ハードウェアは含まれていません。(より詳しい歴史については、「#外部リンク」、および「コンピュータグラフィックス#歴史」と「アーケードビデオゲームの黄金時代#技術」を参照してください。)
{{citation}}: CS1メンテナンス: 場所の発行元が見つかりません (リンク)最近出版された書籍
古い本
非写実的なレンダリング
オンラインチュートリアル(書籍版も入手可能)