ベクトルグラフィックスを使用することもありますが、それは単にある場合には少しだけ見た目がいいからであり、また、ビットマップ/ラスタグラフィックスを使用する場合もあります。
私は疑問に思っていましたが、これら2つのオプションの間にパフォーマンスの大きな違いはありますか?
ベクトルグラフィックスを使用することもありますが、それは単にある場合には少しだけ見た目がいいからであり、また、ビットマップ/ラスタグラフィックスを使用する場合もあります。
私は疑問に思っていましたが、これら2つのオプションの間にパフォーマンスの大きな違いはありますか?
回答:
TheBuzzSawが言ったように、ラスタライズされたグラフィックスとベクターグラフィックスの実装を含む、多くのものに依存します。
以下は、従来のラスタライズ手法を使用してレンダリングされる高性能のベクターグラフィックス手法です。
LoopとBlinnは、単一の三角形をレンダリングし、ピクセルシェーダーのテクスチャ座標を使用してピクセルが曲線の上または下にあるかどうかを示すことにより、ベクトルグラフィックの二次ベジェ曲線をレンダリングする方法を示します 。http://www.msr-waypoint。 net / en-us / um / people / cloop / LoopBlinn05.pdf
基本的な考え方は、三角形のコーナー位置を3つのコントロールポイント位置に設定し、各コーナーのテクスチャ座標をそれぞれ(0,0)、(0.5,0)、および(1,1)に設定することです。シェーダーで、補間されたテクスチャ座標(x * xy)が<0の場合、ピクセルは曲線の下にあり、そうでない場合は曲線の上にあります。
シェードトイでそれのフェイク実装をここで見ることができます:https ://www.shadertoy.com/view/4tj3Dy
2番目の方法については、バルブからの方法です。ピクセルデータではなく、テクスチャへの距離がテクスチャに格納され、テクスチャサンプリングを使用してベクトルグラフィックスを描画できます。デコードは非常に簡単で、アルファテストのみを使用して固定機能ハードウェア上でも実装できます。 http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf
2番目の手法がどの程度うまく機能するかを知るために、この1024x768口ひげ画像は、単一のカラーチャンネルを持つ64x32ソース画像から生成されました!(別名2KB非圧縮)
私のブログにもそれに関するいくつかの記事を書きました:http : //blog.demofox.org/2014/06/30/distance-field-textures/
これがいかに単純かを示すサンプルOpenCLコードを次に示します。
float alpha = read_imagef(tex3dIn, g_textureSampler, textureCoords).w;
float3 color = (alpha < 0.5f) ? (float3)(1.0f) : (float3)(0.0f);
これらの手法はどちらも非常に高速で、ベクターグラフィックとラスタライズされたグラフィックの間の線を少しぼかします。ラスタライズ手法を使用してレンダリングされますが、ベクターグラフィックス手法のようなズーム/スケーリングのプロパティがあります。
あるかもしれません。
技術的な回答が少ない:
グラフィックスプログラミングとは関係のないWebサイトまたは別のアプリケーションを構築している場合、おそらく答えはイエスです。基礎となるAPIは、それらをレンダリングして効率的にキャッシュする方法を推測しようとします。ただし、アプリケーションが実行され、APIが誤って推測する場合があるため、物事を再レンダリングしてパフォーマンスに影響を与える必要があります。
より技術的な:
最新のGPUの1つとGPUでベクトルパスを描画するためのライブラリを使用していない限り、すべてのビットマップテクスチャがGPUによってレンダリングされることに注意してください。
ベクトルグラフィックスがテクスチャにレンダリングされる典型的なケースを考えます。ここで、パフォーマンスはツールチェーン、アプリケーションがベクトルアセットからテクスチャを動的に作成しているかどうか、グラフィックがさまざまなズームレベルで表示されているかどうかによって異なります。関係する2つの問題があります。リソースとテクスチャの生成です。グラフィックを静的なサイズでのみ表示している場合、違いはなく、おそらくツールチェーンは実行前にアセットをビットマップグラフィックに変換できます。ただし、さまざまなサイズまたは3Dの世界で表示される場合、より多くのメモリを使用するミップマップされたテクスチャが必要になります。大きなテクスチャで忠実に「近い」状態を確認したい場合、多くのメモリが必要になります。
これがお役に立てば幸いです。
ベクターグラフィックスをレンダリングする方法はいくつかあります。TheBuzzSawが述べているように、NVIDIAには、一般的なパスを非常に高速にレンダリングできる拡張機能があります(もちろん、NVIDIA GPUでのみ機能します)。また、Alan Wolfeは暗黙の表面法(ループブリン/距離フィールド)に言及しています。これは、図形の内側にいるか外側にいるかを示す関数を定義し、その関数に基づいてピクセルに色を付けます。別の方法は、ステンシルとカバーです。パスをステンシルバッファーにレンダリングし、偶奇カウントを使用して、パスがピクセルをカバーするかどうかを判断します。
ただし、一般的に、トレードオフは、ラスターのレンダリングが高速になりますが、エイリアシングの影響を受けやすくなります(距離フィールドが低縮尺と高縮尺で壊れる場合もあります)。レンダリングパスには多くの設定が必要ですが、理論的には任意の解像度に拡張できます。