【问题标题】:How do I efficiently map a high-res SKScene in SceneKit?如何在 SceneKit 中有效地映射高分辨率 SKScene?
【发布时间】:2017-01-14 16:19:47
【问题描述】:

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

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

  • 缩小时使用较低分辨率的纹理(即 mipmapping)- 这不是问题,SceneKit 帮我解决了。
  • 平铺场景以获得特写,并仅显示屏幕上的平铺。

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


截图

这是几何:

这是以静态图像 (2048x1024) 作为纹理的几何图形:

这是以SKScene (2048x1024) 作为纹理的几何图形:

场景不包含任何物理实体,只有大约 40 个 SKSpriteNodes 什么都不做。我需要它能够更改区域的颜色,也许添加一些额外的叠加层等。有没有办法完全使用SceneKit 来做到这一点?也许为每个区域创建一个几何图形?


实施的答案

我现在尝试仅使用SceneKit 来实现相同的场景。每个区域都是一个四边形,使用包含预渲染边界的纹理。不同的混合模式有助于衬托纸张纹理。不幸的是,性能影响大致相同 - 我的结论是,它不是 SpriteKit 毕竟占用资源,而是节点数与高分辨率纹理相结合(遗憾的是,如果你不这样做,则需要保持边界清晰使用路径)。

【问题讨论】:

    标签: scenekit skscene texturing scnmaterial


    【解决方案1】:

    SKSpriteNodes 是您的领地吗?也就是说,每个区域一个 SKSpriteNode?从静态图像转换到 SKScene 时看到的巨大性能损失,听起来 SpriteKit 是要杀死你的东西。

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

    【讨论】:

    • 正确,每个区域一个精灵,加上混合模式 SKBlendMode.multiply 顶部的“旧纸”精灵。感谢SCNShape 的提示,如果SpriteKit 不是一个选项,我认为这将是最好的方法。但是,推导路径将很困难。我还不如从SKScene 生成静态图像,而无需呈现它,在更改时更新纹理,并将SceneKit 用于任何动画。我会记住你的选择,谢谢!
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 你有什么想法可以使边框的描边更深吗?
    • 这是一个有趣的想法。多亏了 Xcode 的场景编辑器,定位甚至不会像您想象的那么困难。这里让我担心的是分层。如果我有你建议的多个几何图形,并像SpriteKit 中的图层一样将它们稍微放在彼此上方,我可以使用不同的SCNBlendModes 来达到相同的效果吗?
    • @Hal Mueller 由于几何图形只是带有纹理的四边形,边界渐变可能是纹理的一部分。
    • @DoubleM 是的,SCNBlendModes 实际上比 SpriteKit 中的更强大和更好。也可能性能更高;)
    • 3DMaterialSnipped 自己,绝对 ;) @HalMueller
    【解决方案3】:

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

    【讨论】:

    • 感谢您的提示,但我不再从事此项目 :) 我会记住您的建议,但在以后的工作中。
    猜你喜欢
    • 2017-03-21
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多