大多数浏览器和
Developer App 均支持流媒体播放。
-
通过 Model I/O 管理 3D 素材资源
Model I/O 为 3D 模型的访问与管理提供了一个无缝的基础架构。这个高性能架构支持读取和写入常见的网格与模型格式、纹理以及材质。简要了解 Model I/O 框架,熟悉关于将它与 SceneKit、MetalKit 和 GLKit 整合的重要细节。
资源
-
下载
以Model I/O 进行3D资源管理
大家好 欢迎来到这场关于以Model I/O进行3D资源管理的演讲 我是尼克 来自图像 媒体 和图形组
今天我很高兴向大家介绍新的 Model I/O框架 我们正在提高... 或者说我们其实是正在让大家 能够提高交互式的真实感图形的品质 到目前为止你们一直使用的 图形框架和硬件都是过去开发的 当时的硬件与现在相比有太多的局限 而现在你们口袋里的设备 拥有的功能绝对令人惊艳 现在我们有了新的框架 使你们能够充分发挥硬件的作用 为客户服务但是你们 必须不断给这个框架 增添真正好看的元素 所以既然现在有了高性能
和低功耗图形应用程序接口 你们就需要一种方法来把 图片制作得具有真实感真实感意味着 图片要基于现实存在源于现实存在 那么你们需要做有很多的研究 还要有大量相关的知识 才能实现这个目标 你们需要了解相机的物理原理 各种材料的物理特性光的物理特性
当然你们也可以多读相关的资料 我很赞成这种做法 要有效运用那些材料和光需要 做大量繁琐的工作 阅读大量的资料然后再进行集成运用 那么我们对Model I/O所做的 就是我们已经着手进行这些工作 我们已经进行了大量的研究 我们已做了一大堆的集成 我们已经准备了一套统一的数据结构 来连贯一致地描述这些性能我们还 开发了一个使用简便的应用程序接口
所以说Model I/O是一个处理 3D资源和数据的框架 所以在最基本的层面上 你们可以利用Model I/O 导入和输出常见格式的文件 你们可以以现实的方式描述采光情况 各种材料 环境条件 你们可以将美工人员提供的资源和作品 导入Model I/O 再进行一些有趣的处理 在演讲过程中我们会讲到处理方法 现在有很多可以运用的工具 其主要关注点都是进行 基于物理特性的渲染和材料属性 I/O模型让你们可以通过 自己的管道利用那些工具
Model I/O已经集 成到Xcode 7里 还有GameKit的应用程序接口里 可以在iOS 9 和OS10.11中运行
所以概括地说这个绿色的大盒子是 Model I/O与你们的框架 或应用程序想融合的地方 我们就从联系创建工具讲起 首先美工人员制作一些很好的作品 然后你们要将其 导入Model I/O 接下来由Model I/O快速完成那些 原本繁琐乏味又容易出现错误的步骤 为各种框架创建缓冲区进行快速渲染 在这个盒子之外我们所支持的 框架有SceneKit Metal 和 OpenGL
现在Model I/O不仅可以 加载文件和保存文件 它还让你们能够进行原本有用 但耗时太长或有其他弊端的操作 来改善资源的外观 你们可以选取一项资源 对其进行接下来我会谈到 的各种热处理操作的其中一项 再把这项资源恢复成统一 的表示形式导回Model I/O 再把它放到硬件准备缓冲区
你也可以先利用Model I/O 提供的独特的功能对资源进行处理 完成这里的循环然后把它发送回 内容创作工具让美工人员 进行调整也许再添加一些 比如细节处理或进行其他改进 然后你可以不断重复这个循环 直到达到你的app 所需要的外观和质量水平为止
那么我们今天要讲的是这些功能是什么 其数据类型是什么 那些数据类型的物理动机从何而来 我们将谈论如何支持 各种几何功能三维像素 和一些先进的光照技巧 以及我们的热处理步骤
好的 我们开始面包和黄油资料读取中 导入格式我们从 一些最常用的格式开始
蒸馏器是一种性能非常高的格式 它来自电影行业现在 也大量在游戏中使用 这这里所列出的格式中它是最现代的 它包括了关于动画和材料绑定的信息 还有其他各种各样的有趣的信息 多边形是多边形的 标准格式使用这个格式 需要进行大量的学术研究 三角形通常用CAD和CAM这两种 应用程序制作和摄取 而且Wavefront .obj 文件可以得到普遍的读写支持 如果要在此刻进行导出 你可以导出你的 CAD / CAM材料
所以导入很容易 你使用URL通过内核自行启动 得到一个MDL资源 然后你可以用“输出资源到URL” 把它导出到其他位置
关于物理真实感我还要再说几句 但是不做太细致的解释 光照一直以来都要有一个位置 比如一个锥角衰减区 还要有其他一些从物理 角度来看不真实的参数 这些参数只是在数学上与过去的硬件和 图形应用程序接口相统一 我们现在要为大家提供的 是对IES概要文件的访问方法 现在如果你去五金店并且发现 比如你非常喜欢的一款灯具 比如说我真的很喜欢那里的那款灯 而且我在商店里看到了它 我可以先读一下旁边的标签 再去生产商的网站 在网上我可以找到一个IES概要文件 它是一个数据文件 里面有关于这种灯的各种数据 我能了解每一个角度灯光的辐照度
我们把那个文件读入到 一个所谓的轻型网络 就是一组很容易加载到着色器里的数据 那么如果你愿意你可以在你的着色器里 亲自点亮可与真实世界的灯媲美的灯 现在你在五金店里买灯时 不会专门提出RGB值或类似的要求 灯的特点通常由温度描述 比如4000开氏度或其他度数 那么你也可以用开氏度来指定这些高度 我们还可以提供基于那边正在工作的 挖掘机的灯光的图像 这些材料以前都需要使用传感器 这意味着随角度衰减现象 并且在Blinn-Phong高光区 会有可调节的亮点 我们还为你们提供 一个基线物理双向反射函数 也可以叫做BRDF如果你想要取得 绝对逼真的效果你绝度需要这个函数 请注意那台挖掘机上就有BDRF 相机历来是针孔相机 描述相机时我们 从镜头一直介绍到传感器 现在我们为你们提供一些实用程序 来处理照片和程序中的各种环境元素
现在你们会看到 用Xcode中的工具做热处理 在这张幻灯片上我要告诉你们
在Xcode中你可以用来 执行这些操作的工具你也可以 通过框架在Model I/O中使用 所以如果你想制作自己的管线 你自己的离线管道以便对自己的资源 进行彻底的热处理无论批次大小 都可以通过应用程序接口框架 使用那些工具
我们已经介绍了三维像素 你们可以选取一个又大又旧的网格 把它变成巨大的索引缓存 你们可以把自己的数据与它关联起来 稍后我们会就此多谈一些 再说一次在资源的基础上 创建三维像素以及 在特定区域找到三维像素非常简单 你们可以运用实体几何构造法 还可以把三维像素导回到一个网格 期间可以利用数据平滑法 类似的做法吧
所以通过系统集成 将Model I/O直接集成到 SceneKit中可以在 MetalKit和GLKit中使用
在取景器和快速浏览功能中 Model I/O是用来做预览的 所以你可以去找一个蒸馏器 abc缓存文件按下空格键 然后会弹出取景器 你可反复查看你的资源 甚至不用打开任何类型的 试镜环境对其进行预览 您可以在Xcode中编辑资源 这张图片中的挖掘机就是 用Xcode进行加载的 Model I/O使用Swift 语言在Playgrounds中工作
好 这一切可以归结到数据类型的本质
所以从一个URL得到的是MDL资源 它包含了你们往往会处理的所有对象 它是一个你知道 快速列举素材资料的索引容器 它有变换层次结构 网格 相机和灯光 这些你可以 利用应用程序接口进行制作 或通过URL加载
所以一项典型的 你可以利用的asset 比如一个又大又旧的蒸馏器文件 会包含很多有趣的东西
这个举一个例子里面有几个摄像头 一盏灯 一个根变换 以及右上角的蓝色框 下面是挖掘机的信息 橙色的框显示 是的 橙色的框只是表明你也可以显示 你的材料赋值情况 这就是资源所包含的信息 这都是逻辑上的应为一体的东西 所以你就有了很多的资源 把它们组合成一个场景
asset有内存分配器 你需要的话可以添加分配器 自己管理内存 Asset有内部事务描述符 这是导入导出工具 和大量子工具 这些子工具都是MDL对象
MDL对象自身可以组成一个层
现在完成了一个典型的标准图 当然应该有转换层
MDL对象有转换组件
我们并没有执行转换 你知道这是放置矩阵的标准步骤 实际上我们有转换组件 这种组件非常有意思 因为它允许我们创建一种场景图 这种场景图不必有父/子的类型关系 另外可以定义自己的组件
现在我想我应该已经提到了那个好东西 编写自定义导入导出器的 API已经设计出来了 你可以编写如果你有自定义的文件格式 你可以编写倒入导出气让我们回来 这里有个自定义的触发器组件 它拥有了一组你自己的功能 会发生一系列相应的动作 这个编写自定义导入导出器的API 可以让你自己创建功能 并定义它的动作是什么定义它连接什么 现在一个网格包含一个 或多个顶点缓冲区 这是需要GPU进行位图化的位置 法向下面是子网格
要想知道子网格实际是什么 你应该有一个驱动挖掘器的功能 这个功能应该有些像 安全帽一样的可选组件 这个组件不应该是可选的但它确实是 在一个索引缓存中 我应该有整个没有可选组建功能 在另一个索引缓存中 我应该有所有指向 原始网格顶点缓存的索引 它里面应该有可选组件 所以通过渲染或者不渲染子网格 网格会有可选组件或者没有可选组件
子网格之间可以用顶点缓存共享数据 所以这将会允许你向硬件单独提交
因此网格除了有顶点和索引缓存
还有功能函数以及产生 常用事物的生成模板 例如盒子 球等等
还有调节器 如果一个网格没有法线或切线基值 或是类似的东西 你可以在需求中生成 回想一下烘焙和导出循环 我前面提到过的 当然得有烘烤师
现在一个网格缓存必须访问硬件 因为它要去硬件取数据
取硬件中的真实值 缓存有多大取决于你如何分配它
你必须描述这些顶点缓存 你必须说出缓存的用途 比如是存储位置吗 它有多大? 它占用多少字节等等 等等
最后从一个顶点切到另一个 硬件需要知道这些 子网格也一样 确定你需要什么样的索引 是16s还是32s或是其它 下面讲几何类型三角带?点?还是线? 最后是材质
如果你使用这些类库能生产积极性 为了告诉你这意味着什么 我们使用了双向反射函数 它有十个简单参数这是 为了让艺术家有更加直观的感受 一个更重要的功能是 设定物体是否贴合实际 像黏土或是金属 如果你向一头设定这个值 它就会像是黏土
如果向另一头调 它就会表现得像是金属
在这里我把这两者结合起来 把一个丙烯酸透明的外套
放在金属底座上面我调整了 一个参数给出缎面的效果
这是一个真正艺术家般的作品 一个有着各种不同材料的太空船 只是给你一点思路只需很少的 参数就可以给出多种多样的外观
那么材质应该有个名字类似于所有在 Model I/O中配置属性的东西 无论你是否想要 Lambert Blinn-Phong 都要设定散射函数 因为需要向下兼容旧系统 并且真实可信 当然如果你想进入真实可信的 勇敢新世界的话
这些材质是单独继承的这意味着 你可以通过改变每个功能的 一个值或是某些东西 你可以指定基础材质和跨越属性 以及子类材质 材质属性有名称用来说明 它们如何使用的释义 以及说明它是浮动值或是颜色值的类型
下面是光 光有物理参数 和物理属性以及几何形状 它们有扩展度和宽度 光以特定的方式传播 你可以指定它的流明和色温 在整个Model I/O中 真正让我激动的 是得到了色彩方面的支持 可以指定使用现代色彩 如果你想用SRGB 我们有设定好的SRGB 如果你想用Rec.709 或者是新的Asus CG色彩配置 这种色彩配置可以保证你的色彩 以一定的方式在app的内容里加载 它自始至终表现稳定 不会发生奇特的变化这可能会给你 你知道意想不到的色彩
我们现在有了类似物理光 各种子类程序区光源 应该说是程序描述的区域光源 IES光度分析计 反光贴图或发光贴图的光探测器 你可以用它们来计算球面谐波 诸如此类的代表正在发生什么的东西
我们的相机也不仅仅是 针孔无限聚焦相机 我们描述的相机发生了巨大的变化 我的照片这里应该有个镜头 这里应该有个传感器 我们描述镜头可以看到的范围 描述镜头属性 失真的种类 桶形失真 或者是色差之类的东西镜头的几何形状 镜片的有多大 镜筒有多长 出口孔径 你关了多少光圈 传感器有多大 传感器的曝光功能是什么 所有上述设置的结果是 如果你装载了一个35或者 说50毫米F1.8光圈的相机 去查维基百科 一个这样的镜头有什么功能 视野是多大 离焦光怎样 突出尺寸及MDL相机的 实用功能等类似的东西 这个相机将和你在书上看到的一样 所以这是一个方便而且有趣东西 我鼓励你把这一类的 计算整合到你的着色器和通道
这里只是一个简短的例子
当我第一次将它加载到我的查看器中 使用默认的曝光设置 有些细节的丢失 挖掘机的黑暗区域很多细节看不到 对不起 这里的亮度不好 我这图像曝光不足 然后 使用闪关灯以 给出阴影的细节在 减少炫光的同时提升整体水平
就像一个摄影师做的那样
如果你玩的是自己真正的相机
现在 该天空了
我们有两种方法创造天空 第一种方法是使用一个程序天空发生器 它使用物理学
你给出当天的时间本质上太阳有多高 天气如何有没有很多地面上来的背散射 空气中是不是有很多垃圾 我们通过大量的数学运算 精确计算天空的样子
另外一条路是 它创建一个立方体你知道使用... 现在你可以在这个基于物理的领域 创造天空的另一种方法是摄影 你可以用手机或DSLR 摄制一个球形全景图 我用IPHONE制作了这张图
你可以使用mdltexture 和initwithurl API 创建一个立方体 反射或发光地图 从图像中我们可以推断出光是入射光 所以这已经转换成一个立方体
然后从这些里面你可以计算出辐照度 这三条显示的是原始图像 中间线是纹理贴图以一定的 卷积或水平的模糊度发光 第三个真的很好玩 中间是一个纹理它使用大量的内存 第三个实际是球谐系数 所以他是27浮动重现的光照环境 之前用数十个K代表中间线或中间地带
把这些放在一起 这个挖掘机和它周围的环境非常和谐 我画的这些作品我认为 另人激动我希望你们可以 用这些工具做出非常酷的作品
现在我只是想多说一点 关于如何整合Model I/O 和SceneKit 本质上在Model I/O 和SceneKit元素的顶层 有一对一的依赖关系 mdlasset对 应SceneKit根节点 MDLMesh 和SCNNode 通过SCN坐标联系起来 MDLLight 有SCNLight的相机和材质 在SceneKit参数 和Model I/O参数间 没有一致的模型我们就通过翻译 得到一个近似的模型
现在Model I/O 实际上没有做渲染 你可能收集了既然 我提到过其它渲染APIS 所以在metalkit更接近金属 你将MDLMesh作为 MetalK 和Model I/O间的模型阵 网格阵列一旦你有了网格阵列 你就可以自己写阴影遍历网格 和照明条件并做渲染 但是得到这些为你准备的 金属缓存是绝对透明的
说到这个我想把麦克风给 克劳迪娅·罗伯茨 分享关于几何图形和体素的内容
大家好 我的名字是 克劳迪娅·罗伯茨 尼克已经提到了 我将概述一些不同的方法以便你可以 描述和个性化 Model I/O中的几何图形 帮助你创造更加有 真实外观和感觉的游戏和应用
给你们讲一下我们将要分享的重点 首先我将讨论Model I/O 如何支持正常平滑 然后进入细分曲面 讨论体素和一个快速的演示
好的 开始吧法线平滑
法线平滑是非常酷的技术 能让人相信你的模型有更多几何形状 默认情况下 多边形的顶点都有相同的法线 这样多边形的表面也有相同的法线 这会造成相邻多边形之间的 一个明显的褶皱 这是突然变化和顶点法线的 光栅化过程的结果
这种颜色的强烈对比可以减轻 通过引入一个共享的法线值 其值是共享相同的 坐标位置顶点法线的平均值 现在在GPU轻度计算下 多边形表面每个点的正常值 将是顶点法线插值 不再是同样的值展现出 很好的平滑明暗效果
使用mdlmesh API你可以通过调用 addNormalsWithAttributeNamed方法 给对象添加平滑法线 你还可以通过设置皱纹阀值 控制什么时候使用正常平滑
在我们的飞船上我们看到左边有 默认的平面阴影网格 右边有平滑阴影
下面是细分曲面 细分曲面是一项普通技术 用来使用低细度的几何图形产生 和渲染平滑表面 这种技术可以让你使用 一个简单的多边形控制网格 创建所需的不同级别的细节 举例来说当一个物体远的时候 它以少量的多边形来渲染 当物体离镜头越来越近的时候 它会提高颗粒度
通过改变模型的细分层次 你可以产生不同的网格 不需要全部人工创建
在Model I/O中 你可以通过调用新的 SubdividedMesh程序 或者MDLMesh来创建细分层次
在下面我们将细分级别设置为2 实现了右边的光滑网格 多边形数显著增加
最后是体素 除了提供各种以多边形展示 3D模型的先进技术 Model I/O还支持容量展示
通过以物体近似真实世界 的情况展示模型这是 一系列空间粒子或点 有固有的性质 如体积 质量 速度 颜色 以一系列的物理现实技术分析和操作 的大门向你敞开了
与多边形网格一样很难建模 和展现表面不规则的现象 如云 水 火 有了体积表现就变得非常容易了 现在与其试图混合和扭转 多边形的刚性外壳 该模型成为一个变形的物质 任何时间都可以改变它的属性
沿着相同的路线 这表示 允许程序生成建模意味着它可以制造 让人兴奋和感到新奇的机会和游戏 考虑修改和毁坏对象和飞地
因为体素模型能更准确地表现 真实世界它可以让自己以 更自然和真实的方式 被探索和操纵就像是切片技术
这事实上被证明在医学影像领域 是特别有用的非常幸运 科学家已经证明我们 头骨不是一个三角形空壳
最后鉴于你已经有了固体体素模型 你可以执行构造实体几何布尔 操作以便创建大量 更有趣复杂的模型
在Model I/O中我们以 MDLVoxelArray API 暴露体素 我们的作品以稀疏网格表现 空间模型稀疏网格可以 使用简单的空间索引访问
这个表现形式具有快速找到并 访问邻居的功能
网格除了连接得每个体素外 还包含壳等级值 壳等级值是表明体素在正外部方向 和负内部方向离模型表面的远近
Model I/O也支持 创建封闭网格模型的清理 及转回多边形网格
我将向你展示少量你需要的API调用 以便能引入体素和Model I/O
假设有一个初始化的 MDLVoxelArray 你可以通过调用 setVoxelsForMesh方法 从MDMMesh模型产生体素数据
分离参数的作用是 设置分辨率设定层的数量 将你的模型在垂直方向分开
你也可以设置模型内墙和外墙的厚度 就用最后的这两个参数
一旦你建立了体素数组对象 你可以在它们上面执行各种各样的操作 例如体素的交集合集及差分 这些是基本布林操作
要实际加工和处理 检查体素数据只需调用 getvoxelindices方法
做完了上面的操作 用meshUsingAllocator程序 就可以将体素模型 转换回多边形模型
非常简单 现在我将用快速 展示来展现一个动态的体素
让我们看这个展示 它会用一个小时的时间来展示 如何使用 SceneKit editor来创建 我们只需要在地面上拖拽 同样地像昨天在华盛顿 看到的红色熊猫那样 这是规则的多边形网格 你可以使用任意的网格来制作 下面是使用MDLVoxelArray API它仅用两条线的代码 就把网格变成了体素 那么对于每个体素 我们都创建一个SCN盒子 就像这样
现在我们有了在 SceneKit中的体素 让人激动的是我们可以使用 SceneKit所提供的 所有非常酷的东西 举例来说使用一条线的代码 我们可以把SCN盒子变成SCN球
让大家开心下 我们将SceneKit体素 提供给所有节点然后引爆它
现在由Remi来接着讲 关于照明和Xcode支持的高级主体
大家好 谢谢克劳迪娅 如克里斯所说我将分享关于烘焙 以及Model I/O 工作原理的高级内容
所以就是高级照明和烘焙目的是什么 目的是介绍框架和喧染通道 在你的游戏中叫做全局照明 是什么呢? 这么说不好立即 好吧 我这里有点的高度 有三角形让我们用点工具照亮它就是了 我们将试图让场景看上去是真的 我们将要在光线因为不能穿过三角板 而在墙上反射的和阻挡的场景中 仿真光线实际移动
问题是这消耗非常大 在影片中会花费很长的时间 如果你想花费半个小时去重构的话 但这不适合我们 请看这张图片你可以看到举例来说 这里的墙左边的红墙 在球上投射了一些红色的光 墙不是真的光但光在 真实世界里是从墙上反射到球上的 回到球上它有点暗 因为球吸收了墙上反射的光 它不是真实的直接阴影 但是还有一些事情发生
问题是很难做到实时 所以我们将展示如何在 预编译期间游戏运行之前做一些预运算 这样你可以得到近似真实的景象 而不用任何性能的回落 我们将平衡性能和质量 所以你可以用很少的性能开销 得到你想要的效果
因此今天的全局照明将有两个点 首先我们将展示环境遮挡 然后是光照贴图 为了介绍环境遮挡我会展示一个示例
请看这个飞船它是默认的 SceneKit飞船 看上去不错 是一个大飞船 我喜欢玩这个游戏但是它有点平 如果你看看翅膀和发动机 它的翅膀尾部 和发动机的开端部位有点不清楚 如果你看右边图像的两翅片 它有点怪异因为你给它的光 和前面的飞船的光一样 但是翅片应该挡住光线 如果你要添加环境遮挡 它会变成这样
同样的渐变但是看上去更真实了 因为现在在翅膀和发动机之间的 遮挡有了阴影 如果我在第二个上面添加环境遮挡 它会这样 同样的 但你可以看到光的遮挡 这是更让人信服的体验 这是一个更好看的图片 环境遮挡实际是什么
环境遮挡是非常简单的 几何图形遮挡测量 意思是我的点或是网格 在我的世界里有多少光 可以真正的落在我的点 有多少光被我的网格 或是它周围的网格遮住了 所以它基本上是一个信号 1 代表白色说明我完全无遮挡 全部的光发散出去了大多的光不能到那 如果我们看信号 是这样的 几何全白因为大多数光都不能到那儿 但是你看一些...那里的物理数据
我们如何计算? 使用离线光线追踪 网格变成... 我们把光线射向各个方向 然后计算如果我在我的点周围照射光线 有多少光线 有多少光线射在网格上 有多少射在天空盒子上 两者之间的区别在于我的环境遮挡信号
我们需要什么? 输入 网格 我的太空船 一系列的遮挡网格 这里它只是一个太空船 举个例子如果我表现那个场景的光 我想做地面场景的 它将计算地面的环境遮挡 我还要所有的椅子 人 地板 所有阻挡光线的东西 这样我就有了一个非常好看的网格 这是非常好的设定
我的输出是 一组每个点的遮挡值 点的遮挡
我们如何存储 2种方式顶点或纹理 如果我的网格有很多顶点 举例来说一个有大量三角形的太空船 我们可以用顶点来存储非常好 因为它非常节省资源 每个顶点只要一浮动 栅格化你的金属或管道 非常节省的渲染
举例来说太空船是少量三角形 我们需要纹理来存储
我们已经内建在Model I/O 一个UV映射创建二维纹理 以其包裹3D网格 这样这个纹理的每个 象素都有了环境遮挡 我们要看看这个飞船的纹理是什么样子 它是这样的
你可以看到纹理环绕在太空船周围 你可以看到翅膀和发动机的基座等等
我们怎么计算 非常简单 简单得不行 举例来说你可以看最上边的这个船网格 产生环境遮挡 这是纹理 我们有2个参数质量和衰减因子 如果我们提升质量 它将会将会发射更多的光线 得到更好看的信号 但是它 将会花费更多的时间去计算 因为这是烘焙它会在游戏加载前运行 但问题还没解决 如何我们做一个纹理烘焙 那么纹理会更大 所以它会提升一点内存消耗 那么衰减仅仅会衰减信号 只有暗的部分仍然保持暗
最酷的是我们与SceneKit团队 开发了在SceneKit甚至是 SceneKit编辑器中的功能 大家在华盛顿看到过了 我将立刻向你展示这个
它有效了 这里我只加载了一点场景 太空船和天空盒子 太空船在太空飞得非常好 我在这里没有加光 所以非常平唯一可见的是环境光 你可以看到环境光线对 太空船的外观没有作用 它没有以几何图形位置的形式 反馈给用户 所以它非常平 我们要改变 我先点击网格 我将看到实际上这里有些顶点 所以我们做个顶点烘焙
我会带入几何选项卡
我将在这儿在环境烘焙下面 选择顶点 这些值非常好 点烘焙 发生了什么 对于船上的每一个小的顶点 我们将发送100 到200光线到它的周围 看上去是这样
看 更好的方式
我们有了这个 现在又有了这个 它感觉上更好了 如果你看 例如 这 顶板 在1号底部有遮挡 因为光线不能很容易的到达那里 如果我们看这里面的窗户 在这里 窗口的内口比外部有更多的遮挡 如果我们看这 缩小 如果 我们看下面的大炮 大炮的顶部非常暗 因为整个船阻止光到达那里 如果我们看底部 都是白的 有意义 是吗 所以每个顶点增加一浮动,我们能 用环境光照亮我们的场景更好看了
在SceneKit中是可用的 让我们回到幻灯片
这是环境遮挡 今天关于以高级光贴图照射 就分享到这里
光贴图是什么 光贴图是一种方法让你的漫射照明 进入游戏并预计算实时 还是非实时情况下 扩散照明对纹理的影响 正如你们知道的 如果你做了一些游戏编程 光照是非常耗资源的 如果你有十个光源那么每一帧 你需要计算光的方面 以及它是如何干扰你的游戏的 这非常耗资源 这里我拖拽了仿真器中的一个飞机 两只盒子八个光源 然后 我计算 在我加载游戏前 使用光贴图烘焙 光贴图如何照亮场景及照亮纹理
如果我们看这个场景 看上去这样 非常真实 我们有了阴影和光 但是这实际耗费一个纹理获取
这样 通常渲染八个光特别是如果你有阴影 阴影贴图非常耗资源 纹理看上去这样 很简单你看中间的箱子和阴影
这非常酷 只是一个纹理获取 是吗? 它支持非常多的光 我能有100,000个光源 它将具有相同的运行成本 甚至阴影看上去也很酷 当你象这样做出个点光源 它非常贴近地面 你会遇到精确性问题 除非你这样做 发送光线到这个东西上的每个象素 看看哪个象素有光哪个象素没有光 你的阴影看上去将非常真实离线计算
我们支持超复杂的实时幻灯片 你甚至无法想像 这非常酷 举个例子我们实际的 光照在很长的时间里很难 做到实时因为用一般的点光 很难做到三角反射处理 这里我们用的是光线追踪 所以我们只要发出光线 看看哪些有光哪些没有光 我们也支持冷IS光源 尼克之前说过的
这是光贴图
让我们总结一下 今天我们介绍了一种非常新的框架 对于它 我们非常高兴 首先它做了基本的3D文件导入导出 但是对你来说做得非常多 它使用基于真实世界 而不是以浮动定义的 模型 光 相机 物质和天空 介绍了渲染的物理基础概念 我们有系统集成在Xcode中 的框架和工具中你可以玩 玩得很开心
为得到更多的信息 我们邀请你看我们的文档 视频 论坛和技术支持 任何一般的查询 您可以联系艾伦·谢弗 相关的会议有明天的 “SceneKit进阶” 和周二的Metal新功能 一会儿和明天早上9点 我们将在 Model I/O实验室见面 谢谢你们 希望你们有一个伟大的WWDC
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。