首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ARKit示例 - 第4部分:现实主义 - 照明和PBR

场景照明 增强现实的主要目标之一是将虚拟内容与现实世界混合。有时我们添加的内容可能是风格化的,看起来并不“真实”,但有时候我们要插入的内容看起来和感觉都像是我们正在交互的实际空间的一部分。...还有一些其他类型的灯光,但我们并不需要使用那些现在,更多信息可以读取的SceneKit文档SCNLight。...要启用光照估计,您需要在场景配置中将lightEstimationEnabled属性设置为true: configuration.lightEstimationEnabled = YES; 完成此操作后...-10-scenekit-2489e43f7021 有关这个有趣的SceneKit文章,请查看这篇文章: 惊人的基于物理渲染使用新的IOS 10 SceneKit 如何简单地使用新推出的iOS版10...最后一部分是从ARKit获取光估计值并将其应用于此环境图像的强度。ARKit返回值1000以表示中性光照,因此更小,更暗,更亮。

1.2K30

《iPhone X ARKit Face Tracking》

由于不同的AR体验对iOS设备有不同的硬件要求,所有ARKit配置要求iOS设备至少使用A9及以上处理器,而face tracking更是仅在带有前置深度摄像头的iPhone X上才会有。...如果是直接加到场景的rootNode上面,还需要同步更新其位置、方向等属性。打上方向光之后,蒙皮显得十分贴合立体。...SCNLight *directional = [SCNLight light]; directional.type = SCNLightTypeDirectional; directional.color...需要注意的是,由于ARKit只对人脸区域进行建模,在3D模型设计的时候还需去掉一些不必要的部件:比如眼镜的模型就不需要添加镜脚,因为耳朵部分并没有东西可以去做遮挡。...比如,根据脸部微笑的程度去替换3D蒙皮的diffuse贴图,使用户笑的时候会出现夸张的效果。

2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《 iPhone X ARKit Face Tracking 》

    由于不同的AR体验对iOS设备有不同的硬件要求,所有ARKit配置要求iOS设备至少使用A9及以上处理器,而face tracking更是仅在带有前置深度摄像头的iPhone X上才会有。...如果是直接加到场景的rootNode上面,还需要同步更新其位置、方向等属性。打上方向光之后,蒙皮显得十分贴合立体。...SCNLight *directional = [SCNLight light]; directional.type = SCNLightTypeDirectional; directional.color...需要注意的是,由于ARKit只对人脸区域进行建模,在3D模型设计的时候还需去掉一些不必要的部件:比如眼镜的模型就不需要添加镜脚,因为耳朵部分并没有东西可以去做遮挡。...比如,根据脸部微笑的程度去替换3D蒙皮的diffuse贴图,使用户笑的时候会出现夸张的效果。

    3.6K00

    iOS版 使用ARKit和Swift创建交互式Domino游戏

    接下来,需要Xcode 9(或更高版本)和运行iOS 11(或更高版本)的ARKit支持的设备。 现在让我们开始吧! 设置初始ARKit场景 打开Xcode并选择File> New Project。...由于我们之前已将检测到的平面保存在字典中,因此我们可以使用锚点的唯一标识符并检索我们的平面并更新其值。 运行应用程序: ? image 了解ARKit如何不断更新飞机? 我们不再需要看地面了。...由于这是连续移动,因此该方法每秒被调用多次。 我们需要想办法在每个多米诺骨牌之间留出一些距离。要做到这一点,我们必须保存先前放置的多米诺骨牌的位置,然后计算它到我们的命中测试的当前位置的距离。...自iOS 11以来,SceneKit已经添加了一个新策略来实现这一目标。通过将colorBufferWriteMask几何体设置为空,SceneKit不会渲染该几何体的任何颜色,但会允许它接收阴影。...环境光从各个方向照亮场景中的所有对象。它将减轻整体场景。 现在,我们所要做的就是添加addLights()到viewDidLoad应用程序的末尾并运行应用程序: ? 9.jpg 我们完成了!

    2.3K30

    iOS - SceneKit显示与交互3D建模(一)

    最近公司要求在手机上显示3D模型,并且要获取点击的模型坐标,找了很多相关资料,发现有两种实现方式,一种是集成Unity3D,另一种是使用苹果提供的SceneKit;由于使用Unity3D太麻烦,于是选择使用...创建灯光节点设置摆放的位置,灯光可以让需要呈现的物体变得更有质感。...light]; lightNode.light.type = SCNLightTypeOmni; lightNode.position = SCNVector3Make(0, 10, 10); [scene.rootNode...小怪兽 ** BUT **,在实际项目中往往需要我们从服务器上将模型下载下来再来显示,然而这种做法只能是事先把素材放入项目中才能正常显示,【注意:我说的是正常显示】,这是不符合我们的需求的。...如果我们把素材从服务器上下载到沙盒里,程序再直接从沙盒读取和初始化场景会出现为nil的问题。 iOS - SceneKit显示与交互3D建模(�二) 最后附上DEMO LXF3DSceneDemo

    4.5K40

    WWDC20中iOS的改变

    也就意味着collectionView可以做UItableView的事情了(不再需要UItableView),同样,该样式还支持左滑删除等tableview的特色属性。...PencilKit为iOS应用程序提供了一个绘图环境,该环境可以从Apple Pencil或用户的手指中获取输入,并将其转换为您在iOS或macOS中显示的高质量图像。...等等,这对于移植的程序和用户行为监控,性能数据监控也是要面对的内容 5.WWDC20 10091 Write tests to fail 这里是讲如何做好单元测试的地方,由于这块代码是业务代码强相关,需要开发者自己进行撰写...这里对于性能数据监控上来说是需要注意的点, 首先,CLLocationManager的类方法被弃用了,被替换成一个属性。...同时引入了一个新的属性CLAccuracyAuthorization,是一个枚举类型,指定位的精确度。.fullAccuracy是 iOS 14 之前版本的默认值,代表高精度。.

    1.8K10

    SceneKit_入门08_材质

    scnView.scene.rootNode addChildNode:sphereNode]; 运行一下: 恭喜你,简直太厉害了 准备工作已经做好,接下来,正式进入我们今天的内容 ---- 材质详解 我们需要了解两个类...2.SCNScene 的background 3.SCNLight的gobo属性 4.绑定纹理采样器自定义GLSL着色器源代码片段 在类中实现 SCNShadable 属性 a.如何创建纹理属性...+ (instancetype)materialPropertyWithContents:(id)contents 提示: 也可以使用GLSL 创建,由于内容过于多,暂时不讲,中级篇也不讲,高级会详细讲解...降低强度使表面显得更光滑 2.multiply 使用白色降低强度混物的材料性的颜色,有效降低颜色乘法效应强度 3.对于其他属性,会让内容变暗淡 怎么动态的改变属性内容呢?...3.SceneKit自动增加或降低需要最大限度地提高渲染质量渲染每个像素的各向异性,由该属性指定的限制,渲染时所使用的最大各向异性水平依赖于使用中的图形硬件,如果设置值为MAXFloat 约束使用最高的

    1.2K40

    架构之路 (七) —— iOS App的SOLID原则(一)

    由于您的目标是学习如何改进现有代码,因此本 SOLID 教程假设您已经掌握了 Swift和 iOS 的基础知识。 打开入门项目。...最好将与 Core Data 设置和预览相关的属性组合在一起。 在重构的后期,您将能够完全删除这些预览支持对象,并用更有条理的内容替换它们。 注意:static属性默认是惰性的。...您将创建一个抽象类,而不是创建一个具体实现符合的协议,更具体的实现需要子类化该抽象类。 它实现了相同的目标:您可以轻松地交换底层实现,而无需更改任何视图。...ReportsDataSource.swift 并更改类的声明以符合您的新协议: class ReportsDataSource: ReportReader, SaveEntryProtocol { 由于您现在正在实现协议方法而不是从超类覆盖该方法...它使修复bug更安全,因为您的对象不会纠缠在一起。编写单元测试更容易。即使将您的代码从一个项目重用到另一个项目也毫不费力。 编写干净且有组织的代码是一个总能得到回报的目标。

    4.7K10

    iOS10 Swift3.0 XCode 8 总结

    1,iOS10 新增的privacy settings iOS10添加了新的权限控制范围 如果你尝试访问这些隐私数据时得到如下错误: > This app has crashed because it...layoutIfNeed iOS10 在一个控件上调用layoutIfNeed是只会单独计算约束,它所约束的控件不会生效,想要达到之前的效果需要在父级控件上调用layoutIfNeed 4, NSDate..., iOS10 UIStatusBar过期 如果你需要操作UIStatusBar,在iOS10需要改为 - (UIStatusBarStyle)preferredStatusBarStyle {...(10_0);@end 12, iOS10 UITableView 性能优化 和UICollectionView一样UITableView也增加了Pre-Fetching技术,UITableView新增了如下属性...(10_0); 奇怪的是UITableView并没有找到 isPrefetchingEnabled属性的定义 13,iOS10 UIScrollView 新增 refreshControl 属性 UIScrollView

    79810

    微信团队分享:详解iOS版微信视频号直播中因帧率异常导致的功耗问题

    3、知识储备1:iOS中的动画分类 在iOS中,大部分动画的本质就是根据输入的时间戳,返回对应属性的动画参数,从而移动图像,达到运动的效果。...3.4UIViewPropertyAnimator 「UIViewPropertyAnimator」是iOS10开始苹果推动的新的动画api,相比 UIView block animation 可以更灵活的控制动画的过程...FPS 越高对于游戏等高清视频效果就更细腻更好,但是并不是所有情况都需要高 FPS,部分情况下高 FPS 反而导致了无用的功耗但并没有带来更好的体验。...5、知识储备3:iOS中的动画降帧 5.1概述 结合上文,我们要解决直播帧率异常升高的问题,就需要解决点赞动画的高帧率问题。...除了4我们可以直接修改为 iOS15支持的 preferredFrameRateRange api 外,其它几个我们要怎么解决呢? 针对以上1~3点我们分别做如下处理。

    57300

    iOS KVO实现原理及使用

    如果不调用上面的方法,也不会崩溃,亲测,但是iOS10及以下的设备会崩溃。...在官方文档中没有查到相关的的说明(在iOS9之后,NSNotification已经不用移除了,可能也是这个趋势吧)。...当观察对象时,KVO机制动态创建一个新的名为:NSKVONotifying_对象名 的新类,该类继承自目标对象的本类,且 KVO 为 NSKVONotifying_对象名 重写观察属性的 set 方法。...在这个过程,被观察对象的 isa 指针从指向原来的对象,被 KVO 机制修改为指向系统新创建的子类 NSKVONotifying_对象名 类,来实现当前类属性值改变的监听,这也就是前面所说的“黑魔法”;...我还试了一下,创建一个新的名为“NSKVONotifying_对象名”的类,发现系统运行到注册 KVO 的代码时,iOS10及以下会崩溃,iOS11下控制台打印警告: [general] KVO failed

    52520

    【IOS开发基础系列】地图开发专题

    (10_9, 4_0); - (void)mapViewWillStartLocatingUser:(MKMapView *)mapView NS_AVAILABLE(10_9, 4_0); - (void...,第二个是目标区域南北的跨度单位是米,第三个是目标区域东西的跨度单位是米。...如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。...若您需要替换定位、指南针的图标,请保留原文件名称,否则不显示替换的新图片,默认大头针标注与路线关键点的新图片名称可自定义名称。 ...+ 混编模式进行编译: 最简单方法就是:随便更改工程文件中的某一个,将.m更改为.mm .     2:由于静态库里面包含类别条目(第四点),所以需要让工程支持类别的编译: Project->Build

    36930

    「死磕」Core Data——入门

    不过由于iOS10新引进了NSPersistentContainer类,然后新建项目又可以选择勾选Core Data与否。所以情况变得稍稍有点复杂。...这里分三种情况:1、在既有项目(只需支持iOS10)初始化Core Data Stack;2、在既有项目(需兼容iOS8、9、10等系统)初始化Core Data Stack;3、新建项目时直接勾选了Core...情况1:在既有项目添加Core Data功能(只需支持iOS10) 由于iOS10引进了NSPersistentContainer,如果单单只支持iOS10系统,初始化Core Data Stack相比以前简单很多...情况2:在既有项目初始化Core Data Stack(需兼容iOS8、9、10等系统) 因为NSPersistentContainer不兼容iOS10之前的系统。...所以,如果你已经用了NSPersistentContainer初始化了Core Data Stack,但同时也要兼容iOS8、9等系统,就需要在代码中检查,如果是旧的系统,就需要用旧的方法初始化Core

    1.1K20

    【基础系列】Input控件专题

    注意缩短的空格键的存在和iOS键盘的最底一行加入了@和句号(.)键。 而在Android上,标准逗号键将出现在空格键的左边,已经被一个@键替换。...在iOS上,所有的空格键已被替换成句号(.)键和正斜杠(/)键,以及一个特殊的.com键。  我的测试显示,Android键盘没有变化。...由于他们保证了你的数据是以一个标准的格式提供,所以这些可以是非常有用的。         在iOS上的date input类型会提示显示一个日期选择器。...HTML DOM事件 DOM: 指明使用的DOM属性级别。...方法 9.14 目标事件对象 方法 9.15 事件监听对象 方法 9.16 文档事件对象 方法 9.17 鼠标/键盘事件对象 属性 方法 10 参考链接 HTML DOM Input Time

    17620

    SceneKitScene Kit 概要节点 (Nodes)光照动画开始用 Scene Kit 写游戏扩展默认渲染流程延时着色

    幸运的是 Scene Kit 就好了很多,高级配置对于大多数常见任务是足够的 - 甚至更先进的功能,如动态阴影和景深效果,使用它提供的上层 API 来配置,就已经足够了。...每个单独的骨骼都可以被移动和旋转,而复杂的动画需要同时对多块骨骼进行操作,如一个角色走路的动画,很可能就是从文件读取并加到对象上的 (而不是用代码一根骨头一根骨头的写)。...下面的例子表示一个光照对象通过一个节点对象来设置空间坐标,再通过 "look at" 约束,将光照对象约束到了目标对象上,即使它移动,光照也会一直朝向目标对象。...let spot = SCNLight() spot.type = SCNLightTypeSpot spot.castsShadow = true let spotNode...spinning.gif 动画 Scene Kit 的对象中绝大多数属性都是可以进行动画的,就像 Cocoa (或 Cocoa Touch) 框架一样,你可以创建一个 CAAnimation 对象,并指定一个

    1.6K80

    MUI、HBuilderX、H5+开发APP本地打包(iOS)

    iOS的离线打包感觉比Android的更简单点,或许是因为我本身做iOS原生开发的缘故。...所以直接在这里操作,去掉不需要的部分,添加我们自己的东西。 4、打开工程:修改工程名,项目名等,总之把Hello-HBuilder改为我们自己的项目名; ?...修改APPicon 和启动页图片 xcode 图片资源管理都是在Images.xcassets中处理的,替换相应的尺寸图片即可,不需要的可以直接删除。...9.导出ipa.png 这里导出IPA , 我是企业证书所以和普通的不一样,选择第三个 。如果是99$的账号 选择第一个 导出 App Store发布。 ? 9.thing默认不瘦身.png ?...10.导出ipa2.png 至此打包完成,可以把发布IPA直接导入到苹果设备或放网上发布供别人下载。 总结 修改文件名注意文件路径,编译路径要保持一致。

    1.9K10

    React-Native私服热更新的集成与使用

    假设这段代码是通过热更新技术下载执行的,如果在中间存在黑客,把这段代码动态替换掉,比如修改为获取用户通讯录并上传到黑客的服务器,就会造成重大的安全问题。...3.3.2 变量替换 在业务完成后,开发者需要打包App交由测试人员测试。...热更发布通常需要开发人员提供三种包: QA环境的测试包 线上环境的测试包 线上环境的生产包 所以在每次打包之前,需要执行脚本,根据参数来替换代码中的Key值,如执行npm run build --dev...与所有其他 React Native 插件一样,iOS 和 Android 的集成体验不同,因此请根据您的目标平台执行以下设置步骤。...一般来说 code-push 会从 info.plist 或者 MainActivity.java 文件中获取,但是我们可以使用此属性覆盖文件中的key值。

    8.1K10
    领券