Kapan lebih baik mengunggah matriks model parsial ke vertex shader?

8

Sampai sekarang, ketika merender adegan saya dan saat iterasi melalui grafik adegan, untuk setiap node, matriks modelnya dihitung dari matriks model induk dan pose node adegan. Ini cukup sederhana dan sudah mengurangi jumlah perkalian matriks menjadi satu perkalian per node dan bingkai.

Tetapi semua perkalian matriks ini harus dilakukan pada CPU dan di setiap frame untuk dapat melakukan (beberapa kali berturut-turut) pergerakan node adegan dengan sangat cepat. GPU, bagaimanapun, mungkin jauh lebih cocok untuk melakukan banyak perkalian matriks, jadi saya berpikir untuk mengirim beberapa matriks model parsial ke vertex shader daripada menghitung semua yang ada di CPU.

Mengirim setiap bagian (jadi pose setiap simpul) ke GPU mungkin tidak masuk akal, karena dalam hal ini semua perhitungan dilakukan untuk setiap titik alih-alih setiap simpul, yang sebenarnya akan menurunkan kinerja. Tapi mungkin adegan node dengan banyak anak-anak atau hanya anak-anak yang tidak bergerak (relatif terhadap orang tuanya) dapat menjadi tempat untuk membagi matriks model dan menggeser perkalian ke shader.

Jadi, kapan lebih baik mengirim matriks model parsial ke shader dan memindahkan multiplikasi ke GPU? Atau apakah itu hanya ide yang buruk untuk ini?

Nero
sumber

Jawaban:

9

Melakukan matematika dengan seragam adalah shader biasanya tidak akan membuat Anda kinerja lebih dari melakukannya pada CPU. CPU tidak lebih lambat dari GPU dalam melakukan matrik matematika, itu hanya tidak terstruktur untuk melakukan sejumlah besar matematika secara paralel. Tetapi Anda harus benar-benar melakukan matematika dalam jumlah besar untuk mendapatkan kemenangan. Mengirim data tambahan ke GPU hanya untuk membuat GPU mengalikan dua matriks bersama jarang akan menjaring Anda apa pun.

Sekarang, katakan Anda memiliki penyangga matriks pengerasan. Ini mungkin mulai peduli apakah Anda mengubah mereka semua ke dalam ruang dunia pada CPU atau hanya lulus matriks ekstra Model-to-dunia-ruang untuk GPU. Tetapi meskipun demikian itu tergantung pada rasio simpul terhadap tulang Anda.

John Calsbeek
sumber
Saya tergantung pada jumlah kalkulasi. GPU sangat cepat tentang operasi matematika. Jadi ini adalah masalah coba dan pembandingan.
Michael IV
5

Jarang, jika pernah. Anda setengah menjawabnya dalam pertanyaan Anda sendiri: shader vertex berjalan sekali per-verteks, shader fragmen sekali per-fragmen. Jika Anda tidak melakukan sesuatu yang unik pada vertex atau fragmen itu, maka Anda melakukan hal yang persis sama setiap kali Anda memanggil shader. Bagi saya itu tidak terdengar lebih efisien.

Mokosha
sumber