XR_EXT_frame_synthesis

নামের স্ট্রিং

XR_EXT_frame_synthesis

এক্সটেনশনের ধরন

ইনস্ট্যান্স এক্সটেনশন

রেজিস্টার করা এক্সটেনশন নম্বর

212

সংশোধন

1

অনুমোদনের স্ট্যাটাস

অনুমোদিত নয়

এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি

OpenXR 1.0

কন্ট্রিবিউটর

জিয়ান ঝাং, 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 "।

সঠিক ব্যবহার (অন্তর্নিহিত)

মনে রাখবেন

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 স্ট্রাকচারে পাস করতে পারে যাতে সাজেস্ট করা মোশন ভেক্টর ইমেজ রেজোলিউশন সম্পর্কে তথ্য পাওয়া যায়।

সঠিক ব্যবহার (অন্তর্নিহিত)

নতুন স্ট্রাকচার

নতুন Enum কনস্ট্যান্ট

  • 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 থেকে কনভার্ট করা হয়েছে
    • এক্সটেনশন ইন্টারফেস আরও উন্নত করতে কন্ট্রিবিউটরদের সাথে কোলাবরেট করা।