Кіріспе

3D модельдеудегі рендеринг мәселесі. Z-қақтығысы, сондай-ақ тігілу немесе жазықтықтардың арасындағы күрес деп аталады, бұл 3D-рендерингте кездесетін құбылыс. Ол екі немесе одан көп примитивтердің камераға шамалы айырмашылығы бар қашықтықта орналасқан кезде пайда болады. Бұл олардың z-буферінде шамалы немесе толық сәйкес мәндерге ие болуына себеп болады, ал z-буфері тереңдікті қадағалайды. Осының салдарынан, нақты бір пикселді рендеринг кезінде, осы пикселде қай примитивті көрсету керектігі белгісіз болады, өйткені z-буфері қайсысы екіншісінен алшақ екенін анықтай алмайды. Егер пикселдің біреуі анық жақын болса, екіншісі алыстау болғандықтан жойылуы мүмкін. Бұл әсіресе бір жазықтықтағы көпбұрыштар үшін тән, онда екі бет дерлік бірдей кеңістікте орналасқан, ешқайсысы алдында емес. Зардап шеккен пикселдер z-буферінің дәлдігіне байланысты, кездейсоқ түрде бір немесе екінші көпбұрыштың фрагменттерімен көрсетіледі. Бұл сахна немесе камера өзгерген кезде де өзгеруі мүмкін, сонда бір көпбұрыш z-тестісінде "жеңіп" шығады, содан кейін екіншісі және т.с.с. Нәтижесінде екі көпбұрыш экран пиксельдерін бояу үшін "күресіп", жарқылдап, шулы растерлену пайда болады. Бұл мәселе әдетте субпикселдік дәлдіктің шектеулі болуынан және қозғалатын және тұрақты нүктелік дөңгелектеу қателігінен туындайды. Z-буферінің дәлдігін арттыру арқылы Z-қақтығысына тап болу ықтималдығы азаяды. Бірақ бір жазықтықтағы көпбұрыштар үшін, түзету шаралары қолданылмаса, бұл мәселенің орын алуына болады. Жақын және алыс қиылыс жазықтықтары арасындағы қашықтық артқан сайын, әсіресе жақын жазықтық көзге жақын орналасқанда, примитивтер арасында Z-қақтығысы пайда болу ықтималдығы артады. Үлкен виртуалды орталарда қашықтықтағы және алдыңғы пландағы көрінуді шешу қажеттілігі арасында қақтығыс туындайды. Мысалы, ғарышқа саяхат симуляторында, егер алыс галактика масштаб бойынша көрсетілсе, көрермен алдыңғы пландағы кабина геометриясының көрінуін шешуге жеткілікті дәлдікке ие болмайды (әлі сандық бейнелеу z-буферленген рендерингке дейін проблемалар тудыруы мүмкін). Бұл мәселелерді азайту үшін z-буферінің дәлдігі жақын қиылыс жазықтығына қарай бағытталған, бірақ бұл барлық көріну схемаларында емес және барлық Z-қақтығысы мәселелерін жою үшін жеткіліксіз.

Жеңілдіктер

Z-қақтығысын жоғары ажыратымдылықтағы тереңдік буферін қолдану арқылы, кейбір жағдайларда z буферлеу арқылы немесе көпбұрыштарды бір-бірінен алшақтату арқылы азайтуға болады. Осылайша толығымен жоюға болмайтын Z-қақтығысы көбінесе штамп буферін пайдалану арқылы немесе экрандағы бейне пішініне әсер етпейтін, бірақ пикселдерді интерполяциялау және салыстыру кезінде жабысуды болдырмау үшін z буферінің мәніне әсер ететін, трансформациядан кейінгі экран кеңістігіндегі z буферінің смещениесімен шешіледі. Егер Z-қақтығысы бір геометрия үшін аппараттық құралдардағы түрлендіру жолдарының өзгешелігінен туындаса (мысалы, көп қадамды рендеринг схемасында), аппараттық құралдан инварианттық төбелік түрлендіруді қолдануды сұрау арқылы оны шешуге болады. Тереңдік буферіндегі жеткіліксіз дәлдіктен туындаған Z-қақтығысын әлемдегі көрінетін қашықтықты қысқарту арқылы шешуге болады. Бұл жақын және алыс жазықтықтар арасындағы қашықтықты азайтып, дәлдік мәселесін шешеді. Дегенмен, алыс қашықтықтан көріну маңызды немесе көрінудің нашарлауына жол берілмейтін кейбір виртуалды орталарда, мысалы, ғарыш симуляторы немесе ұшқыш симуляторы, мұндай мүмкіншілік жоқ. Мұндай жағдайларда баламалы әдістер бар. Осы әдістердің бірі – пайдаланушыдан алыс орналасқан нысандардың қашықтығын олардың нақты орнын өзгертпей "модельдеу". Мысалы, егер максималды қауіпсіз көру қашықтығы (одан кейін Z-қақтығысы пайда болатын) 10 000 бірлік болса және көрсетілуі тиіс нысан 15 000 бірлік қашықтықта болса, онда осы нысанды 10 000 бірлікке көрсетуге болады, бірақ оны жылжытылған қашықтыққа пропорционалды түрде кішірейтуге болады. Осылайша, жартысына дейін кішірейтілген нысан, екі есе алысқа орналасқандай көрінеді. Егер мұндай әдіс тек ең жақын немесе максималды көру қашықтығында орналасқан нысандар үшін қолданылса және пайдаланушыға жақын нысандар әдеттегідей көрсетілсе, бұл әдіс байқалмайды. Z-қақтығысын азайту немесе толығымен жою үшін қолданылатын тағы бір әдіс – Z-ді кері аударып, логарифмдік Z буферіне ауысу. Бұл әдіс Grand Theft Auto V ойынында қолданылады. Олардың кодталу әдісіне байланысты, нөлге жақын мәндерде қалқыма нүктелі сандардың дәлдігі жоғарылайды. Осы себепті Z-ді кері аудару, өте алыс нысандардың тереңдігін сақтағанда дәлдікті арттырады, демек Z-қақтығысын азайтады.