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 puncak yang dinyalakan 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 berjalan melalui adegan ke arah yang sama. Bayangkan cahaya arah sebagai sumber cahaya pada jarak dekat tak terbatas, seperti matahari. Lampu arah tidak dipengaruhi oleh redaman atau rentang, sehingga arah dan warna yang Anda tentukan adalah satu-satunya faktor yang dipertimbangkan saat Direct3D menghitung warna puncak. Karena sejumlah kecil faktor iluminasi, ini adalah lampu intensif komputasi paling sedikit untuk digunakan.

Sorotan

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

ilustrasi sorotan dengan kerumuman dalam dan kerumuman luar

Sorotan dipengaruhi oleh falloff, redaman, dan rentang. Faktor-faktor ini, serta jarak yang ditempuh cahaya ke setiap puncak, dicari ketika menghitung efek pencahayaan untuk objek dalam adegan. Menghitung efek ini untuk setiap vertex 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 bagian dalam dan luar, dan bagaimana cahaya berkurang di antara mereka.

Theta adalah sudut radian dari kerumuman dalam lampu sorot, dan nilai Phi adalah sudut untuk kerumuman 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 sorotan.

ilustrasi tentang bagaimana nilai phi dan theta berhubungan dengan kerujut sorotan

Sorotan 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 redaman ini biasanya disebut sebagai falloff.

Jumlah cahaya yang diterima puncak didasarkan pada lokasi puncak di kerucut dalam atau luar. Direct3D menghitung produk titik dari vektor arah (L) sorotan dan vektor dari cahaya ke puncak (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 bagian 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 bagian dalam dan luar lampu sorot. Nilai Theta dan Phi cahaya mewakili total sudut kerumuman untuk kerumuman dalam dan luar. Karena redaman 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 kerumuman bagian dalam, maka puncak berada dalam kerujut bagian dalam dan menerima jumlah maksimum cahaya, masih mempertimbangkan pelambatan dari jarak jauh. Jika puncak berada di suatu tempat di antara kedua wilayah, maka falloff dihitung dengan persamaan berikut.

rumus untuk intensitas cahaya pada puncak, setelah falloff

Dimana:

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

Rumus ini menghasilkan nilai antara 0,0 dan 1,0 yang menskalakan intensitas cahaya di puncak untuk mempertanyakan falloff. Redaman 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 vertex dari cahaya

Efek dari berbagai nilai falloff pada pencahayaan aktual halus, 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