Bonjours a tous.
Je travaille sur une optimisation mémoire, en l'occurrence d'un gazon encore en conception fait par des bilboards. Et je voulait m'essayer aux chargeant des half au lieu des float pour les normals. Je me suis donc référé a la norme en vigueur pour coder ceci :
j'ai fait beaucoup, de test, vérifié des valeurs, et cela fonctionne sur le CPU, mais lorsque je charge ces half dans les VBO, il semble y avoir des problème : illustration en image :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 typedef unsigned short int half ; namespace math { namespace half { inline unsigned short int packf (const float Value) { const unsigned int FloatImage = * (const unsigned int *) &Value ; unsigned short int Packed ; Packed = (FloatImage >> 13) & 0x03FF ; Packed |= ((((FloatImage & 0x7F800000) >> 23) - 112) << 10) & 0x7C00 ; Packed |= (FloatImage & 0x80000000) >> 16 ; return Packed ; } inline float unpackf (const ::half Value) { unsigned int UnPacked ; UnPacked = (Value & 0x03FF) << 13 ; UnPacked |= (((Value & 0x7C00) >> 10) + 112) << 23 ; UnPacked |= (Value & 0x8000) << 16 ; return * ((float *) &UnPacked) ; } } }
Premiere image, le rendu est fait avec des normal codé sur 3 float
Seconde image, le rendu est fait avec des normal mais codé sur 3 half
On voit alors qu'il y a belle et bien un problème de signe sur celle ci ... Sur la première images, très peut des bilboard sont enclairé, car on est face au soleil ... logique ...mais pas sur le rendu avec les half
Comme si le bit de signe n'était pas au placé au même endroit sur le GPU.
Quel qu'un a t'il déjà rencontrer ce problème ?








Comme si le bit de signe n'était pas au placé au même endroit sur le GPU.
Répondre avec citation
Partager