私はここに見られるようにランプ効果を達成しようとしています:(
出典:splashdamage.com)
分布パターンに基づいてテクスチャをブレンドするのは簡単です。基本的に、これだけ(HLSL):
Result = lerp(SampleA, SampleB, DistributionPatternSample);
これは機能しますが、ランプはありません。 http://aaronm.nuclearglory.com/private/stackoverflow/result1.png
私の最初の推測は、「ランプファクター」を組み込むためにこれを行うことができるということでした。
Result = lerp(A, B, (1.0f - Ramp)*Distribution);
ただし、ランプも1.0の場合、結果はゼロになり、「A」だけが使用されるため、これは機能しません。これは、その方法でランプが1.0fのときに得られるものです:http: //aaronm.nuclearglory.com/private/stackoverflow/result2.png
ランプに分布を掛けようとしましたが、これは明らかに正しくありません。(興味深い効果を試してみる価値があると考えました。興味深い効果は発見されませんでした。)
また、次のように、分布からランプを差し引くことも試みました。
Result = lerp(A, B, saturate(Distribution - Ramp));
しかし、それに関する問題は、ランプがブレンドのシャープネスを制御することを目的としていることです。だから、それも実際には何もしません。
数学的に、これを達成するために私が何をする必要があるかを誰かが教えてくれることを願っています。これはシェーダーコードであるため、分岐を避けようとしています。結果を乗算することで分岐をシミュレートできますが、これは行いたくありません。私はまた、なぜ数学が鋭さのためにあるように定式化されているのかについて誰かが私に記入してくれることを望んでいます。使い方がわからないまま数学を投げ回すのは面倒です。
コンテキストとして、その一番上の画像はここから取得されました。 http://wiki.splashdamage.com/index.php/A_Simple_First_Megatexture
MegaTextures(クリップマップアプローチ)とVirtual Texturing(より高度なアプローチ)がどのようにうまく機能するかを理解しています。ですから、それについての説明は必要ありません。この特定のブレンドをシェーダーに実装しようとしています。
参考までに、これは私が使用している分布パターンテクスチャです。
http://aaronm.nuclearglory.com/private/stackoverflow/distribution.png