Bagikan melalui


Lampu dan Bahan (Direct3D 9)

Lampu digunakan untuk menerangi objek dalam adegan. Saat pencahayaan diaktifkan, Direct3D menghitung warna setiap puncak objek berdasarkan kombinasi:

Catatan

Bagian ini hanya untuk alur fungsi tetap. Shader yang dapat diprogram melakukan semua pencahayaan secara eksplisit.

 

  • Warna bahan saat ini dan texel dalam peta tekstur terkait.
  • Warna difus dan spekular di puncak, jika ditentukan.
  • Warna dan intensitas cahaya yang dihasilkan oleh sumber cahaya di adegan atau tingkat cahaya sekitar adegan.

Saat Anda menggunakan pencahayaan dan bahan Direct3D, Anda mengizinkan Direct3D untuk menangani detail penerangan untuk Anda. Pengguna tingkat lanjut dapat melakukan pencahayaan sendiri, jika diinginkan.

Cara Anda bekerja dengan pencahayaan dan bahan membuat perbedaan besar dalam penampilan adegan yang dirender. Bahan menentukan bagaimana cahaya memantul dari permukaan. Tingkat cahaya langsung dan cahaya sekitar menentukan cahaya yang tercermin. Anda harus menggunakan bahan untuk merender adegan jika pencahayaan diaktifkan. Lampu tidak diperlukan untuk merender adegan, tetapi detail dalam adegan yang dirender tanpa cahaya tidak terlihat. Paling baik, merender adegan yang tidak menyala menghasilkan siluet objek dalam adegan. Ini tidak cukup detail untuk sebagian besar tujuan.

Cahaya Langsung vs. Cahaya Sekitar

Meskipun cahaya langsung dan sekitar menerangi objek dalam adegan, mereka independen satu sama lain, mereka memiliki efek yang sangat berbeda, dan mereka mengharuskan Anda bekerja dengan mereka dengan cara yang sama sekali berbeda.

Cahaya langsung hanya itu: langsung. Cahaya langsung selalu memiliki arah dan warna, dan itu adalah faktor untuk algoritma bayangan, seperti bayangan Gouraud. Berbagai jenis lampu memancarkan cahaya langsung dengan cara yang berbeda, menciptakan efek redaman khusus. Anda membuat sekumpulan parameter cahaya untuk cahaya langsung dengan memanggil metode IDirect3DDevice9::SetLight .

Cahaya sekitar secara efektif di mana-mana dalam adegan. Anda dapat menganggapnya sebagai tingkat cahaya umum yang mengisi seluruh adegan, terlepas dari objek dan lokasinya dalam adegan itu. Cahaya sekitar tidak memiliki posisi atau arah, hanya warna dan intensitas. Setiap cahaya menambah cahaya sekitar secara keseluruhan dalam adegan. Atur tingkat cahaya sekitar dengan panggilan ke metode IDirect3DDevice9::SetRenderState , menentukan D3DRS_AMBIENT sebagai parameter Status , dan warna RGBA yang diinginkan sebagai parameter Nilai.

Warna cahaya sekitar mengambil bentuk nilai RGBA, di mana setiap komponen adalah nilai bilangan bulat dari 0 hingga 255. Ini tidak seperti kebanyakan nilai warna di Direct3D.

Anda dapat menggunakan makro D3DCOLOR_RGBA untuk menghasilkan nilai RGBA. Komponen merah, hijau, dan biru digabungkan untuk membuat warna akhir cahaya sekitar. Komponen alfa mengontrol transparansi warna. Saat menggunakan akselerasi perangkat keras atau emulasi RGB, komponen alfa diabaikan.

Direct3D Light Model vs. Nature

Di alam, ketika cahaya dipancarkan dari sumber, cahaya tercermin dari ratusan, jika tidak ribuan atau jutaan objek sebelum mencapai mata pengguna. Setiap kali tercermin, beberapa cahaya diserap oleh permukaan, beberapa tersebar ke arah acak, dan sisanya pergi ke permukaan lain atau ke mata pengguna. Proses ini berlanjut sampai cahaya dikurangi menjadi apa-apa atau pengguna melihat cahaya.

Jelas, perhitungan yang diperlukan untuk mensimulasikan dengan sempurna perilaku alami cahaya terlalu memakan waktu untuk digunakan untuk grafik Direct3D real-time. Oleh karena itu, dengan ingat kecepatan, model cahaya Direct3D memperkirakan cara cahaya bekerja di dunia alami. Direct3D menjelaskan cahaya dalam hal komponen merah, hijau, dan biru yang digabungkan untuk membuat warna akhir.

Di Direct3D, ketika cahaya memantul dari permukaan, warna cahaya berinteraksi secara matematis dengan permukaan itu sendiri untuk membuat warna akhirnya ditampilkan di layar. Untuk informasi spesifik tentang algoritma yang digunakan Direct3D, lihat Matematika Pencahayaan (Direct3D 9).

Model cahaya Direct3D menggeneralisasi cahaya menjadi dua jenis: cahaya sekitar dan cahaya langsung. Masing-masing memiliki atribut yang berbeda, dan masing-masing berinteraksi dengan bahan permukaan dengan cara yang berbeda. Cahaya sekitar adalah cahaya yang telah tersebar begitu banyak sehingga arah dan sumbernya tidak ditentukan: mempertahankan tingkat intensitas rendah di mana-mana. Pencahayaan tidak langsung yang digunakan oleh fotografer adalah contoh cahaya sekitar yang baik. Cahaya sekitar di Direct3D, seperti di alam, tidak memiliki arah atau sumber nyata, hanya warna dan intensitas. Bahkan, tingkat cahaya sekitar benar-benar independen dari objek apa pun dalam adegan yang menghasilkan cahaya. Cahaya sekitar tidak berkontribusi pada pantulan spekular.

Cahaya langsung adalah cahaya yang dihasilkan oleh sumber dalam adegan; selalu memiliki warna dan intensitas, dan bergerak ke arah yang ditentukan. Cahaya langsung berinteraksi dengan bahan permukaan untuk membuat sorotan spekular, dan arahnya digunakan sebagai faktor dalam algoritma bayangan, termasuk bayangan Gouraud. Ketika cahaya langsung tercermin, itu tidak berkontribusi pada tingkat cahaya sekitar dalam adegan. Sumber dalam adegan yang menghasilkan cahaya langsung memiliki karakteristik berbeda yang memengaruhi bagaimana mereka menerangi adegan.

Selain itu, bahan poligon memiliki sifat yang memengaruhi bagaimana poligon itu mencerminkan cahaya yang diterimanya. Anda mengatur sifat pantulan tunggal yang menjelaskan bagaimana materi mencerminkan cahaya sekitar, dan Anda mengatur sifat individual untuk menentukan pantulan spekular dan difus bahan. Untuk informasi selengkapnya, lihat Materi (Direct3D 9).

Nilai Warna untuk Lampu dan Bahan

Direct3D menjelaskan warna dalam hal empat komponen-merah, hijau, biru, dan alfa-yang menggabungkan untuk membuat warna akhir. Struktur D3DCOLORVALUE C++ didefinisikan untuk berisi nilai untuk setiap komponen. Setiap anggota adalah nilai floating-point yang biasanya berkisar antara 0,0 hingga 1,0, inklusif. Meskipun lampu dan bahan menggunakan struktur yang sama untuk menggambarkan warna, nilai dalam struktur digunakan sedikit berbeda oleh masing-masing.

Nilai warna untuk sumber cahaya mewakili jumlah komponen cahaya tertentu yang dipancarkannya. Karena lampu tidak menggunakan komponen alfa, hanya komponen merah, hijau, dan biru warna yang relevan. Anda dapat memvisualisasikan tiga komponen sebagai lensa merah, hijau, dan biru pada televisi proyeksi. Setiap lensa mungkin mati (nilai 0,0 di anggota yang sesuai), mungkin secerah mungkin (nilai 1,0), atau mungkin beberapa tingkat di antaranya. Warna yang datang melalui lensa digabungkan untuk membuat warna akhir cahaya. Kombinasi seperti R(1.0), G(1.0), B(1.0) membuat cahaya putih, di mana R(0.0), G(0.0), B(0.0) tidak memancarkan cahaya sama sekali. Anda dapat membuat cahaya yang hanya memancarkan satu komponen, menghasilkan cahaya merah, hijau, atau biru murni; atau, cahaya dapat menggunakan kombinasi untuk memancarkan warna seperti kuning atau ungu. Anda bahkan dapat mengatur nilai komponen warna negatif untuk membuat "terang gelap" yang benar-benar menghilangkan cahaya dari adegan. Atau, Anda dapat mengatur komponen ke beberapa nilai yang lebih besar dari 1,0 untuk membuat cahaya yang sangat terang.

Dengan bahan, di sisi lain, nilai warna mewakili berapa banyak komponen cahaya yang tercermin oleh permukaan yang dirender dengan bahan tersebut. Bahan yang komponen warnanya adalah R(1.0), G(1.0), B(1.0), A(1.0) mencerminkan semua cahaya yang datang dengan caranya. Demikian juga, bahan dengan R(0.0), G(1.0), B(0.0), A(1.0) mencerminkan semua lampu hijau yang diarahkan padanya. Bahan memiliki beberapa nilai pantulan untuk menciptakan berbagai jenis efek.

Informasi tambahan terkandung dalam: Jenis Cahaya (Direct3D 9), dan Properti Cahaya (Direct3D 9).

Memulai