Кіріспе

3D компьютерлік графикада кескіндерді көрсету әдісі

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

Алгоритм

Көбінесе қолданылатын әдіс проекцияланған көпбұрыштардың жиектерімен басталады, олар бір сканерлеу сызығына орналастырылады; растерлеуші белсенді жиек кестесін (AET) сақтайды. Кестедегі жазбалар сұрыптау сілтемелерін, X координаттарын, градиенттерді және олар шектеген көпбұрыштарға сілтемелерді қамтиды. Келесі сканерлеу сызығын растрлеу үшін қажет емес жиектер алынып тасталады; ағымдағы сканерлеу сызықтарының Y бөлігінен жаңа жиектер қосылады, X координатасы бойынша сұрыпталады. Белсенді жиек кестесіндегі жазбалардың X және басқа параметрлік мәліметтері жаңарып отырады. Белсенді жиек кестесі жазбалары X бойынша сұрыпталған тізімде сақталады, екі жиек қиылысқанда өзгеріс енгізіледі. Жиектерді жаңартқаннан кейін, белсенді жиек кестесі X ретімен қарастырылады, тек көрінетін кескіндер шығарылады, Z бойынша сұрыпталған белсенді кескіндер кестесі сақталады, жиектер қиылысқанда беттер қосылады және жойылады.

Нұсқалар

Бұл және Z буфері арасындағы гибрид белсенді жиек кестесін сұрыптау қажеттілігін жояды, және оның орнына Z буферіне бір скан сызығынан бір скан сызығына растрлеуді жүзеге асырады, ал бұл кезеңде белсенді көпбұрыш сегменттерін сақтайды. Тағы бір нұсқада, ID буфері аралық қадам ретінде растрлендіріледі, бұл нәтижеде көрінетін пиксельдердің көлеңкеленуін кейінге шегеруге мүмкіндік береді.

Тарих

Скан сызықты көрсету техникасының алғашқы жариялануы, шамасы, 1967 жылы Уайли, Ромни, Эванс және Эрдаль есімдерімен байланысты. Скан-линиялық рендеринг әдісінің басқа да ерте дамулары 1969 жылы Боукнайт, ал 1972 жылы Ньюэлл, Ньюэлл және Санча тарапынан жасалды. Осы әдістер бойынша алғашқы жұмыстардың көп бөлігі Юта университетіндегі Иван Сазерлендтің графикалық тобында және Солт-Лейк-Ситидегі Эванс және Сазерленд компаниясында жүргізілді.

Реалдық уақыт реендерингінде қолдану

Evans & Sutherland ESIG сурет генераторларының (IG) алғашқы топтары осы техниканы аппараттық түрде "ұшу кезінде" қолданып, фреймбуферсіз бір рестрлік сызықтан сурет жасады, сол кездегі қымбат жадты үнемдеді. Кейінгі нұсқалары гибридтік тәсілді пайдаланды. Nintendo DS растрленген суреттерді VRAM-ға сақтау мүмкіндігімен 3D көріністерді осылай көрсету үшін соңғы құрылғы болып табылады. 1980-жылдардағы ойын машиналарын құраған спрайт аппараттарын сканерлеу сызығының қарапайым 2D түрі деп санауға болады. Бұл техника алғашқы Quake ойын қозғалтқышында ортаны бағдарламалық түрде көрсету үшін қолданылды (бірақ жылжымалы нысандар үстінен Z-буферімен жабылды). Статикалық көріністер BSP-ден алынған басымдық бойынша сұрыпталды. Бұл, аппараттық көмексіз перспективалық дұрыс текстуралық бейнелеу сияқты қымбат пикселдік операциялармен күрделі тереңдікке ие көріністерді өңдеуде Z-буфері/суретшінің алгоритмдерінен артық екенін көрсетті. Осы қолданыс қазіргі дерлік компьютерлерде кең таралған Z-буферлі GPU-лардың пайда болуына себеп болды. Sony PlayStation 3-тің әзірлеу кезінде екінші Cell процессорында бағдарламалық сканерлеу желісін сынап көрді, бірақ соңында стандартты CPU/GPU конфигурациясына тоқтады.

Ұқсас әдістер

Осыған ұқсас принцип плиткалы рендерингте (ең әйгілі PowerVR 3D чипі) қолданылады; яғни, примитивтер экран кеңістігі бойынша сұрыпталады, содан кейін чип жадында бір плиткадан бастап жылдам рендерингтеледі. Dreamcast бір уақытта бір қатар плиткаларды растрлеу мүмкіндігін ұсынды, бұл тікелей растрлік шығару үшін толық фреймбуфер қажеттілігін азайтып, аппараттық сканерлеу жолының принципіне жақын болды. Кейбір бағдарламалық растерлеу құралдары 'спан буферлеуін' (немесе 'жабу буферлеуін') пайдаланады, онда сұрыпталған, қиылып алынған кескіндердің тізімі сканерлік сегменттерде сақталады. Примитивтер осы дерек құрылымына біртіндеп қосылады, содан кейін соңғы кезеңде тек көрінетін пиксельдер ғана растрленеді.

Z-буфер алгоритмімен салыстыру

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