Z-fighting

Z-fighting je obrazový artefakt, při kterém se dvě překrývající se plochy s totožnou nebo velmi podobnou hloubkou nesprávně střídají ve viditelném obrazu. Povrch může působit jako pruhovaný, roztrhaný nebo se při pohybu kamery mihotat.

Typickým příkladem je značka položená téměř přesně do roviny stěny. Hra má zobrazit značku před podkladem, ale hloubkový test nedokáže obě plochy dostatečně spolehlivě rozlišit. Části podkladu pak mohou prosvítat skrz značku.

Schematická ilustrace: dvě téměř překryté plochy soupeří o viditelnost

Příklad pohledu A

 

Příklad pohledu B

 

Modrá a oranžová označují dva povrchy v téměř stejné hloubce.

Ilustrační vzor ukazuje, jak se při změně pohledu mohou měnit viditelné části obou ploch. Není to záznam konkrétní hry ani přesná simulace jejího hloubkového bufferu.

Souboj o stejné místo

O pořadí neprůhledných povrchů často rozhoduje z-buffer. Jeho hodnoty mají omezenou přesnost; neukládají libovolně jemné rozdíly vzdálenosti. Pokud se dvě plochy dostanou příliš blízko, jejich vypočtené hodnoty mohou být shodné nebo se vlivem zaokrouhlení překlápět. Měnící se pohled pak může změnit i výsledný vzor chyby.

Co jej odlišuje od jiných chyb

Ne každé blikání textury je z-fighting. Jiný problém může způsobit načítání dat, osvětlení nebo přepínání úrovně detailu. Pro z-fighting je podstatný konflikt hloubky překrývajících se povrchů. Vývojář jej může řešit úpravou geometrie, přesnosti hloubky nebo způsobu kreslení překryvných prvků. Samotné zvýšení rozlišení obrazu nemusí pomoci, protože počet obrazových bodů není totéž co přesnost uložené hloubky.

Podklady: Microsoft: hloubkový a stencil buffer; Microsoft: hloubkové buffery.