When Your Game Is Bad But Your Optimisation Is Genius

Поділитися
Вставка
  • Опубліковано 20 лис 2024

КОМЕНТАРІ • 2 тис.

  • @Vercidium
    @Vercidium  Рік тому +583

    The terrain code + demos are available here: patreon.com/vercidium
    If you have any technical / game engine questions, ask them here!

    • @monkeyhorizon
      @monkeyhorizon Рік тому +16

      Curious you said you're making a game engine, is it Open Source? Any chance I could get my stinking paws on it? I'd like to contribute if possible. If not, curious about what type of research you did beforehand, maybe see if you had any useful references for making an engine. It's something I'd like to give a try after my first game.

    • @Prodby.Mvl7R
      @Prodby.Mvl7R 11 місяців тому +6

      What LIBs/Tools do you use in game engine development?? I'm trying to dive deep and make developing Game Engines my entire focus in life, but I'm uncertain where to start, so I just been teaching myself Higher Maths while I try to find a starting point 😥

    • @JustAPersonalUseBarb
      @JustAPersonalUseBarb 11 місяців тому +3

      What do you use to make your videos? Is it Manim?

    • @Vercidium
      @Vercidium  11 місяців тому +22

      ⁠​⁠@@monkeyhorizon hey it’s not open source currently but I have a few blog posts up and a GitHub account with accompanying code (it’s super old though)
      I plan to open source parts of the engine (terrain, vegetation lazy multithreading, particle engine, voxel destruction, skeletal animation, networking, importing models, UI, postprocessing, etc) and make videos + blogs about them
      I created this engine mostly through trial and error and a lot of time haha, unfortunately other engines are very closed-off, or only have vague talks and presentations about them.
      learnopengl.com taught me nearly everything I know about OpenGL, and my goal is for these videos to cover all the other aspects of creating a game engine

    • @Vercidium
      @Vercidium  11 місяців тому +15

      ⁠​⁠@@Prodby.Mvl7R all of the code is custom, but if I were to start again I would use Silk .NET as it handles all the boring stuff for you (window creation, keyboard and mouse input, OpenGL setup), so you can focus on the cool 3D rendering side of things
      My maths knowledge and skills is terrible, I’ve made it a surprisingly long way without fully understanding how quaternions, matrices and lines/vectors work!
      I recommend jumping in and starting experimenting with 3D rendering with OpenGL. learnopengl.com taught me so much and was a great starting point

  • @muggzzzzz
    @muggzzzzz 11 місяців тому +16513

    As someone wise said once upon a time, "The real programming starts when you run out of memory".

    • @Vercidium
      @Vercidium  11 місяців тому +2099

      That is a great quote

    • @cadcad-jm3pf
      @cadcad-jm3pf 11 місяців тому +583

      This is actually true in my experience

    • @MyMattinthehat
      @MyMattinthehat 11 місяців тому

      So true. Sql to c++

    • @monad_tcp
      @monad_tcp 11 місяців тому +544

      @@Vercidiumit is ,
      Imagine if JS had a hard limit of 2MB of RAM per page.
      Then maybe it would be real programming and would stop being a toy.

    • @Comeyd
      @Comeyd 11 місяців тому +428

      …that’s pretty much the reason why I deliberately target the Raspberry Pi 3 for development.
      If it runs well on that, it will run very well almost anywhere.

  • @Poly_Knight
    @Poly_Knight Рік тому +4572

    Didn't realize how deep you can get with optimizing your environments, I've always kept a consistent LOD with my environments without realizing how much memory i was wasting. Thanks for the video it was very informative!

    • @Vercidium
      @Vercidium  Рік тому +616

      My mission is to reduce memory usage across the globe, so I'm glad this was helpful!

    • @perhapsyes2493
      @perhapsyes2493 11 місяців тому +192

      @@Vercidium Considering the choices the GPU vendors are making concerning the amount of memory on their cards, that's a great mission to have in life! :p
      Will help reduce the need for these extremely expensive cards, which I think would be a good thing. Now that I think of it, kind of a environmentally friendly thing too!

    • @Vercidium
      @Vercidium  11 місяців тому +246

      @@perhapsyes2493 yep it’s very easy to forget about all the gamers that use older hardware, not everyone has the latest tech. Lower specs means the game is more accessible too, it’s a win win

    • @antman7673
      @antman7673 11 місяців тому +87

      @@Vercidium
      That is also a deed in the mission of climate change.
      Unoptimised games are like gas guzzling cars.
      Use a lot of energy without getting anywhere.

    • @FusionHyperion
      @FusionHyperion 11 місяців тому +20

      @@Vercidium You should tell people to stop using JS then I guess lol

  • @Bananenbauer123
    @Bananenbauer123 Рік тому +2189

    This is some incredible production value. Very nice visuals to go alongside your explanations!

    • @Vercidium
      @Vercidium  11 місяців тому +180

      Thank you! I spent a bit too long on these animations so I’m glad they help

    • @koool56
      @koool56 11 місяців тому +39

      This is insane, amazing quality video, thank you

    • @TobiasHJohansen
      @TobiasHJohansen 11 місяців тому +19

      @@Vercidium I don't think you did. I feel like the engagement regarding the animations just brought the video to my recommended. Thanks!

    • @Music-nn9mi
      @Music-nn9mi 11 місяців тому +12

      @@Vercidium The work you did on the animations is by no means wasted. They were very aesthetically pleasing and helped the presentation of the video immensely. Amazing job on this video!

    • @yurilopes420
      @yurilopes420 11 місяців тому +8

      coding version of 3Blue1Brown

  • @Anduardus
    @Anduardus 11 місяців тому +1850

    optimization enables the potential of modern tech, if we optimize badly it's like optimizing well on worse tech. So this is really damn important.

    • @Epic501
      @Epic501 11 місяців тому +170

      Exactly, leaning on raw compute power as a crutch is anti-innovative

    • @XeZrunner
      @XeZrunner 11 місяців тому +145

      If we had to graph it out: it seems as though hardware is rising, but software is becoming a straight line (or worse, declining) in performance and efficiency.
      Optimization can bring a whole lot more out of modern computers, and we don't even have to do unrealistic amounts of it to get much better results.

    • @user-mn8lz7gf6d
      @user-mn8lz7gf6d 11 місяців тому +90

      @@XeZrunner software is absolutely declining.

    • @MaskedDeath_
      @MaskedDeath_ 11 місяців тому +33

      Yeah. I think it's a good thing that with modern tech programming is very accessible, and almost anyone can easily learn to write a working program. But the problem is that this also generates a lot of laziness in programming, since you no longer need to optimize to have your program run at all (or run well), so people just don't bother. And optimization is pretty much only done by people who personally care about it. I think that this won't stop things improving for as long as technology keeps improving. But it's holding us back at least a few years in progress.

    • @dynamicfield
      @dynamicfield 11 місяців тому +4

      @@XeZrunner can't agree more than that

  • @Rhodoran
    @Rhodoran 11 місяців тому +200

    I am not a game developer, but a video game enthusiast. Never dived behind the scenes like this and it's beautiful seeing you explain everything on how to optimize and make something run quicker. That, and the presentation and music choise were top notch! Thanks for this entertaining video!

  • @stillww
    @stillww 11 місяців тому +1800

    As an alternative to pitch/yaw for compressing normals, you can also use GL_INT_2_10_10_10_REV which also lets you store the 3 vector components in 4 bytes at a lower precision.

    • @Vercidium
      @Vercidium  11 місяців тому +716

      That's a great alternative and avoids using sin and cos in the vertex shader

    • @aidanm5578
      @aidanm5578 11 місяців тому +71

      @@Vercidium What sort of percentage increase in FPS would you presume to see from rewriting that portion?

    • @Vercidium
      @Vercidium  11 місяців тому +170

      @@aidanm5578 it depends if the vertex shader is the bottleneck. If it isn’t, the FPS won’t change at all, but if it is maybe 5% faster? I can’t imagine the sin and cos being that expensive

    • @aidanm5578
      @aidanm5578 11 місяців тому +90

      @@Vercidium Fair enough. It's good to see you doing what the gaming industry seems to prioritise least. Keep it up mate, love from Perth.

    • @tachobrenner
      @tachobrenner 11 місяців тому +37

      @@aidanm5578 Honestly, I think those professional AAA programmers very much prioritize this because it's so basic. Their games are just so complex (especially with graphics) that they need very large teams and still lack manpower.

  • @SomeoneElse-fr8yu
    @SomeoneElse-fr8yu 11 місяців тому +651

    Also, culling triangles and using sprites can help a lot. Shamus Young has a project where he could generate the texture for the terrain at full detail, then cull triangles, then when rendered, looks full detail but runs way faster. OLC demonstrates that relying on sprites, even transforming them all, can be blazingly fast with insane numbers of sprites.

    • @Vercidium
      @Vercidium  11 місяців тому +173

      Absolutely, I would love to experiment with that! Is that where distant terrain and trees get converted to billboards (sprites) that always face the player?

    • @InDieTasten
      @InDieTasten 11 місяців тому +60

      @@Vercidium Afaik, culling is usually skipping rendering of triangles, when they are outside the camera's view cone or sometimes even when they are occluded by other non-transparent triangles.
      I think what @SomoneElse-fr8yu is referring to is baking details from high resolution meshes into lower resolution meshes + displacement maps. This works best on details that the player can't see at sharp angles, so mostly flat floors or walls with details such as bricks and so on. Not sure what the process of converting mesh detail into displacement maps is called though.

    • @mad_tic
      @mad_tic 11 місяців тому

      @@Vercidium You should look at WARNO from Eugen Systems, the Iris Zoom engine does this and more when it comes to drawing the terrain and the trees ;)

    • @ThatWhichObserves
      @ThatWhichObserves 11 місяців тому +4

      @@InDieTasten as a normal person... best guess is parallax mapping

    • @flameofthephoenix8395
      @flameofthephoenix8395 11 місяців тому +32

      @@Vercidium Something else interesting to mess with related to bill boarding is drawing lines using sprites. It's very interesting, you can position a sprite between two points then scale it according to the length of the line between the two points, in 2d this will look terrible, but in 3d it works surprisingly well mostly because where one sprite fails another one will kick in to take its place. It's entirely possible to make a game with nothing but bill-boarded sprites and it can look very good even though it lacks the textured triangles so often used.

  • @ghostl337
    @ghostl337 Рік тому +2239

    I feel like there should be a definitive list of optimizations devs should just go through whenever making games, I've seen some really bad optimized games from AAA devs and I wonder how it's so bad sometimes.

    • @Torekk
      @Torekk Рік тому +350

      But if all games were optimized, you wouldn't buy new hardware every few months / years.

    • @SioxerNikita
      @SioxerNikita 11 місяців тому +386

      A) Dev time.
      You can optimize everything to a close to infinity time. More time = less achieved... because the more optimized, the less you gain.
      B) You have a game to release, you focus on making... well... the game.. and the QA team is not seeing any major issues, so it is fine...
      This one is more down to there exists infinite amount of hardware combinations... your game will hate some of those... period...

    • @besknighter
      @besknighter 11 місяців тому +259

      @@SioxerNikita And i'll add: An unreleased game is a money black hole. The earlier you can get it out, the better (to reduce the costs of making it). But of course, too early and it'll flop, not recovering the huge sums of money already put into it in its development time. You can never know for sure how much a game will make, so you can never know for sure for how long you can keep developing it and still be worth it.

    • @SioxerNikita
      @SioxerNikita 11 місяців тому +36

      @@besknighter Yeap

    • @SioxerNikita
      @SioxerNikita 11 місяців тому +115

      @psst4849 There is one example of this that is real though.
      Crysis 2 deliberately used more polies than necessary, but that was so it ran better on nVidia cards than AMD.

  • @jixal
    @jixal 11 місяців тому +542

    As an artist who doesn't know code.....I had no idea you could reduce the data on terrain like that! Always amazes me what can be done when you reeeaallly know how to manipulate the 1's and 0's

    • @GRAYgauss
      @GRAYgauss 11 місяців тому +18

      Might I recommend kishimisu's intro to shader art. I'm a coder, one of my favorite ways to recreate.

  • @Some-q1
    @Some-q1 9 місяців тому +171

    wait.. it's all... triangles?

    • @vertigoz
      @vertigoz 7 місяців тому +26

      I don't see them anymore, all I see is blonde, brunette... ;)

    • @Gibreelkhan
      @Gibreelkhan 7 місяців тому +95

      🔫 Always has been

    • @fikon1
      @fikon1 6 місяців тому +10

      … Always has been

    • @Err-G
      @Err-G 5 місяців тому +4

      42!

    • @CM99807
      @CM99807 5 місяців тому +2

      Yeah for At least 20 years

  • @potatovonepicus
    @potatovonepicus Рік тому +407

    These dev videos are really high quality and interesting to watch.

  • @goldenknight1756
    @goldenknight1756 11 місяців тому +152

    I just finished my bachelors in game development this september, and I have been really losing interest in coding etc.. But watching this video reminded me of how cool i used to think it was, and I actually feel extremely motivated to get back to it, Its insane what you were able to accomplish and I cannot wait for more on this. Please keep posting blogs on this topic or anything related to it !!! I genuinely feel like I've had my eyes reopened to coding. Despite not being the best at coding nor remembering how to do things properly, I can't wait to see more and get back into the swing of things!

    • @LavaCreeperPeople
      @LavaCreeperPeople 11 місяців тому +3

      is college really that worth it

    • @802Garage
      @802Garage 11 місяців тому

      @@LavaCreeperPeople For game development? Unless you have spent years teaching yourself and developing games before reaching college age and wanting to get into the industry, absolutely. Otherwise, you are starting from scratch and you will not get a game dev job for years. Even if you teach yourself for years straight, there is a lot you will not learn without college, including how to properly work with teams and what the industry is like. I highly recommend Champlain College. They have degrees for each industry discipline and you worth together as teams of designers, programmers, artists, and producers for multiple years. It simulates an industry environment.

    • @anonymousperson26223
      @anonymousperson26223 11 місяців тому +1

      @@LavaCreeperPeople yes for anything

    • @LavaCreeperPeople
      @LavaCreeperPeople 11 місяців тому

      @@anonymousperson26223 trade school?

    • @uhrguhrguhrg
      @uhrguhrguhrg 11 місяців тому

      ​@@anonymousperson26223heavily depends on the country, degree, specific college and your self study skills
      for example in quite a few countries you can find a job with skills and or work experience even without a college degree, in others you can't do anything without a degree
      then there's the issue of study discipline and motivation, I've met quite a few junior devs with a college degree that are barely able to write a solution to a fizz-buzz type problem

  • @BrightBitGAMES
    @BrightBitGAMES 11 місяців тому +26

    The first optimization technique has one drawback: GPUs calculate texture mip mapping levels by screen space partial derivatives. That means: There will be visible seams for fragments where the UVs wrap (i.e. where a u or v component suddenly changes from 1 to 0 or from 0 to 1). Ben Golus has a very good article about that issue titled "Distinctive Derivative Differences".

    • @Vercidium
      @Vercidium  10 місяців тому +6

      I’ll check it out thank you. If the same values are being passed to the texture sample call, what would cause the seams?

    • @BrightBitGAMES
      @BrightBitGAMES 10 місяців тому +2

      @Vercidium You're welcome. I'm not sure what you mean by "same values". Let's assume a uv coordinate where one fragment has uv.x == 1 and its neighboring fragment has uv.x == 0. In this case the GPU basically "thinks" that the whole texture is used between these two fragments and uses the smallest mip mapping level. That's what causes the seams as the color of the lowest mip mapping level will probably be different from the "correct" one. With "real" uvs that only happens if the texture actually is between those two fragments, e.g. a textured model only occupying one pixel on a screen. But since you are calculating the UVs based on the position, it will always happen where the UVs wrap as mentioned above. Ben Golus has some solutions in his article as well. Hope that helps. :)

    • @james-s-smith
      @james-s-smith 7 місяців тому +4

      ​@@BrightBitGAMES As far as I can tell, the Ben Golus article and associated woes only apply to equirectangular projection textures onto a sphere. The reason the GPU assumes the whole texture must be present within the discontinuity is because the texture is being projected onto a single contiguous sphere mesh; the fragment shader sees a discontinuity within the same mesh and freaks out. This terrain generation code is not doing that: it is chunking the terrain into separate square meshes and composing them together into one scene, so there shouldn't be any visible seam. Caveat emptor: I'm a CUDA compute shader guy, not an OpenGL graphics shader guy, so I may be wrong.

  • @anzhel3268
    @anzhel3268 11 місяців тому +61

    The visuals are INSANE! You really put a lot of effort into it! Good Job!

  • @zipsexe
    @zipsexe 11 місяців тому +74

    I was astonished by the performance of Sector's edge on laptop integrated graphics
    Also, I've never seen such short loading times on an HDD, kinda reminiscent of old Source Games/Battlefield/Early Minecraft where It's basically just click and play
    Hope this gets the recognition it deserves some day

    • @TheSpecialJ11
      @TheSpecialJ11 8 місяців тому

      In a similar vein, I've been playing well optimized old games on newer hardware, and the experience is glorious. It can actually be a little annoying, because now I don't get to read the cool load screens anymore.

  • @SatisfiedOnion
    @SatisfiedOnion Рік тому +458

    THE NON-ANIMATED ANIMATIONS ❤

    • @jsmith108
      @jsmith108 11 місяців тому +10

      What do you mean? Can you give an example?

    • @chri-k
      @chri-k 11 місяців тому +4

      ?

    • @SatisfiedOnion
      @SatisfiedOnion 11 місяців тому +80

      I have a little insight into how Vercidium creates these videos. The "animations" you see in his videos are not animated in any traditional sense. They're animated using code, which I think is so cool.
      Vercidium isn't animating anything (in the traditional sense), it's all just code!

    • @qwertyencryption
      @qwertyencryption 11 місяців тому +21

      ​@@SatisfiedOnionits called procedural animation,moving bones from code

    • @phir9255
      @phir9255 11 місяців тому +8

      @@SatisfiedOnion Probably not everything, that intro would take 100x less time to make in something like After Effects

  • @Finding_Fortune
    @Finding_Fortune Рік тому +39

    Wow those animations are clean. Nice stuff, this is very high quality and interesting!

    • @Finding_Fortune
      @Finding_Fortune Рік тому +6

      When I first learned graphics programming, I was tricked into thinking instancing was the same as batching hah, so I'm glad you went over that. I had to rewrite all my rendering at the time 😥
      Nice going over modern GL too, like multiDraw and SSBOs

    • @Vercidium
      @Vercidium  11 місяців тому +4

      @@Finding_Fortune I avoided modern OpenGL for so long because I thought it would increase the specs for the game. But I realised I can check the OpenGL version, and only use newer functions if they’re supported

  • @dethswurl117
    @dethswurl117 Рік тому +30

    I am so happy I clicked on this video
    Awesome, high quality and thoughtful content. 100% subscribing, thank you!

    • @Vercidium
      @Vercidium  Рік тому +3

      That means so much, thank you! I hope it’s useful for your games

  • @EliteSparklz
    @EliteSparklz 11 місяців тому +7

    Insanely high quality and easy to digest, this video made me subscribe. I don't code to this level but love to see optimizations done. Well done!

  • @gakman
    @gakman 11 місяців тому +17

    Didn't know about the sinking terrain trick! Nice one. It seems much easier than having to stitch vertices together where the LOD changes (as in only render LOD 1 outside of LOD 0's area).

  • @The_GuyWhoNeverUploadsAnything
    @The_GuyWhoNeverUploadsAnything 11 місяців тому +42

    I know nothing about game developing nor do I have any plans to do game developing but this was still very entertaining and educational to watch because optimization just feels good :D It's sad to see that computing power has grown so much but we're not taking full advantage of it in games because so much is spent on skipping the optimization that was previously obligatory to make any game run well.

    • @asdfqwerty14587
      @asdfqwerty14587 10 місяців тому +3

      If people optimized code the same amount as they used to, then games would take so long to develop that they would already be outdated by the time they were released. Modern games are much, much bigger than old games were, and it's simply unfeasible to spend the same amount of effort optimizing each individual feature when there are 1000x more features than there used to be.

    • @shaansingh6048
      @shaansingh6048 Місяць тому

      they only ever optimized because of technical drawbacks, with those gone they can focus on features

  • @r2d2vader
    @r2d2vader Рік тому +53

    Great video! Definitely gonna start writing my 12 friends' ice cream orders on a piece of paper and passing it to the ice cream guy now 😂
    My only comment would be it was harder to see the difference between the levels of detail of terrain than in previous example clips you've posted for some reason.

    • @Vercidium
      @Vercidium  Рік тому +9

      Get those orders ready! Thank you for the feedback

  • @DetectivePoofPoof
    @DetectivePoofPoof Рік тому +33

    Damn! That was an insane amount of quality in both the visuals AND explanation!

  • @Mightydoggo
    @Mightydoggo 9 місяців тому +4

    I got into blender not too long ago and it´s amazing how I can actually understand stuff like that now (to a certain degree) when it would have made absolute no sense like half a year ago.
    That really shows what climbing the learning curve does for you, even when you might don´t see it when getting stuck at a new concept again.

  • @m-yday
    @m-yday 11 місяців тому +29

    this is obscenely fantastic. Clear explanations paired with gorgeous animations which make the explanations intuitive?
    On the topic of coding for games, but that in a very concrete manner?
    Solving tangible problems?
    So many different and incredible notes were hit. I just had to subscribe. I _must_ see more from you.

    • @Vercidium
      @Vercidium  11 місяців тому +8

      This comment has made all the effort I put into this video worth it. My goal is to help other devs solve problems that had me stumped for months, and I hope my future videos have the same effect!

    • @m-yday
      @m-yday 11 місяців тому +7

      @@Vercidium I’m so glad I could voice something that could inspire you to keep going. Seriously, I’ve been looking for someone like you a while. Understanding where to start and where to go in coding is difficult. Having these tangible points explained so well has given intuitive guidance that I haven’t seen elsewhere

  • @creaturedanaaaaa
    @creaturedanaaaaa 11 місяців тому +6

    I don't do any development but your graphics are super clean and intuitive and get your point across perfectly. Your production value is genuinely good enough for a channel a thousand times the size.

  • @monke4044
    @monke4044 11 місяців тому +7

    I had 1 time where I collaborated with my friend on a game development for our college project. Bro's a genius at programming since highschool, I knew a bit of game dev and how the basic works but I mostly works as designer and making sprites, fixing animations and enhancing models he made before.
    He said that in game development, programming was never the hard part of it, optimization is. Apparently making games nowadays have gotten so easy with all these popular game engine like unity or UE, so game dev is 20% programming, 40% graphic design and 40% optimization. That's why you have to get everything organized properly, as efficient as possible.
    "If you can't optimize your game, it's already a failed project, so it's better to start a new and fix everything"

  • @kxhu
    @kxhu 11 місяців тому +14

    that was awesome, cant believe you got to render 16000 times more terrain with 5x more fps than at the start

  • @wrathofainz
    @wrathofainz Місяць тому +2

    I use batching in real life at my job. I put stickers onto boxes.
    How it works is as follows:
    A pallet of boxes arrives. Someone puts those boxes onto the table and opens them up so we can get at the smaller boxes inside, then they push it toward me (and several other people also applying stickers)
    Sometimes each box (opened by the previous person) contains six smaller boxes which need stickers on them.
    Strategy 1 (slow):
    - apply stickers to all boxes within a container box
    - close that box
    - push that box forward to the tape machine to be closed
    Batching (faster):
    - apply stickers to all boxes within several container boxes (let's say 3)
    - close all 3 boxes
    - push all 3 boxes forward
    Batching has the potential to make me a bottleneck depending on circumstances and isn't always the best, but if I'm working alone it's much faster (especially if the stickers are weird and need an extra step to apply them, like folding them over the side of a box because they're too big, one can apply many then fold them all in a batch)

  • @drachedeswassers
    @drachedeswassers 11 місяців тому +12

    You can compress the vertex data even further by storing the height in a GL_R32F texture and rendering without any vertex data at all. Having the height in a texture means that you can access the height of neighboring vertices and therefore calculate the normal using finite differences. Another thing you can do is replace your 8x8 grid with a 1x1 grid (6 vertices) and then use the tesselation shader to tesselate it again. By calculating the tesselation factors using distance to the camera (or even the view frustrum) you get levels of detail "for free".
    At least in theory. In practice you'd have to benchmark this approach to see if it's actually faster.

  • @magnomliman8114
    @magnomliman8114 11 місяців тому +25

    if only devs could watch youtube videos...

    • @Vanderer11
      @Vanderer11 3 місяці тому +3

      dude, those are basic things, mostly done by modern game engines automatically. No dev need to watch this thing. It's focused on triangles which are extremely cheap to render nowadays, this topic is obsolete already

  • @jordanvegas3999
    @jordanvegas3999 11 місяців тому +4

    The video editing is so crisp and on point.

  • @rahulvpoojari905
    @rahulvpoojari905 11 місяців тому +10

    Just a gamer here, thought it was a free FPS trick video😅, such a good explanation. Hope all the talented game devs in the comment section put all these optimisations techniques and much more and help us the people who still use the good old gtx 1050ti to enjoy good games without the need to make the games look almost as a distorted water painting to make it playable.

  • @yanec2501
    @yanec2501 11 місяців тому +1

    I recently got you recommended to me and am I happy that it happened. I love learning about optimization!!!
    Keep up the great work!

  • @ashwanishahrawat4607
    @ashwanishahrawat4607 10 місяців тому +1

    My heard filled with joy when you mentioned Triangle Trip, It became my main weapon for Performance when I was learning to create terrains.

  • @Andrew-rc3vh
    @Andrew-rc3vh 11 місяців тому +5

    I recognise that trick at 6:49. I was logging a load of data and needed to store and graph it. When i wanted to draw the graph the data resolution was one second, but if drawing a 1 year graph it was painfully slow, until said trick was employed.

  • @scaper12123
    @scaper12123 11 місяців тому +4

    I don’t do game dev (sadly), just programming. A lot of this was very interesting to see, especially how you grouped your triangles!

  • @tankiadam4967
    @tankiadam4967 11 місяців тому +28

    As a cheap gamer I really appreciate optimization, and I notice the most when it is not there, I swear most games never try to optimize, and if they did console games could suddenly run on mobile devices easily, it is amazing how much they miss out on

  • @goldencinder7650
    @goldencinder7650 9 місяців тому +2

    4:45 as someone with over 15 years in customer service and retail , lemme tell you when you say you ONLY had to talk to the man once that by far is the most true statement of the video.

  • @Kayotesden
    @Kayotesden 11 місяців тому +2

    I dont understand shaders but Im fascinated by code optimisation & graphics. Subscribed so I can learn!

  • @zeldaandTwink
    @zeldaandTwink 11 місяців тому +5

    I am now a proud subcriber. You crammed so much technical detail into a short and simple explianation that was easy to understgand as a noobie

  • @DuskfoxOfficial
    @DuskfoxOfficial 11 місяців тому +3

    Just found you in my recommended. You are an absolutely underrated game dev UA-cam channel, and I hope your channel will blow up one day! :)

    • @Vercidium
      @Vercidium  11 місяців тому +1

      Thank you very much!

  • @sharkianalog
    @sharkianalog 11 місяців тому +28

    i don't understand shit but it looks useful

  • @kipchickensout
    @kipchickensout 11 місяців тому +2

    Man I love exactly this type of video, nice visuals, easy to understand but still kinda deep

  • @JoeFilms5420
    @JoeFilms5420 8 місяців тому +1

    Thanks so much for the demonstration, this makes LOD and batching really easy to understand!

  • @kevinfischer4869
    @kevinfischer4869 Рік тому +6

    This is really clever! Looking forward to seeing more.

  • @Klipik12
    @Klipik12 11 місяців тому +7

    I feel like the freshman who accidentally walked into a 300 level graphics class.

  • @Blackdiamond2
    @Blackdiamond2 11 місяців тому +3

    Amazing, such good visuals. Even as someone that knows nothing about programming and game dev, I could understand the concepts intuitively. Very cool, looking forward to what you put out in the future!

    • @Vercidium
      @Vercidium  11 місяців тому +1

      That is great to hear, thank you!

  • @lincolnreinert1205
    @lincolnreinert1205 4 місяці тому +1

    My mind was blown at the start with the position to uv trick, great job!

  • @fadhil4008
    @fadhil4008 9 місяців тому +1

    Bro wtf is this video!!??
    Not only that the content is just soo expensive but also the way it's presented is so flawless. It's like seeing a perfect website project from front end to backend

  • @pixobit5882
    @pixobit5882 11 місяців тому +5

    Amazing Video! Nice Animations and super clear explanation. Keep up the good work!

  • @TheKroesar
    @TheKroesar 11 місяців тому +3

    I have not the slightest understanding of programming or game (engine) development. Yet, I found myself intrigued by this video and feel like I understand the basic concepts you are explaining. That is some top shelf teaching right there!

    • @Vercidium
      @Vercidium  11 місяців тому +1

      Woah thank you! Presenting and teaching are both skills I want to improve so this comment means a lot

  • @ToniJabroni42
    @ToniJabroni42 11 місяців тому +3

    Awesome video btw.
    I recently started my own little gamedev journey. Found this very enlightening from a programmer's stand point.
    Looking forward to your current and future content!

    • @Vercidium
      @Vercidium  11 місяців тому +1

      Welcome to the game dev life! Thank you, I hope these videos will make your journey a smooth one

  • @tapeplayer_
    @tapeplayer_ 10 місяців тому +2

    Great video. You ver thoroughly explained the steps required to optimize a game. I'm currently working on my own one, and this video will certainly come in handy, once I'll be optimizing it.

  • @sircomesizeman
    @sircomesizeman 11 місяців тому +2

    Highly informative and extremely well edited video! Massive kudos.

  • @_vicary
    @_vicary 11 місяців тому +4

    This can really be abstracted into an ultimate balance of RAM vs flops.
    As cores getting more efficient in the future, with MLSS and other techs, more and more things will be inferred from even less information.
    It is exciting to experience this transition in our lifetime.

  • @starplatinum3305
    @starplatinum3305 11 місяців тому +6

    this dude started creating such crazy genius videos, bro needs more subs

    • @Vercidium
      @Vercidium  11 місяців тому +1

      Thank you! Could say this video was 6 years in the making… and I have many more to share!

    • @masterhacker7065
      @masterhacker7065 11 місяців тому

      he didnt exactly invent any of these ideas...

    • @starplatinum3305
      @starplatinum3305 11 місяців тому

      @@masterhacker7065 i didnt say he invented, but he is making good videos about compute shaders

  • @Zizaco
    @Zizaco 11 місяців тому +12

    This video is just amazing! The visuals explaining the sinking illusion are just perfect.
    Sub

  • @onerimeuse
    @onerimeuse 11 місяців тому +1

    This is absolutely fascinating stuff. I'll have to watch it a few times to grasp all of it, but brilliant work, mate. Some extremely clever solutions here.

  • @TheBazino
    @TheBazino 10 місяців тому +1

    Fascinating stuff. Wish you all the luck with your engine, hopefully some big devs pick it up - even if just for a trial run.

  • @borsukk
    @borsukk 11 місяців тому +11

    7:41 instead of lowering terrain you can use pixel shader to hide close terrain

  • @J-pr9ve
    @J-pr9ve 11 місяців тому +17

    "It's likely every game you've played is just a bunch of triangles moving around."
    Minecraft: Triangle? What's that?

  • @oxybrightdark8765
    @oxybrightdark8765 11 місяців тому +8

    I don’t make games, but you’re very clear and informative.

  • @spaaaaace8952
    @spaaaaace8952 11 місяців тому +2

    This is the first time I see you on UA-cam and it's an instant sub, my friend.

    • @Vercidium
      @Vercidium  11 місяців тому +1

      I’m glad you liked the video! I have more coming up

  • @GRAVENAP
    @GRAVENAP 11 місяців тому +1

    This information feels illegal it's so valuable. Like literally Krusty Krab secret formula type stuff. Thank you for unlocking these secrets

  • @Pikminiman
    @Pikminiman 11 місяців тому +44

    This video is absurdly well made.

  • @ENZO-xu4sn
    @ENZO-xu4sn 11 місяців тому +9

    Your videos are great.
    Hoping for a shader course from you some day.

    • @Vercidium
      @Vercidium  11 місяців тому +4

      Thank you! I would love to make one, shaders are pretty fun to muck around with

  • @franzj4040
    @franzj4040 Рік тому +4

    High quality videos! Thanks for your effort

  • @dylancope
    @dylancope 11 місяців тому +1

    The visuals alone were an instant subscribe for me. The great explanations confirmed it was the right choice! Looking forward to more videos like this

  • @titaniumweasel467
    @titaniumweasel467 10 місяців тому +2

    my god. im a gamer of 30 years watching this and i KNOW, because i remember seeing this from inside games, how poeple were making the same mistakes over and over again. THANKYOU for sharing this, all the indy guys and the AAA studios too should see this, imagine if you could 4x or even just double the fps in any AAA title today?? you could double the sales

  • @kilroy987
    @kilroy987 11 місяців тому +6

    Very nice. I thought I might have to stitch the low and high levels of detail together. I never thought about sinking.
    I also need to upgrade my heightmap terrain to be more robust so that I can handle tunnels, natural bridges, overhangs, and underground caverns.

    • @Vercidium
      @Vercidium  11 місяців тому +3

      Battlefield uses stitching to connect their LODs together, where they modify the edge of the higher-detailed mesh to match the lower-detailed mesh
      I tried this but it meant high quality terrain pops in when moving around the map, whereas with sinking it appears gradually

    • @kilroy987
      @kilroy987 11 місяців тому +4

      @@VercidiumSo the method that requires less coding also looks better. Double win.

  • @69k_gold
    @69k_gold 11 місяців тому +43

    These are fun! Can you make a series where you explain from scratch about how to make games? It doesn't have to be deep, you can use simple examples that are more tailored to beginners who are discovering the programming world of games

    • @Vercidium
      @Vercidium  11 місяців тому +23

      I will add that to my list of videos to create, will do!

    • @Klaevin
      @Klaevin 11 місяців тому +3

      yeah. something that is kind of from the start. I mean, anybody can install Unity and follow a couple tutorials.
      I did that, for a mechanical design course. the goal was just to get our models into a VR environment, but we did learn how to make said environment with buttons and moving stuff...
      what I'm saying, is that I don't know where to even begin, if I had to code from scratch

    • @anon1963
      @anon1963 10 місяців тому

      ​@@Klaevinyou begin with... Google. there's a guy named TheCherno, he has a great series on opengl and c++ for beginners

  • @JackBond1234
    @JackBond1234 11 місяців тому +20

    Ahh, I've noticed a couple of places in Tears of the Kingdom, and a few other modern games where terrain just kind of melted away. I knew it had something to do with LOD, but I just thought low quality meshes were transforming to higher quality meshes, and vertices were repositioning accordingly. I didn't consider the much more sensible conclusion that the terrain was just sinking below the higher quality mesh to be hidden.

    • @aerostorm_
      @aerostorm_ 11 місяців тому +2

      This is one way of doing it, there's a few different techniques. You can also use quadtrees or clip maps, which are both very optimized ways of sorting your detail.

  • @yrussq
    @yrussq 11 місяців тому +1

    This is one of the most gorgeous videos i've seen on UA-cam. The pace, the presentation - wow! Crystal clear explanation with rock solid supporting visuals.
    Amazing work!

    • @Vercidium
      @Vercidium  11 місяців тому +1

      That is awesome to hear, thank you so much!

    • @yrussq
      @yrussq 11 місяців тому +2

      @@Vercidium Keep them coming, man! I hope your dedication and your effort will make you big. Cheers!

  • @InkDrop.
    @InkDrop. 9 місяців тому +1

    I was glued in for the whole video. Excellently done!

  • @magnusnilsson9792
    @magnusnilsson9792 9 місяців тому +6

    Having less quality on far away objects is like cutting music into MP3's by removing what the human ears can't hear, but this time for the eyes.

  • @jakedelmastro
    @jakedelmastro 11 місяців тому +12

    You can just store the XY components of the normal, since the length of a normal should be 1.0 you can reconstruct the Z with z = sqrt(saturate(1.0 - (x*x + y*y))), a little bit nicer than having to use euler angles

    • @Vercidium
      @Vercidium  11 місяців тому +2

      Now that is good to know, I’ll try that thank you!

    • @Sh-hg8kf
      @Sh-hg8kf 11 місяців тому +1

      Sorry if my question is stupid, a bit new to graphics programming but won't we lose time by computing sqrts here, which I have heard is an expensive operation?

    • @Vercidium
      @Vercidium  11 місяців тому +1

      @@Sh-hg8kf it depends on its speed vs the other alternatives: running sin and cos, or reading a vec3 normal from memory
      I’ll have to benchmark sqrt vs sin, but I’m certain both are faster than reading more data from RAM

    • @Sh-hg8kf
      @Sh-hg8kf 11 місяців тому

      @@Vercidium I am confused. How would a memory read take longer than computing sins or sqrts unless we are heavily memory bottlenecked?

    • @jakedelmastro
      @jakedelmastro 11 місяців тому +1

      @@Sh-hg8kf sqrts are certainly slower than a simple polynomial but GPUs have very fast sqrt hardware, basic operations like normalize need a fast sqrt

  • @jamesmnguyen
    @jamesmnguyen 11 місяців тому +3

    It's amazing how much memory you can save by just reframing the problem and discarding redundant data. Modern developers can learn a lot from this.

  • @ding-hobba
    @ding-hobba 11 місяців тому +1

    the sinking graph was really good shit, felt like i immediately was grasping the concept

  • @ShelbyAQD
    @ShelbyAQD 10 місяців тому +2

    Facinating stuff. The biggest problem I have as a self-taught hobbyist programmer is that I wouldn't even know what to research in order to find stuff like this. Thanks for sharing!

  • @ghassenbenghorbal3159
    @ghassenbenghorbal3159 11 місяців тому +11

    Activision devs need to watch this

  • @joe-d2795
    @joe-d2795 11 місяців тому +3

    I'm no expert at games, but a way to only talk to someone once instead of 12 times sounds great to an introvert like me

  • @FrankGennari
    @FrankGennari 11 місяців тому +5

    That's a different approach to how I render my terrain. I generate a heightmap + normal map texture, then draw instances of the same mesh that covers exactly one tile. Each instance uses different texture coordinates for the height map and normal map. The height map is used in the vertex shader to set the vertex height, and the normal map is used in the fragment shader for lighting. For LOD, I generated different resolutions of the per-tile mesh. I wonder how this compares to your approach?
    The sinking technique is interesting. I haven't seen this approach used before.

    • @Vercidium
      @Vercidium  11 місяців тому +2

      Battlefield uses the same approach, it has one mesh and samples textures in the vertex shader to get the heightmap data.
      As I don’t have a traditional mesh, I can store the heightmap data in the vertex buffer instead. This means it’s available to the vertex shader already, rather than having to sample a texture to get that data
      Also when sending new terrain data to the GPU as the player explores the world, I’m more comfortable with asynchronous buffer updates than asynchronous texture updates.
      But both approaches work! I’m not sure what the performance difference is

    • @FrankGennari
      @FrankGennari 11 місяців тому +1

      @@VercidiumAh, okay. Your system has different goals and requirements from mine. I needed the height texture for grass and water rendering, so I had it available anyway.

  • @JamesYoung99811
    @JamesYoung99811 11 місяців тому +1

    I got pissed just watching the intro of your game freezing, gets me tilted real quick. Love the videos!

  • @livipup
    @livipup 11 місяців тому +1

    Great video :) Saving it to my game dev playlist so I can rewatch it later. I'm not sure I ever would have thought to using sinking instead of culling if I were adding terrain to a game engine.

  • @anhduc0913
    @anhduc0913 11 місяців тому +7

    Hope this reach more devs. Having an optimised terrain help massively with open world games, especially if they are procedurally generated.

  • @budzinskis
    @budzinskis 11 місяців тому +3

    This is truly a great video and explanation, incredibly instructive to watch. As an embedded software developer, this was counterintuitive to me - in the beginning, I was thinking "but you are adding operations, you'll have to perform an additional division, how can it be faster", then you explained how the memory was the bottleneck and all made perfect sense.
    Great work!

    • @Vercidium
      @Vercidium  11 місяців тому +1

      Thank you! When I first started making games I prioritised precalculating as much as I could and storing it in memory, so that the code I wrote would ‘be quicker’, but I discovered the hard way that less lines of code doesn’t always mean it will run faster. I haven’t seen these topics presented this way before, so I’m glad the visuals helped!

  • @ghost_ship_supreme
    @ghost_ship_supreme 11 місяців тому +30

    Did you come up with these ideas? Because this is impressive. I’m thinking of getting into game dev, but there’s so much to learn…

    • @Vercidium
      @Vercidium  11 місяців тому +34

      I did not come up with these by any means. These are optimisations I learned from a lot of trial and error, research and analysing other games.

    • @mattc9598
      @mattc9598 11 місяців тому +8

      Don't be overwhelmed by all the stuff there is to learn. Just because this type of optimization exists, doesn't mean you NEED to know it right away. I've been learning Unity all year and I barely understood a thing in the video. At the same time, I've never had to optimize anything to this level, because i'm not to the point where I'm making games complicated enough to need much optimization.
      If you're interested but nervous, check out the Learn Unity courses, it'll help a lot.

    • @Zaire82
      @Zaire82 11 місяців тому +2

      ​@@mattc9598 I've been learning game dev for a few years, encompassing a lot of different aspects, and while I understand the concepts, I wouldn't even know where to start on the implementation. My experience with writing shaders was not the best.

    • @ikannunaplays
      @ikannunaplays 11 місяців тому

      @@mattc9598Knowing it ahead of time and implementing it early can save you lots of time and headache. It's always a pain to get something working but runs like trash and then you find out in order to optimize it properly you practically have to re-write a large chunk of code.

    • @NonnyStrikes
      @NonnyStrikes 11 місяців тому

      You won't get bored! As soon as you get rolling, you won't be able to stop. It's insanely fun learning why; how; and what can I use it for in my everyday experience on PC or otherwise?

  • @SimplySketchyGT
    @SimplySketchyGT 8 місяців тому +1

    From my incredibly basic understanding it’s pretty cool to see these optimisations following a RISC ideology my sending blocks of instructions rather than heads of singular requests.

  • @daxtron2
    @daxtron2 11 місяців тому +1

    Glad to see the work you're doing these days Verc, excited to see where this new project goes.

    • @Vercidium
      @Vercidium  11 місяців тому

      Thank you, it does feel exciting to move on to something new

  • @therealdemen247
    @therealdemen247 11 місяців тому +5

    This isn't just valuable for aspiring developers, this is really valuable to understand for your average consumer. Understanding the kind of work that goes into these sort of things is really valuable for nurturing realistic expectations and an appreciation for the creativity behind solving these problems.

  • @nullp0x043
    @nullp0x043 10 місяців тому +3

    Very incredible video, visually and content wise.
    I would like to know what tools you used to animate some segments of the video, I have personally been messing around with things like manim but I never found anything for code specifically.
    Regardless, keep up the awesome work!

    • @Vercidium
      @Vercidium  10 місяців тому

      Thank you! I tried motion canvas and Manim but ended up creating my own with C#, SkiaSharp and OpenGL
      I use RichTextKit for the syntax highlighting in the code snippets
      I’ll create a video that shows how I animate these devlogs (devlogception!) and upload the code to Patreon

  • @Achennium
    @Achennium 11 місяців тому +4

    ark needs to take notes

  • @kainuipenaloza9395
    @kainuipenaloza9395 11 місяців тому +1

    This is incredible- Like, borderline revolutionary techniques level addition to the scene. I can't believe this stuff is just on UA-cam to stumble across randomly.

  • @jessthegamer5550
    @jessthegamer5550 10 місяців тому +1

    Hold up, my time stopped and YT lagged within the first few seconds when you were asking if we were disappointed with lags and stutters. That was perfectly timed. xD

  • @barrianic4
    @barrianic4 10 місяців тому +21

    0:03 maybe don't play it on windows XP

  • @varen-6535
    @varen-6535 10 місяців тому +4

    I only wish Bethesda employees would follow the second step.....

  • @altayrstudio
    @altayrstudio 3 місяці тому +3

    If we don't create the game, this will reduce the memory usage and make everything run faster.

  • @AltamishM
    @AltamishM 11 місяців тому +1

    Incredible job explaining and visualising these concepts. Thanks so much for sharing!