• International中文
  • Godot中导入的spineDrawCall过大的问题

gyzbean

I don't see any particular issue, apart from the fact that you removed "Strip Whitespace X/Y."
How many atlas pages does this configuration export?

  • gyzbean відповіли на це.
    Related Discussions
    ...

    Davide 只有一个图集页面(尺寸小于2048*2048),我正在试着逐级排除问题的源头。我又使用texturePacker工具将spine中使用的散图导出为spine格式的图集给godot,但依然没能合批。或许问题的源头不在spine导出的设置上,而在于godot中。我在godot中尝试使用相同的材质(如shaderMaterial、CanvasItemMaterial)给spine但都无法合批。我尝试询问了AI但没能找到AI所说的一些选项。
    如果没有能解决godot合批spine的方法,或许godot用户就要被迫使用godot自带的骨骼动画工具了,这对spine工具的忠实用户以及spine官方都是一个损失,希望在此问题上能得到官方工程师的协助。

    We cannot help you if you don't send us a minimal reproduction project of your issue, as I said above.
    Many users use spine-godot without any issue with draw calls.

    • gyzbean відповіли на це.

      Davide 我准备好了工程文件,我应该发送到哪里呢,可以给我一个邮件地址吗。非常感谢

      • Змінено

      Harald I have sent the email from <gyzbean @ 126.com>
      hope to get a quick solution
      thank you very much

      Harald My email has been returned, and I am unable to send files in compressed formats such as zip or rar. I'll try another method and send the email later

      @gyzbean You can upload your project at some filehosting service and share a link if file size is too big.

      • gyzbean відповіли на це.

        gyzbean

        Thanks for sending us the project. We'll analyze the issue as soon as we can, probably next week.

        • gyzbean відповіли на це.

          Davide 好的,非常感谢。有结果了请通知我

          10 днів пізніше

          This is a limitation of Godot. They currently do not implement batching for 2D triangle meshes.

          orgs/godotengineprojects/33?pane=issue&itemId=20224421

          We've worked around this as best as possible, by using meshes explicitely:
          EsotericSoftware/spine-runtimesblob/4.2/spine-godot/spine_godot/SpineSprite.cpp#L173

          However, that does not help with draw calls. It does improve performance compared to canvas_item_add_triangle_array though.

          Note however, that Godot 4+ uses Vulkan as the default renderer. Batching is much less impactful there, which is one of the reasons it hasn't been implemented by Godot yet.

          • gyzbean відповіли на це.

            Mario 我了解了,其实我不久前才购买了spinePro,虽然我很希望在项目中使用这个便捷的工具,但godot似乎还不太成熟。
            所以这是否意味着,如果我希望大规模使用spine作为游戏中的角色,最好使用unity引擎,或使用godot的原生骨骼工具+图集的方式来实现,这两种方案似乎都可以解决batch的问题。

            Mario 等等,可能刚刚我没有完全理解你的描述,你的意思是不是说,我可以忽略掉合批这个概念去使用godot-spine,不能像对待传统引擎的思路去对待godot,因为它的底层渲染逻辑很特殊,drawcall对它的影响很小。是这个意思吗?我可以忽略drawcall这个概念,在godot中大量使用spine动画

            I think Godot is mature enough for production use, including on mobile. Vulkan makes batching mostly irrelevant.

            I suggest you setup a simple scene with multiple SpineSprite nodes that's similar to your target complexity and test performance on devices you care about.

            • gyzbean відповіли на це.

              Mario 我测试了一下,在godot里跑200个spine和unity里跑200个合批的spine,最后unity的FPS非常稳定,godot在100个的时候i5处理器就已经扛不住了,200个时drawcall达到了3000+,i7也抗不住了。但unity跑到300个i5都能稳定在60fps(unity甚至是在3D空间里)。
              其实godot无法让多个spine合批这个事儿还勉强能接收。但godot甚至无法让1个spine文件只使用1个drawcall就太糟糕了,如果godot能让1个spine只使用1个drawcall绘制,200个spine控制在200dc,应该也不会太卡,现在一个spineSprite就要耗费20-30个dc,很难大规模使用