Biais de profondeur (Direct3D 9)

Les polygones coplanaires dans votre espace 3D peuvent apparaître comme s’ils ne sont pas coplanaires en ajoutant un biais z à chacun d’eux. Il s’agit d’une technique couramment utilisée pour s’assurer que les ombres d’une scène sont affichées correctement. Pour instance, une ombre sur un mur aura probablement la même valeur de profondeur que le mur. Si vous restituez d’abord le mur, puis l’ombre, il se peut que l’ombre ne soit pas visible ou que des artefacts de profondeur soient visibles. Vous pouvez inverser l’ordre dans lequel vous affichez les objets coplanaires dans l’espoir d’inverser l’effet, mais les artefacts de profondeur sont toujours probables.

Une application peut vous aider à garantir le rendu correct des polygones coplanaires en ajoutant un biais aux valeurs z que le système utilise lors du rendu des jeux de polygones coplanaires. Pour ajouter un z-bias à un ensemble de polygones, appelez la méthode IDirect3DDevice9::SetRenderState juste avant de les rendre, en définissant le paramètre State sur D3DRS_DEPTHBIAS et le paramètre Value sur une valeur float appropriée (par exemple, une valeur appropriée peut être comprise entre -1.0 et 1.0) ; pour passer cette valeur à SetRenderState, vous devez également convertir la valeur en DWORD. Une valeur de biais z plus élevée augmente la probabilité que les polygones que vous affichez soient visibles lorsqu’ils sont affichés avec d’autres polygones coplanaires.

Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS

où m est la pente de profondeur maximale du triangle en cours de rendu.

m = max(abs(delta z / delta x), abs(delta z / delta y)) 

Les unités des états de rendu D3DRS_DEPTHBIAS et D3DRS_SLOPESCALEDEPTHBIAS dépendent de l’activation de la mise en mémoire tampon z ou de la mise en mémoire tampon w. L’application doit fournir des valeurs appropriées.

Le biais n’est appliqué à aucune primitive de ligne et de point. Toutefois, ce biais doit être appliqué aux triangles dessinés en mode filaire.

// RenderStates
D3DRS_SLOPESCALEDEPTHBIAS, // Defaults to zero
D3DRS_DEPTHBIAS,           // Defaults to zero
// Caps
D3DPRASTERCAPS_DEPTHBIAS           
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS 

Pipeline de pixels