Bagikan melalui


Jenis Cahaya (Direct3D 9)

Properti jenis cahaya menentukan jenis sumber cahaya mana yang Anda gunakan. Jenis cahaya diatur dengan menggunakan nilai dari enumerasi D3DLIGHTTYPE C++ di anggota Jenis struktur D3DLIGHT9 lampu. 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 menyala untuk mendapatkan vektor untuk arah cahaya, dan jarak yang telah ditempuh cahaya. Keduanya digunakan, bersama dengan puncak normal, untuk menghitung kontribusi cahaya ke iluminasi 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 terpengaruh 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 kerujut 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 kerujut bagian dalam dan kerujut luar

Lampu sorot 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 puncak membuat lampu sorot yang paling memakan waktu komputasi dari semua lampu di Direct3D.

Struktur D3DLIGHT9 C++ berisi tiga anggota yang hanya digunakan oleh lampu sorot. Anggota ini - Falloff, Theta, dan Phi - mengontrol seberapa besar atau kecil kerucut bagian dalam dan luar objek sorotan, dan bagaimana cahaya berkurang di antara mereka.

Nilai Theta adalah sudut radian kerujut bagian dalam sorotan, dan nilai Phi adalah sudut untuk kerujut luar cahaya. Nilai Falloff mengontrol bagaimana intensitas cahaya berkurang 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 untuk anggota 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 kerujut cahaya yang memiliki dua bagian: kerujut bagian dalam yang cerah dan kerujut luar. Cahaya paling terang di kerucut bagian 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 sorotan (L) 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 kerujut bagian dalam dan luar lampu sorot. Dalam struktur D3DLIGHT9 cahaya, anggota Theta dan Phi mewakili sudut kerujut total untuk kerujut bagian dalam dan luar. Karena redaman terjadi saat puncak menjadi lebih jauh dari pusat iluminasi (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, puncak terletak di luar kerucut luar dan tidak menerima cahaya. Jika produk titik L dan D lebih besar dari kosinus sudut kerujut bagian dalam, maka puncak berada dalam kerujut bagian dalam dan menerima jumlah cahaya maksimum, 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

Di mana:

  • I f adalah intensitas ringan setelah falloff
  • Alpha adalah sudut antara vektor L dan D
  • Theta adalah sudut kerukuk 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 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