Hello. I'm with a small company using Unity. I argued that we should move away from Unity to an engine that has similar features but offers C++ scripting capability. Thus searching among game engines I found Godot. Looking for tutorials and capabilities on YouTube, at first it didn't look like a match for Unity, not by a long shot. Then I read this and it completely changed my perspective. So I decided to go forward and now I can pretty much say I left Unity for Godot. Now I'm willing to invest time, effort and other resources to make it my established game engine and I want that the company I'm with, to adopt it too. I know Godot may or may not not be suitable for medium to large projects but pushing is what makes progress.

So what I'm interested in is ways to squeeze the last drop of performance out of Godot. Thus I'm still spending time on researching about Godot performance as I'm spending on actually learning it.

Graphics-wise what I already know is general rules pertaining to any game engine: Keep geometry small Keep light number small (in forward rendering) Use mesh LOD Use mipmapping Use texture compression where possible Reuse textures (for memory reasons) * Use atlases (for faster accessing)

Unity and Unreal have these internal auto-optimizations and also other means for the user to optimize further and I wonder whether Godot has similar features. I'm talking about: Dynamic and static draw call batching (Unity). Basically it "combines" objects sharing the same material and issues a single draw call for several of them. Some is automatic, some user deciding. Merging actors (Unreal). Basically give the user the possibility to merge geometry of multiple objects into one. Static GI (baked)(Unity, Unreal). I didn't catch how Godot does GI but I tend to think it does it dynamically only. For static GI, I'm thinking the user could perhaps use baked GI textures as albedos? Instancing. This I know that Godot has it too and I think it's automatic (?).

With these features, additional tips are possible with other engines (which do also apply to Godot?): Reuse materials (for reducing draw calls) Reuse shaders (for reducing shader switches)

What tips and tricks do you recommend that are specific or not to Godot? Please share your expertise or your 2 cents - anything is welcome.

Hi,..i don't have many deeper answers fo you....I use Godot engine about one year..approximately and I'm mainly artist with some small portion of code which I can capable write yet. Some about draw call batching is there ---- https://github.com/godotengine/godot/issues/7844

"For static GI, I'm thinking the user could perhaps use baked GI textures as albedos"......I think ,Yes. About instancing (for Godot 3.0)....Yes will be automatic I think ( also Godot 3.0 gets UBO/VAO ) Yes Reuse materials and shaders ....also great member of our community Zylann pretty hard tested 3d in new Godot 3.0 alphas

...be great with Godot engine!....i'm glad you're with us <3

Thanks Bishop. I felt I was drawn into Godot from the start. I'll do whatever I can to contribute. Should I take it Godot 2.1 doesn't use UBO/VAO? If it doesn't (and I hope that), this is great news! About that feature proposal, if reduz would consider it and there's no compromise such as slowing things elsewhere, it would be great. Every extra frame per second (if not by dozens in some cases) allows you to have more happening in your game than before.

Yes,Godot 2.1 doesn't use UBO/VAO....I think. Godot 3.0 gets huge modern and clever 3d rendering improvements.... thanks to all developers and contributors. Godot 3.0 for all of us is ground-breaking version ....here is the milestone page on github: https://github.com/godotengine/godot/milestone/4

Note: You can read about Godot 3's renderer in this article.

  • Keep geometry small

This is not as important as most people think, since modern GPUs can handle a lot of triangles (hundreds of thousands at least). Don't underspec your assets – it is far better to slightly overspec them (making them too detailed) than to underspec them (making them not detailed enough). The same goes for textures, by the way.

  • Use mipmapping

Godot does this out of the box, of course. :)

  • Keep light number small (in forward rendering)

This is still true in Godot 3.0, but clustered optimizations may be added to 3.1, which will let you use more real-time lights than with traditional forward rendering. (It will still be forward rendering, so you'll still be able to use MSAA.)

  • Use texture compression where possible

Godot 3.0 supports S3TC (for desktop platforms) and ETC2 (for mobile/web platforms). ASTC is not supported, as it is too new and barely supported anywhere outside of NVIDIA graphics cards.

Static GI (baked)(Unity, Unreal). I didn't catch how Godot does GI but I tend to think it does it dynamically only. For static GI, I'm thinking the user could perhaps use baked GI textures as albedos?

Godot 3.0 uses a semi-real-time GI that is very-good looking, adapts to moving lights and emissive materials, and is fairly fast (but still slow, in comparison to not using any GI). Godot 3.1 will probably add a lightmapper for mobile devices and low-end desktops.

  • Reuse materials (for reducing draw calls)
  • Reuse shaders (for reducing shader switches)

Both of these can be done in Godot, by making several nodes share the same material and shader resources.

Thanks guys. This was my first thread on the forums and I did a little mistake. It was supposed to be a discussion but ended up as a question. So I'll mark the question but I'd like this to go on.

19 days later

I still wonder about static/dynamic batching, though. Does Godot 3.0 do it? If not, is it planned?

@snwflk said: Thanks guys. This was my first thread on the forums and I did a little mistake. It was supposed to be a discussion but ended up as a question. So I'll mark the question but I'd like this to go on.

I would recommend you to throw lot of models and characters in a scene, add some particle effects and see how it goes. There is no better way to test.