今日、ハードウェアレンダリングではなくソフトウェアレンダリングを使用するのはなぜですか?


13

CPUやソフトウェアのレンダリングとは対照的に、私は想定していますか?

一般に、現在のレンダリングはすべて、GPUベースではなく、OpenGLまたはDirect Xを使用しているように見えますか?

誰かが私にここでいくつかの情報を教えてもらえますか、適切な答えが見つかりませんか?

回答:


7

GPUレンダリングが何であるかを既に知っているので、あなたが尋ねているように見えるものに答えさせてください。

従来、ハードウェアレンダリングは非常に複雑であるというスティグマを抱えていました。これは主に、複雑さを隠蔽するために十分に考慮されていないアプリケーションプログラミングインターフェイス(API)の設計によるものです。つまり、学習曲線は急勾配でした。また、これらのAPIが非常に連動している3Dアプリケーションの作成は、2Dアプリケーションの作成よりもはるかに複雑であるという理解が原因の1つです。インターフェイスの複雑さについては、OpenGLやDirectXなどのインターフェイスを指します。3D対2Dについては、3Dシーンを構築するための数学と幾何学、および未訓練の心が2D問題にアプローチできる単純さについて言及しています。

しかし、近年、学習教材がはるかに利用可能になっただけでなく、これらのインターフェイスの根本的な複雑さをラップする多くのライブラリが利用可能になり、参入障壁が低くなりました。これらはすべて、視覚化、洗練されたユーザーインターフェイス、および低電力デバイスのパフォーマンスの重要性が高まっているため、既に存在していた関心のサイクルにフィードバックされています。

そのため、ソフトウェアレンダリングと2Dレンダリングは、グラフィックスを初めて使用するユーザーや、プロジェクトでレンダリングにあまり時間がかからない製品を作成したいユーザーにとって、優れたエントリポイントであり、フォーカスエリアです。少なくとも2Dに関しては、これは依然として適用されます。テクノロジは、2DレンダリングをGPUにもたらす際のギャップをほぼカバーしています。


20

ここには本当に良い答えがいくつかありますので、それらを補足するだけです。

ソフトウェアレンダリングの背後にある主な推進力は機能です。これは、答えの一つにに触れましたが、私は反対のポイントを作るつもりです:ソフトウェアレンダリングは、実際にすることができ、より小さくない、ハードウェアレンダリングよりも可能。

ハードウェアを使用すると、一般的にハードウェア自体の機能に制限されますが、OpenGL for oneはハードウェアには存在しない可能性のある多くのもののソフトウェアエミュレーションが可能です。つまり、Feature Xを使用しようとしてもハードウェアがサポートしていない場合、次の2つのいずれかが発生します:ソフトウェアエミュレーションに戻る(典型的なOpenGLシナリオ)か、またはまったく使用します(典型的なD3Dシナリオ)。

ソフトウェアレンダリングを使用すると、コードを自分で作成できます。物事を操作し、ピクセルレベルまでの処理を完全に制御できます。過去の爆発の例を挙げると、Quakeは1996年にソフトウェアにピクセルシェーダーを実装していました。当時は3Dカード(当時は「GPU」と呼ばれていませんでした)が数十個のテクスチャ付き三角形をほとんどラスタライズできませんでした。

これは現在のGPUにも当てはまりますが、グラフィックパイプラインには、固定機能として公開されている(または公開されていない)重要な部分がまだあります。

ソフトウェアレンダリングはより適切にスケールアウトできます。マルチGPUセットアップが実際に実行可能になったのは比較的最近ですが、ソフトウェアは多くのサーバーの多くのCPUコアに拡張できます。サーバーファーム全体をこれ専用にすることができ、プロのレンダーファームは引き続きソフトウェアレンダリングを使用します。

ソフトウェアはさまざまなレンダリングパラダイムを公開できます。現在のハードウェアは、三角形/頂点/フラグメント/ラスタライズのパラダイムに非常に焦点を当てています。それは、あるものを選んで、それが慈悲を叫ぶまで最適化する場合です。GPUは、ソフトウェアでより一般的に実装されているレイトレーシングなどの選択肢としては依然として適切ではありません。

もちろん、アップルとアップルの直接比較では、GPUがより強力な分野を比較している限り、GPUは曜日を問わずソフトウェアに勝ちます。しかし、それは彼らがあらゆる分野でより強いということではありません。それにも関わらず、このSEサイトの目的のために、一般にハードウェアを使用する方法がありますが、ソフトウェアも実行可能なユースケースがあることに注意してください。


8
「ソフトウェアレンダリングは、実際にはハードウェアレンダリングよりも優れている場合がありますが、それ以上ではありません」
concept3d 14

10

ハードウェアまたはGPUレンダリングは、イメージをレンダリングするためにグラフィック処理ユニット(別名ビデオカード)を使用して推測したとおりです。その反対は、CPUが使用されるソフトウェアレンダリングです。

ソフトウェアレンダリングは通常、(適切な)GPUが利用できない場合のフォールバックとして使用されます。ただし、GPUは桁違いに高速であるため、CPUは通常リアルタイムで画像をレンダリングできないため、ソフトウェアレンダリングはほとんど役に立ちません。ソフトウェアレンダリングは、画像をレンダリングするために非常に複雑な式が必要な場合、または高精度が必要な場合に役立ちます。CPUはGPUよりも汎用性が高いため、より多くの機能を備えています。しかし、今日のGPUはますます複雑なタスクを処理できるようになり、数値を表現するための32ビットの浮動小数点数に制限されなくなっているため、この引数の有効性は低下しています。


2

これは本当に良い質問だと思います。

私が想像できるのは:

  • VRAMは、一般的なRAMメモリよりも制限されています。GPUレンダリングの場合-すべてのテクスチャが問題になります。RAMには、VRAMの約4〜8倍のデータを保存できます。もちろん、このシナリオでは、RAM / VRAMとの間で未使用/必要なテクスチャを解放/プッシュするシステムがないことを前提としています。

  • マルチスレッドに関しては、ソフトウェアレンダリングで作業する方がはるかに簡単です-コンテキストを共有する必要はありません

  • 2Dグラフィックスを実行している場合-通常、ほとんどのフレームワークは、Dirty Rectangles Evaluationの実装を引き継ぎます-これが多くのパフォーマンスの問題を解決します。

それでも、OGL / D3Dを使用したレンダリングは、より多くのパフォーマンスと可能性を提供します。シェーダーは、ソフトウェアレンダリングではほとんど不可能な、本当に素晴らしいことを実行できます。

しかし、ブリットやカラーキーを使用したテクニックなどは、コンピューターグラフィックスの世界の原点であるベースレベルにいるような感覚を持っています。

ソフトウェアのレンダリングについて知ることは、少なくとも良いことだと思います。それは本当にエキサイティングな世界であり、今日私たちが見ているすべての根源であることは言うまでもありません。


1
シェーダーを実行するためにハードウェアアクセラレーションは必要ありません。OS X 10.9には、GL4の完全なソフトウェア実装機能が付属しています。パフォーマンスは、ソフトウェアレンダリングに信じられないほど優れています。洗練されたゲームを現実的にプレイできるほどではありません(公平に言うと、Appleが製品を出荷するGPU も同じではありません)が、Direct3D参照ラスタライザーのようなものを使用するよりもはるかに実用的です。実際には、使用可能な動作ソフトウェアを出荷できるものです。
アンドンM.コールマン14

@ AndonM.Coleman誰もがAppleを使用しているわけではなく、LinuxとWindowsでシェーダーをサポートするソフトウェアレンダラーを知りません。
luke1985

1
それは私のポイントではありませんでした。CPU上で完全に機能するシェーダーが完全に実行されるOpenGLの実装があります。Appleが開発者であるという事実は、ほとんど無関係です。あなたの答えは、OpenGLで最新のシェーダーを実行するにはGPUが必要だと思ったという印象を与えました。
アンドンM.コールマン14

@ AndonM.Colemanそして、それはほとんど正しいです。なぜなら、80%のケースであなたがしなければならないからです。
luke1985 14

2
シェーダーはソフトウェアレンダリングを介して簡単に実装でき、Tomb Raider 1とQuake 1にもピクセルシェーダーがありました。これは正反対です。CPUは、現在のGPUの頂点/フラグメントパイプラインを制限するよりも多くの制御を提供します。
lama12345
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.