K. *_*lov 6 3d ios scenekit arkit truedepth-camera
我对原深感摄像头的数据处理问题很感兴趣。需要获取人脸的数据,建立人脸的3D模型并将该模型保存在.obj文件中。
由于在 3D 模型中需要存在人的眼睛和牙齿,因此 ARKit / SceneKit 不适合,因为 ARKit / SceneKit 不会用数据填充这些区域。
但是在 SceneKit.ModelIO 库的帮助下,我设法以 .obj 格式导出 ARSCNView.scene(类型 SCNScene)。我试图以此项目为基础:https : //developer.apple.com/documentation/avfoundation/cameras_and_media_capture/streaming_depth_data_from_the_truedepth_camera
在这个项目中,TrueDepth Camera 的工作是使用 Metal 完成的,但如果我没记错的话,使用 Metal 渲染的 MTKView 不是 3D 模型,不能导出为 .obj。
请告诉我是否有办法将 MTKView 导出到 SCNScene 或直接导出到 .obj?如果没有这样的方法,那么如何从 AVDepthData 制作 3D 模型?
谢谢。
可以从 制作 3D 模型AVDepthData,但这可能不是您想要的。一个深度缓冲区就是这样——一个像素距离相机值的二维数组。因此,您从中获得的唯一“模型”不是非常 3D;这只是一张高度图。这意味着您无法从侧面看它,也无法看到从正面看不到的轮廓。(WWDC 2017 深度摄影演讲中附带的“使用深度数据”示例代码展示了一个例子。)
如果你想要更多真正的 3D“模型”,类似于 ARKit 提供的东西,你需要做 ARKit 所做的工作——随着时间的推移使用多个颜色和深度帧,以及一个训练有素的机器学习系统来理解人脸(以及为快速运行该系统而优化的硬件)。你可能不会发现自己这样做是一个可行的选择......
这是可能的使用模型I / O得到一个导出模型出来ARKit的。您需要的代码大纲如下所示:
ARFaceGeometry从面部跟踪会话中获取。
创建MDLMeshBuffer从表面几何公司的S vertices,textureCoordinates和triangleIndices阵列。(Apple 指出纹理坐标和三角形索引数组永远不会改变,因此您只需要创建一次——每次获得新帧时都必须更新顶点。)
MDLSubmesh从索引缓冲区创建一个,MDLMesh从子网格加上顶点和纹理坐标缓冲区创建一个。(可选地,MDLMesh在创建网格后使用函数生成顶点法线缓冲区。)
创建一个空的MDLAsset并将网格添加到其中。
导出MDLAsset到一个 URL(提供一个带有.obj文件扩展名的 URL,以便它推断您要导出的格式)。
该序列根本不需要 SceneKit(或 Metal,或任何显示网格的能力),这可能会根据您的需要证明是有用的。如果您确实想涉及 SceneKit 和 Metal,您可以跳过几个步骤:
ARSCNFaceGeometry在您的 Metal 设备上创建并ARFaceGeometry从面部跟踪会话中传递它。
使用MDLMesh(scnGeometry:)来获取几何模型I / O代表,然后按照步骤4-5以上将其导出到一个.obj文件中。
但是,无论您如何切片……如果对眼睛和牙齿的建模有很强的要求,那么 Apple 提供的任何选项都不会帮助您,因为它们都不会这样做。所以,一些思考:
leftEyeTransform/居中的球体对眼睛建模作弊rightEyeTransform?blendShapes[.jawOpen]将它与脸部一起制作动画。)| 归档时间: |
|
| 查看次数: |
2143 次 |
| 最近记录: |