3dfx Voodoo 3

Publié le 29/03/1999 par
Imprimer

Depht Buffer 16 bits

Autre reproche fait au Voodoo 3, son Depth Buffer n’est que 16 bits la encore. A titre de rappel, le Depth Buffer est utilisé à la fin du rendering 3D, lors de l’écriture de l’image dans le Frame-Buffer, afin de savoir si tel ou tel pixel de l’objet sera caché ou pas. Mais les choses deviennent ici un peu plus complexe. En effet, il existe deux type de Depth Buffer, le Z-Buffer et le W-Buffer, et les cartes Voodoo 2 & 3 sont les seules a disposer d’un W-Buffer.

Dans un Z-Buffer, la valeur de la profondeur n’est pas attribuée de manière linéaire. Dans une scène 3D disposant d’un ratio de distance de 131072 entre le premier plan et le dernier plan, la moitié de la valeur Z sera utilisée pour définir la position du point dans l’intervalle [1,2], et 1/131072 de la valeur Z sera utilisée pour définir la position du point dans l’intervalle [65536,131072]. Avec un Z-Buffer 16 Bits (65536 valeurs), on disposera donc de 32768 valeurs pour définir l’emplacement du point dans l’intervalle [1,2] (d’ou une précision très – trop – élevée), mais seulement d’une valeur pour définir l’emplacement du point dans l’intervalle [65536,131072]. Cette distribution de la valeur Z sera d’autant plus inégale que le ratio sera élevé. Le Z-Buffer est donc très précis pour les objets proches, mais perd nettement de son efficacité pour les objets plus loin, du moins en 16 bits.

Le W-Buffer distribue la valeur de profondeur de manière plus linéaire, puisqu’à chaque intervalle, 1/n d’intervalles valeurs seront attribuées (les intervalles étant calculées de la sorte : [N, Nx2], [(Nx2), (Nx2)x2], [(Nx2x2), (Nx2x2)x2] etc…). Dans l’exemple ci-dessus, nous utilisions une scène disposant d’un ratio de 131072 entre le premier plan et le dernier plan, le Z-Buffer 16 bits s’avérait peu efficace pour les objets éloignés.
Avec un W-Buffer 16 bits, c’est différent. Si l’on ne dispose " que " de 4096 valeurs pour l’intervalle [1,2], on a le droit à 4096 valeurs pour l’intervalle [65536,131072]. Le W-Buffer sera donc bien plus précis pour les objets éloignés, et offrira en général de meilleurs résultats qu’un Z-Buffer 16 Bits, mais il pourra parfois être imprécis pour les objets très proches.

Z-Buffer 16 bits

W-Buffer 16 bits

IntervalleNombre de ValeursIntervalleNombre de Valeurs
[1,2]

32768

[1,2]

4096

[2,4]

16384

[2,4]

4096

[4,8]

8192

[4,8]

4096

[8,16]

4096

[8,16]

4096

[16,32]

2048

[16,32]

4096

[32,64]

1024

[32,64]

4096

[64,128]

512

[64,128]

4096

[128,256]

256

[128,256]

4096

[256,512]

128

[256,512]

4096

[512,1024]

64

[512,1024]

4096

[1024,2048]

32

[1024,2048]

4096

[2048,4096]

16

[2048,4096]

4096

[4096,8192]

8

[4096,8192]

4096

[16384,32768]

4

[16384,32768]

4096

[32768,65536]

2

[32768,65536]

4096

[65536,131072]

1

[65536,131072]

4096

 

Z-Buffer 32 bits

W-Buffer 32 bits

IntervalleNombre de ValeursIntervalleNombre de Valeurs
[1,2]

2147483648

[1,2]

268435456

[2,4]

1073741824

[2,4]

268435456

[4,8]

536870912

[4,8]

268435456

[8,16]

268435456

[8,16]

268435456

[16,32]

134217728

[16,32]

268435456

[32,64]

67108864

[32,64]

268435456

[64,128]

33554432

[64,128]

268435456

[128,256]

16777216

[128,256]

268435456

[256,512]

8388608

[256,512]

268435456

[512,1024]

4194304

[512,1024]

268435456

[1024,2048]

2097152

[1024,2048]

268435456

[2048,4096]

1048576

[2048,4096]

268435456

[4096,8192]

524288

[4096,8192]

268435456

[16384,32768]

262144

[16384,32768]

268435456

[32768,65536]

131072

[32768,65536]

268435456

[65536,131072]

65536

[65536,131072]

268435456

Si un W-Buffer 16 bits est plus précis dans la majeure partie des scènes qu’un Z-Buffer 16 bits (il équivaut à un Z-Buffer 22 bits d’après les dires de 3dfx), il n’est donc pas parfait, et a un gros problème. En effet, si le W-Buffer est supporté par Direct X 6, il n’est pas utilisé par défaut dans les applications, et je ne connais pas d’application (de jeu !) permettant de choisir entre Z-Buffer classique et W-Buffer. Un Z-Buffer 32 bits est donc préférable à l’heure actuelle, d’autant qu’il est très précis comme vous pouvez le voir dans le tableau. Néanmoins, l’utilisation du W-Buffer à la place du Z-Buffer devrait se généraliser dans les prochains mois, avec un meilleur support Hardware (à ma connaissance seules les cartes Voodoo en sont équipées).

Il est également a noter que le Voodoo 3 ne supporte pas le Stencil Buffering, qui est utilisé comme pochoir ou comme masque afin de faciliter le rendues des ombres volumétriques (comme c’est le cas dans Unreal avec le patch pour la Creative TNT) ou encore de définir une zone de l’image n’ayant pas besoin d’être écrite dans le frame buffer à chaque fois (un cockpit d’avion 2D par exemple). La encore, peu de jeux utilisent cette fonction à l’heure actuelle, mais c’est une fonction promise à un belle avenir et supportée par le TNT et le Rage 128GL qui peuvent utiliser un Stencil Buffer 8 bits en complément d’un Z-Buffer 24 bits.

Vos réactions

Top articles