iOS 10 SceneKit 新特性 - SceneKit 制

作者: 大朕东 | 来源:发表于2016-10-26 22:58 被阅读5024次

    开头语:
    今天早上很开心,掘金的微博转发我第一个blog 服务端Swift - Vapor (一),让正在愁期末考试的我一下心花怒放。正好掘金赐给我一个内测功能(原创文章编写),于是今天打算撸一篇,希望长辈指导。

    今天的主题是探索iOS10 SceneKit的新功能,你可以观看今年WWDC的视频Advances in SceneKit Rendering

    SceneKit 介绍,SceneKit类似于Unity是一个制作3D物件的框架,很多3D游戏都可以基于这个框架进行开发,自几年前和Swift一起推出到现在广受欢迎。比如今年推出的Swift Playground就有用到SceneKit开发一个3D游戏帮助小盆友学习coding。

    Swift Playground

    你可以看这里对SceneKit有点基础的了解Objc-SceneKit介绍

    今年的SceneKit已经支持iWatch了,大东目前没iWatch,不过觉得屏幕太小了,最多就是几个3D的小部件吧。

    Physically based rendering

    今年最大的更新是提供了Physically based rendering(PBR),不懂可以上网查,简单的说就是让3D的物品更加3D了,我后面重点就是谈谈这个新的功能。

    What's new in iOS 10 SceneKit: A new Physically Based Rendering (PBR) system allows you to leverage the latest in 3D graphics research to create more realistic results with simpler asset authoring

    官方文档谈到的

    PBR materials require only three fundamental properties— diffuse, metalness, and roughness—to produce a wide range of realistic shading effects.

    相比之前,现在映射一个3D物体变得很容易,只要实现这3个变量 diffuse metalness roughness 即可。我们做一个小Demo更加帮助理解。

    首先下载自己喜欢的物品材质,所谓的材质可以理解一个为意见物品的“皮肤”,你可以选择喜欢的贴图来实现不同的效果。下载网址

    let materialPrefixes : [String] = ["Copper-scuffed"]
    let material = sphereNode.geometry?.firstMaterial
    
    // Declare that you intend to work in PBR shading mode
    // Note that this requires iOS 10 and up
    material?.lightingModel = SCNMaterial.LightingModel.physicallyBased
    // Setup the material maps for your object
    let materialFilePrefix = materialPrefixes[0]
    material?.diffuse.contents = UIImage(named: "\(materialFilePrefix)-albedo.png")
    material?.roughness.contents = UIImage(named: "\(materialFilePrefix)-roughness.png")
    material?.metalness.contents = UIImage(named: "\(materialFilePrefix)-metal.png")
    

    这里就实现了物品材质的选择,但是球的背景图是怎么实现的,怎么会有倒摄的效果呢?

    其实实现也很简单,假设你把一个物体的LightingModel定位为PBR,只要提供一张全景照片就能够将照片隐射到上面去

    let env = UIImage(named: "interior_hdri_29_20150416_1169368110.jpg")
    scene.lightingEnvironment.contents = env
    

    注意,这里的全景照片指的不是手机拍的全景照片而是高质量,专业效果拍摄出来的图片,如果照片不合格,就会出现错误,如下示例图。


    图片源于网络

    当然还要有后面背景图

    let bg = UIImage(named: "interior_hdri_29_20150416_1169368110.jpg")
    scene.background.contents = bg
    

    注意观察到它们是同一张图

    最后就会呈现如下的效果图,我用Swift Playground可使,真是太强大了。我还加入了Core Motion,可以移动iPad来切换不同的视角,这同时也是VR View的制作方式呀,以后更新如何开发一个属于iOS 的VR应用,并连接SceneKit,感觉以后发展可观。


    当然你还可以新建一个.scn文件来制作

    • 先拖一个SphereNode


    • 更改Material的属性


    • 更改Lighting Environment 和 Background 属性


    可以自己尝试不同的3D物件,在Object-library上拖拽到.scn文件中即可

    Physically Based Lights

    Authors of PBR scene content often prefer working in physically based terms, so you can now define lighting using intensity (in lumens) and color temperature (in degrees Kelvin), and import specifications for real-world light fixtures using the IESProfileURL property.


    今年对scnLight 的更新是新增一种灯源,就是可以在网上找到一种文件格式.ies,就可以导入不同格式的灯源。这对设计师来说应该是一个福利

    //add a liteNode
    let liteNode = SCNNode()
    liteNode.light = SCNLight()
    liteNode.light?.iesProfileURL = URL(fileReferenceLiteralResourceName: "LF6N_1_42TRT_F6LS73.ies")
    liteNode.light?.type = .IES
    

    HDR Camera

    Add even more realism with the new HDR features and effects in the SCNCamera class. With HDR rendering, SceneKit captures a much wider range of brightness and contrast in a scene, then allows you to customize the tone mapping that adapts that scene for the narrower range of a device’s display. Enable exposure adaptation to create automatic effects when, for example, the player in your game moves from a darkened area into sunlight. Or use vignetting, color fringing, and color grading to add a filmic look to your game.


    我也做了一个Demo来尝试新的api效果,大东表示非常赞👍,有一些属性是支持Animate的,这在官方的Demo上有展示过一个效果场景就是当一个突然物体飞速移动时,周围的场景会变有模糊效果,联系一下开车场景,这种效果让游戏开发变得更加逼真!

    苹果今年给SCNCamera添加了很多新的效果,可以找官方的APi文档查找。

    今年的 WWDC Demo

    苹果今年开源了两个适合大家入们SceneKit的Demo,而且都有用Swift 3编写,看Session到那里时非常激动,现场也很多人鼓掌欢呼(表示大东很想去WWDC)

    写在最后,大东想说,SceneKit很强大,我也相信苹果如果以后要推出VR,SceneKit这种制作3D场景的框架一定会被广受利用。最近我还在探索如何用Google 的VR-iOS SDK来实现一个SceneKit场景。也希望能和大家交流学习。

    相关文章

      网友评论

      • Hiphone_e365:你好,请问,scenkit也可以做vr吧,单纯的显示vr场景是没问题的吧,网上有篇文章: ARKit实现六自由度的VR,像这样的
        大朕东:@Hiphone_e365 可以,但是要自己调用CoreMotion的Api去实现自由旋转
      • 凌默默:您好,还有个问题问下,1,全景展示的时候,图片里面的内容有点变形,这个怎么处理呀?2,双手按住那个场景拖动,就会出现一个球型,现在不想出现这种情况,有办法解决么?
      • 0271fb6f797c:朋友,你最后的三张图片时用SceneKit实现的吗?我想问下,我如果有好几个SCNNode 拼成的一个整体的视图,我想实现缩放查看,放大等等,应该怎么做呢?刚接触,不太懂....
        0271fb6f797c:@大朕东 创建Swift 游戏时候的demo吗?我创建的只有一个飞机在转的demo?:dizzy_face:
        大朕东:@dong136279559 很简单啊,每个SCNNode都有一个transform的值,修改这个就行
        大朕东:@dong136279559 那个是苹果的Demo
      • 冰三尺:问个问题, 使用Xcode进行SceneKit场景编辑的时候, 拖进场景中的控件, 比如一个box, 设置大小和颜色后并没有显示, 显示的还是一个三维坐标, 是需要进行设置什么吗?
        冰三尺:@大朕东 我怀疑是我的scn文件有问题, 同样的一个box, 放在不同的scn的场景下, 显示效果不一样.
        冰三尺:@大朕东 应该不是camera 的问题,我在另一个工程中也没有设置camera ,为什有事拖出来box控件默认是有黄色的边框的。有黄色边框的修改发现会有变化,没有黄色边框,就没有变化
        大朕东:@里脊糖醋 你忘记放在Camera能看到的地方吧
      • 酷走天涯:写的不错,中文教程可以去appstore搜索scenekit
      • _小鱼:楼主大大,请问一个球体中可以再添加一个其它物件一起进行3D展示吗
        _小鱼:@大朕东 好的,谢谢了,我再想想办法
        大朕东:@Developer小虎牙 你好,不是很懂你的意思?如果你设置一个球体,再把另一个物体放入球体内部,那你应该看不到吧
      • 奔跑的Max:很强大,准备开始研究
        大朕东:@Developer小虎牙 官方Demo:sunglasses:
        _小鱼:请问一下哪里有OC 版的demo,最近在做一个3D展示的项目想找点资料看看
        大朕东:@奔跑的Max 哈哈
      • knowIt:楼主能发个demo吗?想研究一下。谢谢
        knowIt:@大朕东 好的,谢谢,预祝考试顺顺利利!!!
        大朕东:@knowIt 啊哈?还要Demo吗?考试周过了再说哈
      • 4296f56dc19f:您好,看了您的帖子跟着学了下,把scene的.background.contens设置为一张全景图,然后把camera.allowsCameraControl = true是可以浏览全景图了,但是我并不想用自由相机视角,我想用自己创建的camera实现手势拖动浏览和手势放大缩小怎么办啊,谢谢
        4296f56dc19f:@大朕东 如果你不介意的话可不可以加好友私聊,我给你看一下我的丑陋的代码,多向你请教请教,我是两个月之前才开始学习swift编程的,不懂的东西一箩筐一箩筐的。
        4296f56dc19f:@大朕东 哇,你居然真的回了啊,我还以为不会有人回我了。我开始是设置了sceneView?.allowsCameraControl = true,但是自由相机控制视角感觉并不好用,所以想自己建立一个相机视角来实现手势拖动浏览和放大缩小,不知道你有没有办法
        大朕东:@4296f56dc19f 设置 scnView.allowCameraControl=true
      • 上帝很忙:吊炸天
        大朕东: @上帝很忙 阔以阔以,做过了。不过自己开发者账号还不能买。年龄未满18🙄
        上帝很忙:@大朕东 这技术现在可以开发APP了么?
        大朕东: @上帝很忙 不敢不敢
      • d67c41c6a361: :smile: 楼主来个demo 3Q
        大朕东: @edward_c 嗯嗯,学起来不会很难,有问题可以交流,我会很高兴的
        d67c41c6a361:@scauos 找到了另外一些,不需要了
        大朕东:@edward_c 需要吗?
      • 诸葛俊伟:刚发布一个用scenekit做的3D画板。叫 “Go 3D”,可惜国内下不了。手机翻墙可下:smile:
        大朕东:@诸葛俊伟 为什么国内不能下
      • JanzTam:厉害了!学习!
        大朕东: @JanzTam 希望能帮到你

      本文标题:iOS 10 SceneKit 新特性 - SceneKit 制

      本文链接:https://www.haomeiwen.com/subject/ucfjuttx.html