调暗/加亮ARKit相机在物体后面的进给

Ber*_*lor 2 ios ios11 arkit

我目前正在开发一个ARKit项目,在该项目中,我想使实际的摄影机源变暗,以使3D场景中的对象更加突出。

我到目前为止发现的2个解决方案:

A)手动将CIFilter应用于相机帧,并将其设置为SceneKit场景的背景图像,如本SO帖子所述 ,这里的问题是fps明显下降。

B)像这样设置背景色:

sceneView.scene.background.contents = UIColor(white: 0.0, alpha: 0.2)
Run Code Online (Sandbox Code Playgroud)

可悲的是,alpha <1的颜色仍然是不透明的,因此无论我设置了什么alpha,我都看不到相机的任何内容。

有人能想到其他方法来使摄影机的信号变暗吗?

ric*_*ter 5

您的选项B无效的原因有两个:

  1. 场景视图是不透明的,因此在其后面没有任何东西可以使部分透明的背景色与之融合。
  2. sceneView.scene.background 是实际显示相机图像的内容,因此,如果将其设置为一种颜色,则将不再显示相机图像。

您可能会考虑其他一些选项(大多数未经测试):

  • 如您所链接的答案所引用,用于SCNTechnique设置多遍渲染。在第一遍中,使用excludeCategoryMask设置为使所有像素变暗(或模糊或其他)的着色器渲染整个场景,并设置(和场景内容)为仅渲染背景。在第二遍中,仅渲染要显示的没有该着色器的节点(使用简单的传递着色器)。

  • 保留选项B,但使场景视图不透明。将视图 backgroundColor(而非场景的background)设置为纯色,并设置transparency场景的,background以使相机进给淡出该颜色。

  • 使用几何体为场景创建“物理”背景-例如SCNPlane,大尺寸的物体,作为摄像机的子元素放置在一定距离处,该距离比任何其他场景内容都远。设置飞机的背景颜色和透明度。

  • 使用多个视图- ARSCNView,非透明且具有清晰的背景,以及仅显示摄像机供稿的另一个视图(不一定是SceneKit视图)。UIVisualEffectView混淆其他视图(或放入其他有趣的事物,如)以遮盖相机供稿。

  • 向Apple提出一个有关sceneView.background未获得节点和材质获得的全套阴影自定义选项(滤镜,着色器修改器,完整的着色器程序)等的错误,如果没有该选项,则自定义背景比自定义场景的其他方面要困难得多。

  • 谢谢你的详细解答!我最喜欢多通道选项,但在短期内,我使用了一个巨大的黑色 SCNBox,透明度为 0.5,比我场景中的任何东西都大。它必须比 zFar 小,而且 zFar 似乎被限制在 ~13k,所以我的可见对象不能比这更远,但现在它是一个hacky 解决方案。 (2认同)