Tag: 渲染

使用新的iOS 10 SceneKit惊人的基于物理的渲染

毫无疑问,在移动设备上进行渲染时,Apple已开始使用它。 实时渲染和高级硬件的最新进展确实为获得高端结果提供了机会,而无需在设备上花费2000美元的价格。 尽管Apple的团队在WWDC 16’上介绍了许多进步,但是我真正注意到了一项改进,那就是SceneKit中基于物理渲染(PBR)的支持。 在过去的几年中,这种渲染技术获得了广泛的关注,并已成为工程师和3D艺术家的事实上的行业标准。 在这篇简短的文章中,我将尝试演示如何简单地使用新推出的iOS 10基于物理的渲染器,并在不具有任何高级图形引擎复杂性的情况下获得出色的效果。 在继续之前,我想坦诚地声明。 本文过度简化了一些概念,以使您对PBR中的关键元素有所了解。 基于物理的渲染 重要的是要了解不同的环境贴图会创建非常不同的渲染,因此请仔细选择您的环境贴图。 选择正确的环境图本身就是一门艺术,通常是由经验丰富的3D艺术家完成的。 物理渲染的材质定义 材料对于出色的PBR着色至关重要。 它们为我们的着色器提供了使这些惊人的可视化效果的基本信息。 过去,定义材料非常困难。 有上百万个参数需要调整,并且需要大量的魔术师和经验来使它正确。 此外,材料定义与照明非常相关,这在材料创建方面造成了问题。 使用PBR阴影,故事变得简单得多。 实际上,仅使用两个浮点数就可以很容易地获得视觉上令人愉悦的陶瓷,塑料或金属(请参见下文)。 基本上,您可能会达到相同的外观和感觉,但是艺术家将不得不工作几个小时才能获得他们想要的精美外观。 PBR材料的三个主要参数称为: 反照率,粗糙度和金属度 。 反照率分量是对象的基础颜色,并且与其他着色模型的漫反射分量直接相关。 反照率值通常是RGB颜色,通常由3个浮点数定义。 粗糙度和金属度 – 这些值描述了表面的粗糙度或金属感。 下图很好地说明了仅使用0.0-1.0范围内的浮点值来更改任一值对渲染结果的影响。 为了获得专业的效果,您将需要使用纹理,该纹理将为模型上的每个点定义不同的PBR组件。 幸运的是,大多数3D艺术家已经熟悉此着色模型,并发布了免费的材质定义,可以帮助您快速启动任何项目。 此外,iOS 10 PBR材质还支持其他贴图,例如法线贴图,这些贴图是可选的,但必须使用以获得良好的外观。 为了演示的目的,我使用了freepbr.com的一些资料。 如果要使用其他材料测试代码(如下),请确保将其签出。 编码时间 我们将一起创建旋转球的示例,如下所示。 无需担心-所有代码都在GitHub上发布。 首先,您需要了解一些先决条件: 获得可用的最新macOS,iOS和Xcode beta版本-您不想因为Apple已经解决的错误而陷入困境。 不要使用模拟器-始终使用支持金属的设备。 这是Beta版软件-可能也会出现错误 准备看它有多简单? 我们走吧 我假设您有编写Swift代码的经验,并且您已经创建了一个SceneKit视图。 如果还没有,请从Game模板开始,然后选择SceneKit作为您的游戏技术。 您将获得的模板代码足以完成本练习(我在这里实际使用过……) 第一步:创建一个场景: 让场景= SCNScene(名称:“ sphere.obj”)! 如您所见,直接从OBJ文件初始化场景非常简单。 […]

SceneKit和基于物理的渲染

在本文中,我将指导您使用SceneKit及其基于物理的渲染功能创建场景。 SceneKit是我最喜欢的Apple框架之一。 什么是SceneKit? 让我们从开发人员苹果网站查看定义: SceneKit将高性能渲染引擎与描述性API结合在一起,用于导入,操作和渲染3D资源。 与要求您精确实现显示场景的渲染算法的低级API(例如Metal和OpenGL)不同,SceneKit仅需要描述场景的内容以及想要执行的动作或动画。 从定义中可以看到,其中包含很多内容。 基本上,通过使用SceneKit,您将能够创建游戏和其他3D应用程序,而无需了解任何计算机图形算法,物理模拟等。 您基本上用对象和功能来描述场景,Apple会为您做一切。 在计算机图形学方面,关于SceneKit的最有趣的事情之一是在2016年引入的:基于物理的渲染(PBR)。 我们已经在上一篇文章中了解了PBR的含义,因此您已经了解了PBR的理论基础知识(或者在未找到go的情况下进行检查😉)。 因此,这意味着SceneKit可以使用其自己的全新基于物理的渲染引擎来渲染基于物理的场景。 这值得么? 当然!! 😊 所以,让我们尝试一下! 在本文中,我们将从头开始创建一个场景,该场景使用您可以在SceneKit中找到的主要PBR功能。 在这篇文章的结尾,您将能够渲染下图中的场景。 现在该开始编码了!! 场景构建中使用的一般方法如下:对于每个主要场景类别组件,我们将创建一个类,该类封装相应SCNNode的创建,基本SceneKit单元元素及其设置,以获取所需的功能。 。 我们要创建的第一类是 包含我们需要设置灯光的基本特征的Light类:位置,旋转和通用颜色。 使用SCNLight类表示SceneKit中的SCNLight 。 类别Light { 让节点:SCNNode init(lightNode:SCNNode){ 节点= lightNode } init(lightFeatures:LightFeatures){ 节点= SCNNode() createLight() set(lightFeatures:lightFeatures) } func createLight(){ node.light = SCNLight() } 私人功能集(lightFeatures:LightFeatures){ node.light?.color = lightFeatures.color node.position = lightFeatures.position node.eulerAngles = lightFeatures.orientation; } […]

ARKit + SceneKit几何图形教程(第1部分)

越来越多的iOS开发人员正在使用ARKit创建有趣的应用程序,但是这些开发人员中的许多人总体上并未接触过3D图形。 我在这篇文章中谈论的3D图形的特定部分是几何。 这是学习OpenGL的人的起点,但使用SceneKit似乎更有吸引力,既可以使用内置几何类型,也可以从在另一个3D建模程序中创建的SCNScene文件导入节点。 自己生成这些几何图形有好处的地方,主要是因为您在沿途学习的东西! GitHub上的这个项目包含下面显示的所有示例 在本教程和第2部分结束时,您应该能够像下面这样在SceneKit中创建一个动画网格物体: 我们之前看过这个吗? 重点是什么? 关键是,一旦有了这些基础,您只需稍加戳戳即可创建稍微不同的几何形状,而无需引入外部模型。 上述立方体的尺寸为0.2×0.2×0.2。 如果创建一个我称为的新几何类型,例如SkewBox,它会引入一个额外的参数skew: CGPoint我可以这样更改顶点(也在GitHub上): 让 src = SCNGeometrySource(vertices:[ //底部4个顶点 SCNVector3(-w,-h,-l), SCNVector3(w,-h,-l), SCNVector3(w,-h,l), SCNVector3(-w,-h,l), //前4个顶点 SCNVector3(-w + skew.x,h,-l + skew.y), SCNVector3(w + skew.x,h,-l + skew.y), SCNVector3(w + skew.x,h,l + skew.y), SCNVector3(-w + skew.x,h,l + skew.y), ]) 输出: 从这里您可以创建任何六面体! 然后达到任何其他形状。 下一步是对几何图形进行动画处理以使其伸展和倾斜,这种方式无法简单地通过缩放节点,仅通过更改几何图形来完成,例如此处的示例: 单击此处查看第2部分。如果有任何不清楚的地方或对以后的帖子有任何建议,请随时在Twitter或LinkedIn上关注我/向我发送消息。 查看我的GitHub上的其他项目。

SceneKit的厄运

SceneKit — 3Dграфики,которыйпоможетвомсоздаватьанимиреенныененные3D Онвключаетвсебяфизическийдвижок,генераторчастицинаборпростыхдействийдля3Dобъектов,которыепозволятвамописатьвашусценувтерминах контента – геометрии,материалов,освещения,камер – ианимироватьеёчерезописаниеизмененийдляэтих объектов 。 – 苹果 Сегоднямывнимательным,немногосуровымвзглядомпосмотримнаSceneKit,но,дляначала,обратимсякосновам,ипосмотрим,чтопредставляетизсебя3Dсцена,ичтонужносделать,чтобыеёсоздать。 Дляначала,нужносоздатьосновнуюструктурусцены,котораясостоитизнод,илиузловсцены。 Каждаянодаможетсодержатьвсебекакгеометрию,такидругиеноды。 Геометрияможетбытьпростой,вродешара,куба,илипирамиды,такиболеесложной,созданнойво。 Затем,дляэтойгеометриинеобходимозадатьматериалы,которыебудутопределятьбазовоепредставла。 Каждыйматериалсамзадаётсвоюмодельосвещения,и,взависимостиотнеё,используотвазличный。 Каждоетакоесвойствообычнопредставляетизсебяцветилитекстуру,но,помимоэтихчастоиспользуемыхвариантов,естьещёвозможностьиспользовать的CALayer,AVPlayer,иSKScene。 Послеэтого,необходимодобавитьисточникиосвещения,которыеопределяютто,насколькоооо Они,поаналогиисгеометрией,должнылежатьвнутрикакой-нибудьноды。 SceneKit是Поддерживаетмногоразныхтиповосвещения或такженескольковидовтеней的产品。 Затемнужносоздатькамеру(иположитьеёвотдельнуюноду)изадатьдлянеёосновныепараметры。 Ихдовольномного,но,спомощьюнихможносоздаватькрутыеэффекты。 Изкоробкиподдержибокэ(илиэффектразмытия),HDRсадаптацией,свечение,SSAOиоооии。 И,наконец,SceneKit在3Dобъектов,которыепозволяюннетевель Такжесценкитподдерживаетдействия,JavaScript,ноэтотемадляотдельнойстатьи。 Помимографики,главнымифишкамиSceneKit’аявляютсягенераторчастиципродвинутыйфизическийдвижок,которыйпозволяетзадаватьреальныефизическиесвойствакакобычнымобъектам,такисчастицамизгенератора。 Провсеэтифишкинаписанобольшоеколичествотуториалов,которыерассказываютпронихвововоо。 Новпроцессеразработкимыэтивозможностипрактическинеиспользовали… Однажды,янаписалмодельосвещениядля3D-игрлучшереальногосолнечногосвета,дающуюприемлемуюFPSнаNvidia的8800,ноярешилневыпускатьдвижоквсвет,таккакБогмнесимпатичен,иянехочупоказыватьегонекомпетентностьв этомвопросе 。 —ДжонКармак Подробноеизучениемыначнемсдовольнопростойзадачи,котораявозникаетпрактическиувсех,работающихсоSceneKit’омдовольносерьёзно:какзагрузитьмодельсосложнойгеометриейиподключеннымиматериалами,освещением,даещеисанимациями? Естьнесколькоспособов,ивсеониимеютсвоиплюсыиминусы: SCNScene(named)—получаетсценуизбандла; SCNScene(url:options 🙂 —загружаетсценупоurl; SCNScene(mdlAsset 🙂 —конвертируетсценуизразныхформатов; SCNReferenceNode(URL 🙂 —ленивозагружаетсцену。 Получаемсценуизбандла Можновоспользоватьсяметодом:положитьнашумодель。 Ночтоделать,есливыхотитесамиконтролироватьобновлениемоделей,невыпускаяобнове Иливыхотитеподдержатьсозданныепользователямикартыимодели? Илидажевепростонехотитеувеличиватьразмерприложения,таккак3Dграфиканеявоеосевашей Загружаемсценупоurl МожноиспользоватьконструкторсценыизURL .scnфайла。 […]