AR/VR
Unreal для XR: Lumen, Nanite и VR Template
Cyberpunk 2077 RT Overdrive с Lumen-style освещением и Nanite-геометрией - вершина текущего рендеринга. Но VR-версия игры? Нет, потому что Lumen и Nanite физически не помещаются в thermal envelope мобильной гарнитуры. В Unreal Engine 5 разработчик XR-проекта стоит перед двумя противоположными мирами: PC VR на RTX 4080 с полным UE5-стеком и Quest standalone, где приходится играть в шахматы с памятью и тактовой частотой. Знание того, что включать, а что выключать в render-pipeline - именно то, что отличает производственный XR-проект от tech demo, которое не доедет до релиза.
- **Half-Life Alyx (Source 2, не UE5, но та же логика):** PC VR на 90+ FPS требует двух раздельных пайплайнов - один для high-end GPU, второй для Quest 2 wireless
- **Asgard's Wrath 2 (Sanzaru/Meta):** UE5 на Quest 3 standalone - выключенные Lumen и Nanite, кастомный mobile renderer, упор на art direction вместо tech
- **Pavlov VR (Vankrupt):** PC VR на UE5.3 с Lumen для отражений и Nanite для оружейных моделей - возможно только благодаря RTX-классу GPU
VR Template: контракт XR-проекта в Unreal
В Unity мы видели стартовый VR Template - в Unreal аналог появился в Engine 4.27 и был перестроен в UE5 поверх Enhanced Input. Это готовый проект с pawn'ом VRPawn, контроллерами Motion Controller, локомоцией (teleport + snap turn + continuous), grab-механикой через interface-based dispatch и пресетом рендера, оптимизированным под Quest 2/3 и PC VR. Шаблон включает примеры picking, throwing и UI 3D-меню. В отличие от Unity XRI, взаимодействия в Unreal реализуются через Blueprint Interface (IInteractable), что даёт жёсткий контракт между actor'ом и контроллером без хардкода типов.
Ключевые компоненты VR Template: VRPawn (наследник Pawn с MotionControllerComponent для каждой руки), VRTeleportVisualizer (предсказание точки телепорта через параболическую трассу), VRGameMode и VRPlayerController, отвечающие за PlayerStart с трекинговым space. Enhanced Input заменил старый Input Action mapping: action'ы и контексты позволяют переключать управление между состояниями (меню vs геймплей) без if-ов в Tick. Рендер собирается под Forward Renderer с MSAA - mobile VR не выдерживает deferred.
Зачем VR Template Unreal использует Blueprint Interface IInteractable вместо проверки конкретных классов через Cast?
Niagara: GPU-частицы под XR-нагрузку
Cascade - старая система частиц Unreal - не справлялась с современными требованиями: миллион искр, реалистичный дым, симуляция жидкости. Niagara, представленная в UE4.20 и доведённая до production в UE5, переписала всё на GPU compute shaders. Эмиттеры работают на GPU, симуляция масштабируется до миллионов частиц, а modular stack (Spawn, Update, Render) позволяет собирать эффект из переиспользуемых модулей. Для XR Niagara критична: каждая лишняя миллисекунда на CPU частицах рушит 90 FPS, требуемый для комфортного VR.
Niagara разделяет эмиттеры на CPU и GPU sim. CPU sim до ~5000 частиц - быстро для управляемых эффектов (магия в руке игрока). GPU sim - тысячи и миллионы частиц (искры от меча, толпа NPC, симуляция воды). Modular stack: Emitter содержит System Spawn (раз при запуске), Emitter Update (каждый кадр), Particle Spawn (на каждую частицу), Particle Update (каждый кадр на частицу), Render. Эффект собирается drag-and-drop из встроенных модулей: Add Velocity, Apply Gravity, Color over Life, Sprite Renderer.
Почему для VR-проектов критично использовать GPU sim в Niagara вместо CPU sim для массовых эффектов?
Lumen: глобальное освещение в реальном времени
До UE5 глобальное освещение в Unreal требовало многочасовой запечки lightmaps - 4-16 ГБ текстур на сцену, статичность освещения, артефакты на динамической геометрии. Lumen (UE5, 2022) - гибридный решатель GI в реальном времени: ray tracing на signed distance fields для consumer-железа без RT-ядер плюс точная hardware RT на high-end GPU. Художники видят финальное освещение в редакторе моментально, без шага bake. Динамический день-ночь, переключение комнат, разрушения - всё освещается корректно без preprocessing. Для VR Lumen работает в high-end PC VR (RTX 4080+), но НЕ на Quest standalone - там используются legacy lightmaps.
Архитектура Lumen: Surface Cache (упрощённое представление сцены в card-атласе), Screen Traces (быстрый screen-space test первичными лучами), World Space Trace (трассировка по SDF/BVH для проверки видимости), Final Gather (агрегация radiance с учётом BRDF). Это многоуровневая система: дешёвое отдаёт screen-space, точное - hardware RT. Для VR требуется отключить screen percentage scaling и переключить на forward shading при ограниченных GPU - тогда Lumen использует только software-RT fallback с упрощённым качеством.
Почему Lumen не работает на Quest 3 standalone, несмотря на наличие GPU?
Nanite в VR: миллиард треугольников и стерео-рендер
Nanite (UE5, 2022) - виртуализированная геометрия: меш с миллиардом треугольников рендерится за стоимость одного с миллионом. Под капотом - cluster-based LOD на уровне небольших групп треугольников (примерно по 128 штук), software rasterizer на compute shader для мелких кластеров и аппаратный rasterizer для крупных. Это меняет workflow: художник импортирует ZBrush sculpt напрямую без retopology и decimation. Для VR Nanite в UE5.4+ официально поддержан в стерео-рендере: один проход через viewports с инстансингом, расходы примерно 1.5x от моно (а не 2x, как наивная двойная отрисовка).
Особенности Nanite в VR: стерео-инстансинг требует Instanced Stereo Rendering включённым (r.InstancedStereo=1), что снижает CPU overhead на двух глазах. Nanite не поддерживает Quest standalone - тот же тепловой бюджет и bandwidth limit, что и Lumen; вместо Nanite на mobile VR используется традиционный LOD через DistanceFieldShadow и Static Mesh Components. На PC VR (Index, Quest Link, Pico 4 Ultra wired) Nanite работает корректно начиная с UE5.3 и даёт photogrammetry-уровень детализации в реальном времени.
UE5 с Lumen и Nanite даёт photoreal VR из коробки даже на Quest 3
Lumen и Nanite требуют PC VR с десктоп-GPU; на Quest standalone используются legacy lightmaps + статические LOD из-за thermal/bandwidth-ограничений
Quest 3 имеет 15 ватт thermal envelope и 70 GB/s bandwidth, тогда как Lumen и Nanite разрабатывались под 200+ ватт desktop. Производство в UE5 под Quest требует выключения Lumen, Nanite, virtual shadow maps и использования mobile forward renderer с традиционными техниками. Это не недостаток движка, а физическое ограничение мобильного hardware
Почему Nanite даёт 1.5x cost в стерео-рендере, а не 2x, как наивная двойная отрисовка?
Ключевые идеи
- **VR Template** в UE5 даёт VRPawn + Motion Controllers + Enhanced Input + Blueprint Interface IInteractable - open-closed контракт для interaction-системы.
- **Niagara GPU sim** обязательна для массовых частиц в VR: 90+ FPS не оставляет бюджета на CPU-симуляцию даже на десятках эффектов.
- **Lumen** даёт real-time GI без bake на PC VR, но не работает на Quest standalone из-за thermal/bandwidth-ограничений mobile GPU.
- **Nanite в стерео** даёт ~1.5x cost вместо 2x благодаря Instanced Stereo Rendering и переиспользованию cluster culling между глазами; на mobile VR недоступен.
Связанные темы
Unreal-стек XR смыкается с темами стерео-рендера, ray tracing и cross-platform абстракций.
- Unity для XR — В Unity XRI решает то же, что VR Template UE5 - стандартизирует interaction-стек; OpenXR одинаково работает в обоих движках
- Real-Time Ray Tracing: RTX — Lumen использует hardware RT на RTX-картах; вся теория BLAS/TLAS и BVH-traversal применяется и в Unreal-pipeline
Вопросы для размышления
- Lumen и Nanite требуют десктоп-класса GPU. Где проходит граница: VR-разработчик делает один проект под обе платформы (Quest + PC) или две раздельные сборки с разными pipeline?
- Blueprint Interface IInteractable - паттерн open-closed для XR-актеров. Какие категории объектов имеет смысл оставлять hard-coded вместо interface (например, специфические NPC AI)?
- Mobile VR (Quest, Pico) имеет ~15 ватт thermal envelope. Какие техники из UE5 будут доступны на следующем поколении standalone-гарнитур через 3-5 лет, и какие останутся PC-only ещё надолго?