Pertanyaan saya adalah apa yang tertulis dalam judul. Istilah "warna titik" ini banyak muncul. Saya kesulitan memahami ini.
Sebagai contoh:
Bukankah titik sederhana titik pada ruang 3D? Jika demikian, bagaimana suatu titik memiliki warna? Atau apakah "warna" ini berarti sesuatu yang lain?
Ada simpul "Vertex Color" di editor materi engine yang tidak nyata.
Bisakah seseorang menjelaskan pertanyaan saya? Saya tidak dapat menemukan sesuatu yang berguna ketika saya mencari di Google "apa itu warna titik", tetapi dokumentasi yang terlalu teknis untuk saya.
vertex
terminology
Bora
sumber
sumber
Jawaban:
Warna vertex tidak relevan ketika Anda memiliki 3d mesh yang sepenuhnya bertekstur. Tapi itu menjadi menarik ketika Anda memiliki mesh yang tidak bertekstur tetapi berwarna. Dalam hal ini Anda menetapkan warna untuk setiap titik. Shader kemudian akan mewarnai setiap piksel poligon dengan menginterpolasi antara warna dari tiga simpul.
Warna vertex kadang-kadang juga bisa menarik dalam kombinasi dengan tekstur. Saat Anda ingin menggunakan algoritme bayangan seperti Gouraud Shading , Anda cukup menghitung intensitas cahaya pada setiap titik, menetapkan warna terang ke titik sebagai warna titik, dan ketika Anda membuat tekstur, Anda menggandakan nilai warna setiap piksel tekstur dengan warna interpolasi. Ini memungkinkan Anda menghitung sumber cahaya di vertex shader alih-alih pixel shader. Ini biasanya jauh lebih cepat, karena vertex shader biasanya dieksekusi jauh lebih jarang.
sumber
Secara teori, Vertex Color memungkinkan untuk mewarnai model tanpa harus repot dengan tekstur. Ini sangat umum di CAD.
Dalam praktiknya, ini hanya satu slot lagi yang dapat Anda gunakan untuk mendorong data ke dalam vertex, yang kemudian Anda gunakan dalam vertex shader untuk melakukan hal-hal gila .
Itulah yang saya pikirkan, ketika saya mulai dengan 3D. Saya belajar dengan cepat bahwa saya salah .
Anda dapat menganggap sebuah simpul sebagai gumpalan data yang membentuk sudut segitiga yang ingin Anda lukis di layar (dan bukan bagian "sudut" maupun bagian "segitiga", "cat", atau "layar" selalu benar ). Posisi adalah satu-opsional - aspek gumpalan data yang kita sebut Vertex.
Ada banyak yang bisa Anda lakukan dengan melampirkan data tambahan ke vertex. Contoh paling terkenal adalah Anda dapat menambahkan koordinat uv untuk menggambar tekstur pada segitiga itu. Anda (biasanya) tidak dapat memutuskan bagian mana dari tekstur untuk menggambar pada segitiga jika Anda hanya memiliki satu titik - Anda perlu koordinat tekstur juga.
Contoh standar lain dari apa yang ada di dalam gumpalan itu adalah normal, dan garis singgung. Yang penting adalah semuanya opsional, termasuk posisinya. Vertex Color hanyalah salah satu dari input opsional ini yang dapat Anda gunakan atau penyalahgunaan untuk membuat gambar yang cantik di layar.
sumber
Verteks dapat memiliki warna, ini adalah properti seperti biasanya.
Dalam lingkungan 3d, segitiga diberi warna berdasarkan informasi warna simpulnya. Fragmen terdekat dengan vertex A mendapatkan warna itu, closesr ke vertex B mendapatkan colornof B, dan warna interpolasi antara 2.
Ini bekerja dengan cara yang sama seperti pencahayaan per-simpul
Ini adalah cara mudah untuk menambahkan warna ke model tanpa menggunakan tekstur.
sumber
Sudah ada jawaban yang solid di sini - Saya hanya ingin berpadu dengan satu lagi cara umum Anda akan melihat warna titik digunakan:
Memvariasikan warna objek (atau atribut lainnya) dalam satu panggilan batch / draw.
Anda akan melihat ini digunakan dalam rendering sistem partikel, teks, dan sprite (biasanya bertingkat).
Bayangkan Anda memiliki emitor partikel yang memunculkan partikel dengan warna awal acak, atau yang memudar menjadi 0 alpha selama masa hidup partikel. Jika kita menggunakan seragam shader untuk mengirim data warna ini, kita perlu menggambar setiap partikel dengan warna yang berbeda dalam panggilan undiannya sendiri, membuat sistem partikel jauh lebih mahal. Sebagai gantinya, kita dapat memanggang warna-warna ini ke dalam data titik untuk partikel-partikel, dan membuat seluruh kumpulan bersama-sama dalam satu panggilan.
Unity tampaknya menggunakan teknik ini untuk variasi warna partikel, serta untuk mewarnai masing-masing karakter dalam TextMesh atau Sprite yang dibuat bersama dalam satu batch.
Saya percaya Anda dapat melakukan sesuatu yang mirip dengan geometri instancing, tetapi saya tidak tahu bagaimana keduanya membandingkan dalam kinerja. Ada kemungkinan bahwa saat ini melakukan jenis tweaking instances melalui warna vertex lebih dari penangguhan untuk mendukung perangkat keras pra-OpenGL 3.1 / DX9 seperti beberapa perangkat mobile, daripada praktik terbaik untuk PC modern. Saya akan menerima komentar dari orang-orang yang telah melakukan lebih banyak penyetelan kinerja dengan batch & instancing untuk membantu menjernihkan apakah teknik ini telah menggantikan warna titik untuk tujuan ini. :)
sumber