Apa itu Bayangan OpenGL®?

Sebuah bayangan Open Graphics Library® (OpenGL®) adalah perkiraan visual dalam adegan OpenGL® tiga dimensi (3D) tentang bagaimana bayangan akan dilemparkan dalam kehidupan nyata di bawah kondisi pencahayaan yang sama. Bayangan adalah fitur visual yang kompleks untuk diterapkan di OpenGL®, sebagian besar karena tidak ada dukungan bawaan untuk mentransmisikan bayangan dalam sebuah adegan. Sebaliknya ada berbagai teknik yang dapat digunakan untuk membuat bayangan dari objek dan geometri dalam adegan menggunakan berbagai alat, seperti berbagai buffer yang tersedia, shader dan, dalam beberapa kasus, ekstensi yang memberikan akses ke fitur khusus pada grafik tertentu. kartu-kartu. Dalam kebanyakan kasus, kualitas, akurasi, dan kecepatan rendering bayangan OpenGL® secara langsung terkait dengan kekuatan pemrosesan dan memori perangkat keras grafis yang ada di komputer atau perangkat. Beberapa metode yang lebih populer untuk menerapkan bayangan OpenGL® termasuk volume bayangan, pemetaan bayangan, dan penelusuran sinar.

Membuat aplikasi yang memiliki dukungan bayangan OpenGL® membutuhkan pengetahuan matematika dan pemahaman mendalam tentang cara kerja OpenGL®. OpenGL® sebagian besar digunakan untuk membuat adegan 3D yang dinamis dan dirender secara real time, sehingga algoritme yang digunakan untuk membuat bayangan tidak hanya harus dioptimalkan untuk kecepatan, tetapi juga harus diukur dengan cermat untuk konsumsi sumber daya dan gangguan apa pun yang dapat disebabkan dalam pipa grafis yang digunakan untuk rendering. Karena alasan ini, metode paling dasar untuk membuat bayangan, yang disebut ray tracing, seringkali tidak praktis untuk adegan 3D penuh, karena bisa memakan waktu yang sangat lama.

Ray tracing pada dasarnya mengikuti garis imajiner, atau sinar, dari bidang pandang atau posisi kamera melalui pemandangan ke permukaan objek dan kemudian menghitung warna permukaan berdasarkan posisi satu atau lebih sumber cahaya dan faktor lainnya. Selama proses rasterisasi, di mana adegan 3D digambar ke permukaan dua dimensi (2D) sehingga dapat ditampilkan, proses ray tracing harus dilakukan pada setiap piksel yang sedang digambar dan, terutama dengan tekstur atau lainnya. sifat permukaan, mungkin perlu menilai piksel yang sama beberapa kali. Ini berarti ray tracing real-time, meskipun akan secara akurat membuat bayangan, biasanya tidak praktis.

Metode lain yang dapat digunakan untuk membuat bayangan OpenGL® dikenal sebagai pemetaan bayangan. Metode ini menggunakan buffer kedalaman atau stensil untuk membuat pemandangan dari sudut sumber cahaya sebagai rangkaian jarak dari sumber cahaya ke permukaan objek yang berbeda dalam pemandangan. Adegan kemudian dirender untuk kedua kalinya dari sudut pandang yang benar, memeriksa untuk melihat apakah setiap piksel berada dalam rentang jarak tertentu dalam buffer, yang menunjukkan apakah piksel menyala atau berbayang. Menggunakan pemetaan bayangan dapat menghabiskan banyak memori dan, dengan pemandangan yang memiliki lebih dari satu sumber cahaya, dapat melibatkan pembuatan banyak peta dari berbagai sudut.

Volume bayangan adalah cara untuk membuat bayangan OpenGL® yang lebih akurat daripada beberapa metode lain, tetapi menghadirkan masalahnya sendiri. Volume bayangan pada dasarnya adalah bagian geometri yang tidak terlihat dalam pemandangan yang meluas dari permukaan objek yang menyala jauh dari sumber cahaya. Volume ini dapat diperiksa terhadap objek lain untuk melihat apakah mereka jatuh ke dalam bayangan permukaan dari mana volume berasal. Prosedur ini bisa sangat kompleks dan pada akhirnya menciptakan artefak visual ketika dioptimalkan untuk kecepatan.