タグ付けされた質問 「brdf」

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

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

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}, ...

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
パストレースでの反射または屈折の選択
私は自分のパストレーサーに屈折と透過を実装しようとしていますが、その実装方法が少しわかりません。まず、いくつかの背景: 光が表面に当たると、その一部が反射し、一部が屈折します。 反射光と屈折光の量は、フレネル方程式で与えられます 再帰的なレイトレーサーでは、単純な実装は、反射用のレイと屈折用のレイを撮影し、フレネルを使用して加重合計を行うことです。 RTLo=Fresnel()=1−R=R⋅Li,reflection+T⋅Li,refractionR=Fresnel()T=1−RLo=R⋅Li,reflection+T⋅Li,refraction\begin{align*} R &= Fresnel()\\ T &= 1 - R\\ L_{\text{o}} &= R \cdot L_{\text{i,reflection}} + T \cdot L_{\text{i,refraction}} \end{align*} ただし、パストレースでは、1つのパスのみを選択します。これは私の質問です: 偏りのない方法で反射するか屈折するかを選択する方法 私の最初の推測は、フレネルに基づいてランダムに選択することです。別名: float p = randf(); float fresnel = Fresnel(); if (p <= fresnel) { // Reflect } else { // Refract } これは正しいでしょうか?または、何らかの補正係数が必要ですか?私は両方の道を進んでいないので。

2
金のフレネル反射率:1より大きい赤チャンネル?
私は最近、光と物質の相互作用の背後にある物理的原理のいくつかを理解しようとしています。Naty Hoffman が講演のPhysics and Math of Shadingでフレネル反射率について説明し、材料の特徴的な鏡面反射色F 0を入射角0°でのフレネル反射率として定義します。 スライド65では、金のF 0は1.022、0.782、0.344(線形)として与えられています。ホフマンは追加します: その赤チャネル値が1より大きい(sRGB色域外) これはすべて私にはあまり意味がありません。1より大きい値は、赤チャネルに寄与する波長で、受信されるよりも多くのエネルギーが反射されることを意味します。これは本当に起こりますか? さらに、ここに金(Au)を含むいくつかの材料のウィキペディアからの反射率曲線があります。曲線は、600nm付近の赤い波長では確かに高くなりますが、100%を超えるようには見えません。
13 physics  brdf 

1
光沢をラフネスに、またはその逆に変換するために受け入れられている方法は何ですか?
最新のレンダラーのほとんどは物理ベースのマテリアルを使用しており、そのモデルはしばしば粗さに対してパラメーター化されています。これがレンダラーの場合に常に当てはまるわけではないため、従来のアセットには、粗さの概念がないことがよくあります。代わりに、「光沢」または「鏡面反射力」を共通のマテリアルパラメータと見なします。 2つの間に正確な変換がないことを理解していますが、鏡面反射光のパワーまたは光沢がわかっているマテリアルの粗さを取得するための経験則/おおよその方法はありますか?
12 specular  brdf  pbr 

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の相反性を壊さずに、完全にエネルギーを節約する材料(たとえば、完全な白い粗いガラス)を得ることができません。

2
物理ベースのBRDFでは、フレネル係数の計算にどのベクトルを使用する必要がありますか?
フレネル係数のよく知られたシュリック近似は、次の方程式を与えます。 F=F0+(1−F0)(1−cos(θ))5F=F0+(1−F0)(1−cos(θ))5F=F_0+(1 - F_0)(1 - cos(\theta))^5 そしては、表面法線ベクトルとビューベクトルの内積に等しい。cos(θ)cos(θ)cos(\theta) 実際の表面法線または半ベクトルHを使用する必要があるかどうかは、まだはっきりしていません。物理ベースのBRDFでどちらを使用する必要がありますか。その理由は何ですか。NNNHHH さらに、私が理解している限り、フレネル係数は、特定の光線が反射または屈折する確率を与えます。そのため、なぜこの式をBRDFで引き続き使用できるのかを理解するのに苦労しています。 この観察は、が来る場所だと私に思わせる傾向がありますが、代表的な法線のフレネルが実際のすべての法線のフレネルを積分することと同等であることは私には明らかではありません。HHH
11 brdf  pbr  integral  fresnel 

1
BRDFが輝きの比率ではないのはなぜですか?
私はBRDFについて学び、BRDFが特定の方向に対する発信放射輝度と別の方向からの着信放射輝度の比率として定義される理由を知りたいと思っています。BRDFが放射輝度の比として定義されていないのはなぜですか?
10 brdf 

1
マイクロファセット分布関数の仮定の理由は?
(とりわけ)粗い表面を通る屈折のマイクロファセットモデルのペーパーは、マイクロファセット分布関数Dに関する次の仮定を思い出させます。 マイクロファセット密度は正の値です マイクロサーフェスの総面積は、少なくとも対応するマクロサーフェスの面積と同じです マイクロサーフェスの(符号付き)投影面積は、任意の方向vのマクロサーフェスの投影面積と同じです。 1)分布密度が正の値である理由を理解できます。直感的に、2)傾斜したマイクロファセットの総面積がそれらの投影よりも小さくならないことを意味すると信じています。 しかし、私は3)の正当化を理解することは確かではありません。3番目の条件はどういう意味ですか?

1
GGXジオメトリ用語の正しい形式
レイトレーサーにマイクロファセットBRDFを実装しようとしていますが、いくつかの問題が発生しています。私が読んだ多くの論文や記事は、ビューと半ベクトルの関数として部分幾何学用語を定義しています:G1(v、h)。しかし、これを実装すると、次の結果が得られました。 (一番下の列は1.0〜0.0の粗さの誘電体、一番上の列は1.0〜0.0の粗さの金属です) エッジの周りに奇妙なハイライトがあり、nl == 0の周りにカットオフがあります。これがどこから来ているのか本当にわかりませんでした。レンダーを確認するための参照としてUnityを使用しているので、シェーダーソースをチェックして、何が使用されているかを確認し、ジオメトリ用語が半ベクトルによってパラメーター化されていないことを確認できます!だから私は同じコードを試しましたが、半分のベクトルの代わりに表面の法線をマクロに使用し、次の結果を得ました: 私の訓練されていない目には、これは望ましい結果に非常に近いようです。しかし、私はこれが正しくないと感じていますか?私が読んだ記事の大部分は半分のベクトルを使用していますが、すべてを使用しているわけではありません。この違いの理由はありますか? ジオメトリ用語として次のコードを使用します。 float RayTracer::GeometryGGX(const Vector3& v, const Vector3& l, const Vector3& n, const Vector3& h, float a) { return G1GGX(v, h, a) * G1GGX(l, h, a); } float RayTracer::G1GGX(const Vector3& v, const Vector3& h, float a) { float NoV = Util::Clamp01(cml::dot(v, h)); float a2 = ...


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 

1
スミスの多重散乱はどのように拡散した表面下散乱と相互作用しますか?
スミスモデルと多重散乱微小のBSDF紙パスをトレースすることができる分布を有する(0への寄与を設定することにより、複数の面の交点とのパスを占める)微小面のBSDFでマスキングシャドウイング機能を交換するための統計モデルを記載していますそして、光線が出る前に、マイクロファセット表面と数回交差することができます。 これは、ボリューム(マイクロフレーク)モデルを変更して、ハイトフィールドのように動作するようにします。つまり、サーフェスの「上」にあるものと衝突することはなく、常に「下」にあるものと衝突するようにします。 その結果、スライドからの言い回しを使用すると、「光線はスミスボリュームを通過することはできません。モデルは不透明な表面のようなインターフェースを作成します。」 このモデルは、パスが終了前にサーフェスを介して認識可能な(マクロスケール)距離を移動できる、従来の拡散サブサーフェススキャタリングと互換性がありますか?または、これは単に、サーフェスの内部にある長いパスをモデリングするつもりのない鏡面BSDFであり、そのコンポーネントを追加する拡散BSDFと組み合わせるためのものですか? (ボリュームレンダリングのマイクロフレークモデルは、通常、拡散と鏡面反射を分離しますか、それとも、単に「拡散」して、何回も跳ね返って、出力方向が均一に分散されるパスです。)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.