- 10
- 38 687
Deep Dive Dev
United States
Приєднався 20 бер 2024
Hi, I'm a developer into making games, learning new things and making videos about them!
12 Tips to Boost Your Godot Game's Performance
Here are some tricks that'll help boost your Godot game's performance. Enjoy!
Chapters:
0:00 Intro
1:01 Jolt
1:55 Rapier
3:08 Physics Tick Rate
4:33 Less Colliders
5:18 move_and_slide() alternatives
6:48 faster programming languages
7:15 fewer solver iterations
7:46 run physics on separate thread
8:16 multithreading
8:37 compute shaders
9:28 Use GDScript Util Classes
10:11 Be smart about loading assets
10:39 That's all folks
Manymies: github.com/Griiimon/Manymies
C++: docs.godotengine.org/en/stable/tutorials/scripting/gdextension/what_is_gdextension.html
C#: docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/c_sharp_basics.html
Rust: godot-rust.github.io/
Multi threading: docs.godotengine.org/en/stable/tutorials/performance/using_multiple_threads.html
Compute Shaders: docs.godotengine.org/en/stable/tutorials/shaders/compute_shaders.html
100k boids sim: ua-cam.com/video/JE2PNLzd5Fk/v-deo.htmlsi=NwLIpyxdOBrcZNZM
Play my games on itch: breckheck.itch.io/
Chapters:
0:00 Intro
1:01 Jolt
1:55 Rapier
3:08 Physics Tick Rate
4:33 Less Colliders
5:18 move_and_slide() alternatives
6:48 faster programming languages
7:15 fewer solver iterations
7:46 run physics on separate thread
8:16 multithreading
8:37 compute shaders
9:28 Use GDScript Util Classes
10:11 Be smart about loading assets
10:39 That's all folks
Manymies: github.com/Griiimon/Manymies
C++: docs.godotengine.org/en/stable/tutorials/scripting/gdextension/what_is_gdextension.html
C#: docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/c_sharp_basics.html
Rust: godot-rust.github.io/
Multi threading: docs.godotengine.org/en/stable/tutorials/performance/using_multiple_threads.html
Compute Shaders: docs.godotengine.org/en/stable/tutorials/shaders/compute_shaders.html
100k boids sim: ua-cam.com/video/JE2PNLzd5Fk/v-deo.htmlsi=NwLIpyxdOBrcZNZM
Play my games on itch: breckheck.itch.io/
Переглядів: 7 117
Відео
Godot Finite State Machines Made Easy - A Simpler Method for Smarter Enemies
Переглядів 636Місяць тому
We're diving into the world of Finite State Machines! Take a sip of lemonade every time I say the word "state". Play my games on itch: breckheck.itch.io/ Chapters: 00:00: Intro 00:30: What is State? 02:20: State Class 3:53: State Machine Class 4:25: Stealth Game Example 5:35: Flow Chart Setup 6:18: Enemy FSM Setup and Code 6:43: Add Shoot State 7:48: More Complex FSM Setups and Substate 8:35: W...
Boost Godot Project Performance With This Simple Trick
Переглядів 24 тис.4 місяці тому
Join the community discord! discord.gg/K4EZEWF9 Play my games on itch: breckheck.itch.io/ Here's a quick tip in the Godot universe I think the world should know about. GDScript static typing performance gains. Enjoy!
How I Made My First Multiplayer Game in 48 Hours | Jam Devlog 3
Переглядів 1,4 тис.4 місяці тому
I joined another game jam! This time its a multiplayer game for a console you probably haven't heard of. In this episode, we develop the game Pirate Panic in 2 days. Enjoy! Join the discord! discord.gg/K4EZEWF9 Play my games on itch: breckheck.itch.io/ Chapters: 00:00: Intro 00:20: GameNite 1:08: Brainstorming 2:26: Starting the Game! 3:45: TileMap 4:46: Pirate Art and Movement 5:29: Digging 6:...
I Made a Spooky Strategy Game in 5 Days | Jam Devlog 2
Переглядів 7525 місяців тому
I Joined another Game Jam! This one was a spooky strategy game built with the godot engine. Play Soul Weaver: breckheck.itch.io/soul-weaver Jame Gam 40 Submissions: itch.io/jam/jame-gam-40/entries Join the discord! discord.gg/K4EZEWF9 Play my games on itch: breckheck.itch.io/ Chapters: 0:00: Intro 0:20: Brainstorming 0:40: Game Idea 1:49: Project Start 2:50: Pathfinding 4:13: Art Change 5: 38: ...
I Made a Chill Fishing Game in 3 Days | Jam Devlog 1
Переглядів 2,3 тис.5 місяців тому
I Joined a Game Jam last weekend! Let's see how I did Play Waters of Fortune: breckheck.itch.io/waters-of-fortune Mini Jam 158 Submissions: itch.io/jam/mini-jam-158-shopping/entries Chapters: 0:00: Intro 0:40: Coming Up With Ideas 2:34: Starting the Project 2:44: Water 3:55: Boat and Player 4:35: Fishing Rod 5:36: Fish 7:21: Cards and Trading 7:39: Clouds 8:14: Upgrades 9:30: Music 9:54: OST 11...
I Made Over 250 Fractals With Chaos Game
Переглядів 1366 місяців тому
A montage of fractals renderered using Chaos Game! Don't ask me how long these took to render. Other video on how it works: ua-cam.com/video/Y_o9Vo5nTT0/v-deo.html
Chaos Game - A Surprising Method To Generate Fractal Patterns
Переглядів 4416 місяців тому
Today we dive into Chaos Game! Chapters: 0:00 Intro 0:23 What Is It? 0:52 How It Works 1:40 Switching to Lerp 2:29 Adding logic 6:58 Sequences 7:30 What's It Good For? 8:44 Conclusion links: en.wikipedia.org/wiki/Chaos_game www.sciencedirect.com/science/article/pii/S2001037021004736
Unlocking the Power of Binary Search Trees - The Basics of the Gateway Data Structure
Переглядів 2667 місяців тому
Today we kick off the dive into binary search trees! Chapters: 0:00 Intro 0:47 Insertion 2:19 Insertion Code 3:16 Searching 4:01 Searching Code 4:29 Deletion 5:59 Deletion Code 7:12 Balancing 9:10 Balancing Code 10:09 Duplicates? 10:36 Duplicates Code 10:51 Node Data Types 11:07 Binary Representation 11:42 Morse Code 11:58 Applications 12:50 LL vs Array vs BST 13:07 Conclusion animations made w...
Poisson Disk Sampling: Unshrouding the Secrets of Uniformly Distributed Points
Переглядів 1,7 тис.7 місяців тому
Today we dive into poisson disk sampling! Chapters: 0:00 Intro 0:16 Applications 0:39 Why Not Random Points? 1:07 Algorithm Visualization 5:18 Code 7:14 Performance 8:01 Conclusion animations made with MotionCanvas: motioncanvas.io/ big thanks to hhenrichsen for his MotionCanvas library: github.com/hhenrichsen/canvas-commons/tree/main more on poisson disk sampling: www.sciencedirect.com/science...
Love it! I used this algorithm to generate a neverending asteroid field for a 2d spaceflight game. Works beautifully!
A great use case! Glad it was helpful
Tried using Rapier2D. Framerate decreased from 27 fps (with 819 simultaneous colliding enemies) to 8 fps. And yes, I used the faster version of it. :(
This is great. Static typing is always my preference, I had no idea it was also a speed boost!
Great video! Will try some of it out!
i have 300 instantly enemy spawn with 5 different attack pattern every 0.1 second and locking it at 400 enemy max.. is it good ?
Heyo sorry be that guy but it really does irritate my misophonia, maybe just export the audio file to audacity, drop the decibels by a comfortable margin (this removes noise and the quiet breaths) and for deep breaths, tongue clicks and etc, you do kinda just have to analyse the patterns on the audio visualiser thingy, to help differenciate where you start sounding words from where the noise spikes begin and cut it out milliseconds before you start sounding the actual words. It takes a bit of time but it good practice. It's been years since I made any videos but im guessing there might be software or AI now that could help with this process if you cant be bothered but i have no idea if there is. I mean you don't have to do any of this, i still watched and enjoyed the video regardless, catering to people with misophonia probably isnt if worth the effort if you're a busy person but just thought id put it out there. Anyways, i really want to learn all those deeper under the hood optimisations people do to turn their limit of 3,000 entities into 300,000 but it seems so scary, it's almost like it's spaghetti but in another dimension. Like normal spaghetti code is 2 dimensional but adding scripts in other languages and messing with servers and all that other nonsense is 3 dimensional spaghetti and it can't not be spaghetti whereas 2 dimensional spaghetti is completely avoidable but 3 dimensional spaghetti is a consequence of programming outside of gdscript and the engine. I will give an exception to shaders because theyre kinda their own thing, unless of cause you write a shader that literally needs external programming to function... that stuff might as well be 4 dimensional spaghetti jk
7:04 wtf is that sound
Probably telephone message
The less colliders just it's just stupid, it's not the amount of colliders you have in your game but how many interact with each other. You have to separate the concepts and computationally having two shapes that do not collide with each other has no cost. Keep your body collision shapes and hurtbox collisions in one place guys don't do what this freak did. There is almost no difference between C# and GDScript performance. It is clear that he is someone who came from doing an udemy course and has never programmed inside a medium-large game in his life. Stupid soulless garbage content creators.
That's a part of why Godot was so slow in the past, and in certain cases still is. The Core Api relied a lot in Magic Strings, and the Variety Type. The performance would be amazing if other languages were first - class citizen I guess GDscript will eventually get there.
The biggest performance gain you can get is changing to C#
C# performance isn't actually that great in Godot (Not the language's fault), each Godot api call is a whole glued marshalling conversion that relies in Magic Strings, barely typed since is designed for Gdscript. The more api calls, the less performance gains You'd need to ditch the whole editor node system to get a huge performance difference, and just leverage Dotnet apis or wait for the Gdextension C# update. For Roguelikes and generative content would be beneficial tho. Anyway, for performance nothing beats recompililing the engine and writing C++ stuff modules right in the library, Rust would be amazing if it were officially supported.
1 - Stop using Godot 😂
fuck you mean stop using godot? this is a godot video, what are you doing here? are you lost?
I'm making an evolution simulator where I'd need to enable fats forwarding the physics sim. I'm thinking of manually ticking it multiple times per frame. Are there other optimisations possible outside ones in this vid?
Good video, thanks for the info, but I couldn’t finish because of all the mouth noises. You might need to change mic settings, filters, or position it better.
great video, thanks
Glad you liked it!
Hold this guide is actually goated
I've never really understood why GDScript exists. C# is better supported outside of Godot and results in better performance within Godot. It's always awkward when debugging and checking the forums only to find all of the solutions in GDScript.
i dont get it if making your own custom collision system with area2d and 180 lines of gdscript is more performant than cpp source code implemented base collisions, why this slow code still isnt refactored on 12th year of godot development?
When editing your video, please start by cleaning up the audio track. Remove any inhales, lip smacking, or other distracting sounds. I'm not a fan of mouth sounds, and it makes it difficult for me to enjoy the video.
Thanks for the feedback, I'll try to clean it up better in the next one. I didn't catch a lot of them editing without my headphones
Is Jolt still needed in 4.3? I thought, it was build into the engine...
Yep - it's still needed.
I had no idea Godot had Rust support. I always used C# but if getting Rust to work isnt a huge hassle then I'm all in
Godot has bindings for many other languages, so if you know rust, you're in luck. There's no way such a popular language doesn't have a decent plugin
@@5minutemovies977 After the video I looked up the Godot Docs and indeed it has scripting support for other low level languages, it actually surprised me. Only "annoyance" is gonna be setting an external editor up for it, I really wish there could be an in-editor approach but oh well, its not a total deal breaker, I'd take the Rust performance any day!
As someone that has used Rust on my project but switched to C#: Not everything is supported, and some stuff can end up being rather limited. It is good to use, but be aware of the trade-offs and the entire thing still being WIP
@@akatsukilevi thats very good to know, thank you! Integrating non-GDScript in Godot is always kinda annoying as the editor doesnt have native support for other languages. I personally would love to avoid C# for games as apart from the Async/Await implementation it adds a lot of overhead. Ideally I'd use Bevy but I really like having an actual editor with an UI hmm
Does Jolt still perform better than default in 4.3?
It does
Probably will until godot version 100.1
it does but not in all cases ... i have a 3d scene with around 400 colission bodys both physics give up
Firebelly udemy course?
I tried to setup my character-body2D enemies with tweens between their movement and only updating move and slide every 10th frame, while it works it does not result inthem actually colliding. Only running the move and slide every 10 frames works for now as I really needed to 10x the perf for basic playability with 200 enemies(that are also capped with a backlog), keeping it until I decide on more labor intensive optimisation after I put in all the core features of my horde game (holocure but a satirical game where you switch with multiple characters)
TIL you could just offload the entire physics process to another thread with just a tick of a checkbox.
A small forewarning for anyone thinking of using this option as of the current date (Oct 2024), multithreaded physics still has some bugs that cause issues with fundamental features and can cause crashes.
awesome tips, mostly are trully hidden and you showed us, thanks for sharing!
I like clean code, so I already did that but I didn't know it would make a difference, thanks
Excellent video for newbies about the topic, tbh the concept seems to be quite easy to implement, but how easy would it be without the "State" class from Godot?
it is not massive Performance boost. it is better use gd script on prototype or demo projects for real thing it is better to use C++ or C. my general reason using gd script is fast compile time. but when projects ready. I convert my code to C++ or C
I like your approach to hierarchical state machines. If I understand it correctly, are we basically adding a substate machine as a child of a state, and simply calling the substate machine’s ready, input, process and physics_process methods inside the parent state’s enter, handle_input, update and physics_update methods respectively?
It was funny watching this because I slowly realised that you programmed this in the exact same way I did when I attempted a finite state machine system. A good sign that I’ve done something right I think! The differences that I can tell are that you’ve added separate ‘continuous’ steps for each type of update. Which is a good shout. Bespoke behaviour if transitioning to/from a specific state is also an interesting idea. One thing I haven’t added yet but I’m meaning to next time I work on this, is a Record variable on the State Machine node. It’d track all the Ticks at which a State is transitioned to. Probably using the Tick as a key and the State name as a Value in a dictionary. It’d be useful for answering questions of ‘were they in X state 5 secs ago’. Thank you for the video! It’ll be useful to me for refining the system I happen to be working on
Oohhhhhhhhh, if i use a seedValue to generate the points, i can reach the same pattern all the time. Also, if i put each point with differenct R i can set different strats to use like filling trees and rocks, or first rocks then trees, but rocks has radius of 15 and trees of 5, soo trees are more close than rocks in a florest like, but in a mountain i can just switch both and had more rocks together and few trees as well... Dude, i need to code this, not mind, but i will try my own version, my quadTree is not perfect, but works to me, also, my A* pathfinder almost worked, the issue was trying to use it at the same time to a really large of entitys, in the maze test that are really much more complex than any real case for now, and i not implemented path reusability or even lowering grid levels to just get arround the correct coords before getting even closer, soo, my code is kinda raw, but already works very well for a single entity going into a maze I guess i can make this as well to improve my procedural generation even further LOL
C# and C++ have a massive community so there is there, that means you just need to know what you are looking for they are not originally designed for game programming but had business and scientific backings
@DeepDiveDevelop I never tested it but I always use typed because it helps me a lot staying between desired results. I never thought that not doing it will have a performance cost. Good to know it, thank you.
Thank you for making this video, I've heard the same answer from others when it comes to the performance gain of static typing, this help's reinforce their statements. I forgot that you could set the editor to error at non-static types, so thank you for that reminder.
I always static type everything simply for auto complete purposes.
tl;dr Use staticly typed variables bc gdscript can decide what it doesn't need to do, making everything faster. Excellent Untyped Declaration tip too. Great video, thanks. Subbed.
Static types make compile time optimization a reality also..
Hey thanks this was actually helpful even if not with performance it was with cleaner code and the video was right to the point.
nah bro. cause i really thought that it was going to be something that i didnt know, fak u 😢😢😢😢😢😢
I hate dynamic typing. Static typing just solves so many issues and, in my opinion, reads better. I think in types and values, not just values.
Good thing I mostly learned Godot not knowing how to make variables any other way than Static types
I'm slightly disappointed cause I was already using these Good video tho
Good to know, i thought is was like in python where it does not give you more performance. Also it can prevent you from generating bugs. So its probably worth all the time - even in non-performance-critical parts of the projects.
Great game and devlog! I am pretty new to Godot myself, but I am doing something similar to you--making devlogs on game jams/small projects. Good luck to you in your pursuits!
I do miss the days when you had no "variable" types and had to follow strict typing.
This simple example should be in the godot documentation with an explanation - you can use the Variant type, but with a 30% performance loss.
Personally, I use and recommend all the editor warnings, except for INFERRED_DECLARATION. As a Rust/Golang enjoyer, I simply can't understand why would inferred types ever be considered a negative thing, and the verbosity in GDScript (especially with enums) without type inference is unbearable. What really bothers me with GDScript is that static typing doesn't give you static analysis. Even if your variables are typed statically, the values assigned to them, member access, method calls, etc. are _sometimes_ evaluated only at runtime. So I need to run the game to learn that something doesn't exist because I renamed it, even though Godot knows the specific type, and should statically know that it doesn't have that member.
Wait, you Neanderthals seriously program without declaring variable types?
It's like remembering to put % after everything in QBASIC that should be an int.
How do you do the terrain creation in Asesprite at 6:38 ?