Scenekit 快照()不包括相机曝光设置

Posted

技术标签:

【中文标题】Scenekit 快照()不包括相机曝光设置【英文标题】:Scenekit snapshot() doesn't include camera exposure settings 【发布时间】:2018-03-11 10:46:02 【问题描述】:

我正在为我的 AR 应用程序提供屏幕截图功能,我注意到我拍摄的屏幕截图(通过 sceneView.snapshot())比我从相机看到的要暗得多。我正在使用 Apple 的 ARKit 示例代码,这似乎正在影响它:

camera.wantsHDR = true
camera.wantsExposureAdaptation = true
camera.exposureOffset = -1
camera.minimumExposure = -1
camera.maximumExposure = 3

当我删除曝光设置时,快照工作正常。有什么方法可以确保快照考虑了这些曝光设置?

【问题讨论】:

我不是 100% 确定这一点(因为我对 ARKit 所做的很少)但我认为有一个变量 sceneView.automaticallyUpdatesLighting = true 试试看是否有帮助 你已经读过这篇文章了吗?也解释了sceneView的光照blog.markdaws.net/… 【参考方案1】:

更新日期:2019 年 11 月 25 日

#第一个原因

在 AR 应用程序中拍摄的快照比来自后置 RGB 摄像头的视频流更暗的主要原因是因为您有两个完全不同的场景:第一个是 SCNScene,其中 3D 模型有自己的曝光,第二个是RGB 相机的视图,带有自己的曝光。在 ARSCNView 中,这些曝光加在一起形成平均曝光值,可以是较暗(如您的情况)或可以是较亮

#第二个原因

此外,您需要考虑whitePoint 实例属性,也称为亮度级别,用作tone mapping curve 的上端。

var whitePoint: CGFloat  get set 

使用高动态范围 (HDR) 相机时,SceneKit 会应用一个称为色调映射的过程,将可见场景中的大范围亮度值转换为可在显示器上显示的较窄范围的亮度值。 SceneKit 根据minimumExposuremaximumExposureexposureOffsetwhitePoint 属性确定色调映射曲线,并测量场景亮度。

whitePoint 的默认值为1.0。通过将此属性设置为更高或更低的值,您可以在阴影和高光之间产生更平缓或更突然的过渡。如果wantsHDR 的值为false,则此属性无效。

camera.whitePoint = 1.5

#第三个原因

RGB 相机流的颜色模型、渲染的 SCNView 和 iPhone 的显示在 Gamma 校正中略有不同。

【讨论】:

以上是关于Scenekit 快照()不包括相机曝光设置的主要内容,如果未能解决你的问题,请参考以下文章

SceneKit Cocoa 快照失败断言

如何在 SceneKit 中将 allowCameraControl 与相机节点一起使用

SceneKit:向相机节点添加定向光没有效果

在 Scenekit 中移动相机

对 SceneKit 中相机的正交投影感到困惑

在 SceneKit 中设置相机的视点