Practical Optimizations

Practical Optimizations

Jason Booth

2 года назад

51,675 Просмотров

Ссылки и html тэги не поддерживаются


Комментарии:

@KeithSwanger
@KeithSwanger - 17.03.2023 02:08

Great talk, thanks for sharing!

Ответить
@2Jackrabbit
@2Jackrabbit - 17.03.2023 18:26

You've always been a reference and a master, thanks sooo much for sharing all this so we can learn from the master.

Ответить
@ddstar
@ddstar - 18.03.2023 23:49

thanks jason. i understood all of that

Ответить
@JakeBirkett
@JakeBirkett - 19.03.2023 20:25

As someone who used to code in assembly on a C64 and Amiga where optimisation mattered, this talk was really great! Fascinating thanks.

Ответить
@damislav
@damislav - 20.03.2023 02:55

Really cool thanks sir

Ответить
@TurboMakesGames
@TurboMakesGames - 29.03.2023 23:50

Awesome talk, really appreciated the practical implementations of data-oriented design.
Also loved that bit of wisdom at the end of "don't practice mediocrity."

Ответить
@NeatWolf
@NeatWolf - 30.03.2023 04:53

Thanks for the talk Jason! I think recruiters and SOLID principles fanatics are going to turn up the nose a lot to this - especially during an interview. But. That's where experience goes beyond every other possible academization of the design process.
I'll try to make treasure of this, whenever applicable. A sincere thank you for sharing.

Ответить
@awesomeniac
@awesomeniac - 30.03.2023 20:17

@Jason Booth is the case about unity built in math library still happened on the latest unity version?

Ответить
@cfffba
@cfffba - 30.03.2023 20:18

haha, Mike Acton's shirt got me in stitches 😂 I love these subtle jokes.

Ответить
@harmonite99
@harmonite99 - 31.03.2023 12:33

Thank you so much for making this video and explaining the concepts super clear and simple.

Ответить
@alapidis
@alapidis - 05.04.2023 09:14

Wow what a great presentation! Thank you!

Ответить
@DonC876
@DonC876 - 07.04.2023 05:04

This was immensely interesting and helpful! You are really good at presenting/teaching!
Is it possible that you might do another one of these and/or share a reading list? I feel like especially with optimization, one has to piece information together from a lot of different sources, which often contain outdated, partially incorrect or even completely false information. In the end it often comes down to benchmarking the code in question but that can be pretty time consuming. So getting someone like you to share his findings and insights is absolutely invaluable! i am looking forward to read the rest of your blog posts and finally experiment with branching optimization in shaders.

Ответить
@def0rp
@def0rp - 07.04.2023 13:54

Great talk! And very inspiring and deep thought about "practicing mediocrity".

Ответить
@ashwanishahrawat4607
@ashwanishahrawat4607 - 11.04.2023 13:57

Just got to know you last month, and I realized I'll spend next few years to go over your work and consume the knowledge you have shared with us.
(actually wanted to say I felt some water in my eyes as soon as i saw you, i'm in office i should control myself)

Ответить
@recondeveloper2023
@recondeveloper2023 - 19.04.2023 02:41

Nice presentation Jason, well thought out.

Ответить
@chosencode5881
@chosencode5881 - 27.04.2023 22:51

I cannot thank you enough for posting this! You are a legend of this industry, I will be buying your assets from the Unity Store at full price

Ответить
@yeonghokim
@yeonghokim - 28.04.2023 04:21

So, in the monster example, what we actually should do in a real game would be, when initializing the monster data, to instantiate the Game Object for the engine part(rendering, audio, etc) and keep the reference inside the monster data and in the every update in the monster manager, we should convey some of rendering information back to the game object. In this case, I suspect the performance cost of the engine part would be still high and may dominate the overall performance cost, and the performance gain from the logic part by DoD would be dwarfed by it. What do you think? Of course, you showed that we can directly rendering from data using APIs without depending on Unity game objects, but in most case we have to work with artists, and I guess completely not depending on game objects are not applicable in general when it come to using Unity.

Ответить
@Smileynator
@Smileynator - 07.05.2023 01:55

Great talk, this sure vibes with me a lot more than the extreme data oriented approaches with most of the benefits.
I have a follow up question i hope you could answer.
I often do not get too much say in design decisions, besides guarding against the worst of the worst decisions from a code perspective. So if you take your monster example, our game would definitely then have like 10 types of monsters, each with different stats that are relevant and all sorts of inheritance going on. Making that whole example a lot more inefficient, or sometimes certain requirements make it downright impossible to have them all keep the same base class, and thus do a lot of the optimizations that you suggest.
How would you approach that situation?

Even more detailed, 9/10 times, my problems are not even code related, the entire game is neatly event driven and runs all it's code within 1ms of the total even on the worst of devices. But then some bright idea like "Let's add a post-process bloom, and 3 background layers causing severe overdraw" is what does the framerates in. I am not clever with shaders, and some of those problems i wouldn't even know how to adress properly even if i did know my shaders, because of the cheer incompatible effect types they are layering on the game. How do you deal with those situations? Pushing back harder, eat the consequences?

Ответить
@tvanantwerp
@tvanantwerp - 07.06.2023 20:05

This was a really fascinating talk! I mostly work on web stuff and don't often encounter these sort of problems. Or, perhaps, I encounter them all the time but we, the web community, consistently handle them badly. (It certainly feels that way, when simple websites are janky as hell but video games create immersive worlds at scale and speed.) I'm going to have to stop and think if there are ways to take these insights and apply them to my problems too.

Ответить
@beardordie5308
@beardordie5308 - 17.06.2023 23:31

🤯 Thank you for this

Ответить
@MisterKidX
@MisterKidX - 22.06.2023 12:31

Amazing talk, so much info in so little time. We demand more!

Ответить
@simonnordon8421
@simonnordon8421 - 22.08.2023 03:08

great video

Ответить
@jertlemiah
@jertlemiah - 23.08.2023 00:33

This was super interesting, I like the way you've structured your talk with examples of increasing fidelity, it paves the way for everything to connect and make sense

Ответить
@92Garrus
@92Garrus - 29.08.2023 16:42

This is excellent, Jason! Thanks a lot for uploading. This is organized similarly to the Molly Rocket and Unity ECS talks I've listened to, but you present a lot more hands-on and practical supplemental info which drives the point home a lot better than anyone else I've seen.

Ответить
@ZacharyHelm
@ZacharyHelm - 28.12.2023 20:46

Ahhhh, so the real ECS was the friends we made along the way/the concepts from this video.

Ответить
@while_coyote
@while_coyote - 12.01.2024 18:30

This was so useful.

Ответить
@gamingyourway
@gamingyourway - 17.01.2024 01:16

That was excellent, thank you so much for sharing this.

Ответить
@cameronetto
@cameronetto - 04.02.2024 06:03

This is great! I love to see unique ways to use unity thats actually more optimal. "Optimization is a design time problem" Yes! Exactly! I absolutely despise the odea of "we'll fix it in an optimization pass"

Ответить
@isjesse1
@isjesse1 - 09.02.2024 04:56

CROOK

Ответить
@xarcaz
@xarcaz - 27.02.2024 21:11

Great video. One thing that would have been interesting to mention in the first example would be the option of utilizing domain knowledge and existence-based processing by redesigning it so that the arrays only contain elements where the stamina or health aren't at max capacity (which, at least for health, would be the common case and thus reduce the number of elements to process to a tiny fraction). Likewise, by keeping dead creatures out of it as well you'd eliminate the branching in the update function in regards to the upper and lower bounds, so it would just look like `hp = min( hp + hp_regen * dt, max_hp );`.

Ответить
@Hassanali-p7w4f
@Hassanali-p7w4f - 26.03.2024 05:55

One of many amazing things i understood in unity, as i am just a beginner in unity with almost like 9 months of personal work using only monobehaviour , but always thought how can we make like 500,000 things in a simple computer or laptop that has its only built in GPU to delegate tasks to but this practical work of code is just so much better then anything i'v learned yet thanks Jason, need more of this type of videos from Expert Seniors like yourself.

do take time to teach things like this in a simple series of videos just targeting simple but not used right concepts as many beginners just never know that even code could be optimized in unity and in any engine.

Ответить
@Nik-oe7df
@Nik-oe7df - 27.03.2024 19:58

Thank you so much, extremely helpful.

Any thoughts on sparse sets in general, and for associating data between arrays using an id?

Ответить
@PalmGroveSoftware
@PalmGroveSoftware - 15.04.2024 05:44

Magnificent. Thank you.

Ответить
@christian-loock
@christian-loock - 19.04.2024 18:34

These theoratical examples at the beginning look very simple. The part I have a hard time wrapping my head around, is how you actually manage all those structs manually. In a GameObject you have everything neatly contained, and when you delete a GM, you destroy all the components on them aswell. I would be interested to see some actualy real world implementations of this design philosophy, to be able to wrap my hand around it better.

Ответить
@mkjyt1
@mkjyt1 - 19.05.2024 22:41

Best video I've seen this year

Ответить
@nameno7032
@nameno7032 - 22.05.2024 12:22

This talk is so good, i have to watch multiple times to get it into my head. Hope more content like this from you Jason
Btw, if unity Mathf so slow, can you give a quick introduce to what you have done to make math operation faster?
Thanks

Ответить
@edwardnewtonLA
@edwardnewtonLA - 23.06.2024 11:40

I enjoyed the daylights out of that, thank you. :)

Ответить
@RecOgMission
@RecOgMission - 26.07.2024 10:20

Hi Jason. I've seen a few of your MicroSplat videos in the last few months, and just watched this one. I just wanted to say: You are a true artist and a genius, and present the subject matter so clearly! Thanks for your contributions - this is immensely interesting and useful!
I've been working on a complex terrain shader for a while, and how nice to find that some of the stuff I did there aligns with your advice in the terrain shader section :)

Ответить
@thev01d12
@thev01d12 - 05.10.2024 17:02

How do we populate each monster data struct inside the array of 1000 elements ? Since the job can do operations on the data but the data needs to be present beforehand right ? What is the most efficient way of doing that and assigning the output values to respective Monobehaviors to update the UI and stuff.

Ответить
@Valentyn90A
@Valentyn90A - 02.11.2024 02:32

Awesome channel

Ответить
@henrykkaufman1488
@henrykkaufman1488 - 04.11.2024 16:22

Wonderful Mike Acton famous presentation reference using the shirt. 🙂

Ответить
@festus5447
@festus5447 - 27.11.2024 15:43

Thanks a ton for sharing this talk, very insightful! As a programmer that makes it a point to make things run as fast as possible, I'm happy to have picked up a few new tricks from this :).

Ответить
@PavelShevaev
@PavelShevaev - 13.02.2025 19:04

Really great talk, thanks. I was wondering how you prefer coding behaviours of your AI agents (birds, zombies, etc). Is it some sort of DOD friendly FSM? Utility AI? Or something else? And what parameters are available to tweak for game designers and in what form (scriptable objects? configs?).

Ответить
@tonimaunde
@tonimaunde - 23.04.2025 14:32

16 minutes in and am already flabbergasted. Subbed with all notifications!

Ответить
@M4pster
@M4pster - 24.04.2025 04:43

This is extremely informative and really changed my perspective in how i should write code - very thankful!
Does using an array of interfaces act the same as an array of structs or do they become a boxed variable which means reference type?
Curious if an array of interfaces instead of multiple arrays of set types would be worse.

Ответить
@DigitalEscapism-m9s
@DigitalEscapism-m9s - 24.04.2025 11:57

What a great talk

Ответить
@MrIndiemusic101
@MrIndiemusic101 - 06.05.2025 01:35

Maybe someone could explain this to me because I'm struggling to wrap my head around it.

This makes sense for simple values like health and stamina values. But how do we go about applying our data stored in the structs with our game objects. Let's say I have game objects with rigidbodies that I want to control its velocity or torque of. I can see putting those values in the struct array but then how do I map that one struct instance back to the game object in an efficient manner?

Ответить