Godot中导入的spineDrawCall过大的问题
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.
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.
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,很难大规模使用
Well, I suppose there's your answer. Did you use a release build for benchmarking? And what rendering profile did you use? Make sure to use Vulkan.
We have no control over Godot itself, so we can't make things faster on our end. If Unity fits your needs, go for it. Our spine-unity runtime is as capable as our spine-godot runtime, if not more.