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

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


3
メッシュ三角形の主曲率を計算する最も簡単な方法は何ですか?
メッシュがあり、各三角形の周囲の領域で、主な曲率方向の推定値を計算します。私は以前にこのようなことをしたことがなく、ウィキペディアはあまり役に立たない。この見積もりを計算するのに役立つ簡単なアルゴリズムを説明したり、指摘したりできますか? すべての頂点の位置と法線を知っていると仮定します。
19 mesh 

1
タイルベース(遅延)レンダリングのデータ構造
タイルレンダリングは、最新のモバイルGPUアーキテクチャで使用され、画像スペースを小さな(たとえば32x32ピクセル)タイルの規則的なグリッドに分割することにより、メモリアクセスの一貫性を高めます。任意の多くのプリミティブが任意のタイルとオーバーラップする可能性があることを考慮して、各タイルに関連付けられているプリミティブを追跡するために使用されるデータ構造のタイプに関する情報はほとんどありません。 ドライバー開発者の観点から、タイルに属するプリミティブセットを表すために一般的に使用されるデータ構造はどれですか。そのような構造は、特定のタイルと重複するジオメトリに従って動的に割り当て/サイズ変更されますか?

2
相関サンプルは、モンテカルロレンダラーの動作にどのように影響しますか?
パストレースや双方向パストレースなどのモンテカルロレンダリングメソッドのほとんどの説明では、サンプルが独立して生成されることを前提としています。つまり、独立した均一に分布した数値のストリームを生成する標準の乱数ジェネレータが使用されます。 独立して選択されていないサンプルは、ノイズの点で有益であることがわかっています。たとえば、層化サンプリングと低差異シーケンスは、ほぼ常にレンダリング時間を改善する相関サンプリングスキームの2つの例です。 ただし、サンプル相関の影響がそれほど明確でない場合が多くあります。たとえば、Metropolis Light Transportなどのマルコフ連鎖モンテカルロ法は、マルコフ連鎖を使用して相関サンプルのストリームを生成します。多光源法は、多数のカメラパスに少数の光源パスを再利用し、多数の相関シャドウ接続を作成します。フォトンマッピングでさえ、多くのピクセルで光路を再利用することで効率が向上し、サンプルの相関性も増加します(バイアスがかかっていますが)。 これらのレンダリング方法はすべて、特定のシーンでは有益ですが、他のシーンでは事態を悪化させるようです。異なるレンダリングアルゴリズムでシーンをレンダリングし、一方が他方より良く見えるかどうかを目で確認する以外に、これらの手法によって導入されるエラーの品質を定量化する方法は明確ではありません。 質問は次のとおりです。サンプル相関は、モンテカルロ推定量の分散と収束にどのように影響しますか?どのような種類のサンプル相関が他のサンプル相関よりも優れているかを何らかの方法で数学的に定量化できますか?サンプルの相関が有益であるか有害であるかに影響を与える可能性のある他の考慮事項はありますか(例:知覚エラー、アニメーションのちらつき)。

4
ベジェ表面をレイトレースする方法は?
math.SEでこの質問を試してみましたが、驚くべきことに、答えは「方程式はあまりにも厄介です。関数を数値のルートファインダーに渡すだけです」。しかし、自分を自分のような「グラフィックスの男」と考え、デザイン作業のためにベジエ曲線を幅広く使用したことがあるなら、もっと良いことができると信じるようになりました。Kajiyaが公開しているアルゴリズムには、理解する背景がありませんが(Sylvester Matrices)、math.SEに関する関連するアドバイスは、結果はtの18次多項式であり、それを解決する必要があるということです数値的に。同様の結果が得られた別のアイデアがありました。 それでは、レイ/ベジエ面の交点を代数的に解決して、明示的にコーディングし、超高速で超滑らかにすることを望むのは、完全なパイプの夢ですか? それを除いて、この計算を実行するための最速の方法は何ですか?「ウィグルを見つけて」、再帰的なサブディビジョンの厳密な境界(およびターゲット)を取得できますか?数値のルートファインダー(ため息)を使用する必要がある場合、どのようなプロパティが必要ですか?速度に最適な選択肢はありますか? 私の元々の考えは、三角形に関する他の数学の質問への答えで説明したラプラス展開に似た特定の表面の準備についてでした。しかし、一般的な方法にも興味があります。ユタ州のティーポットのような、固定された一連の形状を考えています。しかし、アニメーション化されたフレーム全体の時間的一貫性を最適化する方法に非常に興味があります。

2
表面下散乱の「双極子近似」とは何ですか?
表面下散乱に関する論文を読むと、「双極子近似」と呼ばれるものへの参照に遭遇することがよくあります。この用語は、Henrik Wann Jensenらによる論文A Practical Model for Subsurface Light Transportに戻っているようですが、この論文を理解するのはかなり困難です。 ダイポール近似とは何か、サブサーフェススキャタリングのレンダリングでどのように使用されるか、誰でも比較的簡単な用語で説明できますか?

2
Illustratorのベクターラスター化プロセスとは何ですか?
現在、ベクターグラフィックスのラスタライズと、さまざまなアプリケーションタイプで実装されるさまざまな方法について、いくつかのことを理解しようとしています。 いくつかのプログラムをテストして比較したところ、ラスター化プロセスでのアンチエイリアスの動作に大きな違いがあることに気付きました。Illustratorのレンダリング動作に特に興味があります。さらに読むと、その理由がわかります。 私のテストでは、さまざまな色の不規則な六角形に編成された非常に単純な三角形の構成を使用しました。 ベクターグラフィックソフトウェア Illustrator、Affinity、およびInkscapeの同じベクターグラフィックの3つのレンダリングを次に示します。(AffinityとInkscapeで生成される画像はまったく同じです。) ご覧のとおり、AffinityとInkscapeでレンダリングされた画像の各エッジには、望ましくない白い線があります。アンチエイリアシングは、この領域を単色で塗りつぶさず、隣接する形状の間に小さな隙間ができます。 Illustratorレンダリングにはギャップはありませんが、シェイプのエッジはアフィニティレンダリングと同じくらい滑らかに見えます。 以下は、各画像の同じ領域を拡大した画像です。 2つの画像には非常に微妙な違いがあります。アフィニティレンダリングは少しスムーズですが、元のサイズの画像を見ると違いを見るのはほとんど不可能です。 ブラウザ SVGレンダリング ブラウザでSVGとしてエクスポートされた同じグラフィックを表示すると、AffinityとInkscapeの両方で生成されたラスターイメージに非常に似ています。 エッジアンチエイリアシングにはごくわずかな違いがありますが(実際にここで示す価値はありません)、一般的なブラウザーでのSVGラスタライズはほぼ同じように動作します。 分解されたレンダリング Illustratorのレンダリングをさらにテストして、グラフィックスの一部を分割して個別にエクスポートし、ラスター編集ソフトウェアで一緒に再構成してみました。 理論的には、1つのピースに収めた場合と同じイメージになりますが、この方法を使用した場合、結果はわずかに異なります。 示されているように、2つの部分を構成すると、それらの間に小さなギャップがあります。より微妙ですが、Affinityでレンダリングされたグラフィックに非常に似ています。 ポリゴンレンダリング Blender(3Dソフトウェア) Blenderでは、SVGファイルをインポートし、それらを曲線オブジェクトとして操作できます。これは、3Dビューポートに表示されるインポートされたグラフィックです。(デフォルトでは、マテリアルはシーンのライトの影響を受けます。マテリアルプロパティパネルでシェードレスプロパティをチェックすると、シェイプを元の色でレンダリングできます。) 以下は、Blender内のSVGで作成されたレンダリングです。 三角形の間に隙間はありません。他の3Dソフトウェアも同じように機能する可能性が非常に高いです。BlenderはIllustratorのように動作しますか?多分それは逆ですか? 本当の質問 Illustratorはバックグラウンドでどのベクター描画ライブラリを使用しますか? Illustratorが一種の3Dレンダリングエンジンを使用する可能性はありますか?オープンソースですか?(おそらくない?) CairoやSkiaなどのよく知られているベクトル描画ライブラリは、同じレンダリング動作を実現できますか?(形状間に隙間がない) 同じ動作をするあまり知られていないベクトル描画ライブラリはありますか?

2
fwidthとは何ですか?
OpenGLのドキュメントには、そのfwidthを述べましたreturns the sum of the absolute value of derivatives in x and y。 これは数学的な用語ではあまり意味がなく、視覚化する方法はありますか? 関数の私の理解に基づいて、隣接するピクセルのfwidth(p)値にアクセスできますp。これは、パフォーマンスに大きな影響を与えることなくGPUでどのように機能し、すべてのピクセルで確実かつ均一に機能しますか
18 opengl 

2
拡散反射光と鏡面反射の用語を適切に組み合わせる方法
私が理解する限り、BRDFでは、フレネル項は、光子が表面に衝突したときに反射または屈折する確率を示しています。 反射した光子は鏡面反射の項に寄与し、屈折した光子は拡散の項に寄与します。したがって、物理的な方法で、材料の色に対する光の寄与を決定するとき、私はただ書きたいと思う: // Assuming for example: // diffuse = dot(L, N); // specular = pow(dot(H, N), alpha) * (alpha + 2.0) / 8.0; // fresnel = f0 + (1.0 - f0) * pow(1.0 - dot(E, H), 5.0); color = lightIntensity * Lerp(diffuse * albedo, specular, fresnel); しかし、このように書かれたのを見たことがありません。フレネル項に従って重み付けされた鏡面反射項を見ましたが、拡散反射光項は見ていません。主に参照されているPBRに関する記事で、セバスチャンラガルドは、拡散項の重み付けにを使用することは正しくないと述べています。(1 − F)(1−F)(1 - …

1
OpenGLのコンテキストで「st」とはどういう意味ですか?
st他のOpenGLフラグメントシェーダーを見たときに、この用語が何度か登場するのを見てきました。しかし、私はそれが何を意味するのか、何のために使われるのかわかりません。以下に例を示します。 uniform vec2 u_resolution; vec2 st = gl_FragCoord.xy/u_resolution; これは、ピクセル座標を640 x 480(たとえば)ではなく0.0-1.0の正規化された座標に変換していることを理解できます。 私ものようなものを見てきましたposition.st。 どういう意味ですか?
18 opengl 

1
なぜレンダリングの方程式を解くために半球(球ではなく)を統合するのですか?
私が見たほとんどの教科書では、これがレンダリング方程式の書き方です。 L0(ω0)= Le(ω0)+ ∫Ωf(ω私、ω0)L私(ω私)D ω私L0(ω0)=Le(ω0)+∫Ωf(ω私、ω0)L私(ω私)dω私L_0( \omega_0)= L_e(\omega_0)+\int_{\Omega}{f(\omega_i, \omega_0)L_i(\omega_i)\,\mathrm{d}\omega_i} どこに(これらすべての機能が、より多くの変数に依存、簡単のためここでは省略)半球になるように定義されます。ΩΩ\Omega ここで、レンダリングされる表面が何らかのガラスまたは透明なプラスチックであるとします。なぜ半球上でのみ統合するのが理にかなっているのでしょうか?私は、あらゆる方向からの入射光が存在する可能性があることを想像します。したがって、統合ドメインは球体全体でなければなりません。ガラスの後ろから来る光はどのように考慮されますか?

3
OpenGLでフレームバッファオブジェクトにレンダリングされているものをデバッグするにはどうすればよいですか?
画面にレンダリングされている点群があります。各ポイントには、位置と色、IDがあります。 各ポイントのIDをテクスチャにレンダリングするように求められたので、FBOを作成し、色用と深さ用の2つのテクスチャを添付しました。このオフスクリーンレンダリングに必要なVAOとVBOを作成し、各ポイントの位置とIDをアップロードしました。 FBOへのレンダリングが完了したら、カラーテクスチャのピクセルを読み取ってglReadPixels()値を確認しますが、すべてクリアされているように見えます。つまり、持っている値はと同じglClearColor()です。 FBOのカラーテクスチャにレンダリングされているものをデバッグする方法はありますか?あなたが提供するかもしれない任意のヒントは非常に歓迎されています。
17 opengl  debugging 


1
入力ジオメトリなしでジオメトリシェーダーでプリミティブを生成する方法はありますか?
数年前、私はこのGPU GemをOpenGLに実装して、マーチングキューブを使用して3D手続き型地形を生成しようとしました。この記事では、効率を最大限に高めるために、ジオメトリシェーダーにマーチングキューブを実装することを提案しています。つまり、ドメイン内のすべてのボクセルに対してシェーダーを1回実行する必要があり、そのセルでジオメトリ全体が生成されます。 私がつまずいた問題の1つは、シェーダーの外部で実際に何もレンダリングせずに、ジオメトリシェーダーを実行する方法でした。私の解決策(かなりハッキーに思えた)は、各セルにポイントをレンダリングし、ジオメトリシェーダーでそれを破棄し、代わりに三角形を放出することでした。適切な解決策が見つからなかったため、この回避策は最終的なコードに残っていました。 だから、とにかくOpenGLに入力ジオメトリなしでジオメトリシェーダーからレンダリングパスを開始するように指示することはありますか?または、物事を実行するために、常にいくつかのダミーポイントをGPUに送信する必要がありますか。


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