Atau Anda bisa menggunakan peta kubus dengan tekstur langit daripada menggunakan perlin noise. Dan saya juga berpikir itu akan membuat pemandangan Anda terlihat lebih baik karena memiliki lebih banyak detail dan variasi dalam pemetaan lingkungan. Itulah tepatnya yang saya lakukan ketika saya mengimplementasikan raytracer saya.
Alasan lain yang saya rekomendasikan ini, adalah bahwa lingkungan tidak perlu hanya berupa awan. Bisa memiliki gunung, bisa menjadi adegan dalam ruangan, bisa menjadi adegan dari mars. Menggunakan peta kubus satu-satunya hal yang perlu Anda lakukan adalah menukar tekstur dan Anda selesai.
Jadi langkah pertama adalah menemukan peta kubus yang sesuai dengan kebutuhan Anda. Ini dapat disimpan sebagai enam tekstur terpisah, atau sebagai tekstur tunggal seperti di bawah ini. Periksa juga tautan ini untuk info lebih lanjut tentang cara membuat sendiri:
Kemudian pada kode Anda, saya sarankan membuat CubeMap
kelas untuk merangkum perhitungan sampling. Kelas ini harus tahu cara memuat tekstur peta kubus, dan diberi ray itu harus bisa tahu di mana wajah dan dalam posisi apa untuk sampel. Dalam implementasi saya, saya menemukan lebih mudah untuk menyimpan masing-masing dari enam wajah dalam objek tekstur yang terpisah, dan bercabang berdasarkan arah sinar:
class CubeMap
{
public void Load(string path);
public Color GetSample(Ray ray);
private Texture[6] faces;
}
Jika Anda belum memiliki Texture
kelas, buat saja kelas Anda sendiri. Ini bisa sesederhana array warna dua dimensi. Jadi, hanya sebagai referensi, dan tanpa jaminan efisiensi atau kesehatan implementasi ini, inilah kode yang saya gunakan pada proyek saya - CubeMap dan CubeFace .