Текшені бейнелеу - Cube mapping - Wikipedia

Төменгі сол жақ суретте қара нүктемен белгіленген көрініс көрінісі көрсетілген. Жоғарғы кескінде тор сол көріністен көрінетін текше кескінінің кескіні, ал төменгі оң жақ кескін түпнұсқа сахнаға орналастырылған.

Жылы компьютерлік графика, текшені бейнелеу әдісі болып табылады қоршаған ортаны бейнелеу картаның кескіні ретінде текшенің алты бетін қолданады. Қоршаған орта текшенің бүйірлеріне шығарылады және алты квадрат текстуралар түрінде сақталады немесе бір құрылымның алты аймағына жайылады. Текше картасы алғашқы рет көріністі 90 градуспен анықталған көріністі алты рет көрсету арқылы жасалады қаралу әр текше тұлғаны бейнелейтін.[1]

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

Тарих

Текше картасын 1986 жылы ұсынған Нед Грин өзінің «Қоршаған ортаны картографиялау және әлемнің басқа жобалары»,[2] қоршаған ортаны бейнелеуді алғаш рет ұсынғаннан кейін он жылдан кейін Джим Блин және Мартин Ньюелл. Алайда, алты текстуралық кескінге бір уақытта қол жеткізуге мүмкіндік беретін аппараттық шектеулер текшелік картаны әрі қарайғы технологиялық дамуларсыз жүзеге асыра алмады. Бұл мәселе 1999 жылы шығарылғаннан кейін жойылды Nvidia 256. Nvidia аппараттық құралдардағы текшелік карта жасауды «GeForce 256 кескінінің сапалық ерекшелігі» деп атады, бұл ... әзірлеушілерге нақты, нақты уақыттағы шағылысулар жасауға мүмкіндік береді. Аппараттық, текшелік ортадағы картада жеделдету дамытушылардың шығармашылық қабілеттерін босатады, олар қызықты және әсерлі ортаны құру үшін шағылысулар мен көзілдірік жарық эффектілерін қолданады ».[3] Бүгінгі күні текше кескіні әртүрлі графикалық қосымшаларда қоршаған ортаны бейнелеудің қолайлы әдісі ретінде қолданылады.

Артықшылықтары

Тек салыстырмалы қарапайымдылығымен қоршаған ортаны бейнелеудің басқа әдістеріне қарағанда текшелік картаға басымдық беріледі. Сондай-ақ, текше арқылы бейнелеу нәтижесінде алынған нәтижелерге ұқсас нәтижелер шығарады сәулелік бақылау, бірақ есептеу жағынан әлдеқайда тиімді - сапаның қалыпты төмендеуі тиімділіктің үлкен жетістіктерімен өтеледі.

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

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

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

Кемшіліктері

Егер жаңа нысан немесе жаңа жарықтандыру сахнаға енгізілсе немесе онда көрінетін қандай-да бір объект қозғалса немесе өзгерсе, онда шағылысу өзгереді және текше картасы қайта шығарылуы керек. Текше картасы көрініс бойымен қозғалатын объектіге жабыстырылған кезде, текше картасы да сол жаңа позициядан шығарылуы керек.

Қолданбалар

Тұрақты көзілдіріктер

Компьютерлік дизайн (CAD) бағдарламаларын қолданады көзілдірік оқиғалар 3D заттарды көрсету кезінде беттің қисаю сезімін білдіретін визуалды белгілер ретінде. Алайда, көптеген АЖЖ бағдарламалары спекулярлық жарықтарды іріктеуде қиындықтар туғызады, өйткені спекулярлық жарықтандыруды есептеу тек объектіні бейнелеу үшін пайдаланылатын тордың шыңында орындалады, ал интерполяция объектінің беткі қабатын жарықтандыруды бағалау үшін қолданылады. Қиындықтар торлардың тығыздығы жеткіліксіз болған кезде пайда болады, нәтижесінде жарық көзінің шамдары жеткіліксіз. Бұл өз кезегінде жарық шоғырларының торлардан қашықтығына пропорционалды жарықтар әкеледі, нәтижесінде қисықтықты көрсететін визуалды белгілерге зиян келтіреді. Өкінішке орай, бұл мәселені тығыз тор құру арқылы шешу мүмкін емес, өйткені бұл объектіні көрсету тиімділігін айтарлықтай төмендетуі мүмкін.

Текше карталары тұрақты спекулярлық көріністерді ұсынуға жеткілікті қарапайым және тиімді шешім ұсынады. Бірнеше спекулярлық маңызды сәттерді текше картасының текстурасына кодтауға болады, содан кейін оларға қол жеткізуге болады интерполяциялау беті бойынша шағылысу векторы жабдықтау координаттары. Жеке төбелердегі жарықтандыруды есептеуге қатысты бұл әдіс қисықтықты дәлірек көрсететін таза нәтижелер береді. Бұл әдістің тағы бір артықшылығы - оның масштабы жақсы, өйткені рендеринг құнын арттырмай, құрылымға қосымша спекулярлық жарықтандырғыштарды енгізуге болады. Алайда, бұл тәсіл жарық көздері алыс немесе шексіз шамдар болуы керек болғандықтан шектелген, дегенмен, бақытымызға орай, бұл CAD бағдарламаларында кездеседі.

Skyboxes

Беткейлері таңбаланған, текшелік скайбокстың бетіне түсіруге болатын текстураның мысалы

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

Жарық сәулесі

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

Динамикалық шағылысу

Іс-әрекеттегі текшеленген көріністер

Қоршаған ортаның негізгі карталары статикалық текшелік картаны пайдаланады - нысанды жылжытуға және бұрмалауға болатынына қарамастан, шағылысқан орта тұрақты болып қалады. Алайда, текше картасының құрылымын динамикалық түрде өзгеретін ортаны бейнелеу үшін үнемі жаңартуға болады (мысалы, желде тербелген ағаштар). Динамикалық шағылыстыруды жасаудың қарапайым, бірақ қымбат тәсілі әр кадр үшін жұмыс уақытында текше карталарын құруды қамтиды. Бұл қосымша көрсету қадамдарының арқасында статикалық картаға қарағанда әлдеқайда аз тиімді болғанымен, оны интерактивті жылдамдықпен орындауға болады.

Өкінішке орай, бірнеше рефлексиялық объектілер болған кезде бұл техника масштабта болмайды. Әрбір шағылысатын объект үшін бірегей динамикалық орта картасы қажет. Сондай-ақ, шағылысатын нысандар бір-бірін көрсете алатын болса, одан әрі асқынулар қосылады - динамикалық текшелік карталар рентгентракингті қолдану арқылы әдеттегідей қалыптасатын эффектілерге жуық рекурсивті түрде жасалуы мүмкін.

Ғаламдық жарықтандыру

Үшін алгоритм ғаламдық жарықтандыру куб-карта деректер құрылымын қолдана отырып, интерактивті жылдамдықпен есептеу ұсынылды ICCVG 2002.[1]

Проекциялық текстуралар

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

Жадтың мекен-жайы

Бұл иллюстрация текше картасының индекстелуін және шешілуін көрсетеді.

Куб текстурасы 0-ден 5-ке дейінгі алты құрылымдық картаны позитивті X, теріс X, оң Y, теріс Y, оң Z, теріс Z ретімен индекстейді.[4][5] Кескіндер суреттің төменгі сол жағында шыққан жерімен сақталады. Позитивті X және Y беттері Z координатасын кері, ал теріс Z беті X координатын жоққа шығаруы керек. Егер координаттар бет пен құрылымға берілсе , нормаланбаған вектор функциясы бойынша есептеуге болады:

жарамсыз convert_cube_uv_to_xyz(int индекс, жүзу сен, жүзу v, жүзу *х, жүзу *ж, жүзу *з){  // 0-ден 1-ден -1-ге дейін 1-ге ауыстыру  жүзу uc = 2.0f * сен - 1.0f;  жүзу vc = 2.0f * v - 1.0f;  қосқыш (индекс)  {    іс 0: *х =  1.0f; *ж =    vc; *з =   -uc; үзіліс;	// ПОЗИТИВТІ Х    іс 1: *х = -1.0f; *ж =    vc; *з =    uc; үзіліс;	// ТЕРІСІ Х    іс 2: *х =    uc; *ж =  1.0f; *з =   -vc; үзіліс;	// ПОЗИТИВ Y    іс 3: *х =    uc; *ж = -1.0f; *з =    vc; үзіліс;	// ТЕРІС Y    іс 4: *х =    uc; *ж =    vc; *з =  1.0f; үзіліс;	// ПОЗИТИВТІ Z    іс 5: *х =   -uc; *ж =    vc; *з = -1.0f; үзіліс;	// NEGATIVE Z  }}

Сол сияқты, вектор бет индексіне және текстураның координаттарына айналдыруға болады функциясымен:

жарамсыз convert_xyz_to_cube_uv(жүзу х, жүзу ж, жүзу з, int *индекс, жүзу *сен, жүзу *v){  жүзу absX = fabs(х);  жүзу жоқ = fabs(ж);  жүзу absZ = fabs(з);    int isXPositive = х > 0 ? 1 : 0;  int isYPositive = ж > 0 ? 1 : 0;  int isZPositive = з > 0 ? 1 : 0;    жүзу maxAxis, uc, vc;    // ПОЗИТИВТІ Х  егер (isXPositive && absX >= жоқ && absX >= absZ) {    // u (0-ден 1-ге) + z-ден -z-ге ауысады    // v (0-ден 1) -y-ден + y-ге ауысады    maxAxis = absX;    uc = -з;    vc = ж;    *индекс = 0;  }  // ТЕРІСІ Х  егер (!isXPositive && absX >= жоқ && absX >= absZ) {    // u (0-ден 1) -z-ден + z-ге ауысады    // v (0-ден 1) -y-ден + y-ге ауысады    maxAxis = absX;    uc = з;    vc = ж;    *индекс = 1;  }  // ПОЗИТИВ Y  егер (isYPositive && жоқ >= absX && жоқ >= absZ) {    // u (0-ден 1) -x-ден + x-ге ауысады    // v (0-ден 1) + z-ден -z-ге ауысады    maxAxis = жоқ;    uc = х;    vc = -з;    *индекс = 2;  }  // ТЕРІС Y  егер (!isYPositive && жоқ >= absX && жоқ >= absZ) {    // u (0-ден 1) -x-ден + x-ге ауысады    // v (0-ден 1) -z-ден + z-ге ауысады    maxAxis = жоқ;    uc = х;    vc = з;    *индекс = 3;  }  // ПОЗИТИВТІ Z  егер (isZPositive && absZ >= absX && absZ >= жоқ) {    // u (0-ден 1) -x-ден + x-ге ауысады    // v (0-ден 1) -y-ден + y-ге ауысады    maxAxis = absZ;    uc = х;    vc = ж;    *индекс = 4;  }  // NEGATIVE Z  егер (!isZPositive && absZ >= absX && absZ >= жоқ) {    // u (0-ден 1-ге) + x-ден -x-ге ауысады    // v (0-ден 1) -y-ден + y-ге ауысады    maxAxis = absZ;    uc = -х;    vc = ж;    *индекс = 5;  }  // диапазонды -1-ден 1-ге дейін 0-ден 1-ге дейін түрлендіру  *сен = 0,5f * (uc / maxAxis + 1.0f);  *v = 0,5f * (vc / maxAxis + 1.0f);}

Байланысты

Тәжірибе жасауға арналған тегін текше карталарының үлкен жиынтығы:http://www.humus.name/index.php?page=Textures

Марк Ванде Веттеринг қабылдады М.С.Эшердің әйгілі автопортрет Рефлексиялық сферамен қол және осы текше картасының кескіндерін алу үшін салыстыруды өзгертті: сол, дұрыс, жоғары, төмен, артқа, алдыңғы. Мұнда үш.js осы суреттерді қолданып демо жасау (кең шолғыш терезесінде жақсы көрінеді және демонстрацияны көру үшін парақты жаңарту қажет болуы мүмкін):https://web.archive.org/web/20140519021736/http://threejs.org/examples/webgl_materials_cubemap_escher.html

Сонымен қатар, сіз қоршаған ортаға қатысты басқа проекцияларды текше картасына түрлендіре аласыз (мысалы. тең тікбұрышты проекциядан текше картасына дейін )

Әдебиеттер тізімі

  1. ^ Фернандо, Р. & Килгард Дж. Дж. (2003). CG оқулығы: нақты уақыт режимінде бағдарламаланатын графикаға арналған анықтамалық нұсқаулық. (1-ші басылым). Бостон, MA, АҚШ, Addison-Wesley Longman Publishing Co., Inc. 7-тарау: Қоршаған ортаны картографиялау әдістері
  2. ^ Грин, N (1986). «Қоршаған ортаны картографиялау және әлемнің басқа болжамдарының қолданылуы». IEEE Comput. График. Қолдану. 6 (11): 21–29. дои:10.1109 / MCG.1986.276658.
  3. ^ Nvidia, 2000 ж. Қаңтар. Техникалық қысқаша ақпарат: Тек қана қоршаған ортаның картаға түсіруімен тамаша шағылыстыру және жарықтың әсері Мұрағатталды 2008-10-04 ж Wayback Machine
  4. ^ https://msdn.microsoft.com/kk-us/library/windows/desktop/ff476906(v=vs.85).aspx
  5. ^ http://www.nvidia.com/object/cube_map_ogl_tutorial.html

Сондай-ақ қараңыз