作者:拍友2502882547 | 来源:互联网 | 2023-01-06 08:13
我目前正在开发一个ARKit项目,在该项目中,我想使实际的摄影机源变暗,以使3D场景中的对象更加突出。
我到目前为止发现的2个解决方案:
A)手动将CIFilter应用于相机帧,并将其设置为SceneKit场景的背景图像,如本SO帖子所述
,这里的问题是fps明显下降。
B)像这样设置背景色:
sceneView.scene.background.cOntents= UIColor(white: 0.0, alpha: 0.2)
可悲的是,alpha <1的颜色仍然是不透明的,因此无论我设置了什么alpha,我都看不到相机的任何内容。
有人能想到其他方法来使摄影机的信号变暗吗?
1> rickster..:
您的选项B无效的原因有两个:
场景视图是不透明的,因此在其后面没有任何东西可以使部分透明的背景色与之融合。
sceneView.scene.background
是实际显示相机图像的内容,因此,如果将其设置为一种颜色,则将不再显示相机图像。
您可能会考虑其他一些选项(大多数未经测试):
如您所链接的答案所引用,用于SCNTechnique
设置多遍渲染。在第一遍中,使用excludeCategoryMask
设置为使所有像素变暗(或模糊或其他)的着色器渲染整个场景,并设置(和场景内容)为仅渲染背景。在第二遍中,仅渲染要显示的没有该着色器的节点(使用简单的传递着色器)。
保留选项B,但使场景视图不透明。将视图 backgroundColor
(而非场景的background
)设置为纯色,并设置transparency
场景的,background
以使相机进给淡出该颜色。
使用几何体为场景创建“物理”背景-例如SCNPlane
,大尺寸的物体,作为摄像机的子元素放置在一定距离处,该距离比任何其他场景内容都远。设置飞机的背景颜色和透明度。
使用多个视图- ARSCNView
,非透明且具有清晰的背景,以及仅显示摄像机供稿的另一个视图(不一定是SceneKit视图)。UIVisualEffectView
混淆其他视图(或放入其他有趣的事物,如)以遮盖相机供稿。
向Apple提出一个有关sceneView.background
未获得节点和材质获得的全套阴影自定义选项(滤镜,着色器修改器,完整的着色器程序)等的错误,如果没有该选项,则自定义背景比自定义场景的其他方面要困难得多。