ARKit人脸追踪PBR

时间:2019-12-13 15:37:29

标签: cocoa-touch scenekit arkit metal pbr

我使用的是ARKit人脸跟踪配置并实时显示人脸网格,我可以向其中成功添加漫反射和法线贴图,并且它们可以正确显示,但是没有任何粗糙度或金属感的运气,粗糙度没有影响,并且金属感是呈现所有黑色和暗淡/不透明的东西,我尝试过:

  • self.contentNode?.geometry?.firstMaterial?.roughness.contents = UIColor.black //UIColor.white
  • self.contentNode?.geometry?.firstMaterial?.metalness.contents = UIColor.black //UIColor.white
  • self.contentNode?.geometry?.firstMaterial?.roughness.contents = myMetallnessTextureImage
  • self.contentNode?.geometry?.firstMaterial?.metalness.contents = myRoughnessTextureImage

值得注意的是,大多数光管理是由会话完成的,这就是为什么网格在使用时会响应环境光和直接光的原因,而当只有环境光时,网格看起来是介电的/粗糙的,并且在强方向光下看起来像是金属/光滑的,是会话控制了这些参数吗?

如果我将人脸网格导出为.obj,则在Xcode上打开它时,我可以调整材质属性,并且可以得到全金属光泽的脸,但是当实时对我的网格应用相同的参数时他们不起作用。

最后,我想要的是能够通过使用灰度图使面部的某些部分具有金属感。

我也知道人脸跟踪配置不允许环境贴图(如果有错,请纠正我),因此像纹理这样的完全镜像的外观看起来非常不现实,但是无论如何,它应该可以工作。

谢谢!

1 个答案:

答案 0 :(得分:1)

解决了,我在设置方法中缺少此参数:

sceneView.autoenablesDefaultLighting = true

这会在网格反射中添加似乎是环境光的功能,并且粗糙度和金属性正在起作用。