Кіріспе
3D модельдеудегі рендеринг мәселесі. Z-қақтығысы, сондай-ақ тігілу немесе жазықтықтардың арасындағы күрес деп аталады, бұл 3D-рендерингте кездесетін құбылыс. Ол екі немесе одан көп примитивтердің камераға шамалы айырмашылығы бар қашықтықта орналасқан кезде пайда болады. Бұл олардың z-буферінде шамалы немесе толық сәйкес мәндерге ие болуына себеп болады, ал z-буфері тереңдікті қадағалайды. Осының салдарынан, нақты бір пикселді рендеринг кезінде, осы пикселде қай примитивті көрсету керектігі белгісіз болады, өйткені z-буфері қайсысы екіншісінен алшақ екенін анықтай алмайды. Егер пикселдің біреуі анық жақын болса, екіншісі алыстау болғандықтан жойылуы мүмкін. Бұл әсіресе бір жазықтықтағы көпбұрыштар үшін тән, онда екі бет дерлік бірдей кеңістікте орналасқан, ешқайсысы алдында емес. Зардап шеккен пикселдер z-буферінің дәлдігіне байланысты, кездейсоқ түрде бір немесе екінші көпбұрыштың фрагменттерімен көрсетіледі. Бұл сахна немесе камера өзгерген кезде де өзгеруі мүмкін, сонда бір көпбұрыш z-тестісінде "жеңіп" шығады, содан кейін екіншісі және т.с.с. Нәтижесінде екі көпбұрыш экран пиксельдерін бояу үшін "күресіп", жарқылдап, шулы растерлену пайда болады. Бұл мәселе әдетте субпикселдік дәлдіктің шектеулі болуынан және қозғалатын және тұрақты нүктелік дөңгелектеу қателігінен туындайды. Z-буферінің дәлдігін арттыру арқылы Z-қақтығысына тап болу ықтималдығы азаяды. Бірақ бір жазықтықтағы көпбұрыштар үшін, түзету шаралары қолданылмаса, бұл мәселенің орын алуына болады. Жақын және алыс қиылыс жазықтықтары арасындағы қашықтық артқан сайын, әсіресе жақын жазықтық көзге жақын орналасқанда, примитивтер арасында Z-қақтығысы пайда болу ықтималдығы артады. Үлкен виртуалды орталарда қашықтықтағы және алдыңғы пландағы көрінуді шешу қажеттілігі арасында қақтығыс туындайды. Мысалы, ғарышқа саяхат симуляторында, егер алыс галактика масштаб бойынша көрсетілсе, көрермен алдыңғы пландағы кабина геометриясының көрінуін шешуге жеткілікті дәлдікке ие болмайды (әлі сандық бейнелеу z-буферленген рендерингке дейін проблемалар тудыруы мүмкін). Бұл мәселелерді азайту үшін z-буферінің дәлдігі жақын қиылыс жазықтығына қарай бағытталған, бірақ бұл барлық көріну схемаларында емес және барлық Z-қақтығысы мәселелерін жою үшін жеткіліксіз.
Z fighting, also called stitching or planefighting, is a phenomenon in 3D rendering that occurs when two or more primitives have very similar distances to the camera. This would cause them to have near similar or identical values in the z buffer, which keeps track of depth. This then means that when a specific pixel is being rendered, it is ambiguous which one of the two primitives are drawn in that pixel because the z buffer cannot distinguish precisely which one is farther from the other. If one pixel was unambiguously closer, the less close one could be discarded. It is particularly prevalent with coplanar polygons, where two faces occupy essentially the same space, with neither in front. Affected pixels are rendered with fragments from one polygon or the other arbitrarily, in a manner determined by the precision of the z buffer. It can also vary as the scene or camera is changed, causing one polygon to "win" the z test, then another, and so on. The overall effect is flickering, noisy rasterization of two polygons which "fight" to color the screen pixels. This problem is usually caused by limited sub pixel precision and floating point and fixed point round off errors. The more z buffer precision one uses, the less likely it is that z fighting will be encountered. But for coplanar polygons, the problem is inevitable unless corrective action is taken. As the distance between near and far clip planes increases, and in particular the near plane is selected near the eye, the greater the likelihood exists that z fighting between primitives will occur. With large virtual environments inevitably there is an inherent conflict between the need to resolve visibility in the distance and in the foreground, so for example in a space flight simulator, if a distant galaxy is drawn to scale, the viewer will not have the precision to resolve visibility on any cockpit geometry in the foreground (although even a numerical representation would present problems prior to z buffered rendering). To mitigate these problems, z buffer precision is weighted towards the near clip plane, but this is not the case with all visibility schemes and it is insufficient to eliminate all z fighting issues.
Жеңілдіктер
Z-қақтығысын жоғары ажыратымдылықтағы тереңдік буферін қолдану арқылы, кейбір жағдайларда z буферлеу арқылы немесе көпбұрыштарды бір-бірінен алшақтату арқылы азайтуға болады. Осылайша толығымен жоюға болмайтын Z-қақтығысы көбінесе штамп буферін пайдалану арқылы немесе экрандағы бейне пішініне әсер етпейтін, бірақ пикселдерді интерполяциялау және салыстыру кезінде жабысуды болдырмау үшін z буферінің мәніне әсер ететін, трансформациядан кейінгі экран кеңістігіндегі z буферінің смещениесімен шешіледі. Егер Z-қақтығысы бір геометрия үшін аппараттық құралдардағы түрлендіру жолдарының өзгешелігінен туындаса (мысалы, көп қадамды рендеринг схемасында), аппараттық құралдан инварианттық төбелік түрлендіруді қолдануды сұрау арқылы оны шешуге болады. Тереңдік буферіндегі жеткіліксіз дәлдіктен туындаған Z-қақтығысын әлемдегі көрінетін қашықтықты қысқарту арқылы шешуге болады. Бұл жақын және алыс жазықтықтар арасындағы қашықтықты азайтып, дәлдік мәселесін шешеді. Дегенмен, алыс қашықтықтан көріну маңызды немесе көрінудің нашарлауына жол берілмейтін кейбір виртуалды орталарда, мысалы, ғарыш симуляторы немесе ұшқыш симуляторы, мұндай мүмкіншілік жоқ. Мұндай жағдайларда баламалы әдістер бар. Осы әдістердің бірі – пайдаланушыдан алыс орналасқан нысандардың қашықтығын олардың нақты орнын өзгертпей "модельдеу". Мысалы, егер максималды қауіпсіз көру қашықтығы (одан кейін Z-қақтығысы пайда болатын) 10 000 бірлік болса және көрсетілуі тиіс нысан 15 000 бірлік қашықтықта болса, онда осы нысанды 10 000 бірлікке көрсетуге болады, бірақ оны жылжытылған қашықтыққа пропорционалды түрде кішірейтуге болады. Осылайша, жартысына дейін кішірейтілген нысан, екі есе алысқа орналасқандай көрінеді. Егер мұндай әдіс тек ең жақын немесе максималды көру қашықтығында орналасқан нысандар үшін қолданылса және пайдаланушыға жақын нысандар әдеттегідей көрсетілсе, бұл әдіс байқалмайды. Z-қақтығысын азайту немесе толығымен жою үшін қолданылатын тағы бір әдіс – Z-ді кері аударып, логарифмдік Z буферіне ауысу. Бұл әдіс Grand Theft Auto V ойынында қолданылады. Олардың кодталу әдісіне байланысты, нөлге жақын мәндерде қалқыма нүктелі сандардың дәлдігі жоғарылайды. Осы себепті Z-ді кері аудару, өте алыс нысандардың тереңдігін сақтағанда дәлдікті арттырады, демек Z-қақтығысын азайтады.