Ini adalah pertanyaan lama, tetapi jawaban saat ini tidak benar-benar menjelaskan untuk apa Anda akan menggunakannya.
Ini semua tentang menghemat ruang. Dan dengan atribut vertex, lebih sedikit ruang dapat berarti kinerja lebih tinggi (jika Anda terikat transfer vertex).
Warna biasanya tidak membutuhkan lebih dari 8-bit per komponen. Kadang-kadang Anda membutuhkan 16-bit, jika itu nilai cahaya HDR atau sesuatu. Tetapi untuk karakteristik permukaan (yang merupakan atribut vertex paling banyak), 8 bit baik-baik saja. Jadi byte dinormalisasi unsigned adalah format simpul yang baik.
Koordinat tekstur tidak perlu presisi floating-point 32-bit. Nilai 16-bit dari [0, 1] sudah cukup. Jadi celana pendek unsigned yang dinormalisasi adalah format vertex yang masuk akal.
Normalnya tidak pernah membutuhkan presisi 32-bit. Mereka arah. 8-bit normalized byte yang ditandatangani cenderung agak kecil, tetapi nilai normalisasi 10-bit cukup baik. OpenGL (3.3+) bahkan memungkinkan Anda untuk menggunakan normals 10-bit melalui format 10/10/10/2 bit, disimpan dalam integer 32-bit unsigned tunggal.
Anda bahkan dapat bermain game dengan posisi titik, jika Anda membutuhkan lebih banyak memori.
Tanpa normalisasi, Anda harus membuang siklus berharga dalam atribut byte pembagi shader Anda dengan 255.0. Mengapa melakukan ini, ketika perangkat keras dapat melakukannya secara gratis?