XR_EXT_frame_synthesis
নাম স্ট্রিং
XR_EXT_frame_synthesis
এক্সটেনশন টাইপ
ইনস্ট্যান্স এক্সটেনশন
নিবন্ধিত এক্সটেনশন নম্বর
২১২
সংশোধন
১
অনুমোদনের অবস্থা
অনুমোদিত নয়
এক্সটেনশন এবং সংস্করণ নির্ভরতা
অবদানকারীরা
জিয়ান ঝাং, মেটা প্ল্যাটফর্মস
নীল বেদেকর, মেটা প্ল্যাটফর্মস
জিয়াং ওয়েই, মেটা প্ল্যাটফর্ম
গুওডং রং, মেটা প্ল্যাটফর্ম
ট্রেভর ড্যাশ, মেটা প্ল্যাটফর্মস
রেমি আর্নড, ভারজো
পাওলো গোমেস, স্যামসাং ইলেকট্রনিক্স
ব্রাইস হাচিংস, মাইক্রোসফট
রাইলি পাভলিক, কোলাবোরা
শুয়াই লিউ, বাইটড্যান্স
সংক্ষিপ্ত বিবরণ
এই এক্সটেনশনটি অ্যাপ্লিকেশন দ্বারা প্রদত্ত অতিরিক্ত ডেটার উপর ভিত্তি করে অ্যাপ্লিকেশনগুলিতে ফ্রেম সিন্থেসিস সক্ষম করার জন্য সমর্থন প্রদান করে। অ্যাপ্লিকেশন দ্বারা তৈরি মোশন ভেক্টর ইমেজ এবং ডেপথ ইমেজ রানটাইম দ্বারা উচ্চ মানের ফ্রেম এক্সট্রাপোলেশন এবং রিপ্রজেকশন করে একটি নতুন ফ্রেম সিন্থেসাইজ করতে ব্যবহৃত হতে পারে , যা অ্যাপ্লিকেশনটি নির্ধারিত FPS-এর নিচে চললেও একটি মসৃণ অভিজ্ঞতা প্রদান করে।
এই এক্সটেনশনটি XR_KHR_composition_layer_depth থেকে স্বাধীনভাবে কাজ করার জন্য ডিজাইন করা হয়েছে, এবং ভিন্ন ভিন্ন উদ্দেশ্যে উভয়কেই একই সাথে সক্রিয় ও ব্যবহার করা যেতে পারে । XrFrameSynthesisInfoEXT :: depthSubImage ফ্রেম সিন্থেসিসের জন্য নির্দিষ্ট ডেপথ ডেটা ব্যবহার করতে পারে , এবং এর রেজোলিউশন XrCompositionLayerDepthInfoKHR :: subImage চেয়ে কম হতে পারে । depthSubImage এর প্রস্তাবিত রেজোলিউশনের জন্য XrFrameSynthesisConfigViewEXT দেখুন।
মোশন ভেক্টর ইমেজ এবং ডেপথ ইমেজ জমা দিন
XrFrameSynthesisInfoEXT কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrFrameSynthesisInfoEXT {
XrStructureType type;
const void* next;
XrFrameSynthesisInfoFlagsEXT layerFlags;
XrSwapchainSubImage motionVectorSubImage;
XrVector4f motionVectorScale;
XrVector4f motionVectorOffset;
XrPosef appSpaceDeltaPose;
XrSwapchainSubImage depthSubImage;
float minDepth;
float maxDepth;
float nearZ;
float farZ;
} XrFrameSynthesisInfoEXT;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
layerFlagsহলো XrFrameSynthesisInfoFlagsEXT- এর একটি বিটমাস্ক। -
motionVectorSubImageহলো সেই মোশন ভেক্টর ইমেজ যা ফ্রেম সিন্থেসিসের জন্য ব্যবহৃত হবে এবং যা হলো XrSwapchainSubImage । -
motionVectorScaleহলো একটি XrVector4f যাmotionVectorSubImageএ থাকা মোশন ভেক্টরের ব্যাখ্যাকে স্কেল করে। -
motionVectorOffsetহলো একটি XrVector4f যাmotionVectorSubImageএ মোশন ভেক্টরের ব্যাখ্যাকে অফসেট করে। -
appSpaceDeltaPoseহলো অ্যাপ্লিকেশন দ্বারা প্রয়োগকৃত ক্রমবর্ধমান ট্রান্সফর্ম (যদি থাকে), যা পূর্ববর্তী ফ্রেম থেকে ভিউকে প্রভাবিত করে। কৃত্রিম চলনের অভিজ্ঞতা (স্ক্রিপ্টেড মুভমেন্ট, টেলিপোর্টেশন, ইত্যাদি)-তে অ্যাপ্লিকেশনটি ফ্রেমগুলোর মধ্যে সম্পূর্ণ XrCompositionLayerProjection ::spaceএকটি অ্যাপ্লিকেশন স্পেস পোজ থেকে অন্য পোজে রূপান্তরিত করে, যা ফ্রেমগুলোর মধ্যে ট্র্যাক করা মুভমেন্টের চেয়ে বেশি পরিমাণে ভিউকে প্রভাবিত করে। যখন অ্যাপ্লিকেশনে কোনো XrCompositionLayerProjection ::spaceট্রান্সফর্মেশন থাকে না, তখনappSpaceDeltaPoseঅবশ্যই আইডেন্টিটি হতে হবে।appSpaceDeltaPoseএর মধ্যে থাকা XrPosef ::positionঅবশ্যই বর্তমান অ্যাপ্লিকেশন XrCompositionLayerProjection ::spaceএর সাপেক্ষে হতে হবে। -
depthSubImageহলো সেই ডেপথ ইমেজ XrSwapchainSubImage যা ফ্রেম সিন্থেসিসের জন্য ব্যবহৃত হবে। -
minDepthএবংmaxDepthহলোdepthSubImageএর গভীরতার মানের পরিসর, এবং এগুলি অবশ্যই [0.0,1.0] সীমার মধ্যে থাকতে হবে। এটি OpenGL-এরglDepthRangeএর সর্বনিম্ন এবং সর্বোচ্চ মানের অনুরূপ, তবে এখানে শর্তটি হলো maxDepth ≥ minDepth। -
nearZহলো ডেপথ সোয়াপচেইনেminDepthভ্যালু থেকে মিটারে পরিমাপ করা ধনাত্মক দূরত্ব। অ্যাপ্লিকেশনগুলো ডেপথ ভ্যালুগুলোর বিপরীত অবস্থা বোঝাতেfarZচেয়ে বড়nearZব্যবহার করতে পারে ।nearZঅসীম হতে পারে । -
farZহলো ডেপথ সোয়াপচেইনে থাকাmaxDepthভ্যালু থেকে মিটারে পরিমাপ করা ধনাত্মক দূরত্ব।farZঅসীম হতে পারে । যদিnearZ==farZহয়, তবে রানটাইমকে অবশ্যইXR_ERROR_VALIDATION_FAILUREএররটি রিটার্ন করতে হবে।
প্রজেকশন লেয়ারের সাথে মোশন ভেক্টর ইমেজ এবং ডেপথ ইমেজ জমা দেওয়ার সময়, প্রদত্ত লেয়ারের প্রতিটি XrCompositionLayerProjectionView স্ট্রাকচারের জন্য XrCompositionLayerProjectionView :: next চেইনে একটি XrFrameSynthesisInfoEXT স্ট্রাকচার যোগ করুন।
রানটাইমকে অবশ্যই motionVectorSubImage এর RGB চ্যানেলগুলিতে থাকা মোশন ভেক্টর ডেটা ব্যাখ্যা করতে হবে, যা motionVectorScale এবং motionVectorOffset দ্বারা নিম্নরূপে পরিবর্তিত হয়: motionVector = motionVectorSubImage rgb * motionVectorScale xyz + motionVectorOffset xyz। motionVectorSubImage a, motionVectorScale w এবং motionVectorOffset w উপাদানগুলি উপেক্ষা করা হয়।
মোশন ভেক্টরটি পূর্ববর্তী ফ্রেমের XrFrameEndInfo ::displayTime থেকে বর্তমান ফ্রেমের XrFrameEndInfo ::displayTime পর্যন্ত একটি পিক্সেলের সরণকে নির্দেশ করে। রানটাইম এই তথ্য ব্যবহার করে রেন্ডার করা ফ্রেমটিকে ভবিষ্যতের কোনো ফ্রেমে প্রসারিত করতে পারে ।
মোশন ভেক্টরটি অবশ্যই নর্মালাইজড ডিভাইস কোঅর্ডিনেট (NDC) স্পেস থেকে নির্ণয় করতে হবে, যা এই প্রসঙ্গে ভলকান-স্টাইলের নিয়ম ব্যবহার করে: NDC রেঞ্জকে [-1, -1, 0] থেকে [1, 1, 1] হিসাবে সংজ্ঞায়িত করা হয়, যা OpenGL-এর NDC রেঞ্জ থেকে ভিন্ন। তবে, মোশন ভেক্টরটি নিজে এই রেঞ্জের মধ্যে সীমাবদ্ধ নয়; এর মান পিক্সেলের নড়াচড়ার উপর নির্ভর করে এবং NDC স্পেসের সীমানা ছাড়িয়ে যেতে পারে। উদাহরণস্বরূপ, যদি পূর্ববর্তী ফ্রেমে একটি পিক্সেলের NDC হয় PrevNDC এবং বর্তমান ফ্রেমে হয় CurrNDC, এবং কোনো স্কেল বা অফসেট না থাকে, তাহলে মোশন ভেক্টরের মান হবে " (CurrNDC - PrevNDC) xyz "।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrFrameSynthesisInfoEXT ব্যবহার করার আগে
XR_EXT_frame_synthesisএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_FRAME_SYNTHESIS_INFO_EXTহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। layerFlagsঅবশ্যই0অথবা XrFrameSynthesisInfoFlagBitsEXT মানগুলির একটি বৈধ সংমিশ্রণ হতে হবে।-
motionVectorSubImageঅবশ্যই একটি বৈধ XrSwapchainSubImage স্ট্রাকচার হতে হবে। -
depthSubImageঅবশ্যই একটি বৈধ XrSwapchainSubImage স্ট্রাকচার হতে হবে।
দ্রষ্টব্য
motionVectorSubImage এবং depthSubImage তৈরি করার বিভিন্ন উপায় রয়েছে। উদাহরণস্বরূপ, অ্যাপ্লিকেশনটি সেগুলোকে একটি কম রেজোলিউশনের ডেডিকেটেড মোশন ভেক্টর পাসে রেন্ডার করতে পারে (প্রস্তাবিত রেজোলিউশনের জন্য XrFrameSynthesisConfigViewEXT দেখুন), অথবা MRT (Multiple Render Targets) ব্যবহার করে মূল ভিউ পাসে রেন্ডার করতে পারে। নির্দিষ্ট পদ্ধতিটি বেছে নেওয়ার বিষয়টি অ্যাপ্লিকেশনের উপর নির্ভর করে। motionVectorSubImage এর জন্য প্রতি পিক্সেলে সাইনড ১৬-বিট ফ্লোট চ্যানেল ফরম্যাট ব্যবহার করার পরামর্শ দেওয়া হয়।
ফ্রেম সংশ্লেষণ ফ্ল্যাগ
typedef XrFlags64 XrFrameSynthesisInfoFlagsEXT;
// Flag bits for XrFrameSynthesisInfoFlagsEXT
static const XrFrameSynthesisInfoFlagsEXT XR_FRAME_SYNTHESIS_INFO_USE_2D_MOTION_VECTOR_BIT_EXT = 0x00000001;
static const XrFrameSynthesisInfoFlagsEXT XR_FRAME_SYNTHESIS_INFO_REQUEST_RELAXED_FRAME_INTERVAL_BIT_EXT = 0x00000002;
পতাকার বিবরণ
-
XR_FRAME_SYNTHESIS_INFO_USE_2D_MOTION_VECTOR_BIT_EXTনির্দেশ করে যে 2D মোশন ভেক্টর ডেটা ব্যবহার করা হচ্ছে। -
XR_FRAME_SYNTHESIS_INFO_REQUEST_RELAXED_FRAME_INTERVAL_BIT_EXTফ্ল্যাগটি রানটাইমকে একটি ইঙ্গিত দেয় যে অ্যাপ্লিকেশনটি প্রতিটি ফ্রেম রেন্ডার করার জন্য অতিরিক্ত সময় চায়, যার বিনিময়ে রানটাইম আরও বেশি ফ্রেম সিন্থেসাইজ করবে। এটি সেইসব অ্যাপ্লিকেশনের জন্য উপযোগী হতে পারে যারা সিপিইউ এবং জিপিইউ-এর ব্যবহার কমাতে চায় (যেমন ব্যাটারির আয়ু বাড়ানোর জন্য) অথবা প্রতিটি ফ্রেমের কম্পিউট বাজেট বাড়াতে চায়। এই ফ্ল্যাগের মান নির্বিশেষে, রানটাইম যেকোনো বিরতিতে ফ্রেমের জন্য অনুরোধ করতে পারে ।
ডিফল্টরূপে, রানটাইম 3D মোশন ভেক্টর ডেটা প্রত্যাশা করে, তাই XrFrameSynthesisInfoEXT- এ বর্ণিত অনুযায়ী motionVectorSubImage rgb, motionVectorScale xyz এবং motionVectorOffset xyz ব্যবহৃত হয়।
যখন XrFrameSynthesisInfoEXT layerFlags এ XR_FRAME_SYNTHESIS_INFO_USE_2D_MOTION_VECTOR_BIT_EXT সক্রিয় করা হয়, তখন রানটাইম জমা দেওয়া মোশন ভেক্টর ইমেজটিকে 2D মোশন ভেক্টর ডেটা হিসাবে ব্যাখ্যা করে, যা পূর্ববর্তী ফ্রেম থেকে বর্তমান ফ্রেমে 2D পিক্সেল মুভমেন্টকে প্রতিনিধিত্ব করে। 2D মোশন ভেক্টর ডেটার জন্য পিক্সেল মানগুলি নিম্নরূপ ব্যাখ্যা করা হয়: motionVector = motionVectorSubImage rg * motionVectorScale xy + motionVectorOffset xy। motionVectorSubImage ba, motionVectorScale zw এবং motionVectorOffset zw উপাদানগুলি উপেক্ষা করা হয়। 3D মোশন ভেক্টর ডেটার পরিবর্তে 2D ব্যবহার করলে সংশ্লেষিত ফ্রেমের গুণমান হ্রাস পেতে পারে ।
প্রস্তাবিত সমাধান পান
XrFrameSynthesisConfigViewEXT কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrFrameSynthesisConfigViewEXT {
XrStructureType type;
void* next;
uint32_t recommendedMotionVectorImageRectWidth;
uint32_t recommendedMotionVectorImageRectHeight;
} XrFrameSynthesisConfigViewEXT;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
recommendedMotionVectorImageRectWidth: প্রস্তাবিত মোশন ভেক্টর এবং ডেপথ ইমেজের প্রস্থ। -
recommendedMotionVectorImageRectHeight: প্রস্তাবিত মোশন ভেক্টর এবং ডেপথ ইমেজের উচ্চতা।
এই এক্সটেনশনটি সক্রিয় করা থাকলে, কোনো অ্যাপ্লিকেশন প্রস্তাবিত মোশন ভেক্টর ইমেজ রেজোলিউশন সম্পর্কে তথ্য সংগ্রহের জন্য xrEnumerateViewConfigurationViews কল করার সময় XrViewConfigurationView :: next চেইনে একটি XrFrameSynthesisConfigViewEXT স্ট্রাকচার পাস করতে পারে ।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrFrameSynthesisConfigViewEXT ব্যবহার করার আগে
XR_EXT_frame_synthesisএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXTহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে।
নতুন কাঠামো
XrCompositionLayerProjectionView-কে সম্প্রসারিত করা:
XrViewConfigurationView সম্প্রসারণ করা হচ্ছে :
নতুন এনাম ধ্রুবক
-
XR_EXT_FRAME_SYNTHESIS_EXTENSION_NAME -
XR_EXT_frame_synthesis_SPEC_VERSION XrStructureType সম্প্রসারণ :
-
XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXT -
XR_TYPE_FRAME_SYNTHESIS_INFO_EXT
-
সমস্যা
সংস্করণ ইতিহাস
সংশোধন ১, ২০২২-০১-৩১ (জিয়ান ঝাং)
- প্রাথমিক এক্সটেনশন বিবরণ, fb_space_warp থেকে রূপান্তরিত
- এক্সটেনশন ইন্টারফেসগুলো পরিমার্জন করার জন্য অবদানকারীদের সাথে সহযোগিতা করা।