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 "।

বৈধ ব্যবহার (অন্তর্নিহিত)

দ্রষ্টব্য

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 layerFlagsXR_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 স্ট্রাকচার পাস করতে পারে

বৈধ ব্যবহার (অন্তর্নিহিত)

নতুন কাঠামো

নতুন এনাম ধ্রুবক

  • 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 থেকে রূপান্তরিত
    • এক্সটেনশন ইন্টারফেসগুলো পরিমার্জন করার জন্য অবদানকারীদের সাথে সহযোগিতা করা।