これはビールの法則を実装する正しい方法ですか?


11

ビールの法則(オブジェクトを通る距離での色の吸収)を実装すると、何らかの理由でそれが非常に良く見えることはありません。

オブジェクトの背後に色がある場合、調整した色を次のように計算します。

const vec3 c_absorb = vec3(0.2,1.8,1.8);
vec3 absorb = exp(-c_absorb * (distanceInObject));
behindColor *= absorb;

これにより、次のようになります(少しの屈折が適用されていることに注意してください)。 ここに画像の説明を入力してください

そしてここでは屈折なしです: ここに画像の説明を入力してください

これは、ここではシェーダートイとして実装されていることに注意してください

これは、ビールの法則の機能の説明を満たしていますが、次のようなショットと比較すると、見栄えがよくありません。 ここに画像の説明を入力してください

鏡面ハイライトはさておき、私は違いを理解しようとしています。それは、私のジオメトリが単純すぎて実際にそれをうまく表示できないということですか?それとも間違って実装していますか?


2
ただし、キューブをより複雑なメッシュと比較しています。同じシナリオを複製してみませんか?スーザンのモデルは入手が簡単です。
Bart

それはshadertoyの実装ではそれほど簡単ではありません!(:
アランウルフ

2
キューブは私には正しいように見えます。エッジに近づくにつれて、より透明になります。あなたが完全に吹き飛ばされたスザンヌを行うことができるならば、球は少なくとも他の写真の見た目のより良い近似を与えるべきです。
yuriks

1
屈折と減衰を分離することはできません。IOR = 1.0でキューブをレンダリングできますか?
imallett、2015

1
@AlanWolfeあなたのIOR = 1レンダリングは、私が期待するとおりに正確に見え、shadertoy実装をすくい取りましたが、見栄えが良いです。
イマレット2015

回答:


12

画像は間違いなく正しく見えません。また、光線がメッシュを通過するときに光線の内部パスを正しく計算していないようです。その外観から、ビューレイが最初に立方体に入るポイントと最初に内壁に当たるポイントとの間の距離を計算し、それを吸収距離として使用していると言えます。これは基本的に、最初に壁に当たったときに光が常にガラスから出ると想定していますが、これはあまりお勧めできません。

実際には、光が空気からガラスに入ると、すぐにガラスから出てこないことがよくあります。これは、光がガラスと空気の界面に当たると、全反射(TIR)と呼ばれる現象が発生する可能性があるためです。TIRは、屈折率(IOR)が高い媒体からIORが低い媒体に光が移動するときに発生します。これは、ガラスオブジェクトの内壁に光が当たった場合に正確に起こります。ウィキペディアからのこの画像は、それが発生したときにどのように見えるかを視覚的に示す良い例です。

全反射

基本的には、浅い角度で光が当たると、光は媒体の内部で完全に反射します。これを説明するには、フレネル方程式を評価する必要があります光線がガラスと空気の境界面に当たるたび(別名、メッシュの内面)。フレネルの式から、反射光と屈折光の量の比がわかりますが、TIRの場合は1になります。次に、適切な反射光と屈折光の方向を計算し、媒質を通過する光または光路の外側の光の経路を追跡し続けることができます。均一な散乱係数を持つ単純な凸型メッシュを想定すると、ビールの法則に使用する距離は、媒体を出る前のすべての内部パスの長さの合計になります。これは、内部と外部の両方の反射と屈折を説明する独自のパストレーサーを使用してレンダリングされた、散乱係数とIORが1.526(ソーダライムガラス)のキューブの外観です。

パストレースされたガラスキューブ

結局、内部の反射と屈折は、ガラスをガラスのように見せるための主要な部分です。あなたがすでに知っているように、単純な近似は本当にそれをカットしません。複数のメッシュや非凸メッシュを追加すると、内部反射を考慮する必要があるだけでなく、媒体を出て別のポイントに入る光線も考慮する必要があるため、さらに悪化します。


1
Here is what a cube looks like (...) using my own path tracer. たまたまオープンソース化したことがありますか?
wip

2
いいえ、まだです。私はガラスレンダリングに関するブログ投稿と共にこの特定のバリアントを完成させてリリースすることを計画していましたが、しばらくの間バックログにありました。
MJP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.