What are the performance differences between Godot and Gamemaker?

GeffreyGeffrey Posts: 24Member

I'm thinking about transferring my project from Gamemaker to Godot as I think the interface in Godot looks a lot nicer and flow of the Nodes based system seems smoother.

My main selling or breaking point is performance. What advantages/disadvantages does Godot have compared to gamemaker in the arena of performance?

One thing that jumped out at me is the fact that Godot does not have the seperate event categories like create event, step event etc. While this makes coding easier, I wonder if it will impact performance. In Gamemaker the create event basically runs only once whenever an instance is first created and doesn't run over and over and over again per step or frame, this allows you to instantiate constants and do some other things that you don't need to be constantly running per step.

Does Godot have anything similar to this? In Godot does everything within functions only run per step or do the things outside of functions also run per step? For instance, if you instantiate constants at the beginning of the script, will the CPU take time to pass through those lines even after the constant was created in a previous step?

Comments

  • TwistedTwiglegTwistedTwigleg Posts: 1,408Admin

    @Geffrey said:
    I'm thinking about transferring my project from Gamemaker to Godot as I think the interface in Godot looks a lot nicer and flow of the Nodes based system seems smoother.

    My main selling or breaking point is performance. What advantages/disadvantages does Godot have compared to gamemaker in the arena of performance?

    I've never used Gamemaker myself, so please take what I say with a grain of salt!

    Godot is pretty fast, especially on the C++ engine side of things.

    For 3D projects you might run into some performance constraints depending on how complex your project is, how many textures/materials you use, and the complexity of the models you are using (vertex count, animated bones, etc). In 3D Godot isn't quite as performant as some of the more popular game engines out there, but only a few times have I ever really hit a performance barrier. 3D performance on mobile platforms isn't very good from my experience (granted, I was using OpenGL ES 3, so I cannot say for OpenGL ES 2).

    For 2D projects, I have found that Godot is very fast and I haven't really heard of too many issues in terms of performance. Personally I have not taxed the 2D side of Godot in any of my projects, but I primarily develop in 3D. While I don't have a direct comparison to Gamemaker, and I can safely say that for the majority of projects, I would expect Godot to be just as performant as Gamemaker.

    One thing to note is that GDScript, while very easy to learn and powerful, isn't as fast as some of the programming languages out there. You can get around this by writing C++ code through GDNative, use C#, and/or any other language the community has implemented through GDNative. While I have run into performance issues with GDScript a few times, most of the time I can optimize my code to get around it.

    One thing that jumped out at me is the fact that Godot does not have the seperate event categories like create event, step event etc. While this makes coding easier, I wonder if it will impact performance. In Gamemaker the create event basically runs only once whenever an instance is first created and doesn't run over and over and over again per step or frame, this allows you to instantiate constants and do some other things that you don't need to be constantly running per step.

    Does Godot have anything similar to this? In Godot does everything within functions only run per step or do the things outside of functions also run per step? For instance, if you instantiate constants at the beginning of the script, will the CPU take time to pass through those lines even after the constant was created in a previous step?

    As I said, I don't really have Gamemaker experience, so I am guessing a bit on what these events do.

    I assume the "create event" is called once a object/entity is created and added to the world. If that is the case, then the _ready function in GDScript acts exactly the same. You can set constants and variables outside of any function so it is assigned to script (technically a class) you have created. You can set the values of these script/class variables in any function, though many times it is best to use the _ready function to initialize script/class variables to their default values.

    The step event I would assume is called every game step/tick/frame, in which case you have two options depending on your needs: The _process function is called every time a frame is drawn, while the _physics_process function is called every time the physics update.

    If you look at the documentation for Node, which almost every node extends, you will see there are many virtual methods that you can override and use. For example, the _enter_tree and _exit_tree functions will be called when a node is added or removed from the scene tree.

    Virtual functions in Godot are only called when certain conditions are met, so performance is quite good. I imagine it compares just fine to Gamemaker in terms of performance.
    I have only rarely have had performance issues, and the times I have had mostly been because of optimized code, very complex calculations, or just too many calculations in a single frame (like ten thousand calculations).

    Hopefully this helps!
    (Side note: Welcome to the forums :smile: )

  • GeffreyGeffrey Posts: 24Member

    Thanks for the great comment. I will keep those functions in mind and go through the documentation in more depth.

Sign In or Register to comment.