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

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

1
ベジェサーフェスに歪みを適用する
Adobe Photoshopで使用されている画像ワープ効果をシミュレートしようとしています。 長方形の画像は、3次ベジエ曲面に従って歪められます(2Dでは、すべてのZ成分は0です)。ベジエ曲面があれば、垂直歪み をそれに適用できます。d∈ [ 0 、1 ]d∈[0、1]d \in[0,1] 左:入力ベジェサーフェス、、右:出力サーフェス、 d= 0d=0d=0d= 0.8d=0.8d=0.8 左側のバージョンから右側の出力に変換するときに、ベジェサーフェス(16ポイント)に対して何が行われますか?


1
レンダリング方程式にシャドウを組み込む方法
これが教科書でのレンダリング方程式の書き方です L (p 、ω )=Le(p 、ω )+ ∫f(p 、ω私、ω )L (p ∗ 、−ω私)cosθdω私L(p,ω)=Le(p,ω)+∫f(p,ωi,ω)L(p∗,−ωi)cos⁡θdωiL(p,\omega) = L_e(p,\omega) + \int f(p,\omega_i,\omega) \, L(p*,-\omega_i)\cos \theta \, d\omega_i この方程式のどのコンポーネントがシャドウイングを処理しますか?

1
低レベルのGPUプロファイラーの作成を開始するにはどうすればよいですか?
私は最近、ハードウェア企業のGPUプロファイラー(Qualcomm、PowerVR、Intel)を研究しています。これらのツールは、過去に使用したGPUプロファイラー(XCodeのOpenGL ESフレームキャプチャとapitrace)よりも低レベルの詳細を提供しているようです。これらは、行われたOpenGL呼び出しと現在の状態のみをリストします。リソースです。 サンプラーキャッシュミスやシェーダーアセンブラーコードなどを表示する低レベルのツールを作成する場合、どうすれば開始できますか?
8 gpu 

1
誰もが「1秒あたりの光線数」をどのようにカウントしますか?
最近、モンテカルロパストレーサーを開発しています。トレーサーのパフォーマンスを測定するために、1秒間にトレースできる光線の数をカウントする単純なメカニズムを実装することにしました。次に問題が発生します。単一の光線を定義するには2つの方法があります。 完全なレイ。つまり、カメラから始まり、終了するまでシーンの周囲をバウンドします。 光線は各交点から発生しました。 多くの人が「レイ/秒」を使用してレイ/パストレーサーのパフォーマンスを測定しますが、「レイ」をどのように認識するかは私には不明確です。多分誰かが知っていますか?

1
コンピューター画面のチェッカーボードパターンが黄色がかった色合いで表示されるのはなぜですか?
この質問はもともと物理学について尋ねられた後、認知科学に移されました。 次の画像を検討してください。画像 をモバイルディスプレイ用にサイズ変更する場合に備えて、画像を新しいページに表示することができます。 上半分には、黒と白のピクセルが交互に配置されたピクセルサイズのチェッカーボードパターンがあります。下半分には、黒から白へのグラデーションがあります。さて、同じように見えるかどうかはわかりませんが、私にとっては、遠くから見たり、目の焦点をぼかしたり、上半分が1つの色に溶け込んだりすると、その下にあるグラデーションに一致する色が見つかりません。 単純な計算では、結果として得られる色はRGBまたはガンマを使用するとどちらかになると思います。どうしようもありませんが、たとえばこのページをズームしたり、ぼかしフィルターを使用したりした場合に表示されるメタリックグレーよりも、温かみのある色が表示されます。グラデーションに黄色を少し加えてみましたが、結果は知覚された色により似ています。(0.5 、0.5 、0.5 )(0.5、0.5、0.5)(0.5, 0.5, 0.5)(0.5−−−√、0.5−−−√、0.5−−−√)(0.5、0.5、0.5)(\sqrt{0.5}, \sqrt{0.5}, \sqrt{0.5}) さて、コメントに基づいて、一部の人々は黄色がかった色合いを認識し、一部は認識しないようです。そして、私は自分のLCDコンピュータ画面で行っていますが、モバイルディスプレイでは行っていません。したがって、それはディスプレイのいくつかのプロパティに基づいていると思います。 結果の色を本物の灰色のように知覚しないのはなぜですか?黄色はどこから来たのですか? 私は理論を持っています:典型的なLCDピクセルの色の配置に基づいて、1つの白いピクセルは赤と緑の色を一緒に含み、右側は青になります。青色は、物理的な強度が同じ色よりも人間の目には暗いように見えるため、白いピクセルは、青よりも赤よりも緑が多くなります。緑と赤は大体同じ知覚鈍感であり、赤と緑の色を混合すると黄色が加わり、黄色がかった色になりますか?では、ディスプレイ上のすべての白いピクセルが少し黄色く見えるのではないでしょうか。 これは可能ですか?他に説明はありますか? 副次的な質問:これを模倣して人間の目のぼやけた視覚を正しくシミュレートしようとするコンピューター画像スケーリングアルゴリズムまたはぼかしフィルターを知っていますか?

2
シェーダーは、シェーディングされたメッシュが占めるピクセルを超えて、スクリーンピクセルをペイントできますか?
ジオメトリとコンピューティングシェーダーのプログラミングの経験はありますが、フラグメントシェーダーを実際に使ってみたことはありません。現在、私はそれらがどのように機能するか、そしてそれらの可能性をよりよく理解しようとしています。私が複数の場所で読んだことの1つは、フラグメント(スクリーンピクセル)がフラグメントシェーダー内でそれ自体を超えて拡張できないことです。つまり、反復される特定のフラグメントは、それ自体にのみ影響を与えることができます。 したがって、私は学習のために、次のことが可能かどうか(可能であれば、一般的にはどのようにして達成できるか)を知りたいと思います。簡単にするために、2つの頂点のみからなるポイントメッシュ(3Dワールド空間に配置)があるとします。これらの2つの頂点のそれぞれが画面上のWorldToViewportの正確な位置に描画されるようにシェーダーをプログラムできますか。また、radius = Rの各頂点を囲む円も、それらが延長されている場合でも周囲のピクセルに描画されます。シェーダーがアタッチされている元のメッシュを超えていますか?下の図のように(円の中心にある赤い四角形が画面に描かれた頂点を表します): それが可能であれば、頂点を超えて延びるこれらの円が互いの色(RGBA)に影響を与えるように、シェーダーをプログラムすることもできますか?下の図のように: 私が言ったように、これらが可能であるなら、私はそのようなことを達成する方法の少しを概念的または実際的な面で聞きたいです。フラグメントシェーダーで行われますか、それとも頂点シェーダーまたはジオメトリシェーダーで前に計算する必要がありますか?メッシュボディが占めるフラグメントを超えて「追加のフラグメント」を計算して渡す方法は?

1
AABBに対して三角形をクリッピングした後の頂点の最大数
3D三角形を3D Axis-Aligned Bounding Box(AABB)に対してクリップして、AABBに含まれる三角形の最大の平面ポリゴンを取得します。私のクリッピングアルゴリズムは、堅牢な(わずかに変更された)バージョンです(たとえば、クリッピングプレーンには有限の厚みがあります)サザーランドホジマンアルゴリズム。AABBを構成する6つの平面のそれぞれに対して三角形をクリップします。 ヒープ(割り当て)の割り当てを回避するために、取得した平面ポリゴンのすべての頂点に対して、スタックに固定サイズのポイントバッファーを事前に割り当てました。私の質問は次のとおりです:AABBに対して三角形をクリップした後に取得できる頂点の最大数はいくつですか? 制御フローに基づいて、検査されたすべての頂点は、ポリゴンプレーンクリッピング中に2つの頂点になる可能性があります。したがって、頂点です。対称性により、これは頂点になります。ただし、実際には、取得する頂点の数は少なくなります。3 ∗263∗263*2^63 ∗23= 243∗23=243*2^3=24
8 3d  geometry  clipping 

1
ポリゴンの表面上の2点間の最長直線を見つける
私の形状はわずかに凹んだ多角形で、最大直径を知りたいのですが。ポリゴンの表面の2点間の直線が、ポリゴンの外側を通過しないように想像します。 これの一般的なアルゴリズムはありますか? 私の場合、私は2Dに興味があります。私の形は医用画像の腫瘍です。したがって、次のことも想定できます。1重心は常にポリゴンの内側にあります。2頂点密度が高い。つまり、次の頂点は常に前の頂点に近い。

1
サーフェスの各ポイントを対応する法線の方向に移動する
凸状の滑らかで閉じていない表面があると仮定しましょう。各ポイントを法線方向に一定の係数で移動しています(この係数はサーフェス上のすべてのポイントで同じです)。 この操作を均一または非均一スケーリング+変換で置き換えることはできますか? これらの場合、結果のサーフェスは数学的に同一になりますか? たとえば、このサーフェス(側面図)を変換したいとします。

1
最近のGPUにはバレルシフターが含まれていますか?
最近のほとんどのGPUは、浮動小数点向けに設計されていますが、最近では整数パフォーマンスでほぼ同等であり、融合型乗算加算がないなどのいくつかの注意点があります。これがシフト操作にどのように適用されるかはわかりません。私はGPUでマーチングキューブを実行しています。最初に各サーフェスキューブの32ビットのパックされた位置を書き出し、次にこれらを次のようにそのキューブの実際の頂点へのパスでアンパックします。 ivec3 unpackedPos = ivec3( packedPos >> 20 & 0x3FF, packedPos >> 10 & 0x3FF, packedPos & 0x3FF); 最近、シェーダーユニットにバレルシフターが搭載されているのではないかと思いました。ここで2シフトまたは30シフトしていますか? 編集>>私はばかです...知っておくと便利な回答の人たちに感謝しますが、私はこれについてすべて間違っています。RGB10_A2UIテクスチャ形式を使用してから、ビットシフトをいじるのではなく、単一のイメージのロード/ストア命令でパック/アンパックする必要があります。 RE_EDIT >>かどうか...この方法は明らかに赤いボックスでは機能しますが、緑色のボックスでは機能しないため、ビットシフトに戻ります。

3
MERL BRDFデータベースの色空間?
今のところ、それは一種の悲しい再発ジョークと見なされるかもしれませんが、偶然にも、ここの誰もがMERL BRDF測定データベース内のRGB値の色空間に関する情報を最も少なくしていますか?

1
液体シミュレーションでの質量の節約
私はここでフォスターとフェドキウの論文「液体の実用的なアニメーション」の2Dバージョンを実装しようとしています:http ://physbam.stanford.edu/~fedkiw/papers/stanford2001-02.pdf セクション8「質量の保存」を除いて、ほとんどすべてが機能します。そこで、液体の発散を自由にするために必要な圧力を計算するための方程式の行列を設定します。 私のコードは論文と一致していると思いますが、質量ステップの保存中に解けない行列を取得しています。 これが、行列Aを生成するための私のステップです。 斜めのエントリを設定する Ai,iAi,iA_{i,i} セルiに隣接する液体セルの数の負数。 エントリーを設定する Ai,jAi,jA_{i,j} そして Aj,iAj,iA_{j,i} セルiとjの両方に液体がある場合は1になります。 私の実装では、セルが iii、jjj 液体グリッドで行に対応 i+i+i + gridWidth∗j∗j * j マトリックスで。 論文では、「静的オブジェクトと空のセルはこの構造を乱さない。その場合、圧力と速度の項は両側から消える可能性がある」と述べたので、液体のないセルの列と行を削除します。 だから私の質問です:なぜ私の行列は特異ですか?論文の他の場所にある種類の境界条件がありませんか?私の実装が2Dであるという事実ですか? これは、0,0のセルに液体がない場合の2x2グリッドの実装からのマトリックスの例です。 -1 0 1 0 -1 1 1 1 -2 編集する 私の研究により、境界条件を適切に処理していないと思いました。 まず、この時点で、私の行列は離散圧力ポアソン方程式を表していると言えます。これは、局所的な圧力変化を細胞発散に結合するラプラシアン演算子を適用することの離散的な類似物です。 私が理解できる限りでは、圧力差を扱っているため、圧力を絶対参照値に「固定」するには境界条件が必要です。それ以外の場合、方程式のセットに対する解の数は無限になる可能性があります。 ではこれらのノート、3種類の方法は、私の理解の最高に、境界条件を適用するために与えられています。 ディリクレ-境界での絶対値を指定します。 Neummann-境界での導関数を指定します。 ロビン-境界での絶対値と微分のある種の線形結合を指定します。 フォスターアンドフェドキの論文ではこれらについては触れられていませんが、7.1.2の最後にある「表面セルの圧力は大気圧に設定されている」というこの声明のために、ディリクレ境界条件を強制していると思います。 リンクを数回読みましたが、まだ数学がよくわかりません。これらの境界条件をどの程度正確に適用しますか?他の実装を見ると、境界にある「ゴースト」セルのある種の概念があるようです。 ここに私はこれを読んでいる他の人に役立つかもしれないいくつかの情報源にリンクしました。 ポアソン行列の境界条件に関する注記 Neumann境界条件に関する計算科学StackExchangeの投稿 ポアソンソルバーに関する計算科学StackExchangeの投稿 水Physbamの実装 これが、マトリックスの生成に使用するコードです。列と行を明示的に削除する代わりに、液体セルのインデックスから最終的な行列の列/行へのマップを生成して使用していることに注意してください。 …

2
可変パターン密度のパターン化オブジェクトをリアルタイムで作成する方法は?
pフレームごとに計算された、オブジェクトの表面上で連続的に変化する値があると仮定します。の値はp、表面上のパターンの密度を決定します。たとえば、密度p < 0.3が高い場合に2つの密度しかない場合、そうでない場合は密度が低くなります。 私は単純な高レベルのソリューションを考えました。2つのテクスチャを作成し、それぞれが異なる密度でp、適切なものからのサンプルの値に基づいています。ただし、高密度と低密度の境界には問題があります。 これは問題を説明するための例です(私の問題はこのドットパターンの例に限定されないことに注意してください。後で処理するパターンについて説明します)。 そして、これが低と高の間のしきい値です(高密度テクスチャに表示されますが、それは関係ありません)。線の下にある場合、高密度テクスチャをサンプリングする必要があることを意味します。 そして最後に、この方法を使用して望ましいことと実際に何が起こるかを比較します。 問題は、高密度のみの円がラインを横切るときにp、サンプリングされる低密度のテクスチャを示すときに無視され、その結果、円が切り捨てられることです。pフレームごとに異なるため、この問題の解決方法がわかりません。2つの密度の境界を「焼き付ける」ことはできません。下から高密度テクスチャを作成することで、逆の問題を簡単に防ぐことができます(つまり、円が低密度テクスチャ上にある場合は、高密度テクスチャ上にあることを確認してください)。 誰かが私の解決策を改善する方法を持っているか、完全に別の方法を持っているかどうかに興味があります。ここでの制約は、pフレームごとにリアルタイムで計算されることです。別の制約はパターンテクスチャに関連しています。パターンは白黒で、黒はパターン、白は背景です(例の円のように)。パターンは、同じ形状が繰り返されているだけでなく、白い背景の上に任意の黒い形状が配置されている場合もあります。(たぶんパターンは単語の間違った選択です。) 私はこの分野の研究に詳しくないので、どのキーワードを検索すればよいかわかりませんでした。

2
良い順列テーブルを作るものは何ですか?
私は改善されたPerlinノイズを実装しています。ランダム化の主な機能は、ハードコードされた置換テーブルで、グリッドのセルで基本的にランダムであるが再現可能な勾配を提供します。順列テーブルは整数の順列であり、0..255通常は次のテーブルです(Perlinの元の実装から直接コピーされます)。 {151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, …

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