Bagikan melalui


Jenis cahaya

Properti jenis cahaya menentukan jenis sumber cahaya mana yang Anda gunakan. Ada tiga jenis lampu di Direct3D - lampu titik, lampu sorot, dan lampu arah. Setiap jenis menerangi objek dalam adegan secara berbeda, dengan berbagai tingkat overhead komputasi.

Cahaya Titik

Lampu titik memiliki warna dan posisi dalam adegan, tetapi tidak ada satu arah pun. Mereka memberikan cahaya yang sama di semua arah, seperti yang ditunjukkan dalam ilustrasi berikut.

ilustrasi cahaya titik

Bola lampu adalah contoh yang baik dari cahaya titik. Lampu titik dipengaruhi oleh redaman dan rentang, dan menerangi jala berdasarkan vertex-by-vertex. Selama pencahayaan, Direct3D menggunakan posisi lampu titik di ruang dunia dan koordinat verteks yang menyala untuk mendapatkan vektor untuk arah cahaya, dan jarak yang telah ditempuh cahaya. Keduanya digunakan, bersama dengan puncak normal, untuk menghitung kontribusi cahaya terhadap penerangan permukaan.

Cahaya Arah

Lampu arah hanya memiliki warna dan arah, bukan posisi. Mereka memancarkan cahaya paralel. Ini berarti bahwa semua cahaya yang dihasilkan oleh lampu arah melewati pemandangan ke arah yang sama. Bayangkan cahaya arah sebagai sumber cahaya pada jarak dekat tak terbatas, seperti matahari. Lampu arah tidak dipengaruhi oleh peredam atau rentang, sehingga arah dan warna yang Anda tentukan adalah satu-satunya faktor yang dipertimbangkan saat Direct3D menghitung warna vertex. Karena sejumlah kecil faktor iluminasi, ini adalah lampu intensif komputasi paling sedikit untuk digunakan.

Senter

Lampu sorot memiliki warna, posisi, dan arah di mana mereka memancarkan cahaya. Cahaya yang dipancarkan dari sorotan terdiri dari kerudung bagian dalam yang cerah dan kerudung luar yang lebih besar, dengan intensitas cahaya berkurang di antara keduanya, seperti yang ditunjukkan dalam ilustrasi berikut.

ilustrasi sorotan dengan kerudung bagian dalam dan kerudung luar

Sorotan dipengaruhi oleh falloff, peledakan, dan rentang. Faktor-faktor ini, serta jarak yang ditempuh cahaya ke setiap puncak, dicari ketika efek pencahayaan komputasi untuk objek dalam adegan. Menghitung efek ini untuk setiap puncak membuat sorotan yang paling memakan waktu komputasi dari semua lampu di Direct3D.

Nilai Falloff, Theta, dan Phi hanya digunakan oleh sorotan. Nilai-nilai ini mengontrol seberapa besar atau kecil sorotan objek dalam dan luar kerumuni, dan bagaimana cahaya berkurang di antara mereka.

Theta adalah sudut radian dari kerumuman dalam lampu sorot, dan nilai Phi adalah sudut untuk kerujut luar cahaya. Falloff mengontrol bagaimana intensitas cahaya menurun antara tepi luar kerucut bagian dalam dan tepi dalam kerucut luar. Sebagian besar aplikasi mengatur Falloff ke 1.0 untuk membuat falloff yang terjadi secara merata di antara dua kerucut, tetapi Anda dapat mengatur nilai lain sesuai kebutuhan.

Ilustrasi berikut menunjukkan hubungan antara nilai-nilai ini dan bagaimana mereka dapat memengaruhi kerumuman dalam dan luar lampu sorot.

ilustrasi tentang bagaimana nilai phi dan theta berhubungan dengan kerumuman sorotan

Lampu sorot memancarkan kerucut cahaya yang memiliki dua bagian: kerucut bagian dalam yang cerah dan kerucut luar. Cahaya paling terang di kerucut dalam dan tidak ada di luar kerucut luar, dengan intensitas cahaya mereda di antara dua area. Jenis pelambatan ini biasanya disebut sebagai falloff.

Jumlah cahaya yang diterima vertex didasarkan pada lokasi puncak di kerucut dalam atau luar. Direct3D menghitung produk titik dari vektor arah sorotan (L) dan vektor dari cahaya ke vertex (D). Nilai ini sama dengan kosinus sudut antara kedua vektor, dan berfungsi sebagai indikator posisi puncak yang dapat dibandingkan dengan sudut kerucut cahaya untuk menentukan di mana puncak mungkin terletak di kerucut dalam atau luar. Ilustrasi berikut memberikan representasi grafis dari hubungan antara kedua vektor ini.

ilustrasi vektor arah sorotan dan vektor dari puncak ke sorotan

Sistem membandingkan nilai ini dengan kosinus sudut kerumuman dalam dan luar sorotan. Nilai Theta dan Phi cahaya mewakili total sudut kerudung untuk kerumuni bagian dalam dan luar. Karena pelambatan terjadi saat puncak menjadi lebih jauh dari pusat penerangan (daripada di seluruh sudut kerucut total), runtime membagi sudut kerucut ini menjadi dua sebelum menghitung kosinus mereka.

Jika produk titik vektor L dan D kurang dari atau sama dengan kosinus sudut kerucut luar, verteks terletak di luar kerucut luar dan tidak menerima cahaya. Jika produk titik L dan D lebih besar dari kosinus sudut kerumuni bagian dalam, maka vertex berada dalam kerujut bagian dalam dan menerima jumlah cahaya maksimum, masih mempertimbangkan pelambatan dari jarak jauh. Jika vertex berada di suatu tempat di antara kedua wilayah, maka falloff dihitung dengan persamaan berikut.

rumus untuk intensitas cahaya pada puncak, setelah falloff

di mana:

  • If adalah intensitas ringan setelah falloff
  • Alpha adalah sudut antara vektor L dan D
  • Theta adalah sudut kerukuk dalam
  • Phi adalah sudut kerudung luar
  • p adalah falloff

Rumus ini menghasilkan nilai antara 0,0 dan 1,0 yang menskalakan intensitas cahaya di puncak untuk memperhitungkan falloff. Atenuasi sebagai faktor jarak puncak dari cahaya juga diterapkan. Grafik berikut menunjukkan bagaimana nilai falloff yang berbeda dapat memengaruhi kurva falloff.

grafik intensitas cahaya versus jarak verteks dari cahaya

Efek dari berbagai nilai falloff pada pencahayaan aktual adalah halang, dan penalti performa kecil dikeluarkan dengan membentuk kurva falloff dengan nilai falloff selain 1,0. Untuk alasan ini, nilai ini biasanya diatur ke 1.0.

Lampu dan bahan