WebXR டெப்த் பஃப்பர் ரெசொலூஷனை நிர்வகித்தல், சிதைவுகளை வடிகட்டுதல், மற்றும் வலிமையான AR மறைப்பு மற்றும் ஊடாட்டத்திற்கான தரக் கட்டுப்பாட்டை செயல்படுத்துவதில் டெவலப்பர்களுக்கான ஒரு விரிவான வழிகாட்டி.
WebXR ஆழத்தில் தேர்ச்சி பெறுதல்: டெப்த் பஃப்பர் ரெசொலூஷன் மற்றும் தரக் கட்டுப்பாட்டில் ஒரு ஆழமான பார்வை
ஆக்மென்ட்டட் ரியாலிட்டி (AR) அறிவியல் புனைகதையிலிருந்து கடந்து, டிஜிட்டல் தகவலுடன் நாம் தொடர்பு கொள்ளும் விதத்தை மாற்றியமைக்கும் ஒரு உறுதியான, சக்திவாய்ந்த கருவியாக மாறியுள்ளது. AR-இன் மாயாஜாலம், மெய்நிகர் உலகை நிஜ உலகத்துடன் தடையின்றி கலக்கும் திறனில் உள்ளது. உங்கள் வரவேற்பறை தளபாடங்களைச் சுற்றி ஒரு மெய்நிகர் கதாபாத்திரம் செல்வது, ஒரு டிஜிட்டல் அளவீட்டுக் கருவி நிஜ உலகப் பொருளைத் துல்லியமாக அளவிடுவது, அல்லது ஒரு மெய்நிகர் கலைப்படைப்பு நிஜ உலகத் தூணுக்குப் பின்னால் சரியாக மறைக்கப்படுவது—இந்த அனுபவங்கள் அனைத்தும் ஒரு முக்கியமான தொழில்நுட்பத்தை சார்ந்துள்ளன: நிகழ்நேர சுற்றுச்சூழல் புரிதல். வலை அடிப்படையிலான AR-க்கான இந்த புரிதலின் மையத்தில் WebXR டெப்த் API உள்ளது.
டெப்த் API, சாதனத்தின் கேமரா மூலம் பார்க்கப்படும் நிஜ உலக வடிவவியலின் ஒரு ஃபிரேம்-க்கு-ஃபிரேம் மதிப்பீட்டை டெவலப்பர்களுக்கு வழங்குகிறது. இந்த தரவு, பொதுவாக டெப்த் மேப் என்று அழைக்கப்படுகிறது, இது மறைப்பு, யதார்த்தமான இயற்பியல் மற்றும் சுற்றுச்சூழல் மெஷ்ஷிங் போன்ற அதிநவீன அம்சங்களைத் திறப்பதற்கான திறவுகோலாகும். இருப்பினும், இந்த ஆழத் தரவை அணுகுவது முதல் படி மட்டுமே. மூல ஆழத் தகவல் பெரும்பாலும் இரைச்சல் மிக்கதாகவும், சீரற்றதாகவும், மற்றும் பிரதான கேமரா ஊட்டத்தை விட குறைந்த ரெசொலூஷனிலும் இருக்கும். சரியான கையாளுதல் இல்லாமல், இது சிமிட்டும் மறைப்புகள், நிலையற்ற இயற்பியல் மற்றும் ஆழ்ந்த மாயையின் பொதுவான முறிவுக்கு வழிவகுக்கும்.
இந்த விரிவான வழிகாட்டி, அடிப்படை AR-ஐத் தாண்டி உண்மையான, நம்பகமான அனுபவங்களின் களத்திற்குச் செல்ல விரும்பும் WebXR டெவலப்பர்களுக்கானது. நாம் டெப்த் பஃப்பர் ரெசொலூஷன் என்ற கருத்தை ஆராய்வோம், அதன் தரத்தைக் குறைக்கும் காரணிகளைப் பற்றி விவாதிப்போம், மற்றும் தரக் கட்டுப்பாடு, வடிகட்டுதல் மற்றும் சரிபார்ப்புக்கான நடைமுறை நுட்பங்களின் ஒரு கருவிப்பெட்டியை வழங்குவோம். இந்த கருத்துகளில் தேர்ச்சி பெறுவதன் மூலம், நீங்கள் இரைச்சல் மிக்க, மூலத் தரவை அடுத்த தலைமுறை AR பயன்பாடுகளுக்கான நிலையான மற்றும் நம்பகமான அடித்தளமாக மாற்ற முடியும்.
அத்தியாயம் 1: WebXR டெப்த் API-யின் அடிப்படைகள்
டெப்த் மேப்பின் தரத்தை கட்டுப்படுத்துவதற்கு முன், அது என்ன, அதை எப்படி அணுகுவது என்பதை நாம் முதலில் புரிந்து கொள்ள வேண்டும். WebXR டெப்த் சென்சிங் API என்பது WebXR டிவைஸ் API-க்குள் உள்ள ஒரு மாட்யூல் ஆகும், இது சாதனத்தின் சென்சார்கள் மூலம் கைப்பற்றப்பட்ட ஆழத் தகவலை வெளிப்படுத்துகிறது.
டெப்த் மேப் என்றால் என்ன?
ஒரு புகைப்படம் எடுப்பதாக கற்பனை செய்து கொள்ளுங்கள், ஆனால் ஒவ்வொரு பிக்சலுக்கும் வண்ணத் தகவலைச் சேமிப்பதற்குப் பதிலாக, கேமராவிலிருந்து அந்த பிக்சல் பிரதிநிதித்துவப்படுத்தும் பொருளுக்கான தூரத்தைச் சேமிக்கிறீர்கள். இதுதான், சாராம்சத்தில், ஒரு டெப்த் மேப். இது ஒரு 2D படம், பொதுவாக கிரேஸ்கேல், இதில் பிக்சல் செறிவு தூரத்துடன் தொடர்புடையது. பிரகாசமான பிக்சல்கள் நெருக்கமான பொருட்களைக் குறிக்கலாம், அதே நேரத்தில் இருண்ட பிக்சல்கள் தொலைவில் உள்ள பொருட்களைக் குறிக்கலாம் (அல்லது காட்சிப்படுத்தலைப் பொறுத்து நேர்மாறாகவும் இருக்கலாம்).
இந்தத் தரவு உங்கள் WebGL சூழலுக்கு ஒரு டெக்ஸ்சராக, `XRDepthInformation.texture` ஆக வழங்கப்படுகிறது. இது உங்கள் ஷேடர்களுக்குள் GPU-வில் நேரடியாக, ஒரு பிக்சலுக்கு ஒரு ஆழக் கணக்கீடுகளை மிகவும் திறமையாகச் செய்ய உங்களை அனுமதிக்கிறது—இது நிகழ்நேர AR-க்கான ஒரு முக்கியமான செயல்திறன் கருத்தாகும்.
WebXR எப்படி ஆழத் தகவலை வழங்குகிறது
API-ஐப் பயன்படுத்த, முதலில் உங்கள் WebXR செஷனைத் தொடங்கும் போது `depth-sensing` அம்சத்தைக் கோர வேண்டும்:
const session = await navigator.xr.requestSession('immersive-ar', { requiredFeatures: ['depth-sensing'] });
தரவு வடிவம் மற்றும் பயன்பாட்டிற்கான விருப்பங்களையும் நீங்கள் குறிப்பிடலாம், அதை செயல்திறன் பிரிவில் பின்னர் ஆராய்வோம். செஷன் செயலில் வந்ததும், உங்கள் `requestAnimationFrame` லூப்பில், WebGL லேயரிலிருந்து சமீபத்திய ஆழத் தகவலைப் பெறுவீர்கள்:
const depthInfo = xrWebView.getDepthInformation(xrFrame.getViewerPose(xrReferenceSpace));
`depthInfo` கிடைத்தால், அதில் பல முக்கியமான தகவல்கள் உள்ளன:
- texture: மூல டெப்த் மதிப்புகளைக் கொண்ட ஒரு `WebGLTexture`.
- normDepthFromViewMatrix: வியூ-ஸ்பேஸ் ஒருங்கிணைப்புகளை இயல்பாக்கப்பட்ட டெப்த் டெக்ஸ்சர் ஒருங்கிணைப்புகளாக மாற்றுவதற்கான ஒரு மேட்ரிக்ஸ்.
- rawValueToMeters: டெக்ஸ்சரிலிருந்து வரும் மூல, யூனிட் இல்லாத மதிப்புகளை மீட்டர்களாக மாற்றுவதற்கான ஒரு ஸ்கேலிங் காரணி. இது துல்லியமான நிஜ உலக அளவீடுகளுக்கு அவசியம்.
இந்தத் தரவை உருவாக்கும் தொழில்நுட்பம் சாதனத்திற்கு சாதனம் மாறுபடும். சில, டைம்-ஆஃப்-ஃப்ளைட் (ToF) அல்லது ஸ்ட்ரக்சர்டு லைட் போன்ற செயலில் உள்ள சென்சார்களைப் பயன்படுத்துகின்றன, அவை அகச்சிவப்பு ஒளியைப் பாய்ச்சி அதன் திரும்புதலை அளவிடுகின்றன. மற்றவை, ஸ்டீரியோஸ்கோபிக் கேமராக்கள் போன்ற செயலற்ற முறைகளைப் பயன்படுத்துகின்றன, அவை ஆழத்தைக் கணக்கிட இரண்டு படங்களுக்கு இடையில் தொடர்பைக் கண்டறிகின்றன. ஒரு டெவலப்பராக, நீங்கள் வன்பொருளைக் கட்டுப்படுத்த முடியாது, ஆனால் அதன் வரம்புகளைப் புரிந்துகொள்வது அது உருவாக்கும் தரவை நிர்வகிப்பதில் முக்கியமானது.
அத்தியாயம் 2: டெப்த் பஃப்பர் ரெசொலூஷனின் இரு முகங்கள்
டெவலப்பர்கள் "ரெசொலூஷன்" என்று கேட்கும்போது, அவர்கள் பெரும்பாலும் ஒரு படத்தின் அகலம் மற்றும் உயரத்தைப் பற்றி நினைக்கிறார்கள். டெப்த் மேப்களுக்கு, இது கதையின் பாதி மட்டுமே. டெப்த் ரெசொலூஷன் என்பது இரண்டு பகுதிகளைக் கொண்ட ஒரு கருத்து, மேலும் இரண்டு பகுதிகளும் தரத்திற்கு முக்கியமானவை.
இடஞ்சார்ந்த ரெசொலூஷன்: 'என்ன' மற்றும் 'எங்கே'
இடஞ்சார்ந்த ரெசொலூஷன் என்பது டெப்த் டெக்ஸ்சரின் பரிமாணங்களைக் குறிக்கிறது, எடுத்துக்காட்டாக, 320x240 அல்லது 640x480 பிக்சல்கள். இது பெரும்பாலும் சாதனத்தின் வண்ண கேமரா ரெசொலூஷனை விட (இது 1920x1080 அல்லது அதற்கும் அதிகமாக இருக்கலாம்) கணிசமாகக் குறைவாக இருக்கும். இந்த முரண்பாடு AR சிதைவுகளின் ஒரு முதன்மை மூலமாகும்.
- விவரங்களில் தாக்கம்: ஒரு குறைந்த இடஞ்சார்ந்த ரெசொலூஷன் என்பது ஒவ்வொரு டெப்த் பிக்சலும் நிஜ உலகின் ஒரு பெரிய பகுதியை உள்ளடக்கியது என்பதாகும். இது நுட்பமான விவரங்களைப் பிடிப்பதை சாத்தியமற்றதாக்குகிறது. ஒரு மேசையின் விளிம்புகள் கட்டம் கட்டமாகத் தோன்றலாம், ஒரு மெல்லிய விளக்கு கம்பம் முழுவதுமாக மறைந்துவிடலாம், மற்றும் நெருக்கமாக இருக்கும் பொருட்களுக்கு இடையிலான வேறுபாடு மங்கிவிடும்.
- மறைப்பில் தாக்கம்: இங்கேதான் இந்த சிக்கல் மிகவும் தெளிவாகத் தெரிகிறது. ஒரு மெய்நிகர் பொருள் ஒரு நிஜ உலகப் பொருளுக்குப் பின்னால் பகுதியளவு இருக்கும்போது, மறைப்பு எல்லையில் உள்ள குறைந்த-ரெசொலூஷன் "படிக்கட்டு" சிதைவுகள் தெளிவாகத் தெரியும் மற்றும் ஆழ்ந்த அனுபவத்தை உடைக்கும்.
இதை ஒரு குறைந்த-ரெசொலூஷன் புகைப்படம் போல நினைத்துப் பாருங்கள். உங்களால் பொதுவான வடிவங்களை அறிய முடியும், ஆனால் அனைத்து நுட்பமான விவரங்களும் கூர்மையான விளிம்புகளும் இழக்கப்படுகின்றன. டெவலப்பர்களுக்கான சவால் பெரும்பாலும் இந்த குறைந்த-ரெசொலூஷன் தரவை புத்திசாலித்தனமாக "அப்ஸாம்பிள்" செய்வது அல்லது அதனுடன் வேலை செய்து உயர்-ரெசொலூஷன் முடிவை உருவாக்குவதாகும்.
பிட் டெப்த் (துல்லியம்): 'எவ்வளவு தூரம்'
பிட் டெப்த், அல்லது துல்லியம், எத்தனை தனித்துவமான தூரப் படிகளைப் பிரதிநிதித்துவப்படுத்த முடியும் என்பதை தீர்மானிக்கிறது. இது டெப்த் மேப்பில் உள்ள ஒவ்வொரு பிக்சல் மதிப்பின் எண் துல்லியம் ஆகும். WebXR API, 16-பிட் முழு எண்கள் (`ushort`) அல்லது 32-பிட் மிதக்கும் புள்ளி எண்கள் (`float`) போன்ற பல்வேறு வடிவங்களில் தரவை வழங்கலாம்.
- 8-பிட் டெப்த் (256 நிலைகள்): ஒரு 8-பிட் வடிவம் 256 தனித்துவமான தூரங்களை மட்டுமே பிரதிநிதித்துவப்படுத்த முடியும். 5 மீட்டர் வரம்பில், ஒவ்வொரு படியும் கிட்டத்தட்ட 2 சென்டிமீட்டர் இடைவெளியில் உள்ளது என்று அர்த்தம். 1.00 மீ மற்றும் 1.01 மீ உள்ள பொருட்களுக்கு ஒரே டெப்த் மதிப்பு ஒதுக்கப்படலாம், இது "டெப்த் குவாண்டைசேஷன்" அல்லது பேண்டிங் எனப்படும் ஒரு நிகழ்வுக்கு வழிவகுக்கும்.
- 16-பிட் டெப்த் (65,536 நிலைகள்): இது ஒரு குறிப்பிடத்தக்க முன்னேற்றம் மற்றும் ஒரு பொதுவான வடிவம். இது மிகவும் மென்மையான மற்றும் துல்லியமான தூரப் பிரதிநிதித்துவத்தை வழங்குகிறது, குவாண்டைசேஷன் சிதைவுகளைக் குறைக்கிறது மற்றும் மேலும் நுட்பமான டெப்த் மாறுபாடுகளைப் பிடிக்க அனுமதிக்கிறது.
- 32-பிட் ஃப்ளோட்: இது மிக உயர்ந்த துல்லியத்தை வழங்குகிறது மற்றும் அறிவியல் அல்லது அளவீட்டு பயன்பாடுகளுக்கு ஏற்றது. இது முழு எண் வடிவங்களின் நிலையான-படி சிக்கலைத் தவிர்க்கிறது, ஆனால் அதிக செயல்திறன் மற்றும் நினைவக செலவில் வருகிறது.
குறைந்த பிட் டெப்த் "Z-fighting"-ஐ ஏற்படுத்தக்கூடும், இதில் சற்று மாறுபட்ட ஆழங்களில் உள்ள இரண்டு மேற்பரப்புகள் முன்னால் ரெண்டர் செய்யப்படுவதற்கு போட்டியிடுகின்றன, இது ஒரு சிமிட்டும் விளைவை ஏற்படுத்துகிறது. இது மென்மையான மேற்பரப்புகளை படிக்கட்டுகள் அல்லது பட்டைகளாகத் தோன்றச் செய்கிறது, இது இயற்பியல் உருவகப்படுத்துதல்களில் குறிப்பாக கவனிக்கத்தக்கது, அங்கு ஒரு மெய்நிகர் பந்து ஒரு மென்மையான சரிவுக்கு பதிலாக தொடர்ச்சியான படிகளில் உருளுவது போல் தோன்றலாம்.
அத்தியாயம் 3: நிஜ உலகம் vs. இலட்சிய டெப்த் மேப்: தரத்தை பாதிக்கும் காரணிகள்
ஒரு சரியான உலகில், ஒவ்வொரு டெப்த் மேப்பும் ஒரு кристаல்-தெளிவான, உயர்-ரெசொலூஷன், மற்றும் யதார்த்தத்தின் முற்றிலும் துல்லியமான பிரதிநிதித்துவமாக இருக்கும். நடைமுறையில், டெப்த் தரவு குழப்பமானது மற்றும் பரந்த அளவிலான சுற்றுச்சூழல் மற்றும் வன்பொருள் அடிப்படையிலான சிக்கல்களுக்கு ஆளாகக்கூடியது.
வன்பொருள் சார்புகள்
உங்கள் மூலத் தரவின் தரம் அடிப்படையில் சாதனத்தின் வன்பொருளால் வரையறுக்கப்படுகிறது. நீங்கள் சென்சார்களை மாற்ற முடியாது என்றாலும், அவற்றின் பொதுவான தோல்விப் புள்ளிகளைப் பற்றி அறிந்திருப்பது வலிமையான பயன்பாடுகளை உருவாக்குவதற்கு முக்கியமானது.
- சென்சார் வகை: பல உயர்நிலை மொபைல் சாதனங்களில் பொதுவான டைம்-ஆஃப்-ஃப்ளைட் (ToF) சென்சார்கள் பொதுவாக நன்றாக இருக்கும், ஆனால் சுற்றியுள்ள அகச்சிவப்பு ஒளியால் (எ.கா., பிரகாசமான சூரிய ஒளி) பாதிக்கப்படலாம். ஸ்டீரியோஸ்கோபிக் அமைப்புகள், ஒரு வெற்று வெள்ளைச் சுவர் போன்ற டெக்ஸ்சர் இல்லாத மேற்பரப்புகளுடன் போராடக்கூடும், ஏனெனில் இரண்டு கேமரா காட்சிகளுக்கு இடையில் பொருந்துவதற்கு தனித்துவமான அம்சங்கள் இல்லை.
- சாதனத்தின் பவர் சுயவிவரம்: பேட்டரியைச் சேமிக்க, ஒரு சாதனம் வேண்டுமென்றே குறைந்த-ரெசொலூஷன் அல்லது இரைச்சல் மிக்க டெப்த் மேப்பை வழங்கலாம். சில சாதனங்கள் வெவ்வேறு சென்சிங் முறைகளுக்கு இடையில் மாறக்கூடும், இது தரத்தில் குறிப்பிடத்தக்க மாற்றங்களை ஏற்படுத்தும்.
சுற்றுச்சூழல் சீர்குலைப்பாளர்கள்
உங்கள் பயனர் இருக்கும் சூழல் டெப்த் தரவின் தரத்தில் பெரும் தாக்கத்தை ஏற்படுத்துகிறது. உங்கள் AR பயன்பாடு இந்த பொதுவான சவால்களுக்கு நெகிழ்ச்சியுடன் இருக்க வேண்டும்.
- கடினமான மேற்பரப்பு பண்புகள்:
- பிரதிபலிக்கும் மேற்பரப்புகள்: கண்ணாடிகள் மற்றும் மெருகூட்டப்பட்ட உலோகம் போர்ட்டல்கள் போல செயல்படுகின்றன, மேற்பரப்பின் ஆழத்தைக் காட்டாமல், பிரதிபலித்த காட்சியின் ஆழத்தைக் காட்டுகின்றன. இது உங்கள் டெப்த் மேப்பில் வினோதமான மற்றும் தவறான வடிவவியலை உருவாக்கலாம்.
- ஒளிஊடுருவக்கூடிய மேற்பரப்புகள்: கண்ணாடி மற்றும் தெளிவான பிளாஸ்டிக் பெரும்பாலும் டெப்த் சென்சார்களுக்கு கண்ணுக்கு தெரியாதவை, இது பெரிய துளைகளுக்கு அல்லது அவற்றுக்குப் பின்னால் உள்ள எதையும் பற்றிய தவறான டெப்த் வாசிப்புகளுக்கு வழிவகுக்கிறது.
- இருண்ட அல்லது ஒளி-உறிஞ்சும் மேற்பரப்புகள்: மிகவும் இருண்ட, மேட் மேற்பரப்புகள் (கருப்பு வெல்வெட் போன்றவை) செயலில் உள்ள சென்சார்களிடமிருந்து வரும் அகச்சிவப்பு ஒளியை உறிஞ்சிவிடும், இதன் விளைவாக தரவு காணாமல் போகும் (துளைகள்).
- விளக்கு நிலைமைகள்: வலுவான சூரிய ஒளி ToF சென்சார்களை மூழ்கடித்து, குறிப்பிடத்தக்க இரைச்சலை உருவாக்கும். மாறாக, மிகக் குறைந்த ஒளி நிலைமைகள் செயலற்ற ஸ்டீரியோ அமைப்புகளுக்கு சவாலாக இருக்கலாம், அவை புலப்படும் அம்சங்களைச் சார்ந்துள்ளன.
- தூரம் மற்றும் வரம்பு: ஒவ்வொரு டெப்த் சென்சாருக்கும் ஒரு உகந்த இயக்க வரம்பு உள்ளது. மிக நெருக்கமாக இருக்கும் பொருட்கள் ஃபோகஸில் இல்லாமல் இருக்கலாம், அதே நேரத்தில் தொலைவில் உள்ள பொருட்களுக்கு துல்லியம் கணிசமாகக் குறைகிறது. பெரும்பாலான நுகர்வோர் தர சென்சார்கள் சுமார் 5-8 மீட்டர் வரை மட்டுமே நம்பகமானவை.
- இயக்க மங்கல்: சாதனம் அல்லது காட்சியில் உள்ள பொருட்களின் விரைவான இயக்கம் டெப்த் மேப்பில் இயக்க மங்கலை ஏற்படுத்தலாம், இது மங்கலான விளிம்புகளுக்கும் தவறான வாசிப்புகளுக்கும் வழிவகுக்கும்.
அத்தியாயம் 4: டெவலப்பரின் கருவிப்பெட்டி: தரக் கட்டுப்பாட்டிற்கான நடைமுறை நுட்பங்கள்
இப்போது நாம் பிரச்சனைகளைப் புரிந்துகொண்டோம், தீர்வுகளில் கவனம் செலுத்துவோம். ஒரு சரியான டெப்த் மேப்பை அடைவதே குறிக்கோள் அல்ல—அது பெரும்பாலும் சாத்தியமற்றது. குறிக்கோள், மூல, இரைச்சல் மிக்க தரவை உங்கள் பயன்பாட்டின் தேவைகளுக்கு சீரான, நிலையான மற்றும் போதுமான ஒன்றாகச் செயலாக்குவதாகும். பின்வரும் அனைத்து நுட்பங்களும் நிகழ்நேர செயல்திறனுக்காக உங்கள் WebGL ஷேடர்களில் செயல்படுத்தப்பட வேண்டும்.
நுட்பம் 1: டெம்போரல் ஃபில்டரிங் (காலப்போக்கில் மென்மையாக்குதல்)
ஃபிரேமிலிருந்து ஃபிரேமிற்கு வரும் டெப்த் தரவு மிகவும் "நடுக்கமாக" இருக்கலாம், தனிப்பட்ட பிக்சல்கள் தங்கள் மதிப்புகளை விரைவாக மாற்றும். டெம்போரல் ஃபில்டரிங், தற்போதைய ஃபிரேமின் டெப்த் தரவை முந்தைய ஃபிரேம்களின் தரவுகளுடன் கலந்து இதை மென்மையாக்குகிறது.
ஒரு எளிய மற்றும் பயனுள்ள முறை எக்ஸ்போனென்ஷியல் மூவிங் ஆவரேஜ் (EMA) ஆகும். உங்கள் ஷேடரில், முந்தைய ஃபிரேமிலிருந்து மென்மையாக்கப்பட்ட டெப்த்-ஐ சேமிக்கும் ஒரு "ஹிஸ்டரி" டெக்ஸ்சரை நீங்கள் பராமரிக்க வேண்டும்.
கருத்தியல் ஷேடர் தர்க்கம்:
float smoothing_factor = 0.6; // 0 மற்றும் 1-க்கு இடையில் ஒரு மதிப்பு. அதிக மதிப்பு = அதிக மென்மையாக்கல்.
vec2 tex_coord = ...; // தற்போதைய பிக்சலின் டெக்ஸ்சர் ஒருங்கிணைப்பு
float current_depth = texture2D(new_depth_map, tex_coord).r;
float previous_depth = texture2D(history_depth_map, tex_coord).r;
// தற்போதைய டெப்த் செல்லுபடியாக இருந்தால் (0 இல்லை) மட்டும் புதுப்பிக்கவும்
if (current_depth > 0.0) {
float smoothed_depth = mix(current_depth, previous_depth, smoothing_factor);
// மென்மையாக்கப்பட்ட_டெப்த்-ஐ அடுத்த ஃபிரேமிற்கான புதிய ஹிஸ்டரி டெக்ஸ்சரில் எழுதவும்
} else {
// தற்போதைய தரவு செல்லாததாக இருந்தால், பழைய தரவை அப்படியே எடுத்துச் செல்லவும்
// முந்தைய_டெப்த்-ஐ புதிய ஹிஸ்டரி டெக்ஸ்சரில் எழுதவும்
}
நன்மைகள்: அதிக அதிர்வெண் இரைச்சல் மற்றும் சிமிட்டலைக் குறைப்பதில் சிறந்தது. மறைப்புகள் மற்றும் இயற்பியல் தொடர்புகளை மிகவும் நிலையானதாக உணர வைக்கிறது.
தீமைகள்: இது ஒரு சிறிய தாமதம் அல்லது "கோஸ்டிங்" விளைவை அறிமுகப்படுத்துகிறது, குறிப்பாக வேகமாக நகரும் பொருட்களுடன். `smoothing_factor` நிலைத்தன்மை மற்றும் பதிலளிப்புத்தன்மைக்கு இடையில் சமநிலைப்படுத்தப்பட வேண்டும்.
நுட்பம் 2: ஸ்பேஷியல் ஃபில்டரிங் (அண்டை பிக்சல்களுடன் மென்மையாக்குதல்)
ஸ்பேஷியல் ஃபில்டரிங் என்பது ஒரு பிக்சலின் மதிப்பை அதன் அண்டை பிக்சல்களின் மதிப்புகளின் அடிப்படையில் மாற்றுவதை உள்ளடக்கியது. இது தனிமைப்படுத்தப்பட்ட தவறான பிக்சல்களை சரிசெய்வதற்கும் சிறிய மேடுகளை மென்மையாக்குவதற்கும் சிறந்தது.
- காஸியன் பிளர்: ஒரு எளிய பிளர் இரைச்சலைக் குறைக்கலாம், ஆனால் அது முக்கியமான கூர்மையான விளிம்புகளையும் மென்மையாக்கும், இது மேசைகளில் வட்டமான மூலைகளுக்கும் மங்கலான மறைப்பு எல்லைகளுக்கும் வழிவகுக்கும். இது பொதுவாக இந்த பயன்பாட்டிற்கு மிகவும் ஆக்கிரோஷமானது.
- பைலேட்டரல் ஃபில்டர்: இது ஒரு விளிம்பு-பாதுகாக்கும் மென்மையாக்கல் ஃபில்டர். இது அண்டை பிக்சல்களை சராசரியெடுப்பதன் மூலம் செயல்படுகிறது, ஆனால் இது மைய பிக்சலுக்கு ஒத்த டெப்த் மதிப்பைக் கொண்ட அண்டை பிக்சல்களுக்கு அதிக முக்கியத்துவம் கொடுக்கிறது. இதன் பொருள் இது ஒரு தட்டையான சுவரை மென்மையாக்கும், ஆனால் ஒரு டெப்த் தொடர்ச்சியின்மைக்கு (ஒரு மேசையின் விளிம்பு போன்றவை) குறுக்கே பிக்சல்களை சராசரியெடுக்காது. இது டெப்த் மேப்களுக்கு மிகவும் பொருத்தமானது, ஆனால் ஒரு எளிய பிளரை விட கணக்கீட்டு ரீதியாக அதிக விலை உயர்ந்தது.
நுட்பம் 3: துளைகளை நிரப்புதல் மற்றும் இன் பெயிண்டிங்
பெரும்பாலும், உங்கள் டெப்த் மேப்பில் சென்சார் ஒரு வாசிப்பைப் பெறத் தவறிய "துளைகள்" (0 மதிப்புள்ள பிக்சல்கள்) இருக்கும். இந்த துளைகள் மெய்நிகர் பொருள்கள் எதிர்பாராதவிதமாக தோன்றவோ அல்லது மறையவோ காரணமாகலாம். எளிய துளை-நிரப்புதல் நுட்பங்கள் இதைத் தணிக்கலாம்.
கருத்தியல் ஷேடர் தர்க்கம்:
vec2 tex_coord = ...;
float center_depth = texture2D(depth_map, tex_coord).r;
if (center_depth == 0.0) {
// இது ஒரு துளையாக இருந்தால், அண்டை பிக்சல்களை மாதிரி எடுத்து, செல்லுபடியாகும் பிக்சல்களை சராசரியெடுக்கவும்
float total_depth = 0.0;
float valid_samples = 0.0;
// ... 3x3 அல்லது 5x5 அண்டை கட்டத்தில் லூப் செய்யவும் ...
// அண்டை_டெப்த் > 0.0 எனில் { மொத்த_டெப்த் += அண்டை_டெப்த்; செல்லுபடியாகும்_மாதிரிகள்++; }
if (valid_samples > 0.0) {
center_depth = total_depth / valid_samples;
}
}
// (சாத்தியமான நிரப்பப்பட்ட) மைய_டெப்த் மதிப்பை பயன்படுத்தவும்
மேலும் மேம்பட்ட நுட்பங்கள் துளையின் விளிம்புகளிலிருந்து டெப்த் மதிப்புகளை உள்நோக்கி பரப்புவதை உள்ளடக்கியது, ஆனால் ஒரு எளிய அண்டை சராசரி கூட நிலைத்தன்மையை கணிசமாக மேம்படுத்த முடியும்.
நுட்பம் 4: ரெசொலூஷன் அப்ஸாம்பிளிங்
விவாதிக்கப்பட்டபடி, டெப்த் மேப் பொதுவாக வண்ணப் படத்தை விட மிகக் குறைந்த ரெசொலூஷனில் இருக்கும். துல்லியமான பிக்சல்-க்கு-பிக்சல் மறைப்பைச் செய்ய, நாம் ஒரு உயர்-ரெசொலூஷன் டெப்த் மேப்பை உருவாக்க வேண்டும்.
- பைலினியர் இன்டர்போலேஷன்: இது எளிமையான முறை. உங்கள் ஷேடரில் குறைந்த-ரெசொலூஷன் டெப்த் டெக்ஸ்சரை மாதிரி எடுக்கும்போது, GPU-வின் வன்பொருள் மாதிரி தானாகவே நான்கு அருகிலுள்ள டெப்த் பிக்சல்களைக் கலக்க முடியும். இது வேகமானது ஆனால் மிகவும் மங்கலான விளிம்புகளை விளைவிக்கும்.
- விளிம்பு-அறியும் அப்ஸாம்பிளிங்: ஒரு மேம்பட்ட அணுகுமுறை உயர்-ரெசொலூஷன் வண்ணப் படத்தை ஒரு வழிகாட்டியாகப் பயன்படுத்துகிறது. தர்க்கம் என்னவென்றால், வண்ணப் படத்தில் ஒரு கூர்மையான விளிம்பு இருந்தால் (எ.கா., ஒரு ஒளி சுவருக்கு எதிராக ஒரு இருண்ட நாற்காலியின் விளிம்பு), டெப்த் மேப்பிலும் ஒரு கூர்மையான விளிம்பு இருக்க வேண்டும். இது பொருள் எல்லைகளுக்கு குறுக்கே மங்கலாவதைத் தடுக்கிறது. புதிதாக செயல்படுத்துவது சிக்கலானதாக இருந்தாலும், முக்கிய யோசனை, ஜாயின்ட் பைலேட்டரல் அப்ஸாம்பிளர் போன்ற நுட்பங்களைப் பயன்படுத்துவதாகும், இது உயர்-ரெசொலூஷன் கேமரா டெக்ஸ்சரில் உள்ள இடஞ்சார்ந்த தூரம் மற்றும் வண்ண ஒற்றுமை இரண்டின் அடிப்படையிலும் ஃபில்டர் எடைகளை மாற்றியமைக்கிறது.
நுட்பம் 5: பிழைத்திருத்தம் மற்றும் காட்சிப்படுத்தல்
நீங்கள் பார்க்க முடியாததை சரிசெய்ய முடியாது. உங்கள் தரக் கட்டுப்பாட்டு கருவிப்பெட்டியில் உள்ள சக்திவாய்ந்த கருவிகளில் ஒன்று, டெப்த் மேப்பை நேரடியாகக் காட்சிப்படுத்தும் திறன் ஆகும். நீங்கள் டெப்த் டெக்ஸ்சரை திரையில் ஒரு குவாடிற்கு ரெண்டர் செய்யலாம். மூல டெப்த் மதிப்புகள் புலப்படும் வரம்பில் இல்லாததால், உங்கள் ஃப்ராக்மென்ட் ஷேடரில் அவற்றை இயல்பாக்க வேண்டும்.
கருத்தியல் இயல்பாக்குதல் ஷேடர் தர்க்கம்:
float raw_depth = texture2D(depth_map, tex_coord).r;
float depth_in_meters = raw_depth * rawValueToMeters;
// காட்சிப்படுத்தலுக்காக 0-1 வரம்பிற்கு இயல்பாக்குங்கள், எ.கா., 5 மீட்டர் அதிகபட்ச வரம்பிற்கு
float max_viz_range = 5.0;
float normalized_color = clamp(depth_in_meters / max_viz_range, 0.0, 1.0);
gl_FragColor = vec4(normalized_color, normalized_color, normalized_color, 1.0);
மூல, வடிகட்டப்பட்ட, மற்றும் அப்ஸாம்பிள் செய்யப்பட்ட டெப்த் மேப்களை அருகருகே பார்ப்பதன் மூலம், உங்கள் வடிகட்டுதல் அளவுருக்களை உள்ளுணர்வாக சரிசெய்யலாம் மற்றும் உங்கள் தரக் கட்டுப்பாட்டு வழிமுறைகளின் தாக்கத்தை உடனடியாகக் காணலாம்.
அத்தியாயம் 5: ஒரு केस स्टडी - வலிமையான மறைப்பை செயல்படுத்துதல்
இந்தக் கருத்துக்களை டெப்த் API-க்கான மிகவும் பொதுவான பயன்பாட்டுடன் இணைப்போம்: மறைப்பு. குறிக்கோள், ஒரு மெய்நிகர் பொருள் நிஜ உலகப் பொருட்களுக்குப் பின்னால் சரியாகத் தோன்றுமாறு செய்வதாகும்.
முக்கிய தர்க்கம் (ஃப்ராக்மென்ட் ஷேடரில்)
இந்த செயல்முறை உங்கள் மெய்நிகர் பொருளின் ஒவ்வொரு பிக்சலுக்கும் நடக்கிறது:
- மெய்நிகர் ஃப்ராக்மென்ட்டின் டெப்த்-ஐப் பெறுங்கள்: வெர்டெக்ஸ் ஷேடரில், வெர்டெக்ஸின் கிளிப்-ஸ்பேஸ் நிலையை நீங்கள் கணக்கிடுகிறீர்கள். இந்த நிலையின் Z-கூறு, பெர்ஸ்பெக்டிவ் வகுப்பிற்குப் பிறகு, உங்கள் மெய்நிகர் பொருளின் ஆழத்தைக் குறிக்கிறது. இந்த மதிப்பை ஃப்ராக்மென்ட் ஷேடருக்கு அனுப்பவும்.
- நிஜ-உலக டெப்த்-ஐப் பெறுங்கள்: ஃப்ராக்மென்ட் ஷேடரில், தற்போதைய மெய்நிகர் ஃப்ராக்மென்ட்டுடன் தொடர்புடைய டெப்த் மேப்பில் உள்ள பிக்சல் எது என்பதைக் கண்டுபிடிக்க வேண்டும். உங்கள் ஃப்ராக்மென்ட்டின் வியூ-ஸ்பேஸ் நிலையை டெப்த் மேப்பின் டெக்ஸ்சர் ஒருங்கிணைப்புகளாக மாற்ற API வழங்கிய `normDepthFromViewMatrix`-ஐப் பயன்படுத்தலாம்.
- நிஜ டெப்த்-ஐ மாதிரி எடுத்து செயலாக்குங்கள்: அந்த டெக்ஸ்சர் ஒருங்கிணைப்புகளைப் பயன்படுத்தி உங்கள் (முன்னுரிமையாக, முன்-வடிகட்டப்பட்ட மற்றும் அப்ஸாம்பிள் செய்யப்பட்ட) டெப்த் மேப்பை மாதிரி எடுக்கவும். மூல மதிப்பை `rawValueToMeters`-ஐப் பயன்படுத்தி மீட்டர்களுக்கு மாற்ற நினைவில் கொள்ளுங்கள்.
- ஒப்பிட்டு நிராகரியுங்கள்: உங்கள் மெய்நிகர் ஃப்ராக்மென்ட்டின் ஆழத்தை நிஜ-உலக ஆழத்துடன் ஒப்பிடவும். மெய்நிகர் பொருள் தொலைவில் இருந்தால் (அதிக டெப்த் மதிப்பைக் கொண்டிருந்தால்) அந்த பிக்சலில் உள்ள நிஜ-உலகப் பொருளை விட, அது மறைக்கப்படுகிறது. GLSL-ல், அந்த பிக்சலை ரெண்டர் செய்வதை முற்றிலுமாக நிறுத்த `discard` என்ற முக்கிய சொல்லைப் பயன்படுத்துகிறீர்கள்.
தரக் கட்டுப்பாடு இல்லாமல்: மறைப்பின் விளிம்புகள் கட்டம் கட்டமாக இருக்கும் (குறைந்த இடஞ்சார்ந்த ரெசொலூஷன் காரணமாக) மற்றும் சிமிட்டும் அல்லது சீறும் (டெம்போரல் இரைச்சல் காரணமாக). இது உங்கள் மெய்நிகர் பொருளுக்கு ஒரு இரைச்சல் மிக்க மாஸ்க் கரடுமுரடாகப் பயன்படுத்தப்பட்டது போல் இருக்கும்.
தரக் கட்டுப்பாட்டுடன்: அத்தியாயம் 4-இலிருந்து நுட்பங்களைப் பயன்படுத்துவதன் மூலம்—தரவை நிலைப்படுத்த ஒரு டெம்போரல் ஃபில்டரை இயக்குவது, மற்றும் ஒரு விளிம்பு-அறியும் அப்ஸாம்பிளிங் முறையைப் பயன்படுத்துவது—மறைப்பு எல்லை மென்மையாகவும் நிலையானதாகவும் மாறும். மெய்நிகர் பொருள் நிஜ காட்சியின் ஒரு திடமான மற்றும் நம்பகமான பகுதியாகத் தோன்றும்.
அத்தியாயம் 6: செயல்திறன், செயல்திறன், செயல்திறன்
ஒவ்வொரு ஃபிரேமிலும் டெப்த் தரவைச் செயலாக்குவது கணக்கீட்டு ரீதியாக விலை உயர்ந்ததாக இருக்கலாம். மோசமான செயலாக்கம் உங்கள் பயன்பாட்டின் ஃபிரேம் வீதத்தை AR-க்கான வசதியான வரம்பிற்குக் கீழே எளிதில் இழுத்துவிடும், இது ஒரு குமட்டல் அனுபவத்திற்கு வழிவகுக்கும். இங்கே சில தவிர்க்க முடியாத சிறந்த நடைமுறைகள் உள்ளன.
GPU-விலேயே இருங்கள்
ஒருபோதும் உங்கள் பிரதான ரெண்டர் லூப்பில் டெப்த் டெக்ஸ்சர் தரவை CPU-க்குத் திரும்பப் படிக்க வேண்டாம் (எ.கா., `readPixels`-ஐப் பயன்படுத்தி). இந்த செயல்பாடு நம்பமுடியாத அளவிற்கு மெதுவானது மற்றும் ரெண்டரிங் பைப்லைனை நிறுத்தி, உங்கள் ஃபிரேம் வீதத்தை அழித்துவிடும். அனைத்து வடிகட்டுதல், அப்ஸாம்பிளிங், மற்றும் ஒப்பீட்டு தர்க்கங்களும் GPU-வில் ஷேடர்களில் செயல்படுத்தப்பட வேண்டும்.
உங்கள் ஷேடர்களை மேம்படுத்துங்கள்
- பொருத்தமான துல்லியத்தைப் பயன்படுத்துங்கள்: முடிந்தவரை ஃப்ளோட்கள் மற்றும் வெக்டர்களுக்கு `highp`-க்கு பதிலாக `mediump`-ஐப் பயன்படுத்தவும். இது மொபைல் GPU-க்களில் குறிப்பிடத்தக்க செயல்திறன் ஊக்கத்தை வழங்க முடியும்.
- டெக்ஸ்சர் தேடல்களைக் குறைக்கவும்: ஒவ்வொரு டெக்ஸ்சர் மாதிரிக்கும் ஒரு செலவு உண்டு. ஃபில்டர்களைச் செயல்படுத்தும்போது, முடிந்தவரை மாதிரிகளை மீண்டும் பயன்படுத்த முயற்சிக்கவும். எடுத்துக்காட்டாக, ஒரு 3x3 பாக்ஸ் பிளரை இரண்டு பாஸ்களாக (ஒரு கிடைமட்ட, ஒரு செங்குத்து) பிரிக்கலாம், இதற்கு ஒட்டுமொத்தமாக குறைவான டெக்ஸ்சர் வாசிப்புகள் தேவைப்படும்.
- கிளைத்தல் விலை உயர்ந்தது: ஒரு ஷேடரில் உள்ள சிக்கலான `if/else` அறிக்கைகள் செயல்திறன் சிக்கல்களை ஏற்படுத்தக்கூடும். சில நேரங்களில், இரண்டு விளைவுகளையும் கணக்கிட்டு, முடிவைத் தேர்ந்தெடுக்க `mix()` அல்லது `step()` போன்ற ஒரு கணித செயல்பாட்டைப் பயன்படுத்துவது வேகமானது.
WebXR அம்ச பேச்சுவார்த்தையை புத்திசாலித்தனமாகப் பயன்படுத்துங்கள்
நீங்கள் `depth-sensing` அம்சத்தைக் கோரும்போது, விருப்பங்களுடன் ஒரு டிஸ்கிரிப்டரை வழங்கலாம்:
{ requiredFeatures: ['depth-sensing'],
depthSensing: {
usagePreference: ['cpu-optimized', 'gpu-optimized'],
dataFormatPreference: ['luminance-alpha', 'float32']
}
}
- usagePreference: `gpu-optimized` என்பது நிகழ்நேர ரெண்டரிங்கிற்கு நீங்கள் விரும்புவது, ஏனெனில் இது நீங்கள் முதன்மையாக GPU-வில் டெப்த் தரவைப் பயன்படுத்துவீர்கள் என்று கணினிக்கு குறிப்பு கொடுக்கிறது. `cpu-optimized` என்பது ஒத்திசைவற்ற மெஷ் புனரமைப்பு போன்ற பணிகளுக்குப் பயன்படுத்தப்படலாம்.
- dataFormatPreference: `float32`-ஐக் கோருவது உங்களுக்கு மிக உயர்ந்த துல்லியத்தைத் தரும், ஆனால் செயல்திறன் செலவு இருக்கலாம். `luminance-alpha` 16-பிட் டெப்த் மதிப்பை இரண்டு 8-பிட் சேனல்களில் சேமிக்கிறது, இதற்கு உங்கள் ஷேடரில் புனரமைக்க ஒரு சிறிய பிட்-ஷிஃப்டிங் தர்க்கம் தேவைப்படுகிறது, ஆனால் சில வன்பொருளில் அதிக செயல்திறன் கொண்டதாக இருக்கலாம். கணினி தன்னிடம் உள்ளதை வழங்குவதால், நீங்கள் உண்மையில் என்ன வடிவத்தைப் பெற்றீர்கள் என்பதை எப்போதும் சரிபார்க்கவும்.
தகவமைப்புத் தரத்தைச் செயல்படுத்துங்கள்
தரத்திற்கு ஒரு-அளவு-அனைவருக்கும்-பொருந்தும் அணுகுமுறை உகந்ததல்ல. ஒரு உயர்நிலை சாதனம் ஒரு சிக்கலான மல்டி-பாஸ் பைலேட்டரல் ஃபில்டரைக் கையாள முடியும், அதே நேரத்தில் ஒரு குறைந்த-நிலை சாதனம் போராடக்கூடும். ஒரு தகவமைப்புத் தர அமைப்பைச் செயல்படுத்தவும்:
- தொடக்கத்தில், சாதனத்தின் செயல்திறனை அளவிடவும் அல்லது அதன் மாடலைச் சரிபார்க்கவும்.
- செயல்திறனின் அடிப்படையில், வேறு ஷேடரையோ அல்லது வேறு வடிகட்டுதல் நுட்பங்களின் தொகுப்பையோ தேர்ந்தெடுக்கவும்.
- உயர் தரம்: டெம்போரல் EMA + பைலேட்டரல் ஃபில்டர் + விளிம்பு-அறியும் அப்ஸாம்பிளிங்.
- நடுத்தர தரம்: டெம்போரல் EMA + எளிய 3x3 அண்டை சராசரி.
- குறைந்த தரம்: வடிகட்டுதல் இல்லை, வெறும் அடிப்படை பைலினியர் இன்டர்போலேஷன்.
இது உங்கள் பயன்பாடு பரந்த அளவிலான சாதனங்களில் சீராக இயங்குவதை உறுதிசெய்கிறது, ஒவ்வொரு பயனருக்கும் சிறந்த அனுபவத்தை வழங்குகிறது.
முடிவுரை: தரவிலிருந்து அனுபவத்திற்கு
WebXR டெப்த் API ஒரு புதிய நிலை ஆழ்ந்த அனுபவத்திற்கான ஒரு நுழைவாயில், ஆனால் இது சரியான AR-க்கான ஒரு பிளக்-அண்ட்-ப்ளே தீர்வு அல்ல. அது வழங்கும் மூலத் தரவு ஒரு தொடக்கப் புள்ளி மட்டுமே. உண்மையான தேர்ச்சி என்பது தரவின் குறைபாடுகளைப் புரிந்துகொள்வதில் உள்ளது—அதன் ரெசொலூஷன் வரம்புகள், அதன் இரைச்சல், அதன் சுற்றுச்சூழல் பலவீனங்கள்—மற்றும் ஒரு சிந்தனைமிக்க, செயல்திறன்-உணர்வுள்ள தரக் கட்டுப்பாட்டு பைப்லைனைப் பயன்படுத்துவதில் உள்ளது.
டெம்போரல் மற்றும் ஸ்பேஷியல் வடிகட்டுதலைச் செயல்படுத்துவதன் மூலம், துளைகள் மற்றும் ரெசொலூஷன் வேறுபாடுகளை புத்திசாலித்தனமாகக் கையாள்வதன் மூலம், மற்றும் உங்கள் தரவைத் தொடர்ந்து காட்சிப்படுத்துவதன் மூலம், நீங்கள் ஒரு இரைச்சல் மிக்க, நடுக்கமான சிக்னலை உங்கள் படைப்புப் பார்வைக்கான ஒரு நிலையான அடித்தளமாக மாற்ற முடியும். ஒரு அதிர்ச்சியூட்டும் AR டெமோவிற்கும் உண்மையிலேயே நம்பகமான, ஆழ்ந்த அனுபவத்திற்கும் இடையிலான வேறுபாடு பெரும்பாலும் இந்த டெப்த் தகவலின் கவனமான நிர்வாகத்தில் உள்ளது.
நிகழ்நேர டெப்த் சென்சிங் துறை தொடர்ந்து வளர்ந்து வருகிறது. எதிர்கால முன்னேற்றங்கள் AI-மேம்படுத்தப்பட்ட டெப்த் புனரமைப்பு, சொற்பொருள் புரிதல் (ஒரு பிக்சல் 'தரை' அல்லது 'நபர்' என்பதற்கு சொந்தமானது என்பதை அறிவது), மற்றும் அதிக சாதனங்களுக்கு உயர்-ரெசொலூஷன் சென்சார்களைக் கொண்டு வரலாம். ஆனால் தரக் கட்டுப்பாட்டின் அடிப்படைக் கொள்கைகள்—மென்மையாக்குதல், வடிகட்டுதல், மற்றும் தரவைச் சரிபார்த்தல்—திறந்த வலையில் ஆக்மென்ட்டட் ரியாலிட்டியில் சாத்தியமானவற்றின் எல்லைகளைத் தள்ளும் எந்தவொரு டெவலப்பருக்கும் அத்தியாவசிய திறன்களாக இருக்கும்.