Apakah multitexturing benar-benar hanya "menggunakan lebih dari satu tekstur"?

10

Ini mungkin tampak bodoh, tapi itu menggangguku. Dari apa yang saya mengerti, multitexturing hanya menggunakan lebih dari 1 tekstur per shader (biasanya untuk membaurkannya entah bagaimana). Jadi alih-alih membuat 1 tekstur, saya membuat 2 atau lebih yang ... cukup jelas!

Kenapa ada istilah khusus untuk itu? Apakah ada yang lebih dari sekadar "menggunakan lebih dari 1 tekstur"? Apakah saya melewatkan sesuatu?

NPS
sumber
Pada satu titik terutama dalam grafik 3d real-time, menggunakan satu tekstur (peta difus) sangat umum. Karenanya nama itu digunakan untuk menyarankan bahwa Anda menggunakan lebih dari satu tekstur. Saya tidak melihat masalah. Mirip multi-threaded
AturSams
Tetapi multithreading membutuhkan API khusus, desain program yang sama sekali berbeda, dan sebagainya. Memang berbeda dalam banyak aspek. Pertanyaan saya berasal dari fakta bahwa multitexturing tampaknya tidak memiliki sesuatu yang berbeda tetapi jumlah tekstur. Dan itu bukan masalah, hanya sebuah pertanyaan.
NPS
Itu tidak harus memerlukan API khusus. Itu akan tergantung pada implementasinya. Saya menggunakan beberapa alat yang memperlakukan multitexture dengan cara yang sama seperti "unitexture";)
AturSams
@ konsep bagian mana? Judul?
Anko

Jawaban:

16

Istilah khusus ini berkaitan dengan evolusi kartu grafis dan API grafik waktu nyata daripada menjadi istimewa. Misalnya pemrosesan gambar dan rendering grafik offline memiliki fitur ini jauh sebelum tersedia dalam API grafik waktu nyata dan perangkat keras tingkat konsumen.

Sejak OpenGL 1.1 (fungsi tetap) multitexturing diperkenalkan sebagai status baru ke API. Alih-alih hanya mengikat satu tekstur, itu memberi Anda kemampuan untuk mengikat banyak tekstur; satu untuk setiap unit tekstur dan kemudian menyatu di antara mereka menggunakan salah satu parameter lingkungan tekstur, campuran, memodulasi..etc 1

Kemudian combiners tekstur diperkenalkan, itu memberi kemampuan menggabungkan satu set tekstur menggunakan operasi yang lebih fleksibel, dengan memberi Anda cara untuk melewati parameter ke set operasi tetap (anggap itu sebagai shader tetapi dengan set params tetap), ini adalah lebih fleksibel daripada "combiners" asli.

Dengan diperkenalkannya shader, penggabung sebelumnya menjadi mubazir sampai secara resmi tidak digunakan lagi. Akhirnya menjadi sepele (karena perangkat keras dan API yang sesuai berevolusi) untuk memberikan sampler tekstur ke shader dan membiarkan GPU melakukan operasi sewenang - wenang (shader Anda) pada tekstur Anda, lebih fleksibel terhadap apa yang sebelumnya.

Intinya di sini; bahkan jika itu menjadi sepele, istilah tersebut bertahan sebagai istilah umum untuk setiap operasi yang menggambarkan pengambilan sampel dan konvolusi beberapa tekstur.

1 Saya menggunakan memori saya untuk mengingat fungsi tetap OpenGL memperbaiki saya jika saya melewatkan sth.

concept3d
sumber
5

Alasan historisnya adalah "multitekstur" adalah kata kunci pemasaran seperti "perangkat keras TnL" pada suatu waktu. Karena itu adalah fitur yang membedakan kartu baru, perlu ada kata untuk menjualnya.

Alasan teknisnya adalah multitekstur tidak hanya membuat dan menggunakan dua tekstur, bukan satu. Jika Anda hanya menggunakan dua tekstur (atau tiga, atau nomor apa saja), Anda bisa juga hanya menggunakan satu tekstur, karena hanya ada satu fragmen output. Itu tidak ada bedanya (apa pun inputnya, outputnya hanya bisa satu atau yang lain), jadi tidak akan ada yang istimewa.

Perbedaannya bukan bahwa Anda dapat membuat beberapa tekstur, tetapi Anda menggabungkan dua atau lebih tekstur. Misalnya, Anda dapat mencampurnya berdasarkan alpha atau pada beberapa faktor campuran interpolasi per-verteks, atau Anda dapat menambahkannya, atau sesuatu yang berbeda.
Jumlah konfigurabilitas / programabilitas telah sangat berkembang selama dekade terakhir, tetapi satu perbedaan besar tetap bahwa Anda entah bagaimana dapat menggabungkan dua atau lebih input menjadi satu output.

Damon
sumber
2

Pada awalnya ada cahaya

Pencahayaan OpenGL, untuk lebih spesifik, yang menentukan operasi matematika tertentu untuk diterapkan pada sebuah fragmen, yang kemudian dikombinasikan dengan tekstur untuk memperoleh warna akhir.

Dan kemudian ada Gempa

Gempa tidak menggunakan pencahayaan semacam ini untuk banyak objek itu. Alih-alih itu menggunakan tekstur kedua untuk mewakili pencahayaan, yang dikalikan dengan (atau "dimodulasi dengan) tekstur objek untuk memperoleh warna akhir.

Namun, perangkat keras saat itu tidak mendukung ini dalam satu operasi. Jadi Quake perlu menggambar objek pemandangan itu dua kali:

  • Gambar semuanya sekali untuk meletakkan tekstur dasar.
  • Atur mode campuran modulasi.
  • Gambar semuanya untuk yang kedua kalinya untuk menerapkan tekstur pencahayaan.

Ini tentu saja lambat; tidak hanya semua geometri perlu diubah dan dipotong dua kali (yang pada waktu itu adalah operasi CPU), tetapi setiap piksel di layar akhirnya disentuh dua kali selama rendering.

Masukkan multitexture

Multitexture adalah solusi untuk ini, dan awalnya diekspos melalui ekstensi GL_SGIS_multitexture, yang hanya ada pada kartu 3DFX konsumen tertentu. Awalnya itu hanya memungkinkan pencampuran dua tekstur (dan dengan serangkaian mode campuran yang terbatas).

Mengutip dari readme GLQuake asli :

GL_SGIS_multitexture
Dukungan multitextures memungkinkan perangkat keras tertentu untuk membuat dunia dalam satu lintasan, bukan dua. GLQuake menggunakan dua lintasan, satu untuk tekstur dunia dan yang kedua untuk lightmap yang dicampur pada tekstur. Pada beberapa perangkat keras, dengan GL_SIGS_multitexture mendukung implementasi OpenGL, ini dapat dilakukan dalam satu pass. Pada perangkat keras yang mendukung ini, Anda akan mendapatkan peningkatan frame rate 60% hingga 100%. Saat ini, hanya kartu dual TMU 3DFX (seperti Obsidian 2220) yang mendukung ekstensi ini, tetapi perangkat keras lain akan segera menyusul.

Penting untuk diingat bahwa pada saat ini efek seperti pemetaan normal, jenis pencahayaan per-pixel lainnya, bahkan shader, dan sebagainya tidak ada (baik memang ada, tetapi terutama hanya dalam makalah akademik dan proyek penelitian, dan tidak dianggap layak untuk digunakan dalam rendering waktu-nyata).

Dan sampai sekarang

Dari sini cukup banyak seperti yang dijelaskan dalam jawaban lain. Multitexturing menjadi fitur standar dari waktu ke waktu, dengan lebih banyak mode campuran tersedia, akhirnya memberi jalan pada kode shader sewenang-wenang.

Tetapi yang penting untuk keperluan pertanyaan Anda adalah ini: pada awalnya fungsi standar hanya bisa menggunakan satu tekstur pada saat rendering. Mampu menggunakan lebih dari satu adalah fungsionalitas tambahan yang hanya didukung oleh perangkat keras kelas atas, dan karenanya diperlukan sebuah nama. Nama itu bisa saja "dual-texturing" (karena implementasi pertama hanya mendukung dua tekstur) tetapi dengan satu mata di masa depan nama "multitexture" dipilih.

Bacaan lebih lanjut tentang sejarah semua ini tersedia di sini , dan penulisan sejarah yang baik (dari konteks yang lebih luas, dan bagian multitekstur yang dimainkan di dalamnya) pada jawaban Programmers.SE ini .

Maximus Minimus
sumber