本節(jié)學(xué)習(xí)
1.High Dynamic Range (HDR) 的概念
2.介紹SCNCameraHDR相關(guān)屬性的使用方法
HDR
1.由來
當(dāng)我們使用數(shù)碼相機(jī)拍攝一張圖片保存成jpg或者png的時(shí)候,這張照片保存的圖片亮度值只有0-255的范圍,但是人眼的能夠分辨的亮度 最亮和最暗之為 10^5,如果我們要合成一張這樣的照片,就需要在不同的曝光度下對(duì)同一個(gè)場景進(jìn)行拍攝,讓后將照片進(jìn)行合成,不過這樣需要的圖片數(shù)量過于巨大,不太現(xiàn)實(shí),然后聰明的人類發(fā)明了一種新的技術(shù)叫做色調(diào)映射,解決了這個(gè)難題
2.色調(diào)映射(Tone-Mapping)
發(fā)現(xiàn)人的眼睛對(duì)色彩的對(duì)比度比較敏感,所以人類通過
對(duì)比度映射庐橙,保留了對(duì)比度細(xì)節(jié),所以通常會(huì)產(chǎn)生非常銳利的圖像令杈,這樣做使得圖片整體變得平緩
下面來看一張HDR照片張什么樣子
普通的圖片調(diào)節(jié)曝光度 是沒有辦法看到圖片這部分細(xì)節(jié)的,但是hdr格式的圖片,通過調(diào)節(jié)曝光度是可以看到細(xì)節(jié)如下
在scenekit 如何使用它
HDR圖片可以作為模型的紋理圖片或者天宮盒子
下面就一天空盒子為例子寫個(gè)demo 講解一下常用的幾個(gè)屬性
第一步 初始化
// 下面都是通用的一些配置,就不一一講解了
sceneView.delegate = self
sceneView.showsStatistics = true
sceneView.allowsCameraControl = true
let scene = SCNScene()
sceneView.scene = scene
第二步 增加一個(gè)照相機(jī)
cameraNode.camera = SCNCamera()
cameraNode.camera?.automaticallyAdjustsZRange = true
sceneView.scene?.rootNode.addChildNode(cameraNode)
// 上面都是通用的一些配置,就不一一講解了
第三步 將hdr格式的圖片渲染在天空盒子上
sceneView.scene?.background.contents = "art.scnassets/hdr.hdr"
成功運(yùn)行的效果如下
功能-1 設(shè)置場景渲染的飽和度(默認(rèn)值為1)
self.cameraNode.camera?.saturation = 0
效果如下
功能-2 控制場景的整體對(duì)比度 (默認(rèn)值為0)
self.cameraNode.camera?.contrast = 10
效果如下
功能 -3 如果要使用HDR(高動(dòng)態(tài))功能,需要開啟,默認(rèn)是關(guān)閉的
cameraNode.camera?.wantsHDR = true
功能 -4 調(diào)節(jié)曝光度偏移量(默認(rèn)為0)
self.cameraNode.camera?.exposureOffset = -5
功能 -5 讓攝像機(jī)動(dòng)態(tài)調(diào)節(jié)曝光度(模式是開啟的)
self.cameraNode.camera?.wantsExposureAdaptation = true
功能 -6 當(dāng)攝像機(jī)動(dòng)態(tài)調(diào)節(jié)曝光,從亮至暗的變化步伐(默認(rèn)是0.4)
self.cameraNode.camera?.exposureAdaptationBrighteningSpeedFactor = 0.5
功能 -7 當(dāng)攝像機(jī)動(dòng)態(tài)的調(diào)節(jié)曝光度從暗到亮變化調(diào)節(jié)的步伐(默認(rèn)是0.6)
self.cameraNode.camera?.exposureAdaptationDarkeningSpeedFactor = 0.5
下面三個(gè)屬性需要結(jié)合一個(gè)動(dòng)態(tài)的調(diào)節(jié)的例子演示,目前還沒有寫,等寫好了會(huì)發(fā)到群里