コンピューターグラフィックス

コンピューターグラフィックスの研究者やプログラマーのためのQ&A

2
GL_STATIC_DRAW対GL_DYNAMIC_DRAW対GL_STREAM_DRAW:それは重要ですか?
OpenGLでバッファオブジェクト関数(glBufferData、glBufferSubData、そしておそらくいくつかの他)は、パラメータ持つusage可能性の高い実装歩留まりより良いパフォーマンスを助けるためのもの使用目的、のヒントとして文書による説明を。 使用法 データストアの予想される使用パターンを指定します。シンボル定数でなければなりませんGL_STREAM_DRAW、GL_STREAM_READ、GL_STREAM_COPY、GL_STATIC_DRAW、GL_STATIC_READ、GL_STATIC_COPY、GL_DYNAMIC_DRAW、GL_DYNAMIC_READ、またはGL_DYNAMIC_COPY。 [...] 使用法は、バッファオブジェクトのデータストアへのアクセス方法に関するGL実装へのヒントです。これにより、GL実装は、バッファーオブジェクトのパフォーマンスに大きな影響を与える可能性のあるよりインテリジェントな決定を行うことができます。ただし、データストアの実際の使用は制限されません。 wikiも同様にあいまいです。 結局のところ、これらはヒントにすぎません。作成後にSTATICバッファーを変更すること、またはSTREAMバッファーを変更しないことは、完全に正当なOpenGLコードです。 [...] これらは、慎重なプロファイリングでのみ回答できる質問です。そして、それでも、答えはその特定のハードウェアベンダーからの特定のドライバーバージョンに対してのみ正確になります。 結局のところ、このパラメーターはどの程度関連性がありますか?ドライバーは実際にそれを考慮に入れていますか?それを考慮に入れている場合、実際のパフォーマンスにどの程度影響を与えますか?共有するデータはありますか? 私は既存のAPIのいずれかとして実装されることを意図した薄いグラフィックAPI抽象化レイヤーを作成しました。このパラメーターを完全に無視して、公開された抽象化からそれを非表示にしたくなります。

2
導関数マップと接線空間法線マップ
一部のエンジンが接線空間法線マップの代わりに微分マップを使用していることを発見しました。 いくつか読んだ後、それは接線空間法線を置き換えるための本当に素晴らしい方法のようですが、それらを使用するいくつかの欠点がありますか?なぜ接線空間法線を使い続けるのですか? メリットとデメリットの両方を比較することは可能ですか?

1
海洋波レンダリング
ホワイトキャップとフォームと波の強度が変化する水域の波をどのように生成できますか?表面は法線マップのメッシュですか?それを生成するための式はありますか?ホワイトキャップがどこにどのようにレンダリングされるかを決定するのに似たものはありますか?私はこの論文に出くわしましたが、あまり明確ではありません。 論文では、波の発生について語っています。ホワイトキャップとフォーム専用のセクションがあり、ホワイトキャップとフォームを生成するための公式を示していますが、それを必要とする水の部分にのみ適用するにはどうすればよいですか?私が観察したことに基づいて、それがホワイトキャップを必要とする領域としてFを表すだけですが、誰かがそれがどのように機能するかを明確にすることができますか?

3
ポイント変換とベクトル変換の違いは何ですか?
これは私の講師が授業で私に言ったことです: 4 * 4の行列のみを考慮します。これらは、オブジェクト(またはこれらの操作の任意の組み合わせ)を回転、スケーリング、または移動するために使用されます。マトリックスは、仮想カメラモデルの実装でも使用されます。ベクトル変換と点変換の違いがわからない場合は、調べてください。 答えが見つからないようで、この質問のためだけにこのWebサイトのアカウントを作成しました。
11 vectors 


1
隣接する三角形がラスタライズされたときに重複しないのはなぜですか?
次のnoobの質問についてはお詫び申し上げます。満足のいく答えがどこにも見つからないだけです... 2つの三角形で構成される単純な軸に位置合わせされた四角形をレンダリングするとき、それらの三角形が交わる対角エッジに目に見えるアーチファクトがない理由がわかりません。それらのピクセルのいくつかは両方の三角形にある必要がありますよね?したがって、私のフラグシェーダーが常に部分的に透明な色(50%の黒など)を放出する場合、結果の四角形に濃い対角線が表示されてはいけませんか? 明らかに、これがコード化する必要のある本当の問題ではないのは素晴らしいことですが、なぜそうならないのか理解できません。これが常にうまくいくのはどのGPUマジックですか?
11 opengl  gpu  rasterizer 

2
人間の爪のレンダリングにはどのような技術が関係するのでしょうか?
皮膚、髪、目などのnuman bodyのいくつかの自然な特徴の物理ベースのレンダリングに関連する多くの参照があります。 しかし、視覚的にリアルな爪のシミュレーションに関する具体的な情報は見つかりませんでした。たとえば、人間の爪の光に対する反応の特性の特異性はわかりませんでした。 私が持っていたいくつかのアイデア: ウィキペディアの記事によると、爪は「ケラチンと呼ばれる丈夫な保護タンパク質でできています。(...)死んだ皮膚細胞でできています」。 ヘアもケラチンで構成されているので、ネイルレンダリングはヘアレンダリングといくつかの類似点があるかもしれません。しかし、髪のレンダリングの主な特徴は、髪の繊維内部の内部反射による鏡面ハイライトのカラーリングだと思います。その現象は重要ですか、それとも爪でも起こりますか? 調査により、爪は透明であり、表面下散乱効果をホストしていることがわかりました。これらの現象を組み合わせたモデルはありますか? 皮膚に近いことは、爪の下の皮膚が特異な外観特性を持っていることも示唆しているようです。このレイヤーも、シミュレーションするためにいくつかの特定のテクニックを必要としますか? 人間の爪のレンダリングを正確にシミュレートするには、どのような技術が必要ですか? 人間の爪の外観をシミュレートするために、デジタルアーティストはどのようなトリックを使用しますか?

1
私のGPUは何を待っていますか?
AMD Radeon HD 7800シリーズGPUで使用するOpenCLプログラムを書いています。AMDのOpenCLプログラミングガイドによると、この世代のGPUには、非同期で動作できる2つのハードウェアキューがあります。 5.5.6コマンドキュー 南部諸島以降では、デバイスは少なくとも2つのハードウェアコンピューティングキューをサポートします。これにより、アプリケーションは、非同期送信と場合によっては実行のための2つのコマンドキューを使用して、小さなディスパッチのスループットを向上させることができます。ハードウェアコンピューティングキューは、最初のキュー=偶数OCLコマンドキュー、2番目のキュー=奇数OCLキューの順に選択されます。 これを行うために、2つのOpenCLコマンドキューを作成して、データをGPUにフィードしました。おおまかに言って、ホストスレッドで実行されるプログラムは次のようになります。 static const int kNumQueues = 2; cl_command_queue default_queue; cl_command_queue work_queue[kNumQueues]; static const int N = 256; cl_mem gl_buffers[N]; cl_event finish_events[N]; clEnqueueAcquireGLObjects(default_queue, gl_buffers, N); int queue_idx = 0; for (int i = 0; i < N; ++i) { cl_command_queue queue = work_queue[queue_idx]; cl_mem src …
11 gpgpu  opencl 

2
OpenGL-エッジの検出
任意のメッシュをロードし、エッジに沿って太い黒い線を描画して、トゥーンシェーディングのような外観にします。ステンシルバッファーを使用して、オブジェクトの周りに黒いシルエットを描くことができました。あなたはここで結果を見ることができます: しかし、欠けているのはオブジェクト自体の黒い線です。法線の不連続性をチェックすることを考えました:隣接するピクセルが現在のものとは異なる法線ベクトルを持っているかどうかをチェックします。はいの場合、エッジが見つかりました。残念ながら、OpenGLでもGLSL頂点/フラグメントシェーダーでも、このアプローチをどのように実装できるかわかりません。 このアプローチやエッジ検出に関するその他のサポートについて、私はとても嬉しく思います。 編集:メッシュにテクスチャを使用していません。 もっと正確に言うと、次のように見えるCAD / CAMソリューションを作成したいと思います(Top Solid https://www.youtube.com/watch?v=-qTJZtYUDB4から取得):

1
シェーダーのループパフォーマンス
動的ループ関数をシェーダーに統合するための最良の方法は何ですか? まず、動的配列は不可能であるようです。では、最大サイズの配列を作成し、その一部のみを埋めるか、定義済みのサイズで配列を定義する方が良いでしょうか? 次に、この配列を反復処理する最良の方法は何ですか? 4〜128回の反復で、展開されたループまたは動的ループを使用する方が良いですか。また、事前定義された最大反復回数まで展開してから、などの条件で停止できることも確認しましたif (i == myCurrentMaximumIterationNumber)。

1
単一散乱マイクロファセットBSDFモデルにおけるエネルギー損失の補償
オリジナルのTorrance-Sparrow BRDFのような単一散乱マイクロファセットベースの表面モデル、またはWalterらによる粗い誘電体表面のBSDFのような派生モデル。マイクロファセット間の光の相互反射を無視します。これにより、特に粗さの値が高くなると、エネルギー損失が発生して暗くなる原因となります。 この問題は、ファーネステストを使用して簡単に実証できます。次の画像は、0.2から1.0までの粗さパラメーターのスミスモデルとGGX分布を使用した導電性マイクロファセットBRDFの実装の動作を示しています(問題を見やすくするために、ここではフレネル係数を意図的に1に設定しています)。 0.2から1.0までの粗さパラメーターのスミスモデルとGGXマイクロファセット分布を使用した粗い誘電体(IoR 1.51)BSDFのファーネステスト: エリックハイツ他 は最近、光の相互作用を完全に解決することによって暗くなる問題を解決する多重散乱モデルを提案しましたが、LuxRenderフォーラムでHeitz自身が言及したように、その評価ルーチンの確率論的な性質に起因するパフォーマンスの問題があります。 単一散乱モデルの失われたエネルギーを回復するための既知の補償方法はありますか?必ずしも物理的に正しいわけではありませんが、少なくとも物理的な妥当性(ヘルムホルツの相反性とエネルギーの節約)を壊しすぎないようにします。理想的には、手動でパラメータを調整する必要はありません。 でディズニーBSDF、そこに端で暗くの補償のために使用することができる「光沢」と呼ばれるパラメータ化コンポーネント(基本的にはフレネルベースの光沢のある葉)があるが、彼らは彼らの中で言及してシーグラフ2015もちろん、それは非常にアドホックメソッドです。 「...これは非常に概算であり、他の粗さの値ではうまく機能しません...」 LuxRenderフォーラムでの前述の Eric Heitz のコメントも、補償ハックを使用することを提案していますが、残念ながら詳細については触れていません。 私の知る限り、より単純なハックを使用して、単一散乱モデルのエネルギー保存を改善できます(アルベドの微調整など)。ただし、これを行うと、BSDFの相反性を壊さずに、完全にエネルギーを節約する材料(たとえば、完全な白い粗いガラス)を得ることができません。

1
「6分離」および「26分離」ボクセル化とはどういう意味ですか?
私が読んでいた本論文 Voxelpipe、NVIDIAおよびIからボクセル化ライブラリについてはセクション2ボクセル化で見つかった用語は、6-分離および26-分離します このウェブサイトを見つけましたボクセル化の基本的な考え方を説明しようとするが、言及された用語を理解するのにあまり役に立ちませんでした。 誰かが私を理解するのに役立つ他のリソースを説明したり指摘したりできますか?

1
重要性サンプリングと複数の重要性サンプリングの違いは何ですか?
数学の方程式が理解できません。私はグラフィックデザイナーです。 「重要度サンプリング」とは何ですか? 「多重重要度サンプリング」とは何ですか? イラストを使い、数式を使わずに簡単に説明していただけませんか?「重要度サンプリング」と「複数重要度サンプリング」の違いは何ですか?

1
3D Studioのスムーズメッシュが同じ数の頂点/三角形になるのはなぜですか?次に、それらを同じジオメトリでスムーズ化するにはどうすればよいですか?
3Dスタジオ(モディファイヤ/スムーザー)でスムージングされたメッシュが、そのプロセスの前後に同じ量の頂点/面を持ち、まったく同じジオメトリになる理由を理解しようとしています。 次の例では、両方のメッシュに32個の頂点と60個の面があります。 私はプログラミング(c ++およびc#)での作業経験がありますが、コンピューターグラフィックスの初心者です。したがって、私の予想では、スムージングされたメッシュのスムージングされた外観には、より詳細な最終メッシュを作成するために、追加の頂点、つまり三角形のサブディビジョンが必要になるということでした。しかし、そうではないようです。 したがって、私は尋ねます: 1)メッシュジオメトリの詳細を増やすことなく、どのようにスムージングが可能ですか? 2)スムージングは​​、元のメッシュと比較して、新しいメッシュを格納するために割り当て/使用されるメモリを少なくとも増やしますか? 説明は大歓迎ですが、参考文献(学術的かどうかにかかわらず)も高く評価されています。
11 3d  geometry  mesh  memory  model 

1
意味のあるダイレクト/コンピューティング/コピーキューはいくつありますか?
DirectX 12は、グラフィックス(「Direct」と呼ばれます)、計算、またはコピータスクのいずれかのコマンドキューを公開します。提供される機能に関しては、それぞれが次の機能のスーパーセットです。この仕様では、コマンドキューはデバイスで同時に実行できると記載されています。ただし、APIはコマンドキューの数を決して制限しません(少なくとも、私は制限を認識していません)。 どうやら、さまざまなベンダーがこれを非常に異なって処理します: Intelは最近のプレゼンテーション(スライド23)で、現在GPUはグラフィックスとコンピューティングを並行して処理することができず、コピーエンジンのスループットが弱いと述べています。彼らは、複数のグラフィックス/計算キューの使用を推奨していません。 AMDは、Mantleと現在のgenコンソールから始まるキュー/「非同期シェーダー」の使用を宣伝するためにずっと前に始めました。また、計算タスクとグラフィックスタスクを並行して実行することで大幅なパフォーマンスの向上を確認する開発者(例)もいます。 最近、ハードウェアでNvidiaが非同期シェーダーをサポートしていないという大騒ぎがありました。一度に個別のグラフィックスキューと計算キューを使用すると、動作が遅くなり、ドライバーのエミュレーションを示しています。一方、並行コピー操作は非常に長い間CUDAによってサポートされており、DMAエンジンが独立して動作できることは明らかです。 CommandListを1つではなく複数のCommandQueueにコミットすることが意味があるかどうかを実行時に決定する方法はありますか?(前者のケースにはエンジニアリングのオーバーヘッドがあまりないことを前提とする) メモリー操作を計算/グラフィックス操作と並行して実行することがどのように役立つかは簡単にわかりますが、複数の計算とグラフィックスプロセスを並行して実行することは不必要に複雑であると思います(大きなパフォーマンス上の利点がない限り)。また、これがどのようにしてパフォーマンスを大幅に向上させることができるかについても、私には明らかではありません。多くの小さな順次タスクが十分なGPU負荷を生成できない病理学的な場合を除きます。
11 directx12  api 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.