Кіріспе

Компьютерлік графикадағы деректер буферінің түрі. Тереңдік буфері, сондай-ақ z буфері деп те аталады, компьютерлік графикада 3D кеңістіктегі нысандардың тереңдік ақпаратын белгілі бір көзқарастан көрсету үшін қолданылатын деректер буферінің түрі. Тереңдік сахнаның биіктік картасы ретінде сақталады, мұндағы мәндер камераға дейінгі қашықтықты көрсетеді, 0 – ең жақын нүкте. Кодтау схемасы кері болуы мүмкін, яғни ең үлкен сан камераға ең жақын мәнді білдіреді. Тереңдік буферлері дұрыс көпбұрыштардың басқаларын жабуын қамтамасыз етуге көмектеседі, соның арқасында көрініс дұрыс көрсетіледі. Z буферлеуді алғаш рет 1974 жылы Вольфганг Штрассер өзінің PhD диссертациясында, жасырылған нысандарды көрсетуге арналған жылдам алгоритмдерді сипаттағанда айтқан. Бір-бірін жабатын көпбұрыштарды анықтаудың ұқсас тәсілі – суретшінің алгоритмі, ол тиімділігі мен дұрыс емес нәтижелердің есебінен, мөлдір емес сахна элементтерін өңдеуге қабілетті. 3D рендерингтік құбыржолда объект экранға проекцияланғанда, проекцияланған экрандық кескініндегі фрагменттің тереңдігі (z мәні) буферде сақталған мәнмен салыстырылады (тереңдік тесті) және жаңа мән жақын болса, оны алмастырады. Бұл растерлеушімен бірге жұмыс істейді, ол түсті мәндерді есептейді. Растерлеуші шығарған фрагмент басқа фрагментпен жабылса, сақталмайды. Жарым-жартылай немесе толық жабылған мөлдірсіз нысандар немесе беттер бар суретті қарағанда, көрерменнен ең алыс және басқа нысандардың артында орналасқан нысандарды толық көру мүмкін емес (яғни кейбір беттер басқаларының артында жасырылады). Егер жабысып тұрған беттерді басқару механизмі болмаса, беттер бір-бірінің үстіне шығып, басқа нысандардың артында болуын ескермейді. Осы беттерді анықтау және жою жасырын беттер мәселесі деп аталады. Қайталануды тексеру үшін компьютер бірінші нысанға сәйкес пикселдің z мәнін есептеп, оны z буферіндегі сол пикселдің z мәнімен салыстырады. Егер есептелген z мәні z буферіндегі z мәнінен кішірек болса (яғни жаңа пиксел жақын болса), z буферіндегі ағымдағы z мәні есептелген мәнмен ауыстырылады. Бұл көріністегі барлық нысандар мен беттер үшін қайталанады (көбінесе параллель түрде). Нәтижесінде, z буфері әдеттегі тереңдікті қабылдауды дұрыс көрсетуге мүмкіндік береді: жақын нысан алыстағыны жасырады. Бұл z-іріктеу деп аталады. Z буферінің ішкі құрылымы сурет сияқты, атап айтқанда 2D массив, бірақ ол әр экран пикселі үшін бір ғана мәнді сақтайды, ал түсті суреттер түсті құру үшін 3 мәнді қолданады. Сондықтан z буфері қара және ақ болып көрінеді, себебі ол түс туралы ақпаратты сақтамайды. Буфердің өлшемдері экран буферімен бірдей болып келеді. Бастапқы көрінуді тексеру (мысалы, артқы бетін кесу) және екінші деңгейдегі көрінуді тексеру (мысалы, жапсарлас тексерулер және экранды кесу) көбінесе рендерингке қажет емес белгілі бір көпбұрыштарды өткізіп жіберу үшін нысандардың көпбұрыштарында жүргізіледі. Z буфері салыстырмалы түрде қымбат, сондықтан бастапқы және екінші деңгейдегі көрінуді тексеру z буферін кейбір жұмыстан босатады. Z буферінің түйіршіктілігі көрініс сапасына үлкен әсер етеді: дәстүрлі 16 биттік z буфері екі нысан бір-біріне өте жақын болғанда артефактілерге (z ұрысы немесе тігіс деп аталады) әкелуі мүмкін. Қазіргі заманғы 24 биттік немесе 32 биттік z буфері жақсырақ жұмыс істейді, бірақ бұл мәселені қосымша алгоритмдерсіз жою мүмкін емес. 8 биттік z буфері өте аз дәлдікке ие болғандықтан, көбінесе қолданылмайды.

Қолданылуы

Z буфері – дерлік барлық қазіргі заманғы компьютерлерде, ноутбуктерде және ұялы телефондарда 3D компьютерлік графиканы іске асыру үшін қолданылатын технология. Қазіргі таңда оның негізгі қолданысы – 3D көріністерді жылдам және дәл өңдеуді қажет ететін бейне ойындар. Z буфері тұтынушы графикалық карталарында аппараттық деңгейде іске асырылады. Сонымен қатар, Z буфері фильмдерге компьютерлік арнайы эффекттер жасау үшін де қолданылады (аппараттық емес, бағдарламалық жасақтама ретінде іске асырылады). Бұдан әрі, жарық нүктесінен бетті көрсетуден алынған Z буферінің деректері көлеңке карталау техникасы арқылы көлеңкелер жасауға мүмкіндік береді.

Даму

Тіпті жеткілікті мөлшерде түйіршіктілік болса да, z буферінің қашықтық мәндерінің дәлдігі қашықтық бойынша біркелкі таралмаған жағдайда сапа мәселелері туындауы мүмкін. Жақын мәндер алыстағы мәндерге қарағанда әлдеқайда дәл (соның салдарынан жақын нысандарды жақсырақ көрсетуге мүмкіндік береді). Әдетте, мұндай жағдай қалыпты, бірақ кейде нысандар алыстағанда артефакттар пайда болуына себеп болуы мүмкін. z буферлеудің дәлдігін біркелкі таратуды қамтамасыз ететін нұсқасы w буферлеу деп аталады (төменде қараңыз). Жаңа көрініс басталысында z буфері 1.0 мәніне дейін тазартылуы керек, өйткені бұл мән тереңдіктің жоғарғы шегін (0-ден 1-ге дейінгі шкалада) білдіреді, яғни көріс конусы арқылы ешқандай нысан жоқ. z буфері тұжырымдамасының авторы ретінде көбінесе Эдвин Катмулл аталса да, Вольфганг Страссер осы идеяны Катмуллдың өнертабысынан бірнеше ай бұрын, 1974 жылғы Ph.D. диссертациясында сипаттаған. Жаңа PC графикалық карталарында (1999–2005 жылдар) z буферін басқару қолданылатын жад енінің маңызды бөлігін пайдаланады. z буферлеудің өнімділік шығындарын азайту үшін әртүрлі әдістер қолданылды, мысалы, жоғалтусыз сығылу (сығымдау/декомпрессиялау үшін компьютерлік ресурстар, енінен арзан) және өте жылдам аппараттық z тазалау, бұл «бір кадр оң, бір кадр теріс» тәсілін ескірген етіп, кадрлар арасындағы тазалауды өткізіп жіберуге мүмкіндік береді (тереңдікті шеберлікпен тексеру үшін таңбаланған сандарды пайдалану). Кейбір ойындар, әсіресе N64 өмірлік циклының соңындағы ойындар, жад ені мен жад талаптарын азайту үшін Z буферлеуді азайтуға (мысалы, фонды Z буферсіз көрсету және тек алдыңғы план нысандары үшін Z буферді пайдалану) немесе оны толығымен болдырмауға шешім қабылдады. Super Smash Bros. және F Zero X – Z буферлеуді азайтып, кадр жылдамдығын арттырған екі N64 ойыны. Бірнеше Factor 5 ойындары да Z буферлеуді азайтты немесе алып тастады. N64-те Z буферлеуді пайдаланбағанға қарағанда 4 есе көп ені пайдаланылуы мүмкін. Mechwarrior 2 PC-де бастапқы 4 МБ 3DFX Voodoo-да Z буферлеуді пайдаланбағандықтан 800x600 дейінгі ажыратымдылықты қолдады.

Z-қару

Рендерингте z-іріктеу – тереңдікке негізделген пикселдерді ерте жою әдісі, жасырын беттерді көрсетудің қиынға түсуі өнімділіктің төмендеуіне әкелетін жағдайларда тиімділікке қол жеткізуге мүмкіндік береді. Бұл z-буферлеудің тікелей салдары болып табылады, онда әр пиксел кандидатының тереңдігі, оны жасырып тұрған геометрияның тереңдігімен салыстырылады. z-буферді пайдаланғанда, пикселдің тереңдігі белгілі болған кезде оны іріктеуге (жоюға) болады, бұл көрінбейтін пикселді жарықтандыру және текстуралау процесін өткізіп жіберуге мүмкіндік береді. Сондай-ақ, іріктелген пикселдер үшін ресурстарды көп қажет ететін пикселдік шейдерлер орындалмайды. Осылайша, z-іріктеу fillrate, жарық, текстура немесе пикселдік шейдерлер негізгі шектеулер болып табылатын жағдайларда жақсы оңтайландыру опциясы болып табылады. z-буферлеу геометрияны ретсіз қалдыруға мүмкіндік берсе, тереңдік бойынша көпбұрыштарды сұрыптау (яғни кері суретші алгоритмін қолдану) әрбір экран пикселінің азайтылған санымен көрсетілуін қамтамасыз етеді. Бұл fillrate шектеулі және үлкен мөлшерде қайта жабылатын көріністерде тиімділікті арттыра алады, бірақ z-буферлеумен біріктірілмесе, мынадай мәселелерге ұшырайды: көпбұрыштар цикл бойында бір-бірін жабуы мүмкін (мысалы: үшбұрыш А, B-ні, B, C-ні, C, A-ны жабады), сондай-ақ үшбұрышта "ең жақын" нүкте болмайды (мысалы: үшбұрыштарды ортасы, ең жақын немесе ең алыс нүктесі бойынша сұрыптаудың маңызы жоқ, әрқашан А және B үшбұрыстарын табуға болады, мұнда А "жақынырақ", бірақ шындығында B бірінші болып салынуы керек). Осы себепті кері суретші алгоритмін Z-іріктеудің баламасы ретінде (қайта құруды қажет етпей) пайдалануға болмайды, тек Z-іріктеуді оңтайландыру үшін ғана қолдануға болады. Мысалы, оңтайландыру үшін көпбұрыштарды x/y координаталары және z тереңдігі бойынша реттеу арқылы шекараларды анықтауға болады, бұл екі көпбұрыштың жабылу әрекеттесуі мүмкін екенін анықтауға көмектеседі.

W-буфері

w буферін іске асыру үшін камера кеңістігіндегі немесе -тің бұрынғы мәндері буферде, әдетте, қалқыма нүкте форматында сақталады. Дегенмен, бұл мәндерді экран кеңістігінде төбелерден сызықтық интерполяциялауға болмайды – оларды көбінесе керілендіру, интерполяциялау және содан кейін қайта керілендіру қажет. Нәтижесіндегі , -тің керісінше, аралығында тең қадаммен орналасады. w буферінің керілендіруден толығымен қашқан реализациялары да бар. Z буфері немесе w буфері жақсырақ кескінді береді, бұл қолданысқа байланысты.