专栏首页每日一篇技术文章SceneKit-Camera之HDR开篇01

SceneKit-Camera之HDR开篇01

本节学习

1.High Dynamic Range (HDR) 的概念 2.介绍SCNCameraHDR相关属性的使用方法

HDR

1.由来

当我们使用数码相机拍摄一张图片保存成jpg或者png的时候,这张照片保存的图片亮度值只有0-255的范围,但是人眼的能够分辨的亮度 最亮和最暗之为 10^5,如果我们要合成一张这样的照片,就需要在不同的曝光度下对同一个场景进行拍摄,让后将照片进行合成,不过这样需要的图片数量过于巨大,不太现实,然后聪明的人类发明了一种新的技术叫做色调映射,解决了这个难题

2.色调映射(Tone-Mapping)

发现人的眼睛对色彩的对比度比较敏感,所以人类通过 对比度映射,保留了对比度细节,所以通常会产生非常锐利的图像,这样做使得图片整体变得平缓

下面来看一张HDR照片张什么样子

15EDD41B-63E5-4202-B241-7C32060D5917.png

普通的图片调节曝光度 是没有办法看到图片这部分细节的,但是hdr格式的图片,通过调节曝光度是可以看到细节如下

IMG_0521.PNG

在scenekit 如何使用它

HDR图片可以作为模型的纹理图片或者天宫盒子

下面就一天空盒子为例子写个demo 讲解一下常用的几个属性

第一步 初始化

   // 下面都是通用的一些配置,就不一一讲解了
    sceneView.delegate = self
    sceneView.showsStatistics = true
    sceneView.allowsCameraControl = true
    let scene = SCNScene()
    sceneView.scene = scene

第二步 增加一个照相机

    cameraNode.camera = SCNCamera()
    cameraNode.camera?.automaticallyAdjustsZRange = true
    sceneView.scene?.rootNode.addChildNode(cameraNode)
     // 上面都是通用的一些配置,就不一一讲解了

第三步 将hdr格式的图片渲染在天空盒子上

    sceneView.scene?.background.contents = "art.scnassets/hdr.hdr"

成功运行的效果如下

IMG_0565.PNG

功能-1 设置场景渲染的饱和度(默认值为1)

self.cameraNode.camera?.saturation = 0

效果如下

IMG_0566.PNG

功能-2 控制场景的整体对比度 (默认值为0)

self.cameraNode.camera?.contrast = 10

效果如下

IMG_0567.PNG

功能 -3 如果要使用HDR(高动态)功能,需要开启,默认是关闭的

    cameraNode.camera?.wantsHDR = true

功能 -4 调节曝光度偏移量(默认为0)

 self.cameraNode.camera?.exposureOffset = -5

IMG_0568.PNG

功能 -5 让摄像机动态调节曝光度(模式是开启的)

 self.cameraNode.camera?.wantsExposureAdaptation = true

功能 -6 当摄像机动态调节曝光,从亮至暗的变化步伐(默认是0.4)

 self.cameraNode.camera?.exposureAdaptationBrighteningSpeedFactor = 0.5

功能 -7 当摄像机动态的调节曝光度从暗到亮变化调节的步伐(默认是0.6)

self.cameraNode.camera?.exposureAdaptationDarkeningSpeedFactor = 0.5

下面三个属性需要结合一个动态的调节的例子演示,目前还没有写,等写好了会发到群里

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OpenGL ES _ 着色器_预处理器

    编译GLSL 着色器的第一个步骤是由预处理进行解析的。你可能还是不知道干啥的,它的作用就是删除注释、包含其他文件以及执行宏(宏macro是一段重复文字的简短描写...

    酷走天涯
  • VR+全景播放器+头控讲解-02

    DFA47D5C-AE21-4A3A-8E53-858CBA60B647.png

    酷走天涯
  • 100 行代码写一个手机AR

    Step-1.实现两个协议 1.AVCaptureMetadataOutputObjectsDelegate 2.UINavigationControlle...

    酷走天涯
  • Python第十四课:Python解释器

    如果你是第一次接触这个概念,那你可能会一脸懵逼,但事实上你早就接触过Python解释器了,甚至于用过。顾名思义,解释器就是能够解释Python代码的工具。当我们...

    HuangWeiAI
  • 11.JAVA-Object类之finalize(),clone(),toString()等方法覆写

    Object类是一个特殊的类,是所有类(包括数组,接口 )的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类,所以可以通过...

    张诺谦
  • Java中的Object类 (上篇)

    Object中的hashCode方法就是根据一定的规则与对象相关的信息映射成一个数值,这个数值称为散列值。

    陈琛
  • 开发 | 小程序「分享图」生成难?一招教你轻松解决

    许多小程序,都提供了「分享图」功能。利用它,用户可以生成特制的分享图片,并分享到朋友圈。

    知晓君
  • 扩展entity framework core 实现默认字符串长度,decimal精度,entity自动注册和配置

    文章以efcore 2.0.0-preview2.测试验证通过。其他版本不保证使用,但是思路不会差太远。源代码,报道越短,事情越严重!文章越短,内容越精悍!

    旺财的城堡
  • 深入理解计算机系统读书笔记之第二章信息的表示和处理

    这一章读完,嗯,感觉怎么说呢? 就是读完了而已,没有想第一章那样,有具体的一些收获什么的。可能是没有很认真的阅读。读的很匆忙,有的内容很晦涩难懂...........

    用户1631856
  • GEO数据库中国区镜像横空出世

    Install the development version from Github:

    生信技能树

扫码关注云+社区

领取腾讯云代金券