XGRIDSДокументация
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • Lixel CyberColor

    • Руководство пользователя LCC Studio

      • Начало работы
      • Версия и обновления
      • Загрузка и установка
      • Обзор интерфейса и навигация
      • Перед реконструкцией
      • Реконструкция модели
      • Реконструкция одиночной модели
      • Объединение карт
      • Воздушно-наземное объединение
      • Воздушная реконструкция
      • Мои модели
      • Другие функции
      • Настройки и учётная запись
      • Конвертер
      • Реконструкция по видео
      • Часто задаваемые вопросы
    • LCC Scene Editor

      • Версия и обновления
      • Учётная запись и вход
      • Обзор продукта и главная страница
      • Интерфейс редактора
      • Режимы навигации по сцене
      • Файл
      • Настройки
      • Операции редактирования
      • Окно
      • Глобальная панель инструментов
      • Ресурсы и свойства
      • Левая панель инструментов
      • Точки обзора
      • Портал
      • Skybox
      • Аннотации
      • Измерение
      • Flythrough
      • Отчёт по сцене
      • 3D Layout
      • Мини-карта
      • Preview Mode (Viewer)
      • Справка
      • Часто задаваемые вопросы
      • Точка появления
    • LCC Model Editor

      • Версия и обновления
      • Руководство пользователя
      • Обзор и интерфейс
      • Операции с файлами
      • Инструменты выбора
      • Редактирование моделей
      • Измерение
      • Цветокоррекция
      • Управление ресурсами
      • Настройки и справка
      • Часто задаваемые вопросы
    • Рекомендации по применению

      • Объединение нескольких крупных моделей 3DGS
  • Plugin & SDK

    • Unreal

      • Введение
      • Быстрый старт — Windows
      • Быстрый старт — Linux
      • Быстрый старт — Quest3
      • Редакции и лицензирование
      • Рендеринг
      • Растеризация Tiled (экспериментально)
      • Визуальные настройки
      • Нормали и освещение
      • Редактирование сцены
      • Параметры производительности
      • Руководство по оптимизации производительности
      • Интеграция со сторонними и движковыми плагинами
      • Прокси-меш
      • Анимация загрузки
      • Коллизии
      • Поддержка системы навигации
      • Поддержка однослойной воды
      • Локализация
      • Частые вопросы
      • Устранение неполадок
      • Журналы и диагностика
      • Свяжитесь с нами
      • Рекомендуемые практики

        • Переосвещение 3DGS с помощью меша LixelStudio
      • Справочник API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actor SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • Журнал изменений

        • v3.4.0
        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1
    • Unity

      • Введение в Unity SDK
      • Технические возможности
      • Требования к среде разработки
      • Руководство по быстрому старту для PC
      • Руководство по оптимизации настроек проекта
      • Руководство по разработке для Pico 4 Ultra
      • Руководство по стримингу Pico 4 Ultra с PC
      • Руководство по разработке для Quest 3
      • Руководство по стримингу Quest 3 с PC
      • Руководство по разработке OpenXR
      • Руководство по бизнес-стримингу Pico 4 Ultra
      • Глоссарий
      • FAQ
      • Свяжитесь с нами
      • Руководство по разработке функций

        • Руководство по разработке смешанного рендеринга нескольких сцен
        • Руководство по разработке приёма теней
        • Руководство по разработке освещения в реальном времени
        • Руководство по разработке многокамерного рендеринга
        • Руководство по разработке рендеринга изображений высокого разрешения
        • Руководство по разработке совместимости форматов данных LCC и LCC2
        • Руководство по разработке эффекта загрузки
        • Руководство по разработке переключения режима рендеринга Mip
        • Руководство по разработке привязки к рёбрам и углам
        • Руководство по разработке проецируемых декалей
        • Руководство по разработке видеопроецируемой декали
        • Руководство по разработке подсветки
        • Руководство по разработке обрезки в реальном времени
        • Руководство по разработке коррекции цвета
        • Руководство по разработке получения данных Mesh сцены
        • Руководство по разработке в режиме редактора
        • Руководство по настройке параметров производительности рендеринга
        • Руководство по разработке совместной упаковки приложения и данных
        • Руководство по разработке системы коллизий
        • Руководство по проблемам с разрешениями при разработке на macOS
        • Руководство по разработке компиляции и упаковки для устройств iOS
      • Справочник по API

        • LCCManager
        • Renderer
        • Типы данных
      • Журнал изменений

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14

Руководство по разработке OpenXR

OpenXR — это открытый, свободный от роялти стандарт интерфейса XR (VR/AR/MR), определённый и поддерживаемый Khronos Group. Его основная цель — позволить разработчикам «написать один раз, запускать где угодно», решая проблему фрагментации, когда у разных устройств есть свой собственный набор API. LCC Unity SDK теперь поддерживает стандарт OpenXR, поэтому он может рендерить данные 3DGS на устройствах, совместимых с OpenXR, без SDK, предоставляемого конкретным производителем VR-устройства.

Требования к версиям

Версии программного обеспечения и плагинов, используемые в этом руководстве, приведены ниже. Рекомендуется разрабатывать с теми же версиями; другие непротестированные версии могут иметь проблемы с совместимостью:

Программное обеспечение / ПлагинВерсия
Unityv6000.0.69f1
LCC Unity SDKv2.3.0 и выше

Примечание:

  1. OpenXR — это стандарт, и различные производители VR-устройств могут поддерживать все его функции или только часть из них, поэтому перед использованием необходимо проверить статус поддержки конкретного устройства.
  2. Стандарт OpenXR определяет общие технические спецификации, но специфичные для устройства функции всё же требуют поддержки SDK производителя или OpenXR Extension производителя, таких как ATW (Asynchronous Time Warp), PTW (Late Stage Reprojection) и другие технологии, улучшающие плавность между кадрами.
  3. Это руководство в основном демонстрирует разработку OpenXR на реальных VR-устройствах; LCC Unity SDK не поддерживает разработку настольных приложений OpenXR (кроме PCVR).

Рабочий процесс разработки

Шаг 1: Создайте проект URP

Выберите тип Universal 3D (рендер-конвейер URP) в шаблоне проекта, как показано ниже:

Создание проекта Universal 3D

Создание проекта Universal 3D

Шаг 2: Переключите платформу

После создания проекта выберите File → Build Profiles в меню Unity, чтобы открыть окно сборки, и переключите платформу на Android, как показано ниже:

Переключение платформы на Android в Build Profiles

Переключение платформы на Android в Build Profiles

Шаг 3: Импортируйте Unity OpenXR

Откройте окно UPM через меню Unity Window → Package Manager, выберите Unity Registry в левом списке, введите OpenXR в поле поиска, выберите OpenXR Plugin из результатов поиска и установите его, как показано ниже:

Установка OpenXR Plugin из Unity Registry

Установка OpenXR Plugin из Unity Registry

Шаг 4: Импортируйте XR Interaction Toolkit

Выберите Unity Registry в левом списке, введите XR в поле поиска, выберите XR Interaction Toolkit из результатов поиска и установите его, как показано ниже:

Установка XR Interaction Toolkit из Unity Registry

Установка XR Interaction Toolkit из Unity Registry

Шаг 5: Импортируйте LCC Unity SDK

Откройте окно UPM через меню Unity Window → Package Manager, нажмите + слева, выберите Install package from disk из выпадающего меню, найдите LCC Unity SDK и выберите файл package.json для импорта, как показано ниже:

Импорт LCC Unity SDK через Install package from disk

Импорт LCC Unity SDK через Install package from disk

Шаг 6: Настройте среду Unity

Настройте XR Plug-in Management (платформа Android)

В строке меню Unity выберите File → Project Settings, выберите XR Plug-in Management слева, отметьте OpenXR на вкладке платформы Android и отметьте Initialize XR on Startup, как показано ниже:

Отметка OpenXR и Initialize XR on Startup на платформе Android

Отметка OpenXR и Initialize XR on Startup на платформе Android

Настройте XR Plug-in Management (платформа Desktop)

Поскольку LCC Unity SDK не поддерживает разработку настольных приложений OpenXR, не отмечайте OpenXR и Initialize XR on Startup на платформе Desktop, как показано ниже:

Не отмечайте OpenXR и Initialize XR on Startup на платформе Desktop

Не отмечайте OpenXR и Initialize XR on Startup на платформе Desktop

Примечание: Для настольного PCVR см. Стриминг PCVR.

Настройте режим рендеринга OpenXR и конфигурацию взаимодействия

Выберите пункт OpenXR в разделе XR Plug-in Management и задайте для платформы Android значение Render Mode = Single Pass Instanced или Multi-View. Поскольку OpenXR требует настройки Interaction Profiles, обычно выбирают Oculus Touch Controller Profile или профиль с аналогичными характеристиками производительности устройства, как показано ниже:

Настройка OpenXR Render Mode и Interaction Profiles

Настройка OpenXR Render Mode и Interaction Profiles

Project Validation

Выберите пункт Project Validation в разделе XR Plug-in Management и нажмите Fix All, чтобы завершить необходимые настройки (можно также пока оставить без обработки и создать вручную позже), как показано ниже:

Нажатие Fix All в Project Validation

Нажатие Fix All в Project Validation

Настройте Player (платформа Desktop)

Выберите Player слева в Project Settings, переключитесь на платформу Desktop, разверните раздел Other Settings, снимите флажок Auto Graphics API, задайте для Graphics APIs значения Direct3D12, Vulkan, Direct3D11 и удалите остальные графические API; задайте Color Space = Gamma, как показано ниже:

Настройка графических API и цветового пространства Gamma на платформе Desktop

Настройка графических API и цветового пространства Gamma на платформе Desktop

Примечание: Некоторые VR-устройства не поддерживают цветовое пространство Gamma; в этом случае можно выбрать только цветовое пространство Linear, и LCC-сцены, отрендеренные в цветовом пространстве Linear, будут выглядеть слегка выцветшими.

Настройте Player (платформа Android)

Выберите Player слева в Project Settings, переключитесь на платформу Android, разверните раздел Other Settings, снимите флажок Auto Graphics API, задайте для Graphics APIs значение Vulkan и удалите остальные графические API; задайте Color Space = Gamma, как показано ниже:

Настройка графического API Vulkan и цветового пространства Gamma на платформе Android

Настройка графического API Vulkan и цветового пространства Gamma на платформе Android

Задайте скриптовый бэкенд и ввод для платформы Android

Прокрутите вниз на вкладке Other Settings платформы Android и задайте Minimum API Level = Android 12L (API Level 32) или выше, Scripting Backend = IL2CPP, Target Architectures = ARM64, Active Input Handling = Input System Package (New) или Both, как показано ниже:

Настройка Minimum API Level, Scripting Backend, Target Architectures и Active Input Handling

Настройка Minimum API Level, Scripting Backend, Target Architectures и Active Input Handling

Проверьте Graphics и Quality

Выберите Graphics слева в Project Settings и проверьте Render Asset, соответствующий Default Render Pipeline, используемому платформой Mobile, — Mobile_RPAsset в этом примере, как показано ниже:

Проверка Render Asset для Default Render Pipeline на платформе Mobile

Проверка Render Asset для Default Render Pipeline на платформе Mobile

Выберите Quality слева в Project Settings, проверьте Render Asset, соответствующий Default Render Pipeline, используемому платформой Mobile (Mobile_RPAsset в этом примере), задайте Resolution Scaling Fixed DPI Factor = 0.7, VSync Count = Don't Sync, как показано ниже:

Настройка DPI Factor и VSync в Quality

Настройка DPI Factor и VSync в Quality

Настройте Render Asset

Найдите Render Asset, соответствующий Default Render Pipeline, используемому платформой Mobile (Mobile_RPAsset в этом примере), выберите Asset, и в окне свойств (Inspector): снимите флажки Depth Texture, Opaque Texture, HDR; задайте Anti Aliasing (MSAA) = Disabled, Render Scale = 0.7, Upscaling Filter = Automatic, как показано ниже:

Отключение Depth/Opaque Texture, HDR, MSAA и настройка Render Scale в Render Asset

Отключение Depth/Opaque Texture, HDR, MSAA и установка Render Scale = 0.7 в Render Asset

Найдите соответствующий Renderer для этого Render Asset, — Mobile_Renderer (Universal Renderer Data) в этом примере, — и задайте его свойства в окне свойств (Inspector), как показано ниже:

Настройка свойств Mobile_Renderer (Universal Renderer Data)

Настройка свойств Mobile_Renderer (Universal Renderer Data)

Шаг 7: Создайте сцену

Создайте совершенно новую сцену в Unity, удалите Main Camera и Directional Light, щёлкните правой кнопкой мыши в пустой области окна иерархии (Hierarchy) и выберите XR → XR Origin (VR) во всплывающем меню, чтобы создать необходимые объекты XR.

Шаг 8: Настройте сцену

Выберите GameObject XR Origin (VR) в окне иерархии (Hierarchy) и в компоненте XR Origin окна свойств (Inspector) задайте Tracking Origin Mode значение Floor; остальные свойства — как показано ниже:

Установка Tracking Origin Mode XR Origin в значение Floor

Установка Tracking Origin Mode XR Origin в значение Floor

Выберите GameObject Main Camera под XR Origin (VR) в окне иерархии (Hierarchy) и задайте свойства компонента Camera в окне свойств (Inspector): Clipping Planes Near = 0.3, Far = 5000; Anti-aliasing = No Anti-aliasing; Opaque Texture = Off, Depth Texture = Off; Background Type = Solid Color, Background = чёрный; HDR = Off, MSAA = Off; остальные свойства — как показано ниже:

Настройка свойств компонента Camera для Main Camera под XR Origin (VR)

Настройка свойств компонента Camera для Main Camera под XR Origin (VR)

Шаг 9: Напишите код для загрузки сцены

Щёлкните правой кнопкой мыши Create Empty в окне иерархии (Hierarchy), чтобы создать пустой объект, назовите его LCCManager, нормализуйте его Transform и прикрепите скрипт LCCManager через Add Component, как показано ниже:

Создание пустого объекта LCCManager и прикрепление скрипта LCCManager

Создание пустого объекта LCCManager и прикрепление скрипта LCCManager

Щёлкните правой кнопкой мыши Create Empty в окне иерархии (Hierarchy), чтобы создать ещё один пустой объект, назовите его LCCRenderer и задайте его Transform Rotation.x = -90, Scale.x = -1, как показано ниже:

Создание пустого объекта LCCRenderer и настройка Transform для выравнивания системы координат

Создание пустого объекта LCCRenderer и установка Rotation.x = -90 и Scale.x = -1 для выравнивания систем координат

Rotation.x = -90 и Scale.x = -1 — это преобразование выравнивания из системы координат данных LCC (правая, ось Z вверх) в систему координат Unity (левая, ось Y вверх); см. раздел «Система координат данных LCC» в Введение в Unity SDK.

На этом структура GameObject в окне иерархии (Hierarchy) выглядит, как показано ниже:

Структура окна Hierarchy

Структура окна Hierarchy

Напишите скрипт C# с именем LCCRenderer.cs со следующим кодом:

using LCCCore;
using UnityEngine;
using UnityEngine.XR;

public class LCCRenderer : MonoBehaviour
{
    public LCCManager m_manager;
    public string m_FilePath;

    private LCCCore.Renderer m_renderer;

    void Start()
    {
#if UNITY_EDITOR
        m_manager.SetPlatformType(PlatformType.PC);
        m_renderer = m_manager.GetRender(this.gameObject.transform);
        m_renderer.Load(m_FilePath, onProgress, onLoaded);
#else
        m_manager.SetPlatformType(PlatformType.OpenXR);
        m_renderer = m_manager.GetRender(this.gameObject.transform);
        m_renderer.Load($"{Application.persistentDataPath}/LccData/meta.lcc2", onProgress, onLoaded);
#endif
    }

    private void onProgress(float v)
    {
        Debug.Log("прогресс:" + v);
    }

    private void onLoaded()
    {
        m_manager.SetStartLod(2);
        m_renderer.SetEnvironment(false);
        Debug.Log("Данные загружены");
    }
}

Прикрепите скрипт к GameObject LCCRenderer в окне иерархии (Hierarchy), затем перетащите GameObject LCCManager на свойство Manager скрипта в окне свойств (Inspector) и, наконец, заполните путь к файлу LCC.

Для удобства отладки в редакторе Unity и сборки непосредственно на устройство Android код использует макросы компиляции для различения среды выполнения: в редакторе Unity напрямую используется адрес, заданный через m_FilePath; на устройстве Android используется источник данных на самом устройстве. Данные на устройстве размещаются следующим образом:

  1. Запустите собранное приложение на VR-устройстве один раз.
  2. После установки приложения войдите в его каталог данных (обычно хранилище устройства → Android → data → BundleID приложения → Files; конкретный каталог см. в пути установки приложения Android) и создайте папку LccData в подкаталоге Files.
  3. Скопируйте все исходные данные LCC в папку LccData.

Примечание: На практике рекомендуется размещать источник данных приложения на сервере, а не упаковывать его непосредственно в приложение.

Практики оптимизации

Выполнение описанных выше шагов позволяет нормально рендерить данные LCC на VR-устройстве, но существуют две основные проблемы:

Отображение окна 2D-приложения

Приложения, разработанные по стандарту OpenXR без SDK производителя устройства, не обязательно распознаются как 3D-приложения на VR-устройствах; обычно система VR-устройства рассматривает их как 2D-приложения, поэтому отображается окно 2D-приложения. Для решения этой проблемы есть два подхода:

  • Внедрите SDK производителя устройства или OpenXR extension производителя устройства; тогда программное обеспечение производителя устройства будет обрабатывать связанные вопросы.
  • Настройте AndroidManifest.xml вручную.

Конкретные шаги по настройке Manifest: выберите Player слева в Project Settings, переключитесь на платформу Android, разверните раздел Publishing Settings, отметьте Custom Main Manifest, что создаст пользовательский файл Manifest, как показано ниже:

Отметка Custom Main Manifest для создания пользовательского файла Manifest

Отметка Custom Main Manifest для создания пользовательского файла Manifest

Найдите файл AndroidManifest.xml и добавьте маркер VR, чтобы VR-устройство распознало его как 3D-иммерсивное приложение, и запущенное приложение отображалось как 3D-пространство. Пример:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <application>

        <!--Используется, когда Application Entry задан как GameActivity; в противном случае удалите этот блок activity-->
        <activity android:name="com.unity3d.player.UnityPlayerGameActivity"
                  android:theme="@style/BaseUnityGameActivityTheme"
                  android:resizeableActivity="false">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
            <meta-data android:name="android.app.lib_name" android:value="game" />
        </activity>
    </application>
</manifest>

Подтормаживание при частоте кадров рендеринга ниже 90 FPS

Сам стандарт OpenXR не определяет интерполяцию кадров, сглаживание или связанное содержимое; когда частота кадров не может достичь 90 FPS, при повороте головы или движении будет заметно подтормаживание. Для обеспечения лучшего опыта, особенно для улучшения плавности при ограниченной производительности аппаратного обеспечения, производители устройств обычно предоставляют такие техники, как твининг, интерполяция кадров и сглаживание, например ATW (Asynchronous Time Warp), PTW (Late Stage Reprojection) и т.д.

Если устройство поддерживает OpenXR, производители устройств обычно предоставляют OpenXR Extension или SDK, напрямую поддерживающий OpenXR; в этом случае лучше внедрить SDK производителя устройства для более плавного опыта.

Связанные ссылки

  • Информацию о настройках проекта и оптимизации производительности см. в главах Руководство по оптимизации настроек проекта и Руководство по настройке параметров производительности рендеринга.
  • Возможность экранного рендеринга 3DGS на VR-устройстве составляет около 700 000 гауссовых примитивов; при рендеринге больших сцен рекомендуется задать StartLOD равным 2 и отключить отображение данных окружения; большие сцены будут плавнее при стриминге с PC.