Кіріспе

3D көріністерді 2D суреттерге түрлендіру процедурасы

Компьютерлік графика құбыржолы, сондай-ақ рендерлеу құбыржолы немесе графика құбыржолы деп аталады, компьютерлік графикте үш өлшемді (3D) көріністі экрандағы екі өлшемді (2D) бейнеге түрлендіруге қажетті процедуралардың жиынтығын көрсетеді. 3D модель жасалғаннан кейін, графика құбыржолы модельді компьютер дисплейінде көрінетін форматқа айналдырады. Нақты бағдарламалық қамтамасыз етуге, аппараттық конфигурацияларға және қажетті дисплей атрибуттарына байланысты, барлық жағдайларға қолданылатын графикалық құбыржол болмайды. Дегенмен, Direct3D, OpenGL және Vulkan сияқты графикалық қолданба бағдарламалау интерфейстері (API) ортақ процедураларды стандарттау және белгілі бір аппараттық үдеткіштің графикалық құбыржолын басқару үшін жасалған. Бұл API-лер негізгі аппараттық жабдықтың үстінде абстракция қабатын қамтамасыз етеді, бағдарламашыларды AMD, Intel, Nvidia және басқалар сияқты әртүрлі графикалық аппараттық үдеткіштерге арналған кодты тікелей жазу қажеттілігінен босатады. Графикалық құбыржол моделі көбінесе нақты уақыт рендерлеуінде қолданылады. Көбінесе құбыржолдың көптеген қадамдары аппараттық құралдарда іске асырылады, бұл арнайы оптимизацияларға мүмкіндік береді. "Құбыржол" термині процессорлардағы құбыржолға ұқсас мағынада қолданылады: құбыржолдың жеке қадамдары, әрбір қадамға қажетті ресурстар болғанша, параллель жұмыс істейді.

Тұжырымдама

3D құбыржол әдетте Raytracing және Raycasting-тен ерекшеленетін 3D көпбұрышты рендеринг деп аталатын компьютерлік 3D рендерингтің ең көп таралған түрін білдіреді. Raycasting-те сәуле камера орналасқан нүктеден басталады, және егер ол сәуле бір бетке тисе, сол беттегі тиіскен нүктенің түсі мен жарығы есептеледі. 3D көпбұрышты рендерингте керісінше болады – камераның көріс аймағындағы аумақ есептеледі, содан кейін камера көріп тұрған әрбір беттің әрбір бөлігінен сәулелер жасалып, камераға дейін іздестіріледі.

Құрылымы

Графикалық құбырды үш негізгі бөлікке бөлуге болады: Қолданба, Геометрия және Растрлеу.

Қолдану

Қолданба қадамын негізгі процессорда (CPU) бағдарламалық жасақтама орындайды. Қолданба кезеңінде, мысалы, пайдаланушының енгізу құрылғылары арқылы немесе анимация барысында өзара әрекеттесу арқылы, қажетті өзгерістер көрініске енгізіледі. Барлық примитивтерімен – әдетте үшбұрыштармен, сызықтармен және нүктелермен – жаңа сахна құбырдың келесі қадамына жіберіледі. Қолданба кезеңінде әдетте орындалатын тапсырмаларға соқтығысуды анықтау, анимация, морфинг және Quadtree немесе Octree сияқты кеңістіктік бөліну схемаларын пайдаланып үдету техникалары жатады. Бұлар берілген уақытта қажетті негізгі жад көлемін де азайтуға көмектеседі. Қазіргі компьютерлік ойындардың "әлемі" бір мезгілде жадқа сыймайтынша зор.

Геометрия

Геометриялық қадам (Geometry құбыр жолымен), көпбұрыштар мен олардың төбелерімен (Vertex құбыр жолымен) жасалатын операциялардың басым бөлігіне жауапты, келесі бес міндетке бөлінеді. Бұл міндеттердің нақты параллель құбыржол қадамдары ретінде қалай ұйымдастырылғаны жүзеге асырылған тәсілге байланысты.

Анықтамалар

Үстіңгі нүкте (көпше түрі: түбегейлер) – әлемдегі нүкте. Көптеген нүктелер беттерді қосу үшін қолданылады. Көбінесе нүктелік бұлттар тікелей салынады, бірақ бұл әлі де сирек кездеседі. Үшбұрыш – компьютерлік графиканың ең көп қолданылатын геометриялық примитиві. Ол үш түбегейімен және нормальдық вектормен анықталады. Нормальдық вектор үшбұрыштың бетін көрсетуге және бетке перпендикуляр бағытты білдіреді. Үшбұрышқа түс немесе текстура (үстіне "жабыстырылған" сурет) берілуі мүмкін. Үшбұрыштар тіктөртбұрыштардан артық таңдалады, себебі олардың үш нүктесі әрқашан бір жазықтықта орналасады.

Жарықтандыру

Көбінесе бір көріністе жарық көздері әртүрлі орындарда орналастырылады, бұл нысандардың жарығын шынайырақ етеді. Мұндай жағдайда, әр төбе үшін, жарық көздері мен сәйкес үшбұрыштың материалдық қасиеттеріне байланысты текстураның күшейту коэффициенті есептеледі. Кешірек растерлеу кезеңінде үшбұрыштың төбелік шамалары оның беті бойынша интерполяцияланады. Барлық беттерге жалпы жарық (қоршаған ортаның жарығы) қолданылады. Бұл – көріністің тараған және бағытқа тәуелсіз жарықтығы. Күн – шексіз алыс деп есептелетін бағытталған жарық көзі. Күннің бетке тигізетін жарығы, күннен бағытталған вектор мен беттің нормальдық векторының скалярлық көбейтіндісін есептеу арқылы анықталады. Егер шама теріс болса, бет күнге қарама-қарсы қарап тұр.

Қалқалау

Тек визуалды көлемде орналасқан примитивтерді растрлеу (сурет салу) қажет. Бұл визуалды көлем фрустумның ішкі бөлігі ретінде анықталады, ол пірамида пішіндес, жоғарғы жағы кесілген нысан. Визуалды көлемнен толығымен тыс примитивтер жойлады; Бұл фрустум іріктеуі деп аталады. Қарастырылатын примитивтердің санын азайтатын артқы бетті кесу сияқты қосымша іріктеу әдістері теориялық тұрғыдан графикалық құбырдың кез келген сатысында орындалуы мүмкін. Текшенің ішінде тек ішінара орналасқан примитивтерді текшеге қатысты қиып қою керек. Алдыңғы проекция кезеңінің артықшылығы – қиып қою әрқашан бір текшеге қатысты жүзеге асырылады. Тек визуалды көлемде орналасқан, мүмкін қиылған примитивтер ғана соңғы қадамға жіберіледі.

Растерлеу

Растерлеу кезеңі – барлық примитивтер растерленетін фрагмент шейдер құбыр жолынан бұрынғы соңғы кезең. Растерлеу кезеңінде үздіксіз примитивтерден дискретті фрагменттер жасалады. Графикалық құбырдың осы кезеңінде тор нүктелері, айқындық үшін, фрагменттер деп те аталады. Әрбір фрагмент кадр буферіндегі бір пикселге сәйкес келеді, ал ол экрандағы бір пикселді білдіреді. Бұл фрагменттер түсті болуы мүмкін (сондай-ақ жарықтандырылуы да мүмкін). Сонымен қатар, көпбұрыштар бір-бірін жапқан жағдайда, көрушіге жақын фрагментті анықтау қажет. Осы мақсатта Z-буфер көбінесе қолданылады, ол жасырын беттерді анықтауға мүмкіндік береді. Фрагменттің түсі көрінетін примитивтің жарықтандыруына, текстурасына және басқа материалдық қасиеттеріне байланысты болады және көбінесе үшбұрыштың төбелік қасиеттерін пайдаланып интерполяцияланады. Егер қол жетімді болса, фрагмент шейдері (пиксель шейдері деп те аталады) объектінің әрбір фрагменті үшін растерлеу кезеңінде орындалады. Егер фрагмент көрінетін болса, ол мөлдірлік немесе көп үлгі алу қолданылған жағдайда, бейнедегі бар түстермен араластырылуы мүмкін. Осы кезеңде бір немесе бірнеше фрагменттер пикселге айналады. Пайдаланушы примитивтердің біртіндеп растерленуін көруіне жол бермеу үшін, қос буферлеу қолданылады. Растерлеу арнайы жад аймағында жүргізіледі. Бейне толық растерленгеннен кейін, ол бейне жадының көрінетін аймағына көшіріледі.

Кері реті

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

Шейдер

Классикалық графикалық карталар әлі де графикалық құбыржолға салыстырмалы түрде жақын. GPU-ға қойылатын талаптардың артуымен шектеулер біртіндеп алынып тасталды, осы арқылы икемділік артты. Қазіргі заманғы графикалық карталар жеке өңдеу қадамдарына тікелей қол жеткізуге мүмкіндік беретін, бағдарламаланатын және шейдерлермен басқарылатын құбыржолды пайдаланады. Негізгі процессорды жеңілдету үшін қосымша өңдеу қадамдары құбыржолға және GPU-ға көшірілді. Шейдерлердің ең маңызды түрлері – vertex shaders, geometry shaders және pixel shaders. Барлық бірліктерді толыққанды пайдалану үшін Бірыңғай шейдер енгізілді. Бұл шейдерлік бірліктердің үлкен жиынтығын құрайды. Қажеттілікке қарай, бұл жиынтық әртүрлі шейдерлер топтарына бөлінеді. Сондықтан шейдер түрлерін қатаң түрде бөлудің қажеті жоқ. Сонымен қатар, графикалық бейнеленбеген кез келген есептеулерді GPU-да орындау үшін compute shader-ді пайдалануға болады. Олардың артықшылығы – өте параллель жұмыс істеуі, бірақ шектеулері де бар. Бұл әмбебап есептеулер графикалық процессорлардағы жалпы мақсаттағы есептеулер немесе қысқаша GPGPU деп аталады. Mesh shaders – бұл жаңа мүмкіндік, геометриялық құбырдың тұрақты орналасуының тудыратын қиындықтарды жеңуге бағытталған.