如何在SceneKit中有效地映射高分辨率SKScene?

时间:2017-01-14 16:19:47

标签: scenekit skscene texturing scnmaterial

  

可能相关:   Optimizing SceneKit performance with high-res textures

我将SKScene映射到棋盘几何体上以创建棋盘游戏。场景需要相对较大(2048x1024),以便我可以放大动作并仍然有漂亮的细节。现在,为了解决这个常见问题,我已经了解了两种方法:

  • 缩小时使用较低分辨率的纹理(即mipmapping) - 这不是问题,SceneKit为我做了。
  • 平铺场景以进行特写,并仅显示屏幕上的那些图块。

现在第二点让我思考。如何平铺SKScene并将它们映射到几何体上的不同位置?有没有其他方法可以使这项工作?

截图

这是几何: Plain geometry without texture.

这是具有静态图像(2048x1024)作为纹理的几何体: Geometry with an image texture.

这是纹理为SKScene(2048x1024)的几何体: enter image description here

场景不包含任何物理实体,只有大约40 SKSpriteNodes无效。我需要它能够更改区域的颜色,可能会添加一些额外的叠加等。是否有办法完全使用SceneKit?也许为每个领域创建几何?

已实施答案

我现在尝试仅使用SceneKit来实现相同的场景。每个区域都是四边形,使用包含预渲染边框的纹理。不同的混合模式有助于衬垫纸张纹理的出现。不幸的是,性能损失大致相同 - 我的结论是,在所有占用资源之后,它不是SpriteKit,而是节点数与高分辨率纹理相结合(遗憾的是需要保留边界如果你不使用路径,那就很清楚。

Solution using SceneKit only

3 个答案:

答案 0 :(得分:2)

SKSpriteNodes是您的领地吗?也就是说,每个领域有一个SKSpriteNode?从静态图像到SKScene时所看到的巨大性能影响,听起来像SpriteKit正在杀死你。

尝试使用SCNShape几何图形(每个区域一个)而不是使用SpriteKit派生的纹理,或者为每个区域节点添加一个或两个levelOfDetail会很有趣。我不知道如何获得你正在使用的同样深色调的边界效果。但是你可以用SCNShape做一些有趣的效果,例如为给定区域设置挤压深度的变化动画。

答案 1 :(得分:1)

是的,您可以为每个区域使用独特的几何图形,为每个区域添加简单的四边形,然后添加一个像精灵(由纹理组成)的材质,使用alpha来表达每个区域。

通过这种方式,您可以为每个区域的每个状态设置不同的纹理(选择,点击,灰显,无论您拥有什么)。

困难的部分是布置所有这些四边形及其纹理以形成您的世界地图。您必须首先在2D或3D设计应用程序中执行此操作,以便您可以获得所有内容。然后将您在设计应用程序中使用的任何坐标系转换为适用于SceneKit的内容。

你很可能会在你创建原始纹理的任何设计应用程序中首先进行定位。只需为所有区域制作像切片一样的正方形/矩形,然后开始记下它们的坐标和大小。

不好玩,但它会起作用,效率很高。我想。

答案 2 :(得分:0)

SpriteKit可能会影响您的帧速率。您是否在场景中启用了栅格化?确保没有在节点上进行缩放,并遵循apple的建议处理节点数。