Mari kita bayangkan mesh grid besar, seperti yang mungkin kita gunakan untuk medan. Kami akan membuat n
segitiga itu layak, meliputi katakanlah setengah layar 1080p kami, dalam satu panggilan undian.
Jika kita mengelas semua simpul kita dan tidak memiliki lapisan penghalusan / tekstur, maka setiap segitiga memiliki 3 simpul dan masing-masing simpul dibagi oleh 6 segitiga, jadi kita memiliki n/2
simpul.
Untuk membuat ini kita perlu:
Jalankan vertex shader setidaknya n/2
kali
("setidaknya" karena cache kita untuk hasil vertex hanya begitu besar. Kadang-kadang kita akan berakhir mengusir sebuah vertex yang sudah kita ubah, lalu membutuhkannya lagi untuk segitiga selanjutnya yang membagikannya dan menjalankan kembali vertex shader di atasnya. Jadi, kita tidak mendapatkan penghematan sebanyak yang terlihat di atas kertas)
Klip & cull n
segitiga.
Rasterisasi & interpolasi setidaknya 1920x1080 / 2 atau sekitar 1 juta piksel dari penyangga bingkai (karena kami mengatakan bahwa wilayah kami mencakup sekitar setengah layar).
("setidaknya" karena cara GPU bekerja pada quads piksel , beberapa fragmen di luar tepi poligon masih dirasterisasi tetapi kemudian ditutup, artinya kami memproses fragmen dua kali. Untuk mesh bergelombang kami juga akan mendapatkan overdraw di mana saja mesh) menutup sendiri, jika kita tidak cukup beruntung untuk menarik poligon paling depan ke dalam buffer kedalaman terlebih dahulu)
Jalankan shader fragmen untuk semua itu> = 1 juta fragmen.
Blend ~ 1 juta hasil ke dalam bingkai & kedalaman buffer.
Oke, sekarang mari kita lepaskan semua simpul kita jadi sekarang kita punya 3n
simpul untuk dirender, enam kali lebih banyak dari sebelumnya! Langkah kami adalah ...
Jalankan vertex shader 3n
kali.
(Tidak ada tanda bintang karena caching karena setiap titik hanya digunakan satu kali, meskipun ini berarti cache tidak dapat menghemat waktu kita)
Klip & cull n
segitiga.
Rasterisasi & interpolasi setidaknya 1920x1080 / 2 atau sekitar 1 juta piksel buffer bingkai.
Jalankan shader fragmen untuk semua itu> = 1 juta fragmen.
Blend ~ 1 juta hasil ke dalam bingkai & kedalaman buffer.
... tunggu, setiap langkah kecuali yang pertama adalah sama! Jadi sebagian besar pekerjaan yang dilakukan GPU pada panggilan biasa tidak berhubungan langsung dengan jumlah simpul yang digunakan. Jumlah cakupan layar, penarikan berlebih, dan jumlah total segitiga merupakan biaya yang jauh lebih besar.
Itu tidak berarti simpul sepenuhnya gratis. Jika Anda berbagi titik ketika Anda bisa mendapatkan sedikit penghematan dari caching, terutama jika titik sudut Anda rumit atau pipa titik perangkat keras Anda lemah (seperti halnya pada beberapa konsol lama). Tetapi mengingat bahwa jumlah titik verteks sebanding dengan jumlah segitiga plus atau minus faktor konstan, biasanya tidak menarik metrik biaya mesh keseluruhan.