
ソフトウェアレンダリングとは、コンピュータソフトウェアを用いてモデルから画像を生成するプロセスです。コンピュータグラフィックスレンダリングの文脈では、ソフトウェアレンダリングとは、グラフィックスカードなどのグラフィックスハードウェアASICに依存しないレンダリングプロセスを指します。レンダリングはすべてCPU内で行われます。汎用CPUですべてをレンダリングすることの主な利点は、レンダリングにグラフィックスカードが不要になることですが、欠点は、CPUはグラフィックスカードのようにグラフィックスレンダリング専用に設計されていないため、レンダリング時間が遅くなることです。[ 1 ]
レンダリングは、建築、シミュレータ、ビデオゲーム、映画やテレビの視覚効果、デザインの視覚化に使用されます。レンダリングはアニメーション プロセスの最後のステップであり、シェーディング、テクスチャ マッピング、影、反射、モーション ブラーなどの視覚効果を使用してモデルやアニメーションに最終的な外観を与えます。 [ 2 ]レンダリングは、リアルタイム レンダリング(オンライン レンダリングとも呼ばれる) とプリ レンダリング(オフライン レンダリングとも呼ばれる) の 2 つの主要なカテゴリに分けることができます。リアルタイム レンダリングは、 3D コンピュータ ゲームのようにシーンをインタラクティブにレンダリングするために使用され、一般的に各フレームは数ミリ秒でレンダリングする必要があります。オフライン レンダリングは、リアルな画像や動画を作成するために使用され、各フレームの完了に数時間または数日かかる場合や、プログラマによる複雑なグラフィックス コードのデバッグに使用されます。
リアルタイムレンダリングでは、パフォーマンスが重視されます。初期のテクスチャマッピングされたリアルタイムソフトウェアレンダラーは、PC向けに3Dジオメトリの錯覚を作り出すために多くの工夫を凝らしていました(真の3Dは、主にフライトシミュレーターで使用される平面またはグーローシェーディングされたポリゴンに限られていました)。たとえば、 Ultima Underworldでは、上下方向の視点移動、傾斜した床、部屋の重なりなどが限定的に可能でしたが、詳細なオブジェクトはすべてスプライトに頼っていました。これらのゲームで使用されている技術は、現在2.5Dに分類されています。
現代の 3D タイトルと構造的に類似し、完全な6DoFを可能にした最初のゲームの 1 つはDescentで、ビットマップテクスチャ付き三角形ポリゴンで完全に作られた3D モデルが特徴でした。ボクセルベースのグラフィックスもDelta Forceのように高速で比較的詳細な地形レンダリングで人気を博しましたが、普及した固定機能ハードウェアにより、最終的には使用できなくなりました。Quakeは、 Michael AbrashとJohn Carmackによる効率的なソフトウェア レンダラーを特徴としています。Quakeや当時の他のポリゴン 3D ゲームの人気により、グラフィック カードの販売が促進され、DirectXやOpenGLなどのハードウェアAPIを使用するゲームが増えました。ソフトウェア レンダリングは主要なレンダリング技術としては衰退しましたが、2000 年代に入っても多くのゲームがフォールバックとしてソフトウェア レンダラーを備えており、たとえばUnrealやUnreal Tournament は、当時の CPU で満足できる品質とパフォーマンスを実現できるソフトウェア レンダラーを特徴としています。ハードウェア レンダラーのない最後のAAA ゲームの 1 つはOutcastで、高度なボクセル技術だけでなく、グラフィック ハードウェアに見られるようなテクスチャ フィルタリングとバンプ マッピングも特徴としていました。
家庭用ゲーム機やアーケードゲーム市場では、3D技術の進化はより急激でした。これは、これらの市場が常に単一用途のチップセットに大きく依存していたためです。16ビットゲーム機では、StarFoxやVirtua RacingなどのゲームでRISCアクセラレータカートリッジが採用され、専用の命令セットによるソフトウェアレンダリングが実現されました。Jaguarと3DOは3Dハードウェアを搭載した最初のゲーム機でしたが、 PlayStationが登場するまで、こうした機能はほとんどのゲームで使われることはありませんでした。
1990年代後半から2000年代初頭にかけて、子供向けゲームやカジュアルゲーマー(旧式のシステムや主にオフィス用途のシステムを使用しているユーザー)向けのゲームでは、通常、ソフトウェアレンダラーが代替手段として使用されていました。例えば、『トイ・ストーリー2 バズ・ライトイヤーの救出作戦』では、ゲーム開始前にハードウェアレンダリングかソフトウェアレンダリングかを選択できます。一方、『ハーフライフ』などのゲームでは、デフォルトでソフトウェアモードになっており、オプションメニューでOpenGLまたはDirectXを使用するように設定できます。3Dモデリングソフトウェアの中には、視覚化のためにソフトウェアレンダラーを備えているものもあります。そして最後に、ハードウェアのエミュレーションと検証にもソフトウェアレンダラーが必要です。後者の例としては、Direct3Dリファレンスラスタライザーが挙げられます。
しかし、ハイエンドグラフィックスにおいても、ソフトウェアレンダリングの「技術」は完全には消滅していません。初期のグラフィックカードはソフトウェアレンダラーよりもはるかに高速で、当初はより優れた品質と多くの機能を備えていましたが、開発者を「固定機能」のピクセル処理に限定していました。すぐに、ゲームの外観を多様化する必要性が生じました。ソフトウェアレンダリングは任意のプログラムを実行するため、制限がありません。そこで、グラフィックカードは、頂点ごと、ピクセル/フラグメントごとに小さなプログラム(シェーダーとも呼ばれる)を実行することで、このプログラマビリティを再び導入しました。DirectX 用のHigh Level Shader Language (HLSL) やOpenGL Shading Language (GLSL)などのシェーダー言語は、シェーダー用のCライクなプログラミング言語であり、(任意の機能を持つ)ソフトウェアレンダリングとある程度の類似性を示し始めています。
グラフィックス ハードウェアがリアルタイム レンダリングの主要な手段として採用されて以来、CPU のパフォーマンスはこれまで以上に着実に向上してきました。これにより、新しいソフトウェア レンダリング技術が登場しました。ハードウェア レンダリングのパフォーマンスには大きく劣りますが、一部の最新のリアルタイム ソフトウェア レンダラーは、特殊な動的コンパイルやSSEなどの高度な命令セット拡張を利用することで、幅広い機能セットと妥当なパフォーマンス (ソフトウェア レンダラーとしては)を両立させています。現在では、パフォーマンス、機能、継続的なイノベーションにより、ハードウェア レンダリングがソフトウェア レンダリングを凌駕していることは疑いの余地がありませんが、CPU とGPU はいずれ収束し、ソフトウェア レンダリングとハードウェア レンダリングの境界線は曖昧になるだろうと考える人もいます。[ 3 ]
ハードウェアの故障、ドライバの不具合、エミュレーション、品質保証、ソフトウェアプログラミング、ハードウェア設計、ハードウェアの制限など、さまざまな理由から、グラフィックスパイプラインの一部の機能またはすべての機能をCPUに担わせることが有用な場合がある。
その結果、既存のハードウェアグラフィックスアクセラレータを置き換えたり、拡張したりできる汎用ソフトウェアパッケージが数多く存在する。例えば、以下のようなものがある。
リアルタイムレンダリングとは対照的に、プリレンダリングではパフォーマンスは二の次です。主に映画業界で、リアルなシーンの高品質なレンダリングを作成するために使用されます。今日の映画の多くの特殊効果は、コンピュータグラフィックスによって完全にまたは部分的に作成されています。たとえば、ピーター・ジャクソン監督の『ロード・オブ・ザ・リング』シリーズのゴラムというキャラクターは、完全にコンピュータ生成画像(CGI)で作られています。アニメーション映画でも、CGIの人気が高まっています。特に、ピクサーは『トイ・ストーリー』や『ファインディング・ニモ』などの映画を制作し、ブレンダー財団は世界初のオープンムービー『エレファンツ・ドリーム』を制作しました。
非常に高い品質と多様なエフェクトが求められるため、オフラインレンダリングには高い柔軟性が要求されます。商用リアルタイムグラフィックスハードウェアは日々高品質化、プログラマブル化が進んでいますが、フォトリアリスティックなCGIのほとんどは依然としてソフトウェアレンダリングを必要とします。例えば、ピクサーのRenderManは、長さと複雑さに制限のないシェーダーを扱えるため、汎用プロセッサが必須となります。また、旧型のハードウェアでは、レイトレーシングやグローバルイルミネーションといった高リアリズムを実現する技術にも対応できません。