cocoa-touch - ARKit人脸追踪PBR

标签 cocoa-touch scenekit arkit metal pbr

我正在使用 ARKit 面部跟踪配置并实时显示面部网格,我可以成功向其添加漫反射和法线贴图,并且它们显示正确,但粗糙度或 Metal 度没有运气,粗糙度没有效果, Metal 度是渲染全黑和暗淡/不透明,我尝试过的事情:

  • 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

值得注意的是,大部分灯光管理都是由 session 完成的,这就是为什么网格在使用时会对环境光和直射光做出响应,而当只有环境光时,网格看起来是介电/粗糙的,当有强烈的定向光时,它看起来 Metal/光滑,是 session 控制这些参数吗?

如果我将面网格导出为 .obj,当在 Xcode 上打开它时,我可以调整 Material 属性,并且可以获得完全 Metal 光泽的面,但是当将相同的参数应用于我的实时网格它们不起作用。

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

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

谢谢!

最佳答案

已解决,我的设置方法中缺少此参数:

sceneView.autoenablesDefaultLighting = true

这会向网格反射添加似乎是环境光的东西,并且粗糙度和 Metal 度正在生效。

关于cocoa-touch - ARKit人脸追踪PBR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59325631/

相关文章:

swift - 如何让SCNNode面向当前相机位置?

swift - 使用 RealityKit 2.0 将自定义纹理应用到 Plane 实体

iOS - pushViewController 与 presentModalViewController 的区别

ios - 在 iOS 游戏中发送信号

iOS+SceneKit : How to apply toon shader on texture?

ios - SKVideoNode 仅在节点或相机移动时在 SCNScene 中渲染

ios - UITableView 无法在 iOS 中显示正确的按钮颜色

ios - UITextField 不辞去第一响应者?

swift - 是否可以在没有平面检测的情况下通过 HitTest 放置物体?

ios - 我们可以在 SceneKit 中以编程方式编辑世界空间中 3D 对象的比例吗?