または、パーリンノイズを使用する代わりに、空のテクスチャを含む立方体マップを使用することもできます。また、環境マッピングの詳細とバリエーションが増えるため、シーンの見栄えがよくなると思います。それが、レイトレーサーを実装したときに私がしたこととまったく同じです。
私がこれをお勧めするもう1つの理由は、環境がクラウドだけである必要はないということです。山があったり、屋内シーンであったり、火星のシーンであったりします。キューブマップを使用する必要があるのは、テクスチャを交換するだけです。
したがって、最初のステップは、ニーズに合ったキューブマップを見つけることです。6つの個別のテクスチャとして、または以下のような単一のテクスチャとして保存できます。独自の作成方法の詳細については、このリンクも確認してください。
次に、コードでCubeMap
、サンプリング計算をカプセル化するクラスを作成することをお勧めします。このクラスは、キューブマップテクスチャをロードする方法を知っている、と与えられなければならないレイ、で知ることができるはずどの顔とでどのような位置にサンプルを。私の実装では、6つの面のそれぞれを別々のテクスチャオブジェクトに格納し、光線の方向に基づいて分岐する方が簡単であることがわかりました。
class CubeMap
{
public void Load(string path);
public Color GetSample(Ray ray);
private Texture[6] faces;
}
Texture
クラスがまだない場合は、自分で作成してください。色の2次元配列と同じくらい簡単です。参考までに、この実装の効率や健全性を保証するものではありませんが、プロジェクトで使用したコードはCubeMapとCubeFaceです。