黑神话悟空使用的UE5制作技术应用于VR、MR设备实践。
实践目标:用UE5呈现银河系几大行星效果,并在Apple Vision Pro平台编译运行。
材质的制作
制作星球首先需要准备好星球的表面纹理、法线、粗糙度、高光度等贴图,这些贴图可以从一些CG资源网上下载
地球材质的制作
地球的材质需要用到5张贴图:地球表面贴图、云层贴图、法线贴图、高光度贴图、黑夜灯光贴图,云层贴图可以实现云层漂浮的效果,黑夜灯光贴图可以实现在地球背光面显示夜晚城市灯光的效果,具体实现见下图
土星的制作
土星因为具有行星环,不像其他的星球一样只需一个球体就可以,因此需要创建一个蓝图,继承自Actor,并为其添加一个球体和平面体组件,球体的材质设置为土星材质,平面体的材质设置为行星环
月球和其他星球材质的制作
月球材质需要一张月球表面贴图和一张法线贴图,其他星球与此类似
星空背景的制作
星空背景需要用到4张纹理立方体贴图,分别是背景贴图、背景贴图的alpha贴图,近处的星星贴图、远处的星星贴图
创建星空背景
将引擎自带的星空球SM_SkySphere拖入场景中,并设置其材质为我们创建的材质即可
星空中飘动的粒子
添加一个Niagara系统,设置粒子状态、粒子的生命周期、粒子形状、发射速率,并为其添加风力、阻力、重力属性,使其在空中随机飘舞
将创建好的粒子拖入场景当中
星球的转动效果
打开关卡蓝图,在Tick事件中遍历星球进行旋转
相机控制
相机控制可以让我们通过键盘的WSADQE键和鼠标来控制视口的上下左右前后移动。
-
创建一个相机蓝图BP_CameraCtrl,继承自Pawn,为该蓝图添加一个相机、弹簧臂、移动组件
16.jpg -
切换事件图表,添加键盘的和鼠标的控制事件
17.jpg
Apple Vision Pro平台编译
必要条件
- 需要配备 Apple 芯片(m1、m2、m3)的 Mac
- 安装了 visionOS 1.1 支持的 Xcode 15.3
Apple Vision Pro 设备设置
- 设置并连接到你的 WiFi
- 确保 visionOS 版本不低于 visionOS 1.1
- 转到“设置”->“隐私和安全”->“开发者模式”,并将其设置为“开启”
Xcode
- 创建新项目
- 选择 visionOS 选项卡,选择 App,然后单击下一步(见图)
- 在沉浸式空间渲染器下,选择“Metal”,然后单击下一步
- 选择要保存项目的文件夹,然后单击“创建”
- 在顶部下拉菜单中选择您的 AVP 设备(见图)。如果您在这里没有看到它,请转到窗口 -> 设备和模拟器,并验证您的 AVP 是否已连接。
- 运行应用程序(Command+R,或左上角的“播放”按钮)
-
启动 Xcode
18.jpg
虚幻引擎
目前仅支持 C++ 项目。
-
通过 GitHub 安装虚幻引擎 5.5(目前不支持从 Epic Games Launcher 下载的二进制版本,但将来会支持)
-
下列控制台变量现在均已在两者中设置
Engine/Platforms/VisionOS/Config/VisionOSEngine.ini
,MyProject/Config/VisionOS/VisionOSEngine.ini
因此您不需要设置它们,除非您有意更改它们。vr.InstancedStereo=False vr.MobileMultiView=False xr.OpenXRAcquireMode=1
-
启动编辑器并创建新的 VR 模板项目并且将自己之前的项目中 Content 目录下的内容迁移过来并修改 Default Maps。
20.jpg -
开启vision os xr插件,在项目设置中的平台将vision os勾上。
21.jpg
-
在项目设置中关闭抗锯齿AA。
23.jpg -
关闭移动端渲染,开启桌面渲染,因为默认的移动端渲染在纯实时的情况下会导致金属反射有问题,会导致部分贴图出现乱纹,然后需要关闭HDR。
25.jpg
-
在xcode设置中,填好账户ID,可以在苹果开发者官网注册,如果是要发行的话则需要购买每年99美元的,然后填好应用的名称。
26.jpg - 在IOS设置中添加plist data数据,可以将下面这段直接复制填写进来:
<key>NSHandsTrackingUsageDescription</key><string>Hand Usage</string><key>NSMicrophoneUsageDescription</key><string>Mic Needed </string><key>NSWorldSensingUsageDescription</key><string>World Sensing</string>
-
在内容浏览器中随便创建一个C++类:Tools -> New C++ Class。
28.jpg -
在打包前,如果场景可以烘焙的话,尽量在烘焙后删除灯光在进行打包,这样可以有效提高FPS,也可以烘焙后,添加部分动态物品并设置可移动的属性,动态灯光除太阳光外其他的控制在6个以内,或者使用自发光材质并开大bloom来代替效果。如果是要打包纯动态的场景,那么阳光所产生的阴影对场景的消耗会很大,需要在细节中关闭投射阴影。
29.jpg -
在打包处,选择vision os打包,发行和开发版本可以暂时不用选择,按默认即可。
30.jpg
遇到的问题
- 当项目在 Vision OS 平台运行的时候崩溃退出,相关错误日志:
Metal texture index exceeded!
- 问题原因是材质或纹理数量超过了 Vision OS 系统Metal 图形API所支持的限制范围,随后用简单的贴图纹理重新制作简化的星球材质,简化星球的显示效果,问题得以解决。
- 如何用 Xcode 调试 UE5 工程?
- 当 UE5 工程在 visionOS 平台编译成功后一般会自动生成适用于 Xcode 的 **.xcworkspace 工程,如果不能的话,用 UnrealEngine 源码中的脚本生成
UnrealEngine/UnrealEngine-5.4/Engine/Build/BatchFiles/Mac/GenerateProjectFiles.sh -game -project="**.uproject"
- 当 UE5 工程在 visionOS 平台编译成功后一般会自动生成适用于 Xcode 的 **.xcworkspace 工程,如果不能的话,用 UnrealEngine 源码中的脚本生成