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

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

9
新しいグラフィックプログラマは、OpenGLではなくVulkanを学習すべきですか?
wikiから:「Vulkan APIは当初Khronoによって「次世代OpenGLイニシアチブ」と呼ばれていました」、そしてそれは「OpenGLとOpenGL ESを後方にならない1つの共通APIに統合するための根拠のある再設計努力です」既存のOpenGLバージョンとの互換性」。 それでは、OpenGLの代わりにVulkanを学習するために、グラフィックプログラミングを始めようとしている人たちにもっと役立つべきでしょうか?彼らは同じ目的を果たすようです。
53 opengl  api  vulkan 

5
符号付き距離フィールドフォントを使用したシャープコーナー
この論文では、Valveによる解像度に依存しないフォントレンダリングを実現する高速ソリューションとして、符号付き距離フィールド(SDF)が提示されました。 私はすでにValveソリューションを動作させていますが、角の周りのシャープネスを維持したいと思います。Valveは、2番目のテクスチャチャンネルとベースチャンネルのANDを使用することで、この方法でシャープなコーナーを実現できると述べていますが、この2番目のチャンネルがどのように生成されるかを説明していません。 実際、このホワイトペーパーには実装の詳細が数多く残されています。 鋭い角のあるSDFフォントレンダリングを取得する方向性を指摘できる方がいるかどうかを知りたいと思います。

6
GLSLシェーダーをデバッグするにはどうすればよいですか?
自明ではないシェーダーを書くとき(他の自明でないコードを書くときと同じように)、人々は間違いを犯します。[要出典]ただし、他のコードのようにデバッグすることはできません。結局、gdbまたはVisual Studioデバッガーを添付することはできません。コンソール出力の形式がないため、printfデバッグすらできません。私が通常していることは、見たいデータを色としてレンダリングすることですが、それは非常に初歩的で素人的な解決策です。私は人々がより良い解決策を思いついたと確信しています。 では、シェーダーを実際にデバッグするにはどうすればよいですか?シェーダーをステップスルーする方法はありますか?特定の頂点/プリミティブ/フラグメントでシェーダーの実行を見ることはできますか? (この質問は、「通常の」コードをデバッグする方法に似たシェーダーコードのデバッグ方法に関するものであり、状態の変更などのデバッグに関するものではありません。)
45 opengl  glsl  debugging 

4
ガウスぼかしはどのように実装されますか?
ぼかしはリアルタイムグラフィックスで行われ、一方の軸で実行し、もう一方の軸で実行することを読みました。 過去に1Dで少し畳み込みを行ったことがありますが、これに非常に満足しているわけではありません。 誰もが画像の2Dガウスぼかしがどのように行われるかを簡単に説明できますか? また、ぼかしの半径がパフォーマンスに影響を与える可能性があることも聞きました。それはより大きな畳み込みをしなければならないためですか?

4
アルベド対拡散
2つの用語の関係を理解し​​ていると思うたびに、混乱を招く情報が増えます。それらは同義語だと思っていましたが、今はわかりません。 「拡散」と「アルベド」の違いは何ですか?それらは交換可能な用語ですか、実際には異なることを意味するために使用されていますか?

3
コンピューティングシェーダーは、画像フィルタリングのピクセルシェーダーよりも効率的ですか?
ブラー、SSAO、ブルームなどの画像フィルタリング操作は、通常、ピクセルシェーダーと「収集」操作を使用して行われます。各ピクセルシェーダーの呼び出しは、隣接するピクセル値にアクセスするために多数のテクスチャフェッチを発行し、単一のピクセルの価値を計算します結果。このアプローチには、多くの冗長なフェッチが行われるという理論上の非効率があります。近くのシェーダー呼び出しは、同じテクセルの多くを再フェッチします。 別の方法は、計算シェーダーを使用することです。これらには、シェーダー呼び出しのグループ全体で少量のメモリを共有できるという潜在的な利点があります。たとえば、各呼び出しで1つのテクセルをフェッチして共有メモリに保存し、そこから結果を計算できます。これは、高速かもしれませんし、そうでないかもしれません。 質問は、どのような状況下で(実際に)コンピューティングシェーダーメソッドがピクセルシェーダーメソッドよりも実際に高速であるかということです。カーネルのサイズ、どんな種類のフィルタリング操作などに依存しますか?明らかに、答えはGPUのモデルによって異なりますが、一般的な傾向があるかどうか聞いてみたいと思います。

2
拡散反射と鏡面反射の違いは物理的にどの程度ですか?
リアルタイムのコンピュータグラフィックスで表面をシェーディングする古典的な方法は、(ランバート)拡散項と鏡面反射項の組み合わせであり、最も可能性が高いのはPhongまたはBlinn-Phongです。 現在、Frostbite、Unreal Engine、Unity 3Dなどのエンジンの物理ベースのレンダリング、したがってマテリアルモデルに向かう傾向により、これらのBRDFは変更されました。たとえば、最新のアンリアルエンジンはまだランバートディフューズを使用していますが、鏡面反射にクックトーランスマイクロファセットモデルと組み合わせて使用​​します(特にGGX / Trowbridge-Reitzとフレネル項の修正されたスリック近似を使用) )。さらに、導体と誘電体を区別するために「金属性」の値が使用されています。 誘電体の場合、拡散はマテリアルのアルベドを使用して色付けされますが、鏡面反射は常に無色です。金属の場合、拡散は使用されず、鏡面反射項には材料のアルベドが乗算されます。 現実世界の物理マテリアルに関して、拡散反射と鏡面反射の厳密な分離は存在しますか?存在する場合、それはどこから来たのですか?なぜ一方が着色されているのに、もう一方は着色されていないのですか?導体の動作が異なるのはなぜですか?

4
RGBではうまく表現されない一般的なマテリアルはありますか?
グラフィックスでは、光波長の全スペクトルの近似としてRGBおよびその他の色空間を使用します。これは明らかに一般的にはかなりうまく機能しますが、日常的な生活で遭遇する可能性のある合理的な一般的なオブジェクト/材料/現象があります。 ? 現在の回答は主に特定のRGB範囲外の色に焦点を当てていますが、たとえば、RGBでレンダリングされたときにオブジェクトの色が「間違った」ように見える例がある場合は、光源スペクトルとオブジェクトの反射スペクトル。言い換えれば、スペクトルレンダラーがより正確な結果を提供する場合です。 クレジット:以前のプライベートベータでこの質問が気に入ったので、ここで再現します。もともとはネイサンリードからの質問でした
34 color 

2
重要度サンプリングとは何ですか?
重要度サンプリングとは何ですか?私がそれについて読んだすべての記事は「PDF」について言及していますが、それも何ですか? 私が収集したものから、重要度サンプリングは、他よりも重要な半球上の領域のみをサンプリングする手法です。したがって、理想的には、ノイズを減らして速度を上げるために、光線を光源に向けてサンプリングする必要があります。また、いくつかのBRDFのかすめ角では計算にほとんど違いがないため、重要度サンプリングを使用してそれを回避するのは良いことでしょうか。 Cook-Torrance BRDFの重要度サンプリングを実装する場合、どうすればよいですか?

2
DirectX / OpenGL(Vulkan)コンセプトマッピングチャート
多くの場合、類似したハードウェア機能が、異なる用語を使用してDirectXおよびOpenGLを介して公開されます。 例: 定数バッファ / 均一バッファオブジェクト RWBuffer / SSBO どのDirectXの用語がどのOpenGLコンセプトを参照するために使用されているか、またはその逆を説明する包括的なチャートを探しています。 そのようなリソースはどこにありますか?
32 api 

2
レイマーチングとは Sphere Tracingは同じものですか?
多くのShaderToyデモは、レイマーチングアルゴリズムを共有してシーンをレンダリングしますが、非常にコンパクトなスタイルで記述されることが多く、簡単な例や説明は見つかりません。 それでは、レイマーチングとは何ですか?一部のコメントは、それが球体追跡のバリエーションであることを示唆しています。そのようなアプローチの計算上の利点は何ですか?

2
なぜモンテカルロ光線追跡は分散光線追跡よりも優れているのですか?
モンテカルロレイトレーサー(パストレースアルゴリズムに基づく)の品質は、分散(確率的)エンジンよりもはるかに現実的だと聞きました。理由を理解しようとしていますが、まだ始まったばかりです。 このトピックに飛び込み、基本を理解するために、誰かが私を正しい方向に向けることができますか?アルゴリズムのどの部分がよりリアルなレンダリング結果につながりますか?

4
複数のGLSLシェーダー間でコードを共有する
多くの場合、いくつかのシェーダー間でコードをコピー&ペーストします。これには、単一のパイプライン内のすべてのシェーダー間で共有される特定の計算またはデータ、およびすべての頂点シェーダー(またはその他のステージ)が必要とする共通の計算の両方が含まれます。 もちろん、それは恐ろしい習慣です。コードをどこかで変更する必要がある場合は、他のすべての場所でコードを変更する必要があります。 DRYを維持するための承認済みのベストプラクティスはありますか?人々はすべてのシェーダーに単一の共通ファイルを追加するだけですか?彼らは#includeディレクティブを解析する独自の初歩的なCスタイルのプリプロセッサを書いていますか?業界で受け入れられているパターンがある場合は、それらをフォローしたいと思います。
30 glsl 

1
元のパーリンノイズは、シンプレックスノイズよりも利点がありますか?
パーリンノイズは、最も一般的な手続き型ノイズ関数の1つです。Perlinは後にPerlinノイズのいくつかの欠点、特に高次元および指向性アーチファクトにおける非効率性を改善するSimplexノイズを開発しました(WikipediaはSimplexノイズの5つの利点をリストしています)。それでも、Perlinノイズは広く使用されているようです。主な理由は、シンプレックスノイズは概念的に理解するのがはるかに難しいことですが、今では十分に実装できるので、自分で再実装する必要はありません。 パーリンノイズには、シンプレックスノイズよりも利点がありますか?ノイズ関数を選択するとき、シンプレックスの代わりにパーリンを選択することはありますか?

2
Cook-Torrance BRDFをトレースするパス
- 「ので、長い記事のために申し訳ありませんが、私はそのように行うことを好む悪魔は細部にある。」:) 私はスクラッチからパストレーサーを書いており、完全に拡散した(ランバート)表面に対してうまく機能しています(つまり、ファーネステストは-少なくとも視覚的に-それがエネルギーを節約しており、レンダリングされた画像がミツバレンダラーで生成されたものと一致することを示しますパラメーター)。現在、いくつかの金属表面をレンダリングするために、オリジナルのCook-Torranceマイクロファセットモデルの鏡面反射用語のサポートを実装しています。しかし、このBRDFは受け取ったエネルギーよりも多くのエネルギーを反映しているようです。以下のサンプル画像を参照してください。 上の画像:ミツバリファレンス(正しいと仮定)画像:直接光サンプリング、重要度半球サンプリング、最大パス長= 5、32層化spp、ボックスフィルター、表面粗さ= 0.2、RGBによるパストレーシング。 上の画像:実際のレンダリング画像:ブルートフォースナイーブパストレース、均一な半球サンプリング、最大パス長= 5、4096層化spp、ボックスフィルター、表面粗さ= 0.2、RGB。レンダリング設定に関していくつかの違いはありますが、レンダリングされたイメージが前に示した参照に収束しないことは明らかです。 私はそれが実装の問題ではなく、レンダリング方程式フレームワーク内でのCook-Torranceモデルの適切な使用に関する問題だと思う傾向があります。以下に、鏡面反射光BRDFをどのように評価するかを説明します。適切に行っているかどうか、そしてそうでない場合はその理由を知りたいです。 重要な詳細を説明する前に、レンダラーは非常に単純であることに注意してください。1)総当たり攻撃ナイーブパストレーシングアルゴリズムのみを実装します。直接光サンプリング、双方向パストレーシング、MLTはありません。2)すべてのサンプリングは、交点の上の半球で均一です-重要なサンプリングはまったくなく、拡散サーフェスでもありません。3)光線経路の最大長は5に固定されています-ロシアンルーレットなし; 4)放射輝度/反射率はRGBタプルで通知されます-スペクトルレンダリングはありません。 クックトーランスマイクロファセットモデル 次に、スペキュラBRDF評価式を実装するためにたどったパスを作成しようとします。レンダリング方程式ですべてが開始 pは表面での交点であります、W oは視線ベクトルであり、wは私Lo(p,wo)=Le+∫ΩLi(p,wi)fr(wo,wi)cosθdωLo(p,wo)=Le+∫ΩLi(p,wi)fr(wo,wi)cos⁡θdω L_o(\textbf{p}, \mathbf{w_o}) = L_e + \int_{\Omega} L_i(\textbf{p}, \mathbf{w_i}) fr(\mathbf{w_o}, \mathbf{w_i}) \cos \theta d\omega pp\textbf{p}wowo\mathbf{w_o}wiwi\mathbf{w_i}光線ベクトルは、ある沿って出射放射輝度であるW 、O、L iが時輝度入射するPに沿ってW Iとのcos θ = N ⋅ W iが。LoLoL_owowo\mathbf{w_o}LiLiL_ipp\textbf{p}wiwi\mathbf{w_i}cosθ=n⋅wicos⁡θ=n⋅wi\cos \theta = \mathbf{n} \cdot \mathbf{w_i} 上記の積分(つまり、レンダリング方程式の反射項)は、次のモンテカルロ推定器1で近似できます。 ここでpは、サンプリングベクトルwkの分布を記述する確率密度関数(PDF)です。1N∑k=1NLi(p,wk)fr(wk,wo)cosθp(wk)1N∑k=1NLi(p,wk)fr(wk,wo)cos⁡θp(wk) \frac{1}{N} \sum_{k=1}^{N} \frac{ L_i(\textbf{p}, ...

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