GitHub е дом на над 50 милиона разработчици, които работят заедно за хостване и преглед на код, управление на проекти и изграждане на софтуер заедно.

immersive-webhit-test

GitHub е мястото, където светът създава софтуер

Милиони разработчици и компании изграждат, доставят и поддържат своя софтуер на GitHub - най-голямата и най-модерна платформа за развитие в света.

hit-test/hit-testing-explainer.md

API на устройство WebXR - Тестване на удари

Този документ първоначално е проектиран в Работната група за потапяне в мрежата, за да надгражда приложния програмен интерфейс (API) за устройства WebXR. Собствеността върху това съдържание е преместена в Immersive Web Community Group за допълнителна инкубация.

Целта на този документ е да опише дизайн, позволяващ на разработчиците да проверят теста срещу реалната среда. За контекст може да е полезно да прочетете за първи път за създаването на сесия WebXR, пространственото проследяване, механизмите за въвеждане и модула за разширена реалност.

„Тестване на удари“ (известен още като „лъчеизлъчване“) е процес на намиране на пресечни точки между 3D геометрията и лъча, състоящ се от начало и посока. Концептуално тестването на удари може да се направи спрямо виртуална 3D геометрия или реална 3D геометрия. Тъй като WebXR няма никакви познания за 3D графиката на сцената на разработчика, той не предоставя API за тестване на виртуални удари. Той обаче разполага с информация за реалния свят и предоставя метод за разработчици, който да го тества. Най-често в WebXR разработчиците ще проверят теста, използвайки XRInputSource s или XRReferenceSpace от тип "viewer", за да проследят къде трябва да бъде изчертан курсорът на ръчни устройства или дори да отскочат виртуален обект от реалната геометрия. В WebXR сесиите „inline“ и „immersive-vr“ са ограничени до извършване на виртуални тестове за хит, докато сесиите „immersive-ar“ могат да извършват както виртуални, така и реални тестове за хит.

Основните случаи на употреба, активирани от API за тестване на удари, включват:

  • Показване на обект, който изглежда проследява реалните повърхности, към които е насочено устройството или контролерът.
    • Често AR приложенията искат да покажат нещо, което изглежда се придържа към реалните повърхности, докато потребителят премества посочващото устройство. Позицията на обекта трябва да отразява най-съвременните познания за реалния свят към показаната рамка.
    • Честота: това действие се извършва всеки отделен кадър.
  • Поставяне на виртуален обект в реалния свят.
    • За да изглежда виртуалните обекти да са закотвени в реалния свят, те трябва да бъдат разположени на същата височина като обектите от реалния свят (под, маса, стена,.).
    • Честота: това действие обикновено се извършва в отговор на въведеното от потребителя и потенциално може да се случи на всеки кадър.

Тестването на удари срещу елементи на виртуална сцена на приложението изрично е извън обхвата на този API.

Тестването на хитове може потенциално да се използва за оценка на местоположението на реалната геометрия от приложението (например чрез опит за извършване на тест за хит с помощта на десетки лъчи) - този случай на употреба не се поддържа пряко от API, но няма да бъде активно блокиран.

Тъй като API за тест за хит може потенциално да се използва за извличане на данни за потребителската среда, подобно на API за реална геометрия (макар и с по-ниска точност), UA трябва да бъдат внимателни при контролирането на достъпа до API - специфичните механизми за това как постигнатите са извън обхвата на този обяснител.

Като алтернатива на използването на API за тест за хит, приложенията могат да се опитват да извършват произволни тестове за хит, използвайки данни, получени от API за реална геометрия. Поради това не е ясно дали изложеният в мрежата тест за хит би бил полезен и обратната връзка от ранните възприемачи на API ще бъде особено важна.

Тестване на реални хитове

Ключово предизвикателство при активирането на реално тестване на хитове в WebXR е, че изчисляването на резултатите от реалния тест на хитове може да окаже влияние върху производителността и да зависи от вторични нишки в много от основните реализации. От гледна точка на разработчиците обаче, остарелите резултати от тестове за асинхронни удари често са по-малко от полезни.

WebXR се справя с това предизвикателство чрез използването на интерфейсите XRHitTestSource & XRTransientInputHitTestSource, които служат като дръжки за тестване на абонамент. Наличието на източник на тест за хит сигнализира на потребителския агент, че разработчикът възнамерява да поиска резултати от тест за хит в следващите XRFrame s. След това потребителският агент може предварително да изчисли резултатите от теста за хит въз основа на свойствата на източник на теста за хит, така че всеки XRFrame да бъде в комплект с всички „тествани“ резултати от теста за хит.

Заявка за източник на тестов хит

За да създадат XRHitTestSource, разработчиците извикват функцията XRSession.requestHitTestSource (). Тази функция приема речник XRHitTestOptionsInit със следните двойки ключ-стойност:

  • изисква се пространство и е XRSpace, който да се проследява от източника за тестване на удари. Тъй като това XRSpace актуализира своето местоположение всеки кадър, XRHitTestSource ще се движи с него.
  • entityTypes - вижте раздела за ограничаване на резултатите до конкретни обекти.
  • offsetRay не е задължителен и, ако е предвиден, е XRRay, от който трябва да се извърши тестът за попадение. Координатите на лъча са дефинирани с пространство като начало. Ако не е предвиден offsetRay, тестването на удари ще се извърши с помощта на лъч, съвпадащ с космическия произход и насочен в посока "напред" (вижте раздела "Лъчи").

В този пример се създава XRHitTestSource малко над центъра на XRReferenceSpace на "viewer". Това е така, защото разработчикът планира да нарисува елементи на потребителския интерфейс по дъното на поглъщащия изглед на ръчното AR устройство, като същевременно иска да даде възприятието на центриран курсор. За повече информация вижте Предаване на курсори и акценти в Input Explainer.

Предварителна регистрация за преходни източници на вход

Въпреки че създаването на асинхронно създаване на тестови източник е полезно в много сценарии, то е проблематично за преходни източници на вход. Ако се изиска XRHitTestSource в отговор на събитието inputsourceschange с помощта на API XRSession.requestHitTestSource (), може да отнеме няколко кадъра, преди източникът на тестовия хит, създаден в отговор, да може да предостави резултати от тестовия хит, по това време входният източник може вече да не е съществуват. Това може да е така дори при еднокадрово закъснение между заявката за създаване на източник на тестов удар и нейното създаване. Поради потенциалните въздействия върху производителността, споменати в раздел Реално тестване на хитове, е важно WebXR да не извършва тестове за хит за входни източници, от които разработчикът не се нуждае.

За да се справи с този проблем и все още да даде възможност на уеб приложенията да поискат източници на тест за преходни източници на вход, приложенията могат да използват XRSession.requestHitTestSourceForTransientInput ():

Методът XRSession.requestHitTestSourceForTransientInput () приема речник със следните двойки ключ-стойност:

  • profile е задължителен и указва името на входния профил (вижте имената на входния профил), на което преходният източник на входен сигнал трябва да съвпада, за да бъде разгледан за тест за хит, след като бъде създаден (например в отговор на потребителския вход).
  • entityTypes - вижте раздела за ограничаване на резултатите до конкретни обекти.
  • offsetRay не е задължителен и указва XRRay, за който трябва да се извърши тестът за попадение. Лъчът ще се интерпретира като че ли спрямо targetRaySpace на преходния източник на вход, който съответства на профила, споменат по-горе.

Хитови резултати от теста

За да получат резултати от синхронни тестове за хит за конкретен кадър, разработчиците извикват XRFrame.getHitTestResults (), предавайки XRHitTestSource като параметър hitTestSource. Тази функция ще върне FrozenArray, в който XRHitTestResult s са подредени по разстояние по XRRay, използван за извършване на тест за попадение, с най-близката в 0-ата позиция. Ако не съществуват резултати, масивът ще има дължина нула. Интерфейсът XRHitTestResult ще изложи метод, getPose (XRSpace baseSpace), който може да се използва за заявка на позицията на резултата. Ако в текущия кадър връзката между XRSpace, предадена на параметъра baseSpace, не може да бъде локализирана спрямо резултата от теста на удара, функцията ще върне null .

За да се получат резултати от тест за хит за преходни абонаменти за тест за хит на преходен източник в даден кадър, разработчиците извикват XRFrame.getHitTestResultsForTransientInput (), предаващ XRTransientInputHitTestSource като параметър hitTestSource. Тази функция ще върне FrozenArray. Всеки елемент от масива ще съдържа екземпляр на входния източник, който е бил използван за получаване на резултатите, а действителните резултати от теста за попадение ще се съдържат в резултатите от FrozenArray, подредени по разстоянието по лъча, използван за извършване на теста за попадение, с най-близкия резултат на 0-а позиция.

Ограничаване на резултатите до конкретни обекти

Резултатите от теста за хит, върнати от основната платформа, могат да съдържат информация за реалния обект, който е причинил присъствието на резултата от теста за хит. Примерите за обектите включват равнини и точки с характеристики. Приложението може да посочи какъв вид обекти трябва да се използват за определен абонаментен тест за посещение, като зададе стойност на ключ entityTypes в XRHitTestOptionsInit/XRTransientInputHitTestOptionsInit:

Използването на множество стойности в набора от масиви за ключ entityTypes ще се третира като логически филтър "или". Например entityTypes: ["plane", "point"] би означавало, че масивите, върнати от XRFrame.getHitTestResults ()/XRFrame.getHitTestResultsForTransientInput () ще съдържат тестове за хит, базирани на реални равнини, както и резултати, базирани на характерни точки, открити в средата на потребителя; това са резултатите от теста за попадение, чиито обекти отговарят на условие (тип == "равнина") или (тип == "точка"), като се приеме, че типът съдържа тип на дадения обект. Ако приложението не зададе стойност за ключ entityTypes при заявяване на източник на тест за посещение, ще се използва стойност по подразбиране на ["равнина"].

Отписване от тест за хит

За да позволят на приложенията да се отпишат от източници за тестване на удари, източник на тест за хит и източник на тест за хит за преходен вход излагат метод cancel ():

XRRay обект включва едновременно начало и посока, и двете дадени като DOMPointReadOnly s. Началото представлява 3D координата в пространството с компонент aw, който трябва да е равен на 1, а посоката представлява нормализиран 3D насочен вектор с компонент aw, който трябва да бъде равен на 0. XRRay също така дефинира матрица, която представлява преобразуването от лъч произхождащи от [0, 0, 0] и простиращи се надолу по отрицателната ос Z до лъча, описан от началото и посоката на XRRay. Това е полезно за позициониране на графични изображения на лъча.

Комбиниране на виртуално и реално тестване на хитове

Ключов компонент за създаване на реалистично присъствие в XR преживяванията разчита на способността да се знае дали тестът за попадение пресича виртуална или реална геометрия. Например разработчиците може да искат да поставят виртуален обект някъде в реалния свят, но само ако различен виртуален обект вече не е налице. При бъдещи ревизии на спецификациите, когато реалното запушване е възможно с WebXR, разработчиците вероятно ще могат да създават виртуални бутони, които могат да се кликват само ако няма физически обект по пътя.

Съществуват шепа техники, които могат да се използват за определяне на комбиниран резултат от тест за удар. Например разработчикът може да избере да прецени резултатите от теста на ударите по различен начин, ако потребителят вече взаимодейства с определен обект. В този обяснител е предоставен прост пример за комбиниране на резултатите от теста за хит: ако се намери виртуален тест за хит, той се връща, в противен случай пробата връща най-близкия резултат от реалния тест за хит. Тъй като WebXR няма никакви познания за графиката на 3D сцената на разработчика, тази проба използва функцията XRFrame.getPose (), за да създаде лъч и го предава във функцията за виртуално тестване на 3D машината.

Съображения за сигурност и поверителност

Тази функция ще помогне на уебсайта да картографира физическата среда на потребителя с малко ниско ниво на точност. Спецификацията позволява на UA да ограничи използването на хит тестови абонаменти въз основа на XRRay. Използването на много лъчи би позволило на сайта да има по-подробен изглед на околната среда и UA може да реши, че след определен брой заявките са излишни.

Тази функция е блокирана по подразбиране за контексти на трети страни и може да се контролира чрез флага на политиката за функции.

Приложение А: Предложено частично IDL

Това е частичен IDL и се счита за добавка към основния IDL, намерен в основния обяснител.

Понастоящем не можете да извършите това действие.

Влезли сте с друг раздел или прозорец. Презаредете, за да опресните сесията си. Излязохте от друг раздел или прозорец. Презаредете, за да опресните сесията си.