Кіріспе

Компьютерлік графикалық немесе 3D модельдегі беттік ерекшеліктерді анықтау әдісі. Текстуралық бейнелеу – компьютерлік графикалық объектіге текстураны бейнелеу әдісі. Мұндағы текстура жоғары жиілікті детальдар, беттік текстура немесе түс болуы мүмкін.

Тарих

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

Текстуралық карталар

Текстуралық карта – пішіннің немесе көпбұрыштың бетіне қолданылатын (карталанған) сурет. Бұл бит картасы немесе процедуралық текстура болуы мүмкін. Олар әдеттегі сурет файл форматтарында сақталуы мүмкін, 3D модель форматтарымен немесе материал анықтамалары арқылы сілтемеленуі мүмкін және ресурс жиынтықтарына біріктірілуі мүмкін. Олардың 1-ден 3-ке дейін өлшемдері болуы мүмкін, бірақ көрінетін беттер үшін 2 өлшемдісі жиі кездеседі. Қазіргі заманғы жабдықпен пайдалану үшін текстуралық карта деректері кэш сәйкестігін жақсарту үшін өзгертілген немесе плиткаланған тәртіпте сақталуы мүмкін. Рендеринг API әдетте текстуралық карта ресурстарын (құрылғы жадында орналасқан болуы мүмкін) буферлер немесе беттер ретінде басқарады және пост-өңдеу немесе қоршаған ортаны карталау сияқты қосымша эффекттер үшін «текстураға рендерлеуге» мүмкіндік береді. Олар әдетте RGB түс деректерін (тікелей түс, сығылған форматтар немесе индекстелген түс ретінде сақталады) және кейде альфа-араластыру үшін қосымша арнаны (RGBA) қамтиды, әсіресе билбордтар мен наклейкаларға арналған текстуралар үшін. Альфа арнасы (жабдықпен талданатын форматта сақтау ыңғайлы болуы мүмкін) басқа мақсаттар үшін де пайдаланылуы мүмкін, мысалы, жылтырлық үшін. Көптеген текстуралық карталар (немесе арналар) жылтырлықты, нормальдарды, орын ауыстыруды немесе беткі шашырауды басқару үшін біріктірілуі мүмкін, мысалы, тері рендерингі үшін. Көптеген текстуралық суреттер текстуралық атластарда немесе массивтік текстураларда біріктірілуі мүмкін, бұл қазіргі заманғы жабдық үшін күй өзгерістерін азайтады. (Оларды плиткалық карталар графигінің қазіргі заманғы эволюциясы деп санауға болады). Қазіргі заманғы жабдық көбінесе қоршаған ортаны карталау үшін бірнеше жағы бар текше карта текстураларын қолдайды.

Жасау

Текстуралық карталарды сканерлеу/цифрлік фотосуретке түсіру, GIMP, Photoshop сияқты кескін өңдеу бағдарламаларында жасауға немесе Mudbox, zbrush сияқты 3D бояу құралдарында 3D беттерге тікелей салуға болады.

Текстураны қолдану

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

Текстуралық кеңістік

Текстуралық карта модельдің бетін (немесе растерлеу кезінде экран кеңістігін) текстуралық кеңістікке бейнелейді; осы кеңістікте текстуралық карта өзгеріссіз түрінде көрінеді. UV картасын жасау құралдары әдетте текстуралық координаттарды қолмен өңдеу үшін текстуралық кеңістіктегі көрініспен қамтамасыз етеді. Жер астындағы шашырау сияқты кейбір көрсету әдістері текстуралық кеңістіктегі операциялар арқылы шамамен орындалуы мүмкін.

Көптекстуралы

Көп текстуралау – бір полигонға бір уақытта бірнеше текстура қолдану. Мысалы, жарық картасы текстурасы бетті әр рендеринг кезінде жарықтандыруды қайта есептеудің орнына, бетті жарықтандыру үшін пайдаланылуы мүмкін. Микротекстуралар немесе егжей-тегжейлі текстуралар жоғары жиілікті детальдарды қосу үшін қолданылады, ал кір текстуралары тозу мен әртүрлілік қосуы мүмкін; бұл қайталанатын текстуралардың көрінетін периодтығын едәуір төмендетуге көмектеседі. Қазіргі заманғы графикалық жүйелер 10-нан астам қабаттарды қолдануы мүмкін, олар шейдерлер арқылы біріктіріліп, жақсырақ реализмге қол жеткізеді. Тағы бір көп текстуралау техникасы – bump mapping, ол текстураға жарық есептеулері үшін беттің бағытын тікелей басқаруға мүмкіндік береді; бұл ағаш қабығы немесе кедір-бұдыр бетон сияқты күрделі беттердің жарық детальдарын қоса, әдеттегі егжей-тегжейлі түспен қатар өте жақсы көрінісін береді. Bump mapping соңғы уақыттардағы бейне ойындарда кең таралды, себебі графикалық аппараттар оны нақты уақытта қолдануға жеткілікті қуатты болды.

Текстуралық сүзгілеу

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

Текстураның ағылуы

Текстуралық ағындылық – текстуралар үшін дерек ағындарын пайдалану тәсілі. Бұл жағдайда әр текстура екі немесе одан көп түрлі ажыратымдылықта болады. Көрерменнен нысанға дейінгі қашықтық пен текстураларға қолданылатын жад көлеміне байланысты, қандай текстура жадқа жүктелгені және қолданылғаны анықталады. Текстуралық ағындылық рендерлеу қозғалтқышына көрермен камерасынан алыс тұрған нысандар үшін төмен ажыратымдылықтағы текстураларды пайдалануға және көрермен нысандарға жақындағанда дерек көзінен оларды жоғары сапалы текстуралармен алмастыруға мүмкіндік береді.

Пісіру

Оптимизация ретінде күрделі, жоғары ажыратымды модельден немесе қымбат процестен (мысалы, жаһандық жарықтандыру) беттік текстураға (мүмкін, төмен ажыратымды модельде) егжей-тегжейлі бөлшектерді шығаруға болады. Пісіру, сондай-ақ рендерлеу картасы деп те аталады. Бұл техника көбінесе жарық карталары үшін қолданылады, бірақ нормальдық карталар мен орын ауыстыру карталарын жасау үшін де қолданылуы мүмкін. Кейбір компьютерлік ойындар (мысалы, Messiah) осы әдісті пайдаланған. Quake ойын қозғалтқышы жарық карталары мен түс карталарын ("беттік кэштеу") біріктіру үшін динамикалық пісіруді қолданды. Пісіруді деңгейлік егжей-тегжейлі жасау үшін де пайдалануға болады, онда көптеген әртүрлі элементтер мен материалдардан тұратын күрделі көрініс, бір ғана текстурасы бар бір элементпен шамаланады, содан кейін рендеринг құнын төмендету және салындыру шақыруларын азайту үшін алгоритмдік түрде қысқартылады. Сондай-ақ, 3D мүсіндеу бағдарламалары мен нүктелік бұлтты сканерлеуден алынған жоғары егжей-тегжейлі модельдерді нақты уақыт рендерингіне қолайлы торлармен жуықтату үшін де қолданылады.

Растерлеу алгоритмдері

Бағдарламалық және аппараттық жүзеге асыруларда әртүрлі техникалар пайда болды. Әрқайсысының дәлдігі, мүмкіндіктері және өнімділігі бойынша әртүрлі ерекшеліктері бар.

Аффиналық текстураның картасы

Аффиналық текстуралық бейнелеу текстуралық координаталарды сызықтық түрде интерполяциялайды, сондықтан бұл текстуралық бейнелеудің ең жылдам түрі. Кейбір бағдарламалық жасақтама және аппараттық құралдар (мысалы, бастапқы PlayStation) рендеринг кезінде 3D кеңістіктегі төбелерді экранға проекциялайды және олардың арасында экран кеңістігінде текстуралық координаталарды сызықтық түрде интерполяциялайды. Бұл белгілі бір УФ-координаталарын арттыру арқылы немесе Брезенхамның түзу сызық алгоритміне ұқсас қателерді жинақтау алгоритмі арқылы жасалуы мүмкін. Перпендикулярлы көпбұрыштардан айырмашылығы, бұл перспективалық түрлендірулермен байқалатын бұрмалануға әкеледі (суретті қараңыз: шахмат доскасының текстурасы иілгендей көрінеді), әсіресе камераға жақын примитивтер үшін. Мұндай бұрмалануды көпбұрыштарды кішірек бөліктерге бөлу арқылы азайтуға болады. Тіктөртбұрышты нысандар үшін төртбұрышты примитивтерді пайдалану, сол тіктөртбұрышты үшбұрыштарға бөлгенге қарағанда дұрыс емес көрінуі мүмкін, бірақ 4 нүктені интерполяциялау растерлеуге күрделілік қосады, сондықтан көптеген алғашқы жүзеге асырулар тек үшбұрыштарды қолданды. Кейбір аппараттық құралдар, мысалы Nvidia NV1 қолданған алдыңғы текстуралық бейнелеу, тиімді төртбұрышты примитивтерді ұсынуға қабілетті болды. Перспективаны түзетумен (төменде қараңыз) үшбұрыштар эквивалент болады және бұл артықшылық жоғалады. Көрерменге тік бұрышта орналасқан тіктөртбұрышты нысандар үшін, мысалы едендер мен қабырғалар, перспективаны экранның екі жағынан емес, бір бағытта ғана түзету қажет. Дұрыс перспективалық бейнелеу еденнің сол және оң жиектерінде есептеледі, содан кейін осы көлденең аралықтағы аффиналық сызықтық интерполяция дұрыс көрінеді, өйткені сол сызық бойындағы әрбір пиксель көрерменнен бірдей қашықтықта орналасқан.

Камераның айналу шектелуі

Doom қозғалтқышы әлемді тік қабырғалармен және көлденең едендер/төбелермен шектеді, ал камера тек тік ось бойынша бұрылуға мүмкіндік берді. Бұл қабырғалардың тік сызық бойындағы тереңдік координатасы тұрақты болып табылады, ал едендер/төбелердің көлденең сызық бойындағы тереңдігі тұрақты болады дегенді білдірді. Тереңдік үшін бір перспективалық түзету есебінен кейін, сызықтың қалған бөлігін жылдам аффиндік бейнелеуді қолдануға болады. Кейінгі рендерлер осы кезеңде камераның шағын көлбеу бұрышын қисыту арқылы имитациялады, бұл сол рендеринг техникасын қолдана отырып, көбірек еркіндік сезімін тудырды. Кейбір қозғалтқыштар текстураланған биіктік карталарын (мысалы, Nova Logic-тің Voxel Space және Outcast ойынының қозғалтқышы) Бресенхам сияқты инкременттік алгоритмдер арқылы көрсетуге қабілетті болды, бұл дәстүрлі геометриялық примитивтерді пайдаланбастан текстураланған ландшафт көрінісін жасады.

Перспективалық түзету үшін бөлініс

Әрбір үшбұрышты екі мақсатқа қол жеткізу үшін шамамен 16 пикселден тұратын топтарға бөлуге болады. Біріншіден, есептеу процессорды үнемі жұмыспен қамтамасыз ету. Екіншіден, есептеу нәтижелерін жылдамдату.

Әлемдік ғарыш бөлінісі

Перспективалық текстуралы карталауды аппараттық қолдаусыз іске асыру үшін үшбұрыш кішірек үшбұрыштарға бөлінеді және оларға аффиндік карталау қолданылады. Бұл техниканың жұмыс істеу себебі – аффиндік карталаудың бұрмалануы кіші көпбұрыштарда көзға жетпейді. Sony PlayStation мұны кеңінен пайдаланды, себебі ол аппараттық түрде тек аффиндік карталауды ғана қолдады, бірақ соған қарамастан, өзге консольдерге қарағанда үшбұрыштарды өңдеу жылдамдығы жоғары болды.

Экран кеңістігін бөлу

Бағдарламалық рендерерлер көбінесе экранды бөлуді артық көреді, себебі ол аз жүктеме тудырады. Олар сондай-ақ, орнатуды жеңілдету үшін пиксельдер қатары бойынша сызықтық интерполяция жасауға тырысады (2D аффиндік интерполяциямен салыстырғанда), осылайша жүктемені тағы да азайтады (сонымен қатар, аффиндік текстуралық бейнелеу x86 процессорының шектеулі регистрлеріне сыймайды; 68000 немесе кез келген RISC процессорлары оған көбірек сәйкес келеді). Quake үшін басқа тәсіл қолданылды, ол скан-жолдың 16 пикселіне бір рет перспективаға сәйкес келетін координаталарды есептеп, олардың арасында сызықтық интерполяция жасайды. Бұл перспективаға сәйкес есептеу копроцессорда параллель түрде орындалғандықтан, сызықтық интерполяция жылдамдығымен жұмыс істейді. Полигондар тәуелсіз түрде көрсетіледі, сондықтан полигонның нормаль бағытына байланысты аралықтар мен бағандарды немесе диагональ бағыттарды ауыстыру мүмкін, бұл z мәнін тұрақтандыруға көмектеседі, бірақ бұл күш-жігердің нәтижесі тиімді болмайды сияқты.

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

Басқа бір әдіс – перспективаны полиномиал сияқты жылдам есептеу арқылы жуықтау. Тағы бір әдіс келесі мәнді сызықтық түрде экстраполяциялау үшін соңғы екі салынған пикселдің 1/z мәнін пайдаланады. Бөлу операциясы осы мәндерден басталады, сондықтан тек шағын қалдық бөлінуі керек, бірақ осы әдіс көптеген жүйелерде көп есептеуді қажет ететіндіктен тым баяу болып шығады. Соңында, Build қозғалтқышы Doom үшін қолданылған тұрақты қашықтық тәсілін кеңейтіп, кез келген көпбұрыш үшін тұрақты қашықтық сызығын тауып, осы сызық бойынша рендеринг жасады.

Кері текстураның картасы

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

Тексеруді алдыңғы картаға салу

Текстураның алдыңғы проекциясы текстураның әр текселін экрандағы пиксельге бейнелейді. Тікбұрышты примитивті экрандағы белгілі бір жерге түрлендіргеннен кейін, алдыңғы текстура проекциясын қолданатын рендерлеуші, текстурадағы әр текселді аралап өтеді, оларды кадр буферінің пиксельдеріне таратып береді. Бұл әдіс 3DO, Sega Saturn және NV1 сияқты кейбір аппараттық құрылымдарда қолданылған. Басты артықшылығы – текстура деректеріне қарапайым сызықтық тәртіппен қол жеткізуге болады, бұл текстура деректерін өте тиімді кэштеуге мүмкіндік береді. Дегенмен, осы артықшылықтың кері жағы да бар: примитив экранда кішірейген сайын, ол текстурадағы әр текселді аралап өтуге мәжбүр болады, нәтижесінде көптеген пикселдер қажетсіз қайта жабылады. Бұл әдіс төртбұрышты примитивтерді үшбұрыштарға бөлудің орнына қолдануға ыңғайлы, әсіресе аппараттық құрылымдарда перспективалық дұрыс текстуралау мүмкіндігі болмаған кезде. Себебі төртбұрыштың аффиндік бұрмалануы, оны екі үшбұрышқа бөлуге қарағанда аз бұрмаланған болып көрінеді (жоғарыдағы аффиндік текстура проекциясына қараңыз). NV1 аппараттық құрылғысы перспективалық дұрыстықты одан да жақсы жақындастыру үшін квадраттық интерполяция режимін де қолдады. Қолданыстағы аппараттық іске асырулар тиімді UV-координаттық проекцияны қамтамасыз етпеді, ол 3D модельдеуде маңызды техникаға айналды және примитив экран жиегінен шыққанда текстураны дұрыс кесуге көмектесті. Бұл кемшіліктерді одан әрі дамыту арқылы жоюға болар еді, бірақ GPU дизайны көбінесе кері проекцияға қарай бағытталды.

Томографиялық зерттеу

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

Пайдаланушы интерфейстері

Көптеген пайдаланушы интерфейстері экран элементтерінің анимациялық өтуін жылдамдату үшін текстуралық бейнелеуді пайдаланады, мысалы, Mac OS X-тегі Exposé.