XR_EXT_frame_synthesis
নামের স্ট্রিং
XR_EXT_frame_synthesis
এক্সটেনশনের ধরন
ইনস্ট্যান্স এক্সটেনশন
রেজিস্টার করা এক্সটেনশন নম্বর
212
সংশোধন
1
অনুমোদনের স্ট্যাটাস
অনুমোদিত নয়
এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি
কন্ট্রিবিউটর
জিয়ান ঝাং, Meta Platforms
নীল বেদেকার, Meta Platforms
জিয়াং ওয়েই, Meta Platforms
গুওডং রং, Meta Platforms
ট্রেভর ড্যাশ, Meta Platforms
রেমি আর্নড, Varjo
পাওলো গোমেজ, Samsung Electronics
ব্রাইস হাচিংস, Microsoft
রাইলি প্যাভলিক, Collabora
শুয়াই লিউ, ByteDance
এক নজরে
এই এক্সটেনশন অতিরিক্ত অ্যাপ্লিকেশন প্রদত্ত ডেটার উপর ভিত্তি করে অ্যাপ্লিকেশনগুলিতে ফ্রেম সিন্থেসিস চালু করার জন্য সহায়তা প্রদান করে। অ্যাপ্লিকেশন দ্বারা জেনারেট করা মোশন ভেক্টর ইমেজ এবং ডেপথ ইমেজ রানটাইম দ্বারা ব্যবহার করা যেতে পারে যাতে খুব ভাল কোয়ালিটির ফ্রেম এক্সট্রাপোলেশন এবং রিপ্রোজেকশন করে একটি নতুন ফ্রেম সিন্থেসাইজ করা যায়, যা অ্যাপ্লিকেশনটি 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ভ্যালুর মিটারে পজিটিভ দূরত্ব। অ্যাপ্লিকেশনnearZব্যবহার করতে পারে যাfarZ-এর থেকে বেশি, এটি বোঝাতে যে ডেপথ ভ্যালু উল্টে গেছে।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) স্পেস থেকে প্রাপ্ত হতে হবে, যা এই প্রসঙ্গে Vulkan-স্টাইল কনভেনশন ব্যবহার করে: 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 (একাধিক রেন্ডার টার্গেট) সহ প্রধান ভিউ পাসে রেন্ডার করতে পারে। নির্দিষ্ট পদ্ধতি নির্ধারণ করার সিদ্ধান্ত অ্যাপ্লিকেশন নেয়। 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রানটাইমকে একটি ইঙ্গিত প্রদান করে যে অ্যাপ্লিকেশনটি প্রতিটি ফ্রেম রেন্ডার করার জন্য অতিরিক্ত সময় পছন্দ করে, যার ফলে রানটাইম দ্বারা আরও ফ্রেম সিন্থেসাইজ করা হবে। এটি এমন অ্যাপ্লিকেশনের জন্য উপযোগী হতে পারে যা CPU এবং GPU ব্যবহার (যেমন, ব্যাটারির আয়ু বাড়ানোর জন্য) বা প্রতিটি ফ্রেমের কম্পিউট বাজেট বাড়াতে পছন্দ করে। এই ফ্ল্যাগের ভ্যালু যাই হোক না কেন, রানটাইম যেকোনও বিরতিতে ফ্রেমের জন্য অনুরোধ করতে পারে।
ডিফল্ট হিসেবে, রানটাইম 3D মোশন ভেক্টর ডেটা আশা করে, তাই motionVectorSubImage rgb , motionVectorScale xyz এবং motionVectorOffset xyz ব্যবহার করা হয়, যেমন XrFrameSynthesisInfoEXT-এ বর্ণনা করা হয়েছে।
XR_FRAME_SYNTHESIS_INFO_USE_2D_MOTION_VECTOR_BIT_EXT XrFrameSynthesisInfoEXT layerFlags-এ চালু করা থাকলে, রানটাইম জমা দেওয়া মোশন ভেক্টর ইমেজকে 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 এক্সটেন্ড করা হচ্ছে :
নতুন Enum কনস্ট্যান্ট
XR_EXT_FRAME_SYNTHESIS_EXTENSION_NAMEXR_EXT_frame_synthesis_SPEC_VERSIONXrStructureType এক্সটেন্ড করা হচ্ছে :
XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXTXR_TYPE_FRAME_SYNTHESIS_INFO_EXT
সমস্যা
ভার্সনের ইতিহাস
সংশোধন ১, ২০২২-০১-৩১ (জিয়ান ঝাং)
- প্রাথমিক এক্সটেনশন বিবরণ, fb_space_warp থেকে কনভার্ট করা হয়েছে
- এক্সটেনশন ইন্টারফেস আরও উন্নত করতে কন্ট্রিবিউটরদের সাথে কোলাবরেট করা।