How do Games Load SO MANY Textures? | Sparse Bindless Texture Arrays

  Рет қаралды 19,102

Aurailus

Aurailus

Күн бұрын

How do modern video games manage to load hundreds of high resolution textures when OpenGL expects them to limit themselves to 16 or 32 per draw call? In this video, we go over Sparse Bindless Texture Arrays, a collection of advanced graphics programming techniques in OpenGL and Vulkan, which can be used to get the most out of the video memory available. We also cover texture compression and vertex memory layout, two other techniques which can be used to reduce the memory footprint of games.
I'm a University Student in Computer Science, and I'm endeavoring to be an indie developer. I'm creating Zepha, my own voxel engine, which I'm using to create my own game, as well as an extensible, stable modding framework for community creations. I learned about the techniques in this video first-hand from the 4+ years I've spent developing it.
If you're interested in the type of stuff I show in this video, then be sure to subscribe to be notified when I upload more videos like this! I would really appreciate any sort of interaction, as my channel is super small right now and I'm hoping to grow it in anticipation of my game's release :) Otherwise, thanks for watching!!!
My other social medias:
Discord: aurail.us/discord
Twitch: / aurailus
Patreon: / aurailus
Tumblr: tumblr.com/zephagame
Livestream VODs: @AurailusVODs
Video Chapters:
00:00 - Introduction
02:14 - Sparse Textures
04:10 - Texture Arrays
06:25 - Bindless Textures
07:19 - Texture Compression
08:58 - Vertex Optimization
10:39 - Final Notes
11:07 - Closing Remarks
Music Used:
5PM - Animal Crossing
Tabloid Jargon - Sonic Mania
Pandora Palace - Deltarune
Lights, Camera, Action! - Sonic Mania
CORE - Undertale
7AM - Animal Crossing
Useful resources:
learnopengl.com
www.gdcvault.com/play/1020791...
www.khronos.org/opengl/wiki/A...
registry.khronos.org/OpenGL/e...
www.khronos.org/opengl/wiki/B...
registry.khronos.org/OpenGL/e...
#opengl #gamedev #coding

Пікірлер: 199
@dstry_Flightman
@dstry_Flightman 8 ай бұрын
I have no idea what you're talking about but this is very well made.
@Aurailus
@Aurailus 8 ай бұрын
@aarthificial
@aarthificial 8 ай бұрын
Fascinating topic! I've only ever heard about these techniques in the context of raytracing but using them for a voxel engine makes so much sense. (Btw, love the visualizations in your video)
@Aurailus
@Aurailus 8 ай бұрын
Thank you so much Jacob!! Seeing your comment broke my brain a little, your devlogs are a huge inspiration for me, and I definitely wouldn't have started doing anything like this without Motion Canvas. I'm glad that my video was able to show you something new! I'll definitely be making more stuff like this in the future :)
@Aurailus
@Aurailus 8 ай бұрын
*Corrections and Notes* (thanks for putting up with me ♥) - People have informed me that "we're back to ground zero" is a malaphor, and the actual phrase is "we're back to square one". I looked this up and it's actually a pretty widespread phenomena. Is this a mistake, or just language becoming weirder and weirder as we all stumble deeper into insanity? I'll let you decide... - I swapped really abruptly between talking about video memory and bind slots, which might be confusing to some people. Bind slots are not related to video memory, they are effectively a place that you input a texture that already exists in memory to be used for rendering. These slots only really exist in software, limitations are imposed on them by the graphics APIs, not the physical hardware of the card. Video memory, on the other hand, is the stuff that actually stores the texture, which is physically limited by the design of the card. - Some people wished I was more clear that these tips were directed at OpenGL specifically. That's very fair! I have a habit of forgetting how different other graphics APIs are. Vulkan doesn't have the same issues with Bind Slots that OpenGL has, and thus does not need Bindless or Array textures. However, it does, from my understanding, have an understanding of Sparse Textures. It also can benefit from Texture Compression & Vertex Optimization, although the texture compression algorithms might differ, I'm not too sure. As for DirectX, I do not care. Windows specific graphics API bad
@ross_codes
@ross_codes 8 ай бұрын
I liked this video! Good presentation, very easy to understand. It may be worth emphasising the "OpenGLness" of both the problem and solution with regards to binding large numbers of textures. Most AAA games use DX12 or Vulkan which handle all the texture book keeping with descriptor sets (kinda already bindless). You might enjoy Faith Ekstrand's "descriptors are hard" blog post - she's a Linux Vulkan driver developer.
@Aurailus
@Aurailus 8 ай бұрын
Thanks for your kind words!! You're probably right, it's easy to get sucked into thinking the framework you're working with is the standard that everyone uses, but some of these techniques are very OpenGL specific. I'll be more clear about what API the content is about in my next video. I'm pretty sure that the Sparse Arrays part of the video would translate to Vulkan, as well as the Vertex optimization section. I could be wrong, though!
@Tarvman
@Tarvman 4 ай бұрын
While descriptor sets allow groups of resources to be easily swapped in and out for each draw call, a descriptor set cannot be swapped in the middle of a draw call. This means if you only bind individual textures in your descriptors, it is not so easy to draw multiple objects with different textures in a single draw call, I.e., with instanced draw calls or multiple indirect draw calls. In those cases, the virtual texturing and bindless approaches are still very useful in Vulkan and DX12. Overall, I liked this video - it would have been nice to have had this when I was figuring out textures.
@najunix
@najunix 8 ай бұрын
I always love to see how magnificent works of art work under the hood, even though I have barely a grip on the exact science. This video made me connect a lot of computer science dots, especially in graphics processing! Thank you so much for this!
@Aurailus
@Aurailus 8 ай бұрын
Thank you! I'm glad you enjoyed the video ❤Lovely soweli profile pic :)
@Clawthorne
@Clawthorne 7 ай бұрын
It makes me happy more informational and educational videos on graphics rendering have started popping up since the whole Unity implosion. Your videos are good. Especially enjoyed the animations. They were fun and underlined your points really well. Keep it up!
@Aurailus
@Aurailus 7 ай бұрын
Thank you, I'm glad you liked it!! Hoping to get another video out soon on efficient voxel lighting :)
@omerfurtun4115
@omerfurtun4115 Ай бұрын
In the very recently released Unreal Engine 5.4, there's an improvement referred to as "RHI - Bindless Rendering (Experimental)" which is essentially what this video talks about, which is something I didn't know about. I'm not sure if it's the algorithm being spot on or just sheer luck but I was shown this video just today. Subbed!
@fernandogoncalves7297
@fernandogoncalves7297 Ай бұрын
Im so happy to have found this channel, when I was younger and tried to delve deeper in this kind of topic, it was really hard to find information that was begginer friendly. Now this niche part of youtube is more active and growing a lot. I hope to be contributing soon too. Good work!
@jordicoma
@jordicoma 7 ай бұрын
Very interesting video. I remember when id first implemented (on software) virtual textures on rage, and then some years ago I read about when they added bindless textures to OpenGL, but never I listened to a simple description why it's so important to have the bindless textures. I thought that was only for performance. Great video.
@Aurailus
@Aurailus 7 ай бұрын
I never thought they were important either, until I took the time to learn about them. But I'm happy that I took the time to figure out why they matter!
@Mittzys
@Mittzys 8 ай бұрын
Ooh, your channel is gonna blow up! I loved this, it was extremely informative. Also, your outro is beautiful!
@Aurailus
@Aurailus 8 ай бұрын
Thank you so much!! ❤️ I had a lot of fun recording that outro. It's my favorite place in my city :)
@JaapioNL
@JaapioNL 4 ай бұрын
Cool, a few years ago I stumbled onto bindless textures while checking out the RTX samples by Nvidia and I already knew about texture arrays but never about sparse textures, that’s so cool. I wish I had discovered your channel earlier, subscribing now.
@Aurailus
@Aurailus 4 ай бұрын
Hey, thank you!! Bindless Textures really are the star here, they sort of make every other technique obsolete. The main reason I covered Texture Arrays and Sparse Textures was because of the somewhat poor driver support for Bindless Textures in OGL. I've learned now though that they're actually part of the core Vulkan spec, which is super cool! I'm shifting my engine over to use Vulkan, and I'm going to be taking full advantage of them there.
@toffeethedev
@toffeethedev 8 ай бұрын
i love your video editing style so much its so fun!!! very cool visualisations, ive done engine graphics programming but i had no idea about some of these features, thanks so much!! 💞
@Aurailus
@Aurailus 8 ай бұрын
Thank you!! I'm glad that I was able to introduce you to new things!!
@josephpolon6837
@josephpolon6837 8 ай бұрын
I cannot believe I stumbled upon a gem of a creator like you at the beginning of you channel. Keep up the good work, you WILL SUCCEED! You are a inspiration congratulations ahead of time.
@Aurailus
@Aurailus 8 ай бұрын
This is where I pull a fast one on you by never posting another video ever again! 😈 Just kidding, with how positive of a reception this video got, there's no WAY i'm stopping now. Thank you so so much!!!! Your comment made me feel all warm and fuzzy inside :)
@WebbstreMain
@WebbstreMain 8 ай бұрын
This is so useful! I don't know why KZfaq decided to grace me by suggesting this video, but you just gained yourself subscriber 144!
@Aurailus
@Aurailus 8 ай бұрын
Thank you so much!~
@nincompoop17
@nincompoop17 7 ай бұрын
I randomly stumbled upon your twitch channel at the beginning of ludum dare, asked you a question and you were so polite and immediately helped me out. Now I see you won 2nd place for Ludum Dare, that's insane! And this video is full of such incredibly high quality golden nuggets. You are extremely talented, I'm wishing you all the best on your journey!
@Aurailus
@Aurailus 6 ай бұрын
Hey, thank you so much!! I love chatting with people live, so I'm glad I made a good impression :) I am still totally shocked about getting 2nd in Ludum Dare as well. I'm (slowly) working on making a video about my experiences with it, which I think should be pretty cool. I really appreciate the kind words, have a great day!!
@thombruce
@thombruce 7 ай бұрын
Such a fantastic video, I couldn't really believe my eyes when I saw you only have 400 subs... Great production value! Have one more subscriber. 🔔
@Aurailus
@Aurailus 6 ай бұрын
Thank you so much!! (sorry for the repost, KZfaq is being odd right now.)
@ZalvaTionZ
@ZalvaTionZ 8 ай бұрын
Great video! I have no practical use for this knowledge currently, but it's presentation is great! Wish there was more content like this every time I want to dive into some specific techniques.
@Aurailus
@Aurailus 8 ай бұрын
Thank you so much!! I love videos that go over topics I've never heard of before, which is why I made this one! Because despite all the long-time graphics nuts knowing all of these things, I'd never heard of them and I figured other people wouldn't've either! Do let me know if there's anything specific you'd like me to cover, and I might do it if I like the topic!
@Cokodayo
@Cokodayo 6 ай бұрын
Woah, how do u have only 500 subs wtf. This is too well made for a channel this size. Very interesting topic. Looking forward to more of your vids.
@Aurailus
@Aurailus 6 ай бұрын
Thank you so much! I've got a lot more videos planned, but I'm struggling to find time to put them together in between university classes. But hopefully I'll have some other stuff here soon!
@Cokodayo
@Cokodayo 6 ай бұрын
@@Aurailus take your time, don't stress too much about pushing out more content. Uni is important too. But hey, what do I know, I'm just a random guy on the internet.
@smlgd
@smlgd 8 ай бұрын
This video is so good I couldn't tell it was your first attempt at this format. Great job. Also I'm surprised that it showed up on my home feed given you don't have many subs and views. Only thing I'd like to point out is to maybe look more closely at the audio mix as there are some obvious seams and the volume is swinging up and down between cuts. Other than that it feels great to me
@Aurailus
@Aurailus 8 ай бұрын
Thank you so much! I seem to have triggered the KZfaq algorithm to start recommending this video somehow because I've been getting a steady stream of organic views for the past several hours! I definitely was aware that the audio mix had problems. I recorded all of the lines in one session initially, but on review the next day I realized some of them didn't sound right, so I had to re-record them, and that's what the seams are. It's shockingly difficult to replicate the sound quality of a recording even just a day apart! I'm sure I'll be able to get better at that as time goes on though. But yeah, thank you thank you!
@GreatCollapsingHrung
@GreatCollapsingHrung 8 ай бұрын
The Algorithm works in mysterious ways, guiding The Lost in their search for the Place of Belonging. All hail The Algorithm!
@WeirdRubberDuck
@WeirdRubberDuck 4 ай бұрын
This was exactly the information I needed! Thank you for the thorough walk-through and pedagogical format! This video is awesome :)
@lightspeedlife8299
@lightspeedlife8299 5 ай бұрын
Woah, this was in depth! I'm not working on implementing anything like this myself right now, but if i had more time, I'd like to grind out a custom engine with opengl for device compatibility, and i'll definitely be following your channel for more insights like this when i get there. I'd like to see more about your game, too!
@Aurailus
@Aurailus 5 ай бұрын
Thank you so much! I'm probably going to be making a video about my game pretty soon, I'm just waiting to have something extra-interesting to say :)
@robot7338
@robot7338 8 ай бұрын
this was awesome! im excited to see what you make in the future!
@Aurailus
@Aurailus 8 ай бұрын
Thank you!!!
@RealDaveTheFreak
@RealDaveTheFreak 5 ай бұрын
Even though I am just a simple designer turned Unreal Developer, this is still way over my head. Still, it's very interesting and I love getting into those nerdy details... for one day I may understand them myself. 😁
@Aurailus
@Aurailus 4 ай бұрын
Hey, thank you! It's all a learning experience, if you keep practicing something, the knowledge will come!
@drinkwwwaterrr
@drinkwwwaterrr 6 ай бұрын
I had no idea that storing textures was this complicated but this was really nice and informative :D
@Aurailus
@Aurailus 6 ай бұрын
Thank you! Game engines abstract a lot of this away, but I'm building my own game engine, so I don't really get any of those benefits :P I also just like learning how all this stuff works on a low level!
@markoradojevic4813
@markoradojevic4813 5 ай бұрын
I can't wait to see your other videos, keep up the amazing work. You deserved a sub!
@Aurailus
@Aurailus 5 ай бұрын
Thank you so much! I have much more planned! 😺
@JosefdeJoanelli
@JosefdeJoanelli 6 ай бұрын
Excellent video! Please don't stop
@Aurailus
@Aurailus 6 ай бұрын
Thank you so much! I have more planned but just zero time right now. Hopefully I'll be able to get another video out soon!!
@BreakingStupidity
@BreakingStupidity 5 ай бұрын
You make really good content and I look forward to seeing more of your stuff!
@Aurailus
@Aurailus 5 ай бұрын
Thank you so much!
@CBaggers
@CBaggers 8 ай бұрын
Nothing to add, except to say, please make more of these!
@Aurailus
@Aurailus 8 ай бұрын
That's the plan! 😸
@meerkat22
@meerkat22 6 ай бұрын
I've worked with all of this techniques. I didn't expect so much insight from the video. Information about this topics usually is kind of dull and limited. However, the explanations are just brilliant, great job.
@Aurailus
@Aurailus 6 ай бұрын
Thank you so much! I'm glad that I was able to entertain and inform you 😸
@fluffy_tail4365
@fluffy_tail4365 5 ай бұрын
This is an incredible overview, subscribed for sure
@Aurailus
@Aurailus 5 ай бұрын
Thank you so much!
@thelastfortress2043
@thelastfortress2043 5 ай бұрын
Very good presentation. Thanks a lot.
@Aurailus
@Aurailus 5 ай бұрын
Glad you liked it!
@jonasls
@jonasls 5 ай бұрын
Amazing and so valuable!
@Aurailus
@Aurailus 5 ай бұрын
Thank you!
@sukruciris
@sukruciris 7 ай бұрын
nice video. i also make a voxel game with opengl and C nowadays. i think that's why yt recommended your video :) and i am a computer engineering student too. i implemented batch rendering recently. if i have a problem with textures i will watch this precious video again carefully :)
@Aurailus
@Aurailus 6 ай бұрын
Thank you! Best of luck on your project!
@PaulMetalhero
@PaulMetalhero 7 ай бұрын
Very informative video, thank you!
@Aurailus
@Aurailus 7 ай бұрын
Glad you enjoyed it!
@IanDiaz
@IanDiaz 5 ай бұрын
Great video, especially for your first educational video! A few things I'd like to point out... I'm guessing you probably haven't run into this due to the size of your textures, but just FYI, hardware sparse textures are very rarely used in big games, specifically because binding the pages is INSANELY slow on Windows due to issues with WDDM. There may have been improvements to this Windows 11 (haven't tried it myself in several years), but as of the last time I checked, it was still effectively useless for the texture sizes you'd see in modern AAA games. Pixel art is likely small enough that it wouldn't be noticeable, though, and on Linux, it's a non-issue AFAIK. For a long time, it was relatively common to do software virtual textures - you may recognize the term "megatextures" from idTech - where individual textures were replaced with page indirection textures that referenced NxN blocks of texture memory in physical atlases (often with some padding so that hardware texture filtering can be used, as you noted for classic atlases, but some implementations just do manual texture filtering). This was initially done because hardware didn't support proper virtual memory (megatextures were first implemented on the Xbox 360 iirc, which came out in 2005 lol), but continued (and continue) to be used because of the slowness of hardware sparse textures on Windows. SVT is typically paired with a readback system wherein a render target is generated during rendering that tells the CPU which texture pages need to be loaded in, which is why games like RAGE and DOOM 2016 have a lot of subtle texture pop-in - you can only load the correct pages a frame after they're needed at the earliest. Nowadays, though, most games just go bindless and stream in progressively higher resolution mip levels depending on some heuristic like distance. SVTs are supported in many off the shelf engines these days, and they're not too bad to implement yourself if you take the time to understand what they're doing. Some games use them in highly specialized ways - for example, Battlefield and some of the Far Cry games use SVTs that are generated on the fly on the GPU to optimize highly detailed terrain rendering with tons of decals basically for free - whereas others use them in more or less the same way as you currently are using hardware sparse textures. I've actually been meaning to use them as the foundation of a procedural texturing system for my own game engine for a few years, where a visibility buffer would be used to determine which pages are needed, then a series of compute shaders are dispatched to generate the necessary pages/garbage collect unneeded pages, but yeknow... free time lol. One more thing - DXTn are sort of antiquated these days. BCn work on the same principle of lossy block compression, but some can achieve a higher quality:size ratio (BC1-3 is effectively the same as DXT1/3/5 iirc, but other BC formats, such as BC7, are much more complex). There are other formats as well, especially on mobile, but I mostly just wanted to point out that DXT is no longer the state of the art and hasn't been for quite some time. I'd encourage you to read up on how the block based formats work if you haven't already - it's fairly simple, but I remember finding them quite clever when I was learning about them :P It's also generally worth doing texture compression offline imo as offline tools typically achieve a higher quality than your OpenGL driver will (and because there's overhead to doing it at runtime), but doing it in-driver can certainly be good enough. There are also formats like basis universal that can be efficiently transcoded at runtime into a variety of different GPU compression formats, which can be useful if you're looking to target multiple platforms. Some SVT implementations, such as that of Far Cry's terrain, actually do block compression in GPU compute live while filling the physical texture, and there are some freely available code snippets you can find online for how to do so.
@Aurailus
@Aurailus 4 ай бұрын
Woah, thank you for the response! I'll tackle these comments one by one. I don't use Windows, so I had no idea that sparse textures had issues with it! I did find the performance even on Linux to be sub-par, and I eventually realized that for my use case, it didn't make sense to have them be sparse, but instead to just allocate however many layers I could for any given image size, up to a certain maximum resource size in bytes (I allocate in blocks of 128 MB, which allows me to have max array layers all the way up to 128x128 images). I'm amazed that games would actually use texture atlasing with filtering methods like anisotropic filtering! I had to put so many pixels of padding to avoid artifacting at texture borders. I thought that artifacting was based on how big the texture was on screen, not how many pixels it was, and I probably incorrectly assumed you'd need even more pixels of border around high resolution textures in an atlas. Either way though, bindless textures do seem like the way forward. Apologies for the out of date information I gave on DXT compression. I hadn't actually used texture compression in my engine yet, but I wanted to talk about it a bit because I imagined it would be useful to some people. I had no idea that the khronos wiki was so horrifyingly out of date. I've looked a little deeper and apparently like nobody has permission to even edit it, which means it's just going to get worse as time goes on. For my personal use, I actually entirely swapped my graphics backend over to Vulkan after having further frustrations with the way that persistently mapped buffers and multi-draw indirect worked in OpenGL. I'm sure that there are many people using advanced OpenGL features effectively, but it just felt like I was wading through decades of poor decisions all stacked atop each other, with no guard rails whatsoever. So I messed around with Vulkan a bit, and I find it so much nicer! I've gotten a lot of the rendering pipeline back to how it was in OpenGL, and I'll be making a video on that once I've fully completed the changeover. Thank you so much for all the information, it was great reading such an in-depth response. Apologies for not responding sooner, I visited family for the christmas season and KZfaq (probably rightly) slipped my mind :) Hope you had a great New Year's!
@Faimyn
@Faimyn 6 ай бұрын
Really great info!
@Aurailus
@Aurailus 6 ай бұрын
Thank you! I'm glad it was helpful :)
@takikat
@takikat 8 ай бұрын
these visualizers helped a Lot even for someone who struggles with programming logic, big props
@Aurailus
@Aurailus 8 ай бұрын
Thank you! I put a lot of work into them, so I'm really happy people are enjoying them! I want to go even further with visualizations next time :)
@rubenwardy
@rubenwardy 8 ай бұрын
Good job! This is going to be such a great resource for the next person looking into this. Great animations and your personality shines through. I'm looking forward to seeing what you make next
@Aurailus
@Aurailus 8 ай бұрын
Thank you so much!! If I can help others to find these features of OGL then I'm happy! I have several more videos in the works. The next one will likely be on more advanced lighting in voxel space. Glad you enjoyed the video!~
@alexamand2312
@alexamand2312 8 ай бұрын
great work ! you deserve way more viewer !
@Aurailus
@Aurailus 8 ай бұрын
Thank you!
@DanaTheLateBloomingFruitLoop
@DanaTheLateBloomingFruitLoop 5 ай бұрын
Fascinating topic and great presentation! As an amateur gamedev I am always glad to have things demystified about what is actually going on in a computer. Makes it all feel less daunting.
@Aurailus
@Aurailus 5 ай бұрын
Glad you enjoyed it!
@naturally_rob
@naturally_rob 5 ай бұрын
You remind me of StyroPyro with how you present information; but with programming. This is exactly what I've looked for
@Aurailus
@Aurailus 5 ай бұрын
I'll have to check out their videos. Thanks!
@chsxf
@chsxf 8 ай бұрын
Very interesting video. I've learned a lot.
@Aurailus
@Aurailus 8 ай бұрын
Glad to hear it!! 😸
@maddyv5948
@maddyv5948 8 ай бұрын
Great video, very informative 👍👍 Thanks!
@Aurailus
@Aurailus 8 ай бұрын
Glad you enjoyed it!!
@NoTengoIdeaGuey
@NoTengoIdeaGuey 4 ай бұрын
You dropped this 👑
@Aurailus
@Aurailus 4 ай бұрын
Yoooooo :)
@grace15625
@grace15625 8 ай бұрын
Good job on the video!
@Aurailus
@Aurailus 8 ай бұрын
Thank you!!
@bcmpinc
@bcmpinc 8 ай бұрын
This makes me want to get back into voxel engine development. Its almost 10y ago I worked on it. Learning about ADZO and sparse memory allocation on the GPU. Even wrote a tutorial on how to setup and use a modern OpenGL 4.5 context. It was just before when Vulcan released. Compute shaders were not flexible enough to do what I needed for a sparse voxel octree rendering. Your voxel engine looks really cool.
@Aurailus
@Aurailus 8 ай бұрын
Hi! Thanks for watching the video! :) I tried looking up the term ADZO and I couldn't find anything on it, if you could elaborate I'd be really interested! It's really interesting to hear about voxel games back when they were still first entering the game dev scene. If you made a video about that, I'd watch it!!
@bcmpinc
@bcmpinc 8 ай бұрын
​@@Aurailus: I mixed up the acronym, it's called AZDO, Approaching Zero Driver Overhead. The idea is to use Direct State Access and avoid all OpenGL glBind* calls. I wrote a wordpress blog about it under the same username.
@Aurailus
@Aurailus 8 ай бұрын
Oh fantastic, thank you for your reply! I'll definitely read it!
@shantanukumar8064
@shantanukumar8064 8 ай бұрын
thanks for making this video :)
@Aurailus
@Aurailus 8 ай бұрын
My pleasure! I'm glad you liked it :}
@braulee7
@braulee7 5 ай бұрын
wonderful video good mix of educational and entertaining, i like seeing practical examples so that would be my only improvement
@Aurailus
@Aurailus 5 ай бұрын
Thank you! I appreciate the feedback. I'll try to include some more practical examples in future videos.
@Tenchinu
@Tenchinu 7 ай бұрын
I'm really new at optimization... so I can see myself rewatching this a 100 times while glancing at the extra google tab to actually understand what ur talking about... but I love it!! :) out of total ignorance on my part, how is this implemented in engine? or, do u know of a link that could maybe show how this works in practical terms inside UE5? thnk u for making it fun and informative! keep the education coming!! :)
@Aurailus
@Aurailus 7 ай бұрын
Hey there, happy you enjoyed the video! I don't work with pre-existing engines so unfortunately I don't have any resources to share on that front. If I were to guess, I imagine they probably handle stuff like this already under the hood. But it can be really valuable to learn about this stuff regardless to get a better idea of how the underlying mechanics of the engine work to deliver the graphics you tell them to!
@lelaleasl
@lelaleasl 8 ай бұрын
this is so good! how do you only have 100 subs!?
@Aurailus
@Aurailus 8 ай бұрын
I mean hey, this morning I only had 19! Thank you!!
@serwizzart
@serwizzart 8 ай бұрын
Cool video :) very informative
@Aurailus
@Aurailus 8 ай бұрын
Thanks! ❤️
@xanderlinhares
@xanderlinhares 4 ай бұрын
Thank you so much for making this. Please make more. There’s a shortage people making this kinda of content. It would great for you to join SimonDev and Acerola!
@Aurailus
@Aurailus 4 ай бұрын
Thank you! I plan to make much more, I hope you stick around!
@optiphonic_
@optiphonic_ 8 ай бұрын
Your game is looking verry pretty, good luck!
@Aurailus
@Aurailus 8 ай бұрын
Thank you so much! My next video is going to be laying out my goals and ideas for the game, and I think people are really going to like it!
@orels1_
@orels1_ 5 ай бұрын
Great video! Wish we could do bindless in Unity but they seem to be not interested atm 😔 Was surprised to see such a well produced piece of content for such a small channel. Keep it up! ♥
@Aurailus
@Aurailus 5 ай бұрын
Thank you so much!!
@jackthehacker05
@jackthehacker05 3 ай бұрын
very nice video 👍
@jumbledfox2098
@jumbledfox2098 Ай бұрын
you are so cool, i hope i make stuff like this one day!! :3
@Heeroneko
@Heeroneko 5 ай бұрын
Oh....so that's why that Minecraft resource pack I like using loses so many frames. lol Thanks for making a video explaining this stuff.
@Aurailus
@Aurailus 5 ай бұрын
Thanks!
@Heeroneko
@Heeroneko 5 ай бұрын
I dunno if this would be relevant or interesting to you, but I'd enjoy a video covering old texturing techniques like how the og Unreal game did it w those close up texture blends n stuff. The evolution of texture tech would also be interesting to go over, like the evolution of bump mapping n all that stuff up to whatever the hell the UE5 is actually doing.
@Aurailus
@Aurailus 5 ай бұрын
I'm not super familiar with past rendering techniques, but I might look into it more. I'm really into Kaze Emanuar's Mario 64 modding videos, they go into a ton of detail about how old hardware handles textures and stuff!
@gravechest7392
@gravechest7392 7 ай бұрын
Very intresting, did not know that you can just use textures on the graphics cards without texture slot, btw great video, at the quality level of a big channel/
@Aurailus
@Aurailus 7 ай бұрын
Thank you!!
@daniellapain1576
@daniellapain1576 4 ай бұрын
I really need to start making videos about optimization. I forgot how scattered the information was on this topic until you pointed it out. I have a hobby in just fiddling around with optimization for games. There are quite a few. Also textures can be interesting for optimization. Say you have a few textures on a Texture Atlas for example. If multiple parts of textures on your atlas actually match each other you can use a mapping piece of code to shrink the images into the matching shapes and have it realign the pieces like a puzzle back into the original texture. This is an old technique that has not been used too often because of having to get custom code to work nicely with the engine but these days it should be possible for AI to accomplish this task even quicker. Another way to optimize is to use Steganography, the art of hiding two different digital images inside of each other. However it can be used differently in our case because one texture atlas can become 4 with this method by splitting the image into each RGBA channels and once filled you then take them into a grayscale filter and then re-colorize the textures in the game engine. This method also can be used for every type of mapping system you need. The downside of using this is that once you’ve saved your image you cannot edit the saved file in any way other than temporary file compression. Once the image is made you can’t mess with it because it will ruin the textures and blur them together or worse lock together the channels into a single image. So save and hold onto the editing file for future changes to the Atlas. Combine these with the methods you mentioned and you will have much more textures to work with.
@Aurailus
@Aurailus 4 ай бұрын
Hey, thanks for the comment! Steganography is definitely a useful technique, but you have to make some pretty strong assumptions about the format of your images, like making sure that they only have one color that you're going to multiply the greyscale texture with. I do plan on baking multiple textures into different channels for PBR & normal images, as they need a lot less bits per pixel to properly represent their data.
@daniellapain1576
@daniellapain1576 4 ай бұрын
@@Aurailus Nice I have an image example I go off of that explains every option you can go with for steganography. I have since forgotten the name of whom I received this from but he was in the game industry at the time for a AAA title.
@Aurailus
@Aurailus 4 ай бұрын
​@@daniellapain1576 ooh, do share!
@DerClaudius
@DerClaudius 8 ай бұрын
Good content, so here's some engagement.... Keep it coming...
@Aurailus
@Aurailus 8 ай бұрын
Thank you, I plan to!! This video has gotten way more interaction than I expected, so I'm pretty hyped to keep going :)
@justahuman4862
@justahuman4862 8 ай бұрын
Cool video. What engine you using? Also it would be cool to see how to apply what your talking about. Like a video of you going through the process in a real example.
@Aurailus
@Aurailus 8 ай бұрын
Thank you!! I'm using my own engine, which is build on top of raw OpenGL. My videos are mostly going to be concept-focused, as opposed to specific implementation, I think. But, I stream development of my engine on Twitch every Saturday, and we're currently at the point of implementing these techniques over there! We had a stream yesterday where I discussed Sparse Bindless Texture Arrays in a lot more detail, as well as answered questions about the KZfaq video, if you're interested!
@DonC876
@DonC876 8 ай бұрын
Really interesting video. I think i will have to investigate further to see how and if i could possibly use that technique in Unity. Though i am pretty sure that for tiling textures especially, you should use the full two float for the texture coordinates, but i can see how this could work for the kind of game/engine that you are working on. Also i usually try to store the indices in vertex color channels since those are byte instead of float (though you're limited to 0-255 range then). Also i would love to see you make a video about bit shifting, since i can't seem to wrap my mind around that completely. The few times i attempted to do that it would always work only 95% of the time. Anyways, instant sub from me :) looking forward to seeing more from you
@Aurailus
@Aurailus 8 ай бұрын
Hey! Thanks for the kind words!! I actually do have a video on Bit Shifting planned, which will specifically go into Word Level Parallelism, which is one of the coolest techniques I've discovered recently for manipulating data. I'm curious if you can elaborate further on your comments that you should use floats for indexing tiling textures. Is it just because integers will be imprecise? When you refer to storing indices in color channels, I assume you're talking about some sort of pre-set vertex attribute in Unity? If so, that's a smart use of the space that it's already allocating for you! I don't have any unused attributes in my engine, because I wrote it in raw OpenGL, so I have complete control over the vertex layout.
@DonC876
@DonC876 8 ай бұрын
@@Aurailus yeah i was talking about precision problems when using less than float for texture coordinates. I noticed that when texure coordinates extend beyond 0-1 range like having a tiling texture across a larger surface it can become noticable. I imagine that's a non issue in a minecraft like game? Yeah i unity basically all other mesh data is full float, except for the Vertex Colors, though i only tested on Oculus Quest maybe it's different on other platforms? That's the bad thing about working with a black box like unity with no source code access. I hope one day i will also be able to get into the nitty gritty and build my own renderer ontop of opengl or vulkan, but till then i'll watch and learn from more talented graphics programmers like you :). Looking forward to the bit shifting video
@DrawSage
@DrawSage 8 ай бұрын
I took a shot everytime I heard the word texture, and am now a furry. Thank you.
@Aurailus
@Aurailus 8 ай бұрын
That's a known occupational hazard of watching any of my videos. I wish you a speedy recovery!
@bjornnordquist1616
@bjornnordquist1616 Ай бұрын
Thanks. Thanks a lot!
@bjornnordquist1616
@bjornnordquist1616 Ай бұрын
Ps. I commented before getting too your CTA to leave some constructive feedback. Obviously I feel like this is super helpful going forward because now I know in which directions to research deeper into the topics. It may be helpful to add some pseudocode examples for the different techniques, but that's just an idea.
@rowmen
@rowmen 7 ай бұрын
No time wasted! You're just building up your ability to learn the next thing faster!
@Aurailus
@Aurailus 7 ай бұрын
You're right! I do love learning :) I just wish that I knew to learn the right thing from the start.
@mohsenzare2511
@mohsenzare2511 5 ай бұрын
And now you have 1000 sub, nice talk by the way
@Aurailus
@Aurailus 4 ай бұрын
Thanks!
@Gamovore
@Gamovore 7 ай бұрын
That's very interesting, thank you very much! I just discovered this video. May I ask you how you've learned all of that and how you find the motivation to go that deep? Is it your full time job? Trying to sort my life out so I ask other people how they organize themself 😅
@Aurailus
@Aurailus 7 ай бұрын
Thanks!! I think I kinda cheated, because it feels like my brain just gave me this as my life's purpose. Ever since I first played Minecraft when I was 11, I have had the singular goal to make this project. It drove my learning how to code, going to university, learning pixel art, and pretty much everything I know about gamedev. Unfortunately, I don't have an easy answer for how to get motivation like that, because I feel like I didn't really do anything to get it, it just happened. But I'm happy it did. This isn't my full time job but I hope to make it so! I currently do freelance web development for work while studying computer science in university.
@sauce729
@sauce729 Ай бұрын
This is great! I've never heard of sparse texture arrays! I mostly write graphics code through Qt's RHI framework that ports graphics code between Metal, OpenGL, D3D, and Vulkan. Unfortunately, it doesn't seem to support this, probably for portability reasons. I'll just have to stick with texture arrays for now.
@joeyd9351
@joeyd9351 8 ай бұрын
I don't know much about graphics, so I'm a little confused about vertices. I've always heard the term "polygons" used instead of "vertices" in cases like that. Are they interchangeable terms, or are they entirely different?
@rubenwardy
@rubenwardy 8 ай бұрын
Hey, they're different. A vertex is a point in space, a polygon is a shape. If you connect at least 3 vertices with edges, you get a polygon aka a face. A polygon with 3 vertices is also called a tri/triangle
@Aurailus
@Aurailus 8 ай бұрын
Hi, thanks for your question! @rubenwardy pretty much managed to answer it perfectly before I got to it. :P Have a great day!
@Selicre
@Selicre 8 ай бұрын
Nice to see youtube pushing smaller creators. You have a very coherent style and presentation already, and as someone interested in bare openGL development this is really useful. However, "irregardless" is not quite what you want to say. It's "regardless".
@Aurailus
@Aurailus 8 ай бұрын
I have no idea what you mean... I definitely didn't specifically use the double negative form because it annoys people :P
@Selicre
@Selicre 8 ай бұрын
@@Aurailus I'm not a prescriptivist, I just don't like auto-antonyms.
@RamRevivo
@RamRevivo 8 ай бұрын
This is very valuable info, thank you 🫰 How did you start learning computer graphics? I’m currently studying computer science and very interested in learning all about computer graphics, started reading a book called Computer Graphics for Java Programmers (as the only language we learned so far is Java), are there any other resources you’d recommend?
@Aurailus
@Aurailus 8 ай бұрын
Thank you! For learning computer graphics, I found LearnOpenGL (learnopengl.com/) incredibly helpful. It's C++ oriented but it should translate to Java fairly well. You could also try learning WebGL, which is for JavaScript, which might be simpler than trying to understand C++. I also have some specific resources about the topics of this video in the video description. Hope this helps!!
@RamRevivo
@RamRevivo 8 ай бұрын
@@Aurailus thank you! im actually very interested in learning c++ anyways so this seems a great way to start
@arbitervildred8999
@arbitervildred8999 4 ай бұрын
I don't remember using any binding in my game, I just load the texture, pass it through the shader to be mapped on the block sides, and just reload the different textures on the same var, load, draw, dispose.
@kahaneck
@kahaneck 4 ай бұрын
good job
@joseph-montanez
@joseph-montanez 7 ай бұрын
First, thanks, so much great information! I recently watched another video similar using “mega textures” on the Nintendo N64! Second, what program did you use for all these awesome animations?
@Aurailus
@Aurailus 7 ай бұрын
Thank you!! I think I watched that same video. Kaze Emanuar? It was fascinating. I used Motion Canvas for the animations. It's FOSS and made by a (much better) devlogger on KZfaq, Aarthificial. They have a discord server if you want to see more! discord.com/invite/XnnWTrHYAW
@joseph-montanez
@joseph-montanez 7 ай бұрын
​@@Aurailus "How I implemented MegaTextures on real Nintendo 64 hardware" by James Lambert is the video.
@SwapChain
@SwapChain 7 ай бұрын
Awesome! Please more educational content :)
@Aurailus
@Aurailus 7 ай бұрын
Thank you!! Will do!
@Touie
@Touie 7 ай бұрын
underrated
@Aurailus
@Aurailus 7 ай бұрын
❤️
@mycollegeshirt
@mycollegeshirt 4 ай бұрын
fantastic
@Aurailus
@Aurailus 4 ай бұрын
Thank you!!
@Kavukamari
@Kavukamari 8 ай бұрын
you had an r place printed out? that's neat
@Aurailus
@Aurailus 8 ай бұрын
Yeah, I got it shortly after the initial 2016 one! I liked how it was a representation of the whole internet at that time in a way :)
@loreimp5819
@loreimp5819 8 ай бұрын
Are bindless textures backwards compatible? Do they work on older GPUs?
@Aurailus
@Aurailus 8 ай бұрын
Thanks for the question! They do require a relatively recent GPU to use, however, you can check if they're supported at runtime and fall back to normal bound textures if not!
@DogsRNice
@DogsRNice 3 ай бұрын
AAA Developers: you bought all that vram don't you want to use all that vram?
@torgath5088
@torgath5088 Ай бұрын
This is a fantastic video as to an indie developer, but I am using UE5 so I can only find how to use texture arrays, but that's about it for now
@ColtonPhillips
@ColtonPhillips 8 ай бұрын
Why is padding required for anisotropic filtering?
@Aurailus
@Aurailus 8 ай бұрын
Thanks for the question! Padding is required for anisotropic filtering because of how it multisamples the image to blend the texture. Anisotropic filtering attempts to smooth out textures at extreme angles by sampling along the narrow texture's direction, which works fine for an individual texture, but on densely packed textures, it can end up accidentally sampling the neighboring texture instead! This problem is worse the higher levels of anisotropic filtering you have :)
@Bestsoft100
@Bestsoft100 8 ай бұрын
What's that program at 9:04? I can't read the text
@Aurailus
@Aurailus 8 ай бұрын
Hi! That's RenderDoc, it's a super useful GPU debugging program. It allows you to take snapshots of individual frames of your game's rendering, and page through every single instruction! It's FOSS and it runs on Windows & Linux.
@Bestsoft100
@Bestsoft100 8 ай бұрын
@@Aurailus Thank You
@hyleyy
@hyleyy 8 ай бұрын
Love ur cat images
@Aurailus
@Aurailus 8 ай бұрын
😸
@manapotion1594
@manapotion1594 Ай бұрын
So is this feature already implemented by major game engines already? Like UE, Unity, Godot?
@e3.14c4
@e3.14c4 5 ай бұрын
1:00 what is that font at the top?
@e3.14c4
@e3.14c4 5 ай бұрын
11:30 I can't get over how warbly the rock is and well everything else, but the rock caught me off guard first. lowkey the trees are dancing
@Aurailus
@Aurailus 4 ай бұрын
The font at the top an extra messed-up version of Sans Forgetica that I made in FontForge to stop people from looking over my shoulder as I write on my laptop! I made it letter by letter, and I can read it pretty much just as well as any other font now. It was a really windy day when we took that footage at the end, so the video stabilization is doing some work lol. It has a weird holographic look to it.
@KropedStudio
@KropedStudio 6 ай бұрын
huh, useful :o
@Aurailus
@Aurailus 6 ай бұрын
❤️
@AnimaxNeil
@AnimaxNeil 8 ай бұрын
having put countless hours into understanding concepts and programming, i consider myself pretty good at problem solving. but everytime i see these videos i feel lost in this endless ocean of unaquired knowledge.
@Aurailus
@Aurailus 8 ай бұрын
Well, I hope it at least introduced some new topics worth exploring! 😛
@stuwusmusicalt6629
@stuwusmusicalt6629 5 ай бұрын
Where is that background at the end?? looks like quebec
@Aurailus
@Aurailus 5 ай бұрын
The west coast of Canada, actually!
@stuwusmusicalt6629
@stuwusmusicalt6629 5 ай бұрын
@@Aurailus I gotta move there no matter what, that's my 10 year plan 🫡 gotta get a tech art job or make some sustainable indie carrier or something anyways nice video for a small channel, I wanna start making content about my own projects too, might start this summer or as soon as I'm free from the shackles of this miserable education system
@Aurailus
@Aurailus 5 ай бұрын
@@stuwusmusicalt6629 It's beautiful, I feel so lucky to have grown up out here. Best of luck on your plans!!
@gr.4380
@gr.4380 8 ай бұрын
Cool video! My only suggestion is that you don't stare straight into my soul the whole time :O
@Aurailus
@Aurailus 8 ай бұрын
I don't know how to act on camera 😭
@pedro.alcatra
@pedro.alcatra 8 ай бұрын
Don't even know how I reach here.
@Aurailus
@Aurailus 8 ай бұрын
Lots of practice!!
@FredericoKlein
@FredericoKlein 6 ай бұрын
Acerola looks different
@Aurailus
@Aurailus 6 ай бұрын
But Acerolaaaaaaaaa, that's not you, that's just some other nerd on the Internet talking about graphics!
@fabianportero3563
@fabianportero3563 4 күн бұрын
🥰
@huskui
@huskui 8 ай бұрын
I wish I could load in a girlfriend texture =(
@Aurailus
@Aurailus 8 ай бұрын
😔
@LazyUggugg
@LazyUggugg 3 ай бұрын
Is there a fucking green screen behind your chair?!?!?!
@LacklusterFilms
@LacklusterFilms 5 ай бұрын
Furry
@Aurailus
@Aurailus 5 ай бұрын
yo
@ph0ax497
@ph0ax497 2 ай бұрын
Thats why Unity sucks with big game projects. It still in its core, tries to allocate the textures through batch binding, and simple draw instructions. Instead of using whole unshackled power of GPU, it tries to stay within limits, that are non existent anymore. Im just baffled, right now im in the middle of REALLY big project on Unity, and I am optimizing typical "environmental assets". What everyone tells you in Unity community, is to forget about material property overrides, and stick to the standard CPU batching, to fit fps criteria, but in my case standard static batching is completely useless, and is actually worse than GPU instancing. But I hit the wall rather quickly, since GPU seems to just overburden with draw instructions, and it was a mystery for me why does it happen, since RTX 2070 has so much power, that it could pretty much single handedly just solo the whole game computations we have, and still have space for another one. NOW it makes sense. We are just unable to efficiently use the GPU, because its not being used properly whatsoever, and thats hardly our fault. My optimization method is to scale the game down from multiple (about dozens) texture sources, to couple of them, atlased, and dropped into static texture arrays. Couple of materials, with instanced properties on every possible mesh renderer, and strict policy with shaders, and their derivatives. From my working theory, this method should scale dramatically with scenes that have hundreds of different assets, and materials, and I know why now. Thanks
How do Major Video Games Render Grass?
9:33
SimonDev
Рет қаралды 357 М.
When Your Game Is Bad But Your Optimisation Is Genius
8:52
Vercidium
Рет қаралды 1,3 МЛН
ХОТЯ БЫ КИНОДА 2 - официальный фильм
1:35:34
ХОТЯ БЫ В КИНО
Рет қаралды 2,6 МЛН
I Need Your Help..
00:33
Stokes Twins
Рет қаралды 145 МЛН
КАКОЙ ВАШ ЛЮБИМЫЙ ЦВЕТ?😍 #game #shorts
00:17
How Nintendo Textures EVERYTHING
8:44
Smeaf
Рет қаралды 100 М.
When Optimisations Work, But for the Wrong Reasons
22:19
SimonDev
Рет қаралды 788 М.
How I implemented MegaTextures on real Nintendo 64 hardware
8:51
James Lambert
Рет қаралды 324 М.
All OpenGL Effects!
30:21
Low Level Game Dev
Рет қаралды 55 М.
How much MONEY my Game made (and how much it cost!)
14:00
Code Monkey
Рет қаралды 152 М.
I Created a Game Engine Just to Optimise This
4:50
Vercidium
Рет қаралды 905 М.
Dear Game Developers, Stop Messing This Up!
22:19
Jonas Tyroller
Рет қаралды 676 М.
Better Mountain Generators That Aren't Perlin Noise or Erosion
18:09
Josh's Channel
Рет қаралды 271 М.
6 Months of Voxel Physics Engine Optimizations
8:17
Grant Kot
Рет қаралды 44 М.
Analyzing Slay The Spire's Hardest Boss
14:04
Finest Fights
Рет қаралды 152 М.
Boy's Magic Magnet! | NEW EPISODES COMING IN JUNE (Animation Meme) #boyanddragon #shorts
0:31