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

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

1
ヤングのダブルスリット実験のモデリング
ヤングのダブルスリット実験は、セットアップと説明が非常に簡単ですが、回折と干渉の両方の例であり、どちらも従来のレイトレーシングではモデル化されていません。 テクスチャを使用して結果の近似をレンダリングするのは簡単ですが、そのためには、結果がどうあるべきかを事前に知る必要があります。スリットの数と配置が事前にわからない任意の設定の場合、正しい結果の画像を生成するために効果をモデル化するための既存のアルゴリズムはありますか? そうでない場合、これらの効果を正確に生成するには、モデルに何を含める必要がありますか?レイトレーシングは、追加情報を運ぶレイを使用するように適合させることができますか、それともまったく新しいアプローチが必要ですか?

1
署名付き距離フィールドレンダリングのアセットを作成しますか?
従来のコンピュータグラフィックスでは、ほとんどの3Dモデルは、通常は三角形または四角形のプリミティブの細分化されたメッシュに対してラスタライズまたはレイトレーシングすることによってレンダリングされます。最近では、いくつかのリアルタイム技術は、符号付き距離フィールド(SDF)に対するレイトレーシングに基づいています。直感的には、これらの距離フィールドは、従来のレンダリングの三角形や四角形と同じにすることはできず、適切なシェーディングを得るために3Dジオメトリプリミティブ(キューブ、球など)のようにする必要があります。これは本当ですか?そうでない場合、「従来の」3Dモデルの複雑なシーンをSDFを使用して表現できますか?それが本当なら、アーティストはSDFレンダラーで使用される高詳細モデルをどのように作成しますか?

1
Microfacet BRDFを実装しようとしていますが、結果画像が間違っています
マイクロファセットBRDFモデルを実装しようとしています。セバスチャンラガルドのスライドを読んでいます。コードに数式を実装しましたが、結果の画像が間違っていると思います。 黄色は素材のベースカラーです。鏡面色は正しく見えるように赤です。 私のコード: // Fragment Shader #version 330 core in vec3 Position; in vec2 TexCoord0; in vec3 Normal; in vec3 Tangent; out vec4 FinalColor; uniform vec3 uCameraPosition; // init value: vec3(0, 0, 5) #define PI 3.1415926f #define EPSILON 10e-5f #define saturate(value) clamp(value, 0.0f, 1.0f); float BRDF_Lambert(float NdotL) { return NdotL; …

1
流体シミュレーションの結果の正確さを確認するにはどうすればよいですか?
粒子ベースの流体シミュレーションプログラムを作成しました。正しい結果が得られたかどうかはわかりません。視覚化された結果は妥当なようですが、その一部は奇妙に見えます。それが流体の特徴かどうかはわかりません。私のプログラムが正しいかどうかを確認する正確な方法はありますか? 詳細の修正: 私のプログラムは2Dパーティクルベースのシミュレーションプログラムです。流体は圧縮可能です。実装はほぼ古典的な論文に基づいています: ミュラー、マティアス、デビッドチャリパー、マーカスグロス。「対話型アプリケーションのための粒子ベースの流体シミュレーション。」2003 ACM SIGGRAPHの議事録 Navier-Stokes方程式を反復法で解きました。圧力、重力、粘度、表面張力のみを考慮しました。



2
二国間アップサンプリングとは何ですか?
線形、三次(および双一次と双三次)、他のベジェ(およびNURBSなど)ベースの補間、ラグランジュ補間などを含むさまざまな補間アルゴリズムを使用してきましたが、説明する基本的な情報を見つけることができませんでした二国間アップサンプリングとは ジョイントバイラテラルアップサンプリングに関する情報を見つけることができました。これは、複数のデータを並行して補間し、それぞれのヒントを使用して他のデータをより適切に補間できるようにしていますが、BUとJBUの情報の分離に問題があります。 二国間アップサンプリングについての基本的な考え方を説明できる人はいますか?

1
Winged EdgeよりもHalf Edgeを使用する利点は何ですか?
メッシュ表現の場合、Winged Edgeデータ構造よりもHalf Edgeを使用する利点は何ですか? 両方のメッシュ表現を理解していますが、唯一の違いは、ハーフエッジが方向性エッジを使用し、翼状エッジが無方向性エッジを使用することです。これまでのところ、指向性エッジを使用することの有用性を考えることはできませんが、メモリ使用量が増えるだけです。

1
レイトレーシング:下の画像の球が引き伸ばされて表示されるのはなぜですか?
いくつかのコンテキスト。上記は、ある週末の本のピーターシャーリーのレイトレーシングでのコードとその結果の画像です。コードからわかるように、彼はいくつかの領域を追加しています。そして、最終的な画像には2つの楕円体が並んでいます。コードを何度見ても、なぜそうなのかを理解することはできません。誰かが私に説明できますか?これがソースコードへのリンクです。 https://github.com/petershirley/raytracinginoneweekend

1
連続スペクトルレイトレーシングで輝度にバイアスをかけることの副作用は何ですか?
屈折で色分離されたレイトレース画像を取得できるように、連続した周波数範囲で光線をモデリングしたいと思います。特定の周波数範囲にあるランダム光線の確率に影響を与える分布を使用して、指定された周波数分布で光源をモデル化できます。あるいは、均一なランダム分布から周波数を選択して、各光線の明るさを比例させることができます特定の周波数での周波数分布。最初の方が物理的に正確であると思いますが、2番目の方が光線が少なくて「仕上がった」ように見える画像が得られると思います。この直感的な疑いは正しいですか?2番目の方法でイメージから失われる機能はありますか?画像を損なうことなく速度を上げる方法はありますか?

3
あらかじめ乗算されたアルファは、順序に依存しない透明性を提供しますか?
事前に乗算されたアルファを使用すると、次数に依存しない透明度が得られると聞いたことがありますが、座って計算すると、機能していないようです。 それは正しくありませんか、それとも私は何か間違ったことをしていますか? 私が使用している式は次のとおりです。 O Utr gb a= iんr gb a+ O Utr gb a∗ (1 − iんa)outrgba=inrgba+outrgba∗(1−ina)out_{rgba} = in_{rgba} + out_{rgba} * (1 - in_a) ここでは乗算済みアルファです。言い換えると、RGBAで「通常の」色をとると、RGBにaを乗算します。30%の不透明な白は、(1、1、1、0.3)から始まりますが、乗算済みアルファとして(0.3、0.3、0.3、0.3)になります。I Ninin 手作業で間違った答えを受け取った後、以下のC ++プログラムを作成しても、まだ間違った結果が得られます。 実行後: O 、U 、T 1 = (0.738 、0.913 、0.3 、1.0 )O U T 2 = (0.738 、0.875 、0.113 、1.0 )out1=(0.738,0.913,0.3,1.0)out2=(0.738,0.875,0.113,1.0)out1 = …

2
GPUが位置のためにクリップスペースZをWで分割するのはなぜですか?
背景: 正規の頂点変換を少し変更するだけで、線形深度バッファーを使用するのが非常に簡単であることがわかりました。最も簡単な方法は、https://www.mvps.org/directx/articles/linear_z/linearz.htmの下部にあります。 ただし、注意すべき点は、ニアプレーンまたはファープレーンに対してクリップする必要のない三角形に対してのみ機能することです。(そして、頂点シェーダーでパースペクティブ分割を実行する別の解決策は、他の4つの錐台平面に対して同様の問題を引き起こします。) クリッピングは4つのクリップ空間座標すべてで機能するために線形補間を必要とするため、頂点シェーダーのみを使用して線形深度を処理することは不可能だと思います。しかし、その理由はすべてZがWで除算されることにあります。 なぜそれが行われるのですか?XとYはカメラからの距離で分割する必要がありますが、Z座標はNDCボックスに完全にフィットするために分割されません。

2
Vulkan:静的データの均一バッファーとプッシュ定数
均一バッファーとプッシュ定数の概念的な違いを理解するのに苦労しています。仕様を読んで集めることができるものと、主な違いは次のとおりです。 均一バッファーは、プッシュ定数よりもはるかに大きくなる可能性があります。 UBOはstd140を使用し、PCはstd430を使用します。 UBOはvkCmdUpdateBuffer(またはホストマッピング)を使用していつでも更新でき、その値を保持できます。それ以外の場合は、レンダーパスごとにPCを再プッシュする必要があります。(私を驚かせた-名前に基づいて。パイプラインの定数をそのまま更新し、それらの変更を持続させると思った) 私のシナリオでは、約200バイト相当のデータがあり、ほぼ一定であると予想しています。つまり、それらを非常にまれに変更します。すべてのコマンドバッファーでプッシュ定数を再送信する必要がある場合でも、(サイズが許す限り)プッシュ定数を使用する方が良いでしょうか?または、200バイトのUBOを使用して、vkCmdUpdatebufferでたまにしか更新しない方がよいでしょうか? また。たとえばfloat random_seed、シェーダーが実行されるたびに更新するaがある場合はどうなりますか?私がすでにUBOを持っていると仮定すると、UBOの残りが一定であっても、UBOで一括処理する方が良いでしょうか、またはこの変数にプッシュ定数を使用することで利益を得られるので、すべてのレンダーパスの前にvkCmdUpdateBuffer?
8 vulkan 

2
パストレースとマテリアル
パストレーサーで次のイベントのレイヤードマテリアルをサンプリングするときに使用する手法について疑問に思っています。私は3つのレイヤーを持つマテリアルを持っています:ベースディフューズ、スペキュラー、光沢ローブ。次の光線方向に向けてサンプリングする個別のレイヤーを選択するにはどうすればよいですか?これはランダムな選択ですか?もしそうなら、レイヤーに等しい重みが割り当てられていますか、それともローブの最終的な寄与に基づいて重みが使用されていますか?このサンプリング段階についての洞察をありがとう。 〜M

2
ハーフベクトルが拡散BRDFフレネル計算で使用されないのはなぜですか?
私は現在、アールハモンJrのプレゼンテーションPBR拡散照明(GGX + Smithマイクロサーフェス用)(現在は[PBR、p.XYZ]と呼ばれています)を使用しており、ブレントバーレイの物理ベースのシェーディング(現在は[DIS 、p。XYZ]をクリックして、適切な拡散BRDFコンポーネントを取得します。この2つをフレネル項と組み合わせることに行き詰まっています。 私が使用するベクトルと角度の簡単な紹介: ωiωi\omega_iは光ベクトルです ωoωo\omega_oはビューベクトルです ωnωn\omega_nは通常のマクロジオメトリです θiθi\theta_iはと間の角度ですωiωi\omega_iωnωn\omega_n θoθo\theta_oはと間の角度ですωoωo\omega_oωnωn\omega_n θhθh\theta_hはと間の角度ωnωn\omega_nωhωh\omega_h αhiαhi\alpha_{hi}はと間の角度ωiωi\omega_iωhωh\omega_h αhoαho\alpha_{ho}はと間の角度(この区別は明確にするためです)ωoωo\omega_oωhωh\omega_h αhαh\alpha_hは等しいので、、いずれかの角度ですαhiαhi\alpha_{hi}αhoαho\alpha_{ho} ここで、はフレネルファクターのないスペキュラーコンポーネントのBRDF項であり、はフレネルスタッフのない拡散コンポーネントの項なので、フレネルファクターはとして記述されます。[PBR、p.105]は、拡散光が2回透過されると述べています。したがって、フレネルコンポーネントは2倍する必要があります。[PBR、p。106]は続けて、フレネルの法則はsymmetrixであると言います。つまり、出入りは方向に依存しないことを意味します(つまり、いったん空気から材料に入って、いったん空気から出ても問題ありません)。今、私は(が入るためのフレネルであり、が材料を出るためのフレネルである)と仮定するとrsrsr_srdrdr_dF(angle)F(angle)F(angle)F1F1F_1F2F2F_2 (1−F1(αhi))∗(1−F2(αho))(1−F1(αhi))∗(1−F2(αho))(1-F_1(\alpha_{hi}))*(1-F_2(\alpha_{ho})) F1F1F_1とは同じ関数であり、とは同じ角度なので、F2F2F_2αhiαhi\alpha_{hi}αhoαho\alpha_{ho} (1−F(αh))2(1−F(αh))2(1-F(\alpha_h))^2 これはbrdfつながります:fff f=F(αh)∗rs+(1−F(αh))2∗rdf=F(αh)∗rs+(1−F(αh))2∗rdf = F(\alpha_h) * r_s + (1-F(\alpha_h))^2 * r_d しかし[PBR、p.113]と[DIS、p.14]の両方が f=F(αh)∗rs+(1−F(θi))∗(1−F(θo))∗rdf=F(αh)∗rs+(1−F(θi))∗(1−F(θo))∗rdf = F(\alpha_h) * r_s + (1-F(\theta_i))*(1-F(\theta_o)) * r_d Shirelyらによるこの種の計算を使用するための元の論文と同様に。1997.私はこれを取得できません。なぜそれらはマイクロファセット角度からマクロ角度に変わるのですか?マイクロファセット角度はエネルギー会話につながります F∈[0,1]F∈[0,1]F \in [0, 1] ⇒(1−F)∈[0,1]⇒(1−F)∈[0,1]\Rightarrow(1-F) \in [0, 1] ⇒(1−F)2∈[0,1]⇒(1−F)2∈[0,1]\Rightarrow(1-F)^2 \in [0, …
8 brdf  pbr  diffuse  fresnel 

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