Найти тему
8bitsage gamedev

Unreal Engine 5 и VR с нуля. Часть 8. PreAlpha Darts. Assets Redirectors. Выбор Preview Platform. Oculus MRC. PSO Caching.

Оглавление

Введение

Эта статья будет посвящена завершению прохождения курса "Oculus VR Production for Unreal Engine". В этой статье я расскажу, какие проблемы я встретил при прохождении курса, и как я решал эти проблемы.

Так же я завершил проходить курс по блюпринтам, благодаря ему, я стал лучше понимать как работать с блюпринтами.

Выбор Preview Platform. Android Vulkan Mobile

Из-за ограничений платформ на которые мы разрабатываем продукт, визуальное отображение будет меняться.

Для того чтобы видеть, как игра будет выглядеть в шлеме Meta Quest, необходимо включить превью Android Vulkan Mobile:

Settings>Preview Platform>Android Vulkan Mobile

После компиляции шейдеров, появится иконка Андроид слева от запуска сцены. Таким образом, можно будет переключать Preview Platform.

Проблема 1. Не собирался билд Android (Решено)

В уроке 38 мы делаем пробный билд игры. У меня билд не собирался, из-за ошибок редиректа.

Изучив проблему, я понял, что копируя и перенося некоторые блюпринты и объекты, создавались файлы ссылок на старое местонахождение этих объектов. Избавляться от них, надо с помощью Fix Up Redirectors.

-2

Документация о Redirectors:

Asset Redirectors in Unreal Engine | Unreal Engine 5.3 Documentation | Epic Developer Community

Гайд по применению Fix Up Redirectors:

What are Redirectors and How do you Fix Them Unreal Engine 5 Tutorial

После фикса редиректов, сборка проекта успешно была завершена.

Проблема 2. Не запускается игра с плагином Online Subsystem Oculus (Решено)

-3

Необходимо отключить Online Subsystem Oculus, так как вместо него используются плагин Meta XR.

-4

После смены плагина на Meta XR, необходимо заменить функцию проверки собственности на игру.

-5

Проблема 3. Крашится игра в Android Vulkan Mobile (Решено)

При запуске игры на Meta Quest 3, падает такой лог:

-6

Так же падает Unreal Engine при запуске игры в режиме Android Vulkan Mobile (получается, предтестовый запуск Vulkan Mobile можно делать локально, Он будет соответствовать запуску на VR шлеме)

LoginId:615e6279457b63b6d363f1b7360a3162 EpicAccountId:680cd586d6834a7ab5167e3ae83ba308

Assertion failed: !ScreenTexture.Texture->Desc.IsTextureArray() [File:D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\ScreenPass.cpp] [Line: 83]

UnrealEditor_Renderer!AddMobilePostProcessingPasses() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\PostProcess\PostProcessing.cpp:2575]
UnrealEditor_Renderer!FMobileSceneRenderer::Render() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\MobileShadingRenderer.cpp:1118]
UnrealEditor_Renderer!RenderViewFamilies_RenderThread() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\SceneRendering.cpp:4574]
UnrealEditor_Renderer!`FRendererModule::BeginRenderingViewFamilies'::`87'::<lambda_3>::operator()() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\SceneRendering.cpp:4848]
UnrealEditor_Renderer!TEnqueueUniqueRenderCommandType<`FRendererModule::BeginRenderingViewFamilies'::`87'::FDrawSceneCommandName,`FRendererModule::BeginRenderingViewFamilies'::`87'::<lambda_3> >::DoTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\RenderCore\Public\RenderingThread.h:209]
UnrealEditor_Renderer!TGraphTask<TEnqueueUniqueRenderCommandType<`FRendererModule::BeginRenderingViewFamilies'::`87'::FDrawSceneCommandName,`FRendererModule::BeginRenderingViewFamilies'::`87'::<lambda_3> > >::ExecuteTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:1265]
UnrealEditor_Core!FNamedTaskThread::ProcessTasksNamedThread() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:758]
UnrealEditor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:649]
UnrealEditor_RenderCore!RenderingThreadMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:411]
UnrealEditor_RenderCore!FRenderingThread::Run() [D:\build\++UE5\Sync\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:537]
UnrealEditor_Core!FRunnableThreadWin::Run() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:149]
LoginId:615e6279457b63b6d363f1b7360a3162 EpicAccountId:680cd586d6834a7ab5167e3ae83ba308 Assertion failed: !ScreenTexture.Texture->Desc.IsTextureArray() [File:D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\ScreenPass.cpp] [Line: 83] UnrealEditor_Renderer!AddMobilePostProcessingPasses() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\PostProcess\PostProcessing.cpp:2575] UnrealEditor_Renderer!FMobileSceneRenderer::Render() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\MobileShadingRenderer.cpp:1118] UnrealEditor_Renderer!RenderViewFamilies_RenderThread() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\SceneRendering.cpp:4574] UnrealEditor_Renderer!`FRendererModule::BeginRenderingViewFamilies'::`87'::<lambda_3>::operator()() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\SceneRendering.cpp:4848] UnrealEditor_Renderer!TEnqueueUniqueRenderCommandType<`FRendererModule::BeginRenderingViewFamilies'::`87'::FDrawSceneCommandName,`FRendererModule::BeginRenderingViewFamilies'::`87'::<lambda_3> >::DoTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\RenderCore\Public\RenderingThread.h:209] UnrealEditor_Renderer!TGraphTask<TEnqueueUniqueRenderCommandType<`FRendererModule::BeginRenderingViewFamilies'::`87'::FDrawSceneCommandName,`FRendererModule::BeginRenderingViewFamilies'::`87'::<lambda_3> > >::ExecuteTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:1265] UnrealEditor_Core!FNamedTaskThread::ProcessTasksNamedThread() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:758] UnrealEditor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:649] UnrealEditor_RenderCore!RenderingThreadMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:411] UnrealEditor_RenderCore!FRenderingThread::Run() [D:\build\++UE5\Sync\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:537] UnrealEditor_Core!FRunnableThreadWin::Run() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:149]

Я создал новый шаблон VR в UE5.3.2, настроил его так же как мой проект и тестовый шаблон запускается исправно. Вероятно, что-то присутствует в проекте, что его ломает.

Решение проблемы: я удалил все строчки настроек под [/Script/Engine.RendererSettings]

-8

Редактор открыл проект со стандартными настройками и игра успешно запустилась в режиме Android Vulkan Mobile:

-9

Было замечено, что включение "Game Discards Unused Material Quality Levels" вызывает краш Vulkan Mobile:

-10

Прикрепляю, что удалил из настроек, я не знаю какая настройка крашила мобильный запуск.

[/Script/Engine.RendererSettings]
r.Mobile.DisableVertexFog=True
r.Mobile.AllowDitheredLODTransition=False
r.Mobile.AllowSoftwareOcclusion=False
r.Mobile.VirtualTextures=False
r.DiscardUnusedQuality=True
r.AllowOcclusionQueries=False
r.MinScreenRadiusForLights=0.030000
r.MinScreenRadiusForDepthPrepass=0.030000
r.MinScreenRadiusForCSMDepth=0.010000
r.PrecomputedVisibilityWarning=False
r.TextureStreaming=True
Compat.UseDXT5NormalMaps=False
r.VirtualTextures=False
r.VirtualTexturedLightmaps=True
r.VT.TileSize=128
r.VT.TileBorderSize=4
r.vt.FeedbackFactor=16
r.VT.EnableCompressZlib=True
r.VT.EnableCompressCrunch=False
r.ClearCoatNormal=False
r.ReflectionCaptureResolution=64
r.ReflectionEnvironmentLightmapMixBasedOnRoughness=True
r.ForwardShading=True
r.VertexFoggingForOpaque=True
r.AllowStaticLighting=True
r.NormalMapsForStaticLighting=False
r.GenerateMeshDistanceFields=False
r.DistanceFieldBuild.EightBit=False
r.GenerateLandscapeGIData=False
r.DistanceFieldBuild.Compress=False
r.TessellationAdaptivePixelsPerTriangle=48.000000
r.SeparateTranslucency=False
r.TranslucentSortPolicy=0
TranslucentSortAxis=(X=0.000000,Y=-1.000000,Z=0.000000)
r.CustomDepth=1
r.CustomDepthTemporalAAJitter=True
r.PostProcessing.PropagateAlpha=0
r.DefaultFeature.Bloom=False
r.DefaultFeature.AmbientOcclusion=False
r.DefaultFeature.AmbientOcclusionStaticFraction=False
r.DefaultFeature.AutoExposure=False
r.DefaultFeature.AutoExposure.Method=0
r.DefaultFeature.AutoExposure.Bias=1.000000
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.EyeAdaptation.EditorOnly=False
r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8
r.DefaultFeature.LocalExposure.HighlightContrastScale=1.0
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8
r.DefaultFeature.LocalExposure.ShadowContrastScale=1.0
r.DefaultFeature.MotionBlur=False
r.DefaultFeature.LensFlare=False
r.TemporalAA.Upsampling=False
r.SSGI.Enable=False
r.AntiAliasingMethod=3
r.DefaultFeature.LightUnits=1
r.DefaultBackBufferPixelFormat=4
r.Shadow.UnbuiltPreviewInGame=True
r.StencilForLODDither=False
r.EarlyZPass=3
r.EarlyZPassOnlyMaterialMasking=False
r.DBuffer=True
r.ClearSceneMethod=1
r.VelocityOutputPass=0
r.Velocity.EnableVertexDeformation=0
r.SelectiveBasePassOutputs=False
bDefaultParticleCutouts=False
fx.GPUSimulationTextureSizeX=1024
fx.GPUSimulationTextureSizeY=1024
r.AllowGlobalClipPlane=False
r.GBufferFormat=1
r.MorphTarget.Mode=True
r.GPUCrashDebugging=False
vr.InstancedStereo=True
r.MobileHDR=False
vr.MobileMultiView=True
r.Mobile.UseHWsRGBEncoding=True
vr.RoundRobinOcclusion=True
vr.ODSCapture=False
r.MeshStreaming=False
r.WireframeCullThreshold=5.000000
r.RayTracing=False
r.RayTracing.UseTextureLod=False
r.SupportStationarySkylight=False
r.SupportLowQualityLightmaps=True
r.SupportPointLightWholeSceneShadows=False
r.SupportAtmosphericFog=True
r.SupportSkyAtmosphere=False
r.SupportSkyAtmosphereAffectsHeightFog=False
r.SkinCache.CompileShaders=False
r.SkinCache.DefaultBehavior=1
r.SkinCache.SceneMemoryLimitInMB=128.000000
r.Mobile.EnableStaticAndCSMShadowReceivers=True
r.Mobile.EnableMovableLightCSMShaderCulling=True
r.Mobile.AllowDistanceFieldShadows=False
r.Mobile.AllowMovableDirectionalLights=True
r.MobileNumDynamicPointLights=4
r.MobileDynamicPointLightsUseStaticBranch=True
r.Mobile.EnableMovableSpotlights=False
r.Mobile.EnableMovableSpotlightsShadow=True
r.GPUSkin.Support16BitBoneIndex=False
r.GPUSkin.Limit2BoneInfluences=False
r.SupportDepthOnlyIndexBuffers=True
r.SupportReversedIndexBuffers=True
r.LightPropagationVolume=False
r.Mobile.AmbientOcclusion=False
r.GPUSkin.UnlimitedBoneInfluences=False
r.GPUSkin.UnlimitedBoneInfluencesThreshold=8
r.Mobile.PlanarReflectionMode=0
bStreamSkeletalMeshLODs=(Default=False,PerPlatform=())
bDiscardSkeletalMeshOptionalLODs=(Default=False,PerPlatform=())
VisualizeCalibrationColorMaterialPath=None
VisualizeCalibrationCustomMaterialPath=None
VisualizeCalibrationGrayscaleMaterialPath=None
r.Mobile.AntiAliasing=3
r.Mobile.FloatPrecisionMode=0
r.OpenGL.ForceDXC=0
r.DynamicGlobalIlluminationMethod=1
r.ReflectionMethod=1
r.Shadow.Virtual.Enable=1
r.Nanite.ProjectEnabled=False
bEnableVirtualTextureOpacityMask=True
r.VT.AnisotropicFiltering=True
r.Mobile.EnableNoPrecomputedLightingCSMShader=False
r.Mobile.SupportsGen4TAA=False
xr.VRS.FoveationLevel=0

Проблема 4. Плагин Oculus Spatializer (Oculus Audio) устарел, необходимо заменить на Meta XR Audio. (Решено)

В уроке 39, мы знакомимся с Пространственным звуком, тут тоже не обошлось без проблем.

Плагин Oculus Spatializer (Oculus Audio) Был заменен на Meta XR Audio. Об этом говорится в документации Meta: https://developer.oculus.com/documentation/unreal/audio-osp-ue/

-11

Необходимо скачать плагин Meta XR Audio:

Oculus Developer Center | Downloads

Инструкция Перепаковки Плагина Meta XR Audio для другой версии Unreal Engine:

Meta XR Audio Plugin for Unreal Native - Getting Started: Unreal | Oculus Developers

На момент написания статьи (05.08.2024), я скачивал 67 версию плагина. 67 версия предназначена для версии 5.4 (я использую 5.3.2)

В моем случае команда перепаковки в cmd выглядела так:

D:\Unreal_Engine\UE_5.3\Engine\Build\BatchFiles\RunUAT.bat BuildPlugin -plugin="C:\Users\userPC\Downloads\MetaXRAudio\MetaXRAudio.uplugin" -package="C:\temp\MetaXRAudio"

Спустя 2 минуты плагин упаковался
Спустя 2 минуты плагин упаковался
-13

Далее необходимо скопировать metaxraudio64.dll из загруженного плагина v67 в скомпилированный плагин под нашу версию Unreal Engine. Иначе Unreal не сможет запуститься.

-14

Устранение предупреждения:
LogAudio: Warning: Failed to load MetaXR Reverb Submix from object path '' in MetaXRSettings. Creating 'MetaXR Reverb Submix' as stub.

После установки плагина, это поле имеет пустое значение, задайте Submix из списка.

-15

Доп. инфо: подробный материал о плагинах звука и документации я выложу отдельной статьей - https://dzen.ru/a/ZrR3S540VjW3LL8A

Проблема 5. Нет звука в импортированных ассетах звуков. (Решено)

В каждом импортированном звукоке, необходимо проставить Sound Class

-16

Так же для эффекта Пространственного аудио, необходимо задать настройку, настройку мы создаем сами, после добавления плагина Meta XR audio.

-17
-18

Если эффект не указывать, то аудио будет проигрываться в стерео режиме.

-19

Проблема 6. Ошибка MOBILE PROJECTS SUPPORTING STATIC LIGHT MUST HAVE LQ LIGHTMAPS ENABLED (Решено)

https://forums.unrealengine.com/t/mobile-projects-supporting-static-lighting-must-have-lq-lightmaps-enabled-ue4/251152
https://forums.unrealengine.com/t/mobile-projects-supporting-static-lighting-must-have-lq-lightmaps-enabled-ue4/251152

Для устранения этой ошибки, необходимо включить эту настройку в Project Settings>Engine>Rendering>Support low quality lightmap shader permutatuins

-21

Проблема 7. Устранение Warning о не поддерживании проектом XR функций. (Решено)

Warning появляются при открытии проекта и при сборке билда. Дартс является VR проектом и XR функции ему не нужны.

-22

Для устранения этих предупреждений, необходимо отключить два плагина и убрать упоминания их в проекте по этому видео:

отключаем эти плагины
отключаем эти плагины
UE5.3.2 VR Preview Crash - Fix

Проблема 8. Урок 46. Код С++ предоставленный в курсе не походит для Unreal Engine 5 из-за замены на Meta XR SDK (Не решено)

Пояснение: если вы проходите курс на Unreal Engine 4.25, у вас таких проблем не будет.

В уроке 46 нам предлагают добавить предоставленные курсом файлы в наш проект, но я получаю ошибки компиляции с++.
Я заметил в коде, что используется OVR_Platform.h, но по моему, я его не используют после перехода на Meta XR SDK.

-24

Так же предоставленный код не компилируется в Visual Studio.

Получаю такие ошибки:

------ Building 5 action(s) started ------ 3>[1/5] Compile [x64] OculusOSS.gen.cpp 3>D:\UEProjects\OculusDarts\Source\OculusDarts\OculusOSS.h(15): error C2079: 'AOculusOSS' uses undefined class 'DARTS_API' 3>D:\UEProjects\OculusDarts\Source\OculusDarts\OculusOSS.h(15): error C2143: syntax error: missing ';' before ':' 3>D:\UEProjects\OculusDarts\Source\OculusDarts\OculusOSS.h(15): error C2059: syntax error: 'public' 3>D:\UEProjects\OculusDarts\Source\OculusDarts\OculusOSS.h(16): error C2143: syntax error: missing ';' before '{' 3>D:\UEProjects\OculusDarts\Source\OculusDarts\OculusOSS.h(16): error C2447: '{': missing function header (old-style formal list?) 3>D:\UEProjects\OculusDarts\Intermediate\Build\Win64\UnrealEditor\Inc\OculusDarts\UHT\OculusOSS.gen.cpp(17): error C2027: use of undefined type 'AOculusOSS' 3>D:\UEProjects\OculusDarts\Intermediate\Build\Win64\UnrealEditor\Inc\OculusDarts\UHT\OculusOSS.generated.h(82): note: see declaration of 'AOculusOSS' 3>D:\UEProjects\OculusDarts\Intermediate\Build\Win64\UnrealEditor\Inc\OculusDarts\UHT\OculusOSS.gen.cpp(22): error C2065: 'ThisClass': undeclared identifier 3>D:\UEProjects\OculusDarts\Intermediate\Build\Win64\UnrealEditor\Inc\OculusDarts\UHT\OculusOSS.gen.cpp(22): error C2059: syntax error: ')' 3>D:\UEProjects\OculusDarts\Intermediate\Build\Win64\UnrealEditor\Inc\OculusDarts\UHT\OculusOSS.gen.cpp(25): error C2027: use of undefined type 'AOculusOSS' 3>D:\UEProjects\OculusDarts\Intermediate\Build\Win64\UnrealEditor\Inc\OculusDarts\UHT\OculusOSS.generated.h(82): note: see declaration of 'AOculusOSS' 3>D:\UEProjects\OculusDarts\Intermediate\Build\Win64\UnrealEditor\Inc\OculusDarts\UHT\OculusOSS.gen.cpp(30): error C2065: 'ThisClass': undeclared identifier 3>D:\UEProjects\OculusDarts\Intermediate\Build\Win64\UnrealEditor\Inc\OculusDarts\UHT\OculusOSS.gen.cpp(30): error C2059: syntax error: ')' 3>D:\UEProjects\OculusDarts\Intermediate\Build\Win64\UnrealEditor\Inc\OculusDarts\UHT\OculusOSS.gen.cpp(33): error C2027: use of undefined type 'AOculusOSS' 3>D:\UEProjects\OculusDarts\Intermediate\Build\Win64\UnrealEditor\Inc\OculusDarts\UHT\OculusOSS.generated.h(82): note: see declaration of 'AOculusOSS'

chatGPT объясняет ошибки так:

-25

Из-за отсутствия знаний c++, я пропущу сетевую часть в курсе.

Проблема 9. Урок 48. Oculus MRC. Отличие настройки на Unreal Engine 5 (Решено)

В документации Meta сказано, что Mixed Reality Capture Overview Уже интегрирован в Unreal Engine 5.

https://developer.oculus.com/documentation/unreal/unreal-mrc/
https://developer.oculus.com/documentation/unreal/unreal-mrc/

Документация Mixed Reality Capture (MRC):

Mixed Reality Capture Overview for Unreal Engine | Unreal Engine 5.4 Documentation | Epic Developer Community
Mixed Reality Capture Quick Start for Unreal Engine | Unreal Engine 5.3 Documentation | Epic Developer Community
Mixed Reality Capture in Unreal Engine | Unreal Engine 5.4 Documentation | Epic Developer Community

Поддерживаемые видеоустройства для захвата смешанной реальности:

Supported Video Devices for Mixed Reality Capture in Unreal Engine | Unreal Engine 5.4 Documentation | Epic Developer Community

Проблема 10. Урок 51. Стандартный профилировщик был переименован в Unreal Insights (Unreal Engine 5) (Решено)

В уроке 51 нам показывают стандартный профилировщик Unreal Engine 4, но в Unreal engine 5 он теперь называется Unreal Insights.

Документация:

https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-insights-in-unreal-engine?application_version=5.3

VR Profiling Tools:

VR profiling Tools in Unreal Engine | Unreal Engine 5.4 Documentation | Epic Developer Community

Презентация возможностей Unreal Insights от Unreal Engine

New Features of Insights Unreal Engine's Built In Profiling Tools - Inside Unreal

Проблема 11. Урок 51. Renderdoc 1.34-1.33 крашится, если Unreal Engine использует D3D12 (на dx11, vulkan всё нормально работает) (Решено)

В уроке мы пробуем обсчитать время вызовов Draw Call в сцене. На dx12 приложение крашится.

Решение: установить renderdoc 1.32 - https://renderdoc.org/builds

-27

Со мной связалась поддержка Renderdoc, не знаю что он имел ввиду, но dx12 у меня установлен последней версии

-28

Проблема 12. Warning: Asset has been saved with empty engine version (Решено)

-29

Для устранения этих ворнингов:

1. найдите эти ассеты в проекте
2. Что-то поменяйте в нем (двинуть ноду в блюпринте)
3. Пересохраните ассет

Ворнинг пропадет.

Проблема 13. Урок 38. Создание объединенного кэша PSO немного отличается от Unreal Engine 4. (Решено)

В уроке 38, мы знакомимся с Системой кэширования PSO, но в Unreal Engine 5 сбор кэша PSO отличается.

Документация:

Manually Creating Bundled PSO Caches in Unreal Engine | Unreal Engine 5.3 Documentation | Epic Developer Community

Пример команды cmd для сбора кэша PSO:

"D:\Unreal_Engine\UE_5.3\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" D:\UEProjects\OculusDarts\OculusDarts.uproject -run=ShaderPipelineCacheTools expand D:/PSOCaching/*.rec.upipelinecache D:/PSOCaching/*.shk D:/PSOCaching/CL11122333_OculusDarts_SF_VULKAN_ES31_ANDROID.spc

-30

Далее создайте папку PipelineCaches
по такому пути. D:\UEProjects\OculusDarts\Build\Android_ASTC\PipelineCaches

-31

Собранные в ручную PSO успешно добавлены в билд.

LogShaderPipelineCacheTools
LogShaderPipelineCacheTools

Доп. инфо о PSO Cashe

Setting up PSO Precaching & Bundled PSOs for Unreal Engine
Unreal Engine 5 Android PSO Caching | Community tutorial

Проблема 14. Keystore file is missing. Check the DistributionSettings section in the Android tab of Project Settings (Решено)

Для публикации Shiping APK билда в Alpha канал, необходимо сгенерировать Keystore

-33

Сделать можно по этому гайду:

Но для сработало по другому:

1. Зашел от имени администратора в cmd

-34

2. Вошел в папку java cd "C:\Program Files\Java\jdk-17\bin" (зависит от вашей версии)

3. Ввел команду: keytool -genkey -v -keystore TecDevStudio.keystore -alias TecDevStudio -keyalg RSA -keysize 2048 -validity 10000

4. Сгенерированный ключ создался в папке: "C:\Program Files\Java\jdk-17\bin", скопировал его и вставил в папку проекта: "D:\UEProjects\OculusDarts\Build\Android"

-35

5. Добавил ключ в настройках проекта:

-36

6. Собрать Shiping Build

Проблема 14. Entitlement Check и Ачивки не сработали после выкладывания Alpha Build (Не решено)

Документация:

https://developer.oculus.com/documentation/unreal/ps-entitlement-check/

Set Up for Platform Development with Unreal Engine: Unreal | Oculus Developers
Complete a Data Use Checkup | Oculus Developers
App Deep Linking: Unity | Oculus Developers

Я сделал всё согласно документации, но что-то не заработало(награду мне не присвоили после прохождения игры).

Я оставлю эти ссылки здесь, чтобы однажды вернуться к этой проблеме. Но в данный момент это не самая большая проблема и моей первой платформой для PC VR приложения будет Steam VR.

Выкладываем билд в Alpha Channel

Документация публикации билдов: https://developer.oculus.com/resources/publish/
https://developer.oculus.com/resources/publish-upload-overview/

Для того чтобы выложить билд, необходимо использовать Meta Quest Developer Hub.

App Distibution> выбор вашего приложения>выбираем канал загрузки билда (я загружал альфа билд)

-37

После успешной загрузки, откройте этот канал для других пользователей:

1. Выберите канал куда загрузили приложение
2. сформируйте URL для приглашения в канал других юзеров (ссылка живет 90 дней)
3. Примените автоматическое подтверждение доступа в канал
4. Сохраните настройки канала
5. Поделитесь ссылкой с друзьями и даже собой

-38

6. После этого увидите приложение у себя в библиотеке

7. Скачиваем и играем

-39

Заключение

Курс "Oculus VR Production for Unreal Engine" и курс по блюпринтам, это отличное введение в VR для новичка, которые определенно нужно проходить вместе.

Далее, я планирую начать курс по C++ и если получится, начать изучать создание окружения и локаций в Unreal Engine.