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 根据
minimumExposure
、maximumExposure
、exposureOffset
和whitePoint
属性确定色调映射曲线,并测量场景亮度。
whitePoint
的默认值为1.0
。通过将此属性设置为更高或更低的值,您可以在阴影和高光之间产生更平缓或更突然的过渡。如果wantsHDR
的值为false
,则此属性无效。
camera.whitePoint = 1.5
#第三个原因
RGB 相机流的颜色模型、渲染的 SCNView 和 iPhone 的显示在 Gamma 校正中略有不同。
【讨论】:
以上是关于Scenekit 快照()不包括相机曝光设置的主要内容,如果未能解决你的问题,请参考以下文章