XR_EXT_frame_synthesis
Name String
XR_EXT_frame_synthesis
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
212
المراجعة
1
حالة التصديق
لم تتم المصادقة عليها
الاعتماد على الإضافات والإصدارات
المساهمون
جيان زانغ، 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 ".
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_EXT_frame_synthesisقبل استخدام XrFrameSynthesisInfoEXT - يجب أن يكون
typeXR_TYPE_FRAME_SYNTHESIS_INFO_EXT -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية -
layerFlagsيجب أن تكون قيمته0أو مجموعة صالحة من قيم XrFrameSynthesisInfoFlagBitsEXT - يجب أن تكون السمة
motionVectorSubImageبنية XrSwapchainSubImage صالحة - يجب أن تكون السمة
depthSubImageبنية XrSwapchainSubImage صالحة
ملاحظة
هناك العديد من الطرق المختلفة لإنشاء 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قبل استخدام XrFrameSynthesisConfigViewEXT - يجب أن يكون
typeXR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXT -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية
منشآت جديدة
توسيع XrCompositionLayerProjectionView :
توسيع XrViewConfigurationView :
ثوابت تعداد جديدة
XR_EXT_FRAME_SYNTHESIS_EXTENSION_NAMEXR_EXT_frame_synthesis_SPEC_VERSIONتوسيع XrStructureType :
XR_TYPE_FRAME_SYNTHESIS_CONFIG_VIEW_EXTXR_TYPE_FRAME_SYNTHESIS_INFO_EXT
المشاكل
سجلّ التعديلات
المراجعة 1، في 31 يناير 2022 (جيان تشانغ)
- الوصف الأولي للإضافة، تم تحويله من fb_space_warp
- التعاون مع المساهمين لتحسين واجهات الإضافات