一、引言
演讲者Scott Wade是一位从事Apple Vision Pro应用和内容的技术艺术家。
本次会话主题是“为空间计算优化3D资产”,将使用样例场景介绍优化内容的步骤。
二、关键考虑因素
1.内容呈现方式:在创建3D内容前,需考虑内容的观看方式,如沉浸式应用、在空间中的体积、共享空间或内容呈现是否根据用户输入改变等,这些选择会影响应用性能和内容优化。
2.GPU工作量:Apple Vision Pro的GPU只负责渲染实际的像素,而非穿透视频。因此,GPU的工作量基于应用在观众眼中的大小,非沉浸式场景可能渲染更快,而沉浸式场景每帧都要渲染整个视图,会增加GPU的工作量。
3.多边形数量:沉浸式场景的多边形数量建议不超过50万三角形,共享空间中的应用建议为25万。同时,建议将大型对象如地形分割成块,以便在相机外时进行剔除。安全目标是将视图中的三角形数量保持在约10万。
三、创建和编辑内容的应用
1.可以使用很多能保存为USD格式的应用,如Blender、Autodesk Maya、SideFX Houdini等,更多信息可访问openusd.org。
2.演讲者将使用Blender 4.1,并介绍了不同USD文件类型的特点和适用场景:
①USDA是ASCII格式,适合多人协作编辑的场景,如Reality Composer Pro的场景格式,可解决合并冲突。
②USDC是二进制格式,存储几何数据等大量数据更高效。
③USDZ是压缩格式,常用于AR资产,包含所有依赖项,如纹理,但不可编辑,需解压。
四、坐标系统和资产导入
1.Reality Kit使用的坐标系统为-Z向前,Y向上,+X向右,而Blender使用Z向上,Y向前。其他应用可能使用不同的单位比例,RealityKit使用米。
2.资产导入时可能出现旋转和比例问题,可在macOS的Preview中更改坐标和比例,具体可查看“ What’s new in USD and MaterialX”会话。
3.演讲者在Blender中创建相机来从观众视角可视化内容,并根据物体与观众的距离设置多边形数量。
五、纹理和材质
1.纹理设置:
①在Reality Composer Pro的Shader Graph中设置材料和纹理,添加颜色图像时需选择颜色空间。
②颜色空间在Reality Composer Pro中由两个术语用破折号分隔,如sRGB - Display P3。第一个术语是传输函数,定义值的编码曲线,sRGB用于感知纹理,Linear用于数据或HDR图像。第二个术语是色域,定义颜色空间的最大范围。Vision Pro使用Display P3作为原生显示色域,其他色域的纹理在Xcode中构建应用时会转换为Display P3。
③灰度纹理如粗糙度、环境光遮蔽纹理默认是数据,不会选择颜色空间,且不会被压缩,可通过纹理打包解决,即将粗糙度、金属度和环境光遮蔽纹理分别用作红、绿、蓝通道,合并成一个纹理文件,可减少PBR资产总大小的40%,且该RGB纹理在构建应用时会被压缩。
④正常地图应使用OpenGL格式,RealityKit使用的正常地图范围是-1到1,而图像通常是0到1,可通过乘以2再减去1来调整范围,Reality Kit中有Normal Map Decode节点可一步完成此操作。
2.材质实例:
Material Instances可重用一种材料的逻辑,同时能够更改暴露的参数,节省设置资产的时间,且对应用性能有益,因为引擎不需要加载相同着色器图的冗余副本。
六、场景优化
1.光照和纹理:整个场景使用无光材料,大多数资产只使用单个纹理,通过在外部应用如Blender中设置光照并将所有阴影信息烘焙到每个对象的单个纹理中来实现。尽量少用RealityKit中的实时灯光,建议尽可能烘焙。
2.透明度:应尽量减少使用alpha透明度,因为透明材料会导致GPU为每一层透明度多次计算相同像素,称为overdraw。例如,演讲者的草使用几何形状,灌木使用不透明核心并仅在边缘添加透明卡片。
3.天空穹顶:需要一个天空穹顶,以避免观众看到场景边缘之外的穿透环境。可以使用在Blender中创建的倒置球体,直径约500米,天空穹顶或天空盒应具有较高分辨率的纹理,至少8K水平分辨率或更高以减少模糊。根据纹理大小,可裁剪用户看不到的部分。天空穹顶和天空盒应使用无光材料,这是需要优化的首要资产之一。
七、自定义基于图像的照明(IBL)
1.原理:使用代表环境的2D图像为资产添加阴影,PBR材料使用此方法。使用IBL的主要原因是使材料能动态响应现实世界环境的变化,如用户在房间中开灯。
2.实现:在场景中添加新的变换组件并命名为IBL,然后附加图像基础光组件,添加预渲染的高动态范围图像,IBL纹理应采用Lat/Long格式(也称为赤道矩形)。由于场景中没有很多高反射物体,所以使用512px的小纹理。还需要添加图像基础光接收器组件,将其应用于PBR对象的父节点,然后选择之前创建的IBL实体进行链接。
八、环境辐射节点
在某些情况下,需要一种不仅仅是无光颜色但又不需要完整PBR着色器的材料,可以使用着色图中的环境辐射节点。例如,对于应该有金属边缘的马车车轮,使用环境辐射节点可在无光图中使用来自IBL的阴影信息,添加镜面辐射和烘焙纹理可使材料看起来更像金属。使用环境辐射节点比普通无光材料更昂贵,但比使用完整PBR材料更便宜,适用于只需要一些动态照明效果的情况。
九、总结和建议
1.查看Reality Composer Pro的统计面板可检查预算情况,如三角形数量、网格、纹理和材料的数量等。目前场景中有108,000个三角形,总纹理大小为1.2GB,在Xcode中编译应用时纹理会被压缩到约300MB。
2.优化3D内容的建议包括:保持低多边形数量,根据屏幕上的大小优化资产,打包纹理以节省内存和利用压缩,尽可能使用无光材料和烘焙纹理,在无光材料不足时考虑使用环境辐射节点,保持天空盒纹理大而IBL纹理小。
十、结语
掌握这些概念后,可以为Apple Vision Pro创建高性能和高保真的3D内容,期待看到开发者在空间计算领域的成果。