Tidak. Kapan pun Anda memiliki matriks dunia eksplisit di shader Anda.
Penjelasan terperinci untuk alasannya dapat ditemukan di sini , tetapi versi singkatnya benar-benar sangat sederhana: Anda tidak pernah membutuhkannya dan dapat membunuh ketepatan floating-point Anda.
Jika ruang dunia Anda terlalu besar, maka kamera yang jauh dari asalnya dapat menyebabkan masalah presisi titik mengambang.
Semua ruang dunia tidak lebih dari perantara antara ruang model dan ruang kamera. Ini adalah tempat di mana Anda dapat mengekspresikan kamera dan semua objek lain di ruang yang sama. Tetapi yang Anda gunakan hanyalah menghasilkan matriks dunia-ke-kamera, yang kemudian Anda terapkan ke semua matriks model-ke-dunia untuk membuat matriks model-ke-kamera.
Anda dapat menangani masalah presisi di C ++ dengan menggunakan doubl alih-alih mengapung untuk perhitungan matriks. Anda dapat mengonversi ini kembali menjadi float sebelum mengunggahnya ke shader.
Jadi mengapa Anda membutuhkan transformasi ruang-dunia eksplisit di shader Anda? Di kode sumber Anda, ya. Tetapi di shader Anda? Apa yang akan Anda lakukan dengan itu yang tidak dapat Anda lakukan dengan ruang kamera?
Pencahayaan dapat dilakukan di ruang kamera semudah ruang dunia; yang harus Anda lakukan adalah mengubah posisi / arah cahaya Anda menjadi ruang kamera. Bagaimanapun, ruang kamera memiliki skala yang sama dengan ruang dunia. Anda melakukan transformasi ini sekali per frame per cahaya; bukan beban kinerja bahkan pada CPU.
Jadi sama sekali tidak ada gunanya mengekspos shader Anda ke transformasi ruang dunia eksplisit . Ini hanya langkah menengah yang Anda lipat ke dalam matriks Anda.