XR_EXT_frame_synthesis

Name String

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

نظرة عامة

توفّر هذه الإضافة الدعم لتفعيل ميزة "تركيب الإطارات" في التطبيقات استنادًا إلى البيانات الإضافية التي يوفّرها التطبيق. قد يستخدم وقت التشغيل صور متّجه الحركة وصور العمق التي ينشئها التطبيق لإجراء استقراء وإعادة إسقاط للإطارات بجودة عالية من أجل إنشاء إطار جديد، ما يوفّر تجربة سلسة حتى عندما يكون التطبيق قيد التشغيل بمعدّل أقل من عدد اللقطات في الثانية المستهدَف.

تم تصميم هذه الإضافة لتكون مستقلة عن XR_KHR_composition_layer_depth، ويمكن تفعيلهما واستخدامهما في الوقت نفسه لأغراض مختلفة. قد تستخدم السمة XrFrameSynthesisInfoEXT :: depthSubImage بيانات العمق المخصّصة لإنشاء الإطارات، وقد تكون درجة دقتها أقل من السمة XrCompositionLayerDepthInfoKHR :: subImage . يُرجى الاطّلاع على XrFrameSynthesisConfigViewEXT لمعرفة الحلّ المقترَح لـ "depthSubImage".

إرسال صور متّجه الحركة وصور العمق

يتم تحديد بنية 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 بالكامل من وضعية مساحة تطبيق إلى وضعية أخرى بين اللقطات، ما يؤثر في العرض بأكثر من الحركة التي يتم تتبُّعها بين اللقطات. يجب أن تكون السمة appSpaceDeltaPose مطابقة في حال عدم توفّر تحويل XrCompositionLayerProjection :: space في التطبيق. XrPosef :: position في appSpaceDeltaPose يجب أن يكون مرتبطًا بالتطبيق الحالي XrCompositionLayerProjection :: space .
  • يحدّد depthSubImage صورة العمق XrSwapchainSubImage التي سيتم استخدامها لإنشاء الإطارات.
  • ‫minDepth وmaxDepth هما نطاق قيم العمق في depthSubImage، ويجب أن يكونا ضمن النطاق [0.0,1.0] . يشبه ذلك الحدّ الأدنى والحدّ الأقصى لقيم glDepthRange في OpenGL، ولكن مع شرط أن يكون maxDepth ≥ minDepth .
  • ‫nearZ هي المسافة الموجبة بالأمتار لقيمة minDepth في سلسلة تبديل العمق. يمكن للتطبيقات استخدام قيمة nearZ أكبر من farZ للإشارة إلى أنّ قيم العمق معكوسة. nearZ قد تكون غير محدودة.
  • ‫farZ هي المسافة الموجبة بالأمتار لقيمة maxDepth في سلسلة تبديل العمق. farZ قد تكون غير محدودة. يجب أن يعرض وقت التشغيل الخطأ XR_ERROR_VALIDATION_FAILURE إذا كان nearZ == farZ

عند إرسال صور متّجه الحركة وصور العمق مع طبقات العرض، أضِف بنية XrFrameSynthesisInfoEXT إلى سلسلة XrCompositionLayerProjectionView :: next لكل بنية XrCompositionLayerProjectionView في الطبقة المحدّدة.

يجب أن يفسّر وقت التشغيل بيانات متّجه الحركة في قنوات RGB الخاصة بـ motionVectorSubImage، والتي تم تعديلها بواسطة 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]، وهو يختلف عن نطاق NDC في OpenGL. ومع ذلك، لا يقتصر متجه الحركة نفسه على هذا النطاق، بل تعتمد قيمه على حركة البكسل وقد تتجاوز حدود مساحة NDC. على سبيل المثال، إذا كان NDC للبكسل في الإطار السابق هو PrevNDC، وCurrNDC في الإطار الحالي، ولم يكن هناك مقياس أو إزاحة، فإن قيمة متجه الحركة هي " (CurrNDC - PrevNDC) xyz ".

الاستخدام الصالح (ضمني)

ملاحظة

هناك العديد من الطرق المختلفة لإنشاء motionVectorSubImage وdepthSubImage . على سبيل المثال، قد يعرضها التطبيق بدقة أقل مخصّصة لمتجه الحركة (يُرجى الاطّلاع على XrFrameSynthesisConfigViewEXT لمعرفة الدقة المقترَحة)، أو يعرضها في مسار العرض الرئيسي باستخدام MRT (أهداف عرض متعددة). ويعود للتطبيق تحديد الطريقة المحددة. يُنصح باستخدام تنسيقات قنوات البكسل التي تتضمّن أعدادًا عشرية موقَّعة من 16 بت لكل بكسل في 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 إلى استخدام بيانات متّجه الحركة الثنائي الأبعاد.
  • يقدّم XR_FRAME_SYNTHESIS_INFO_REQUEST_RELAXED_FRAME_INTERVAL_BIT_EXT تلميحًا إلى وقت التشغيل بأنّ التطبيق يفضّل وقتًا إضافيًا لعرض كل لقطة، مع المفاضلة بأنّ وقت التشغيل سيصنع المزيد من اللقطات. قد يكون ذلك مفيدًا للتطبيقات التي تفضّل الحفاظ على استخدام وحدة المعالجة المركزية ووحدة معالجة الرسومات (على سبيل المثال، لزيادة عمر البطارية) أو لزيادة ميزانية الحوسبة لكل لقطة. قد يطلب وقت التشغيل اللقطات في أي فاصل زمني، بغض النظر عن قيمة هذه العلامة.

بشكل تلقائي، يتوقّع وقت التشغيل بيانات متّجه الحركة الثلاثي الأبعاد، لذا يتم استخدام motionVectorSubImage rgb وmotionVectorScale xyz وmotionVectorOffset xyz، كما هو موضّح في XrFrameSynthesisInfoEXT .

عند تفعيل XR_FRAME_SYNTHESIS_INFO_USE_2D_MOTION_VECTOR_BIT_EXT في XrFrameSynthesisInfoEXT layerFlags، يفسّر وقت التشغيل صورة متّجه الحركة المُرسَلة على أنّها بيانات متّجه حركة ثنائية الأبعاد، ما يمثّل حركة بكسل ثنائية الأبعاد من الإطار السابق إلى الإطار الحالي. يتم تفسير قيم وحدات البكسل على النحو التالي لبيانات متّجه الحركة الثنائي الأبعاد: motionVector = motionVectorSubImage rg * motionVectorScale xy + motionVectorOffset xy . يتم تجاهل المكوّنات motionVectorSubImage ba وmotionVectorScale zw وmotionVectorOffset zw. قد يؤدي استخدام بيانات متجهات الحركة الثنائية الأبعاد بدلاً من الثلاثية الأبعاد إلى خفض جودة اللقطات الاصطناعية.

يتم تحديد بنية XrFrameSynthesisConfigViewEXT على النحو التالي:

typedef struct XrFrameSynthesisConfigViewEXT {
    XrStructureType    type;
    void*              next;
    uint32_t           recommendedMotionVectorImageRectWidth;
    uint32_t           recommendedMotionVectorImageRectHeight;
} XrFrameSynthesisConfigViewEXT;

أوصاف الأعضاء

  • ‫type هو XrStructureType لهذه البنية.
  • ‫next هو NULL أو مؤشر إلى البنية التالية في سلسلة البنى.
  • ‫recommendedMotionVectorImageRectWidth : عرض صورة العمق ومتّجه الحركة المقترَحَين
  • ‫recommendedMotionVectorImageRectHeight : الارتفاع المقترَح لمتجه الحركة وصورة العمق

عند تفعيل هذه الإضافة، يمكن للتطبيق تمرير بنية XrFrameSynthesisConfigViewEXT في سلسلة XrViewConfigurationView :: next عند استدعاء xrEnumerateViewConfigurationViews للحصول على معلومات حول درجة دقة صورة المتّجه المقترَحة.

الاستخدام الصالح (ضمني)

منشآت جديدة

ثوابت تعداد جديدة

  • 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

المشاكل

سجلّ التعديلات

  • المراجعة 1، في 31 يناير 2022 (جيان تشانغ)

    • الوصف الأولي للإضافة، تم تحويله من fb_space_warp
    • التعاون مع المساهمين لتحسين واجهات الإضافات