How to Build a 2D Renderer | Game Engine series

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hey what's up guys my name is the churner welcome back to my game engine series so last time we took a look at shader library check out that video if you didn't catch it and today we're going to be talking about - you're entering hazel specifically planning a little bit about what that actually involves cause it's important to start off with a plan no matter where you are in your art design process no matter how experienced you think you are no matter how easy it is gonna be doesn't it doesn't hurt to just make a little plan even if it's tiny to just actually make sure that you're not overlooking anything and with plans on more kind of more involved tasks let's just say like something like this is actually quite a lot of work because we're gonna kind of plan this out today I've got my little drawing instrument if you will it's just a drawing tablet I've got although all that for this video but it's going to be kind of taking a look at everything and planning everything out on a little piece of paper essentially and as we're kind of putting together that plan you'll realize it actually there's a lot of stuff to this because there is that's the thing game engines aren't easy to make renderers aren't easy to make you think that you might be able to get away with not doing much work but then you realize that if you actually want a really good product it's gonna take more work before we begin this episode I just want to thank all of the patrons that make this series possible patreon hopefuls that the charity the single biggest support that I actually have it's the only reason why I'm able to do YouTube full-time is because of all of the people who are pledging to make this series possible to make all this stuff possible I'm now working on hazel full time which means that this stuff is actually gonna happen like this century hopefully so I'm kind of just really focusing on that trying to make as many videos for you guys as possible so thank you so much to all the people who make this possible speaking of which if you're not interested in 2d if you'd rather kind of move on to 3d I have a full 3d render up in hazel already ready to go like physically based rendering animation all of that stuff available in the heddle dev branch which is available to patrons who do help support this channel so you can write interested in there so you can skip and take a look at that code and then of course your support is what makes this stuff happen okay so Oh 2d rendering so I did a little bit of a whiteboard search before just to kind of gather my thoughts I think that when when you're planning you never want to kind of do all of your planning in one day or do all of your planning kind of just in this moment the reason is that the human brain works in a very fascinating and interesting way in the sense that time is important for very many things time is so important if you don't let anything in your brain actually sit there for a while and you just jump to conclusions it's I mean I'm it's just seriously gonna cause you so much havoc right if you just like you want to buy a car you want to buy a house or something and you just instantly impulse buy something it's probably not gonna be the right decision same with this right if you feel learning something new if you're trying to learn a musical interests instrument if you're trying to learn how to do a trick on your skateboard I don't know if you're trying to learn something new and you try it if you're learning how to drive a manual car for example if you just try and do that all in one setting it's gonna be very difficult but if you just take a break and you come back the next day you'll be like well let's do this isn't as hard as it was yesterday the reason is that your brain has kind of just taken time to process things and I think that's super important with planning if I just sit down and all in one session I just like to sit down with a piece of paper write right out this is gonna be much beauty renderer this is how I'm gonna link everything together not gonna be a good idea it's gonna be way better if over the course of a week for example I kind of just write a few things in in the first day I'll write everything I think is required and then I'll kind of walk past that whiteboard or something the next day and I'll be like hang on a minute how did I forget this how did I forget that so many things to overlook I put out a video a few days ago about basically it was like a day in the life kind of videos what kind of a hazel 2d development blog or a vlog check out that video if you haven't already because in that in that video I actually talked a lot about kind of I'm how I'm approaching this and I actually show off what I've kind of achieved at the end of the day which is basically a 2d renderer so I'm kind of following along with that in my own time and just building up this 3d render and along the way I'm kind of figuring out how to actually break this into episodes for you guys because of course 2d did win the poll and we're moving on with a 2d renderer for hazel anyway um without further ado let's just take a look at Eddie I want to start by looking at some code that is basically our code right now because that's the thing we kind of have a 2d renderer or a lot of you might think we kind of have a 2d renderer why well we can render 2d sprites we can have quads with textures we've done that already we have the Cherno logo we have like a checkerboard background we have blending working we can clearly like sample from textures we can clearly load textures we can clearly render squares we did like the whole grid before you know we have a grid of squares how is that going to be different than an actual 2d renderer why is what we're doing here so much more complicated well all will be revealed in this video because there's so much that goes into this anyway let's just take a look at what we have right now and how what we're gonna be designing and creating is gonna be very different and also we'll take a look a little bit as to how the API for this new renderer will actually work okay so this is the current state of the hazel repository if we take a look at the actual running program well that's compiling I just want to kind of quickly make a little up there just to say that um we have a logo now this is a little logo that I've made and also after the readme in the repository that actually kind of states both our plan and kind of features that we're interested in and what the plan is just in general as well as how to actually get hazel because a lot of people were having issues actually downloading and compiling hazel properly so there's a little bit of information about that as well as a logo so hopefully you guys like the logo didn't take me hint took me a couple of hours but I think it's really nice I like to keep things simple so yeah the amount of time for the stuff gets printed on hoodies and t-shirts of course so back to actual hazel we have this right now this is what it is and we can move using our case we're entering a whole grid and we are in fact rendering textures as well so this is basically this is D these are the components to a basic 2d renderer there's no doubt about that you could make a game with this easily right you can just resize these and make them like blocks and have a little character which you could even make like a texture out of you don't even have to use flat colors you could do whatever you want we have a nice shader system you could even just modify the shaders and make something even cooler you have what you need and obviously we have like the event system in hazel and just in general we have input events you could easily basically make a complete game with what we have right now maybe - the audio that's probably the biggest thing that's missing everything else would probably not be too difficult to add so why is what we're designing like why is that going to be different well let's take a look at how it's gonna be different first of all the way that we do everything right now is we submit it to the renderer now this is fine if we look at our actual renderer submission what we do is we begin a scene which sets our view matrix a view projection matrix and then we submit data to it which right now kind of sets the transform and says the view projection as well from what we submitted earlier it finds the shader binds the vertex array and then actually draws that vertex array and that's what we have right now for our render now this is fine but this is very 3d esque right this is what you would do in a 3d renderer because you know submitting like a shader submitting a vertex array you know setting up a new projection matrix doing that kind of stuff is setting a transform that's not traditionally stuff you would do in a 2d renderer because there's just no need to that the huge benefit I guess or it's really like a difference as well but it's a benefit in a lot of ways with 2d rendering specifically is that you don't have to worry about 3d models with masses of vertices which could be very different from each other you don't have to worry about different shaders or materials and these were material properties instead everything is essentially a quad everything's a rectangle like yes you could rent a line circles all that different geometry but usually all you render is a quad I mean even if you want a circle a lot of times it's actually just easier to render a square and then have a texture which is your circle and then you can of course have a have some alpha like transparency in that texture so that it makes like a circle shape and just discard the pixels that don't need to get rented that a lot of that that's just a better way of rendering like there's very few cases in which I would actually be like hey I want to render a circle using like a triangle fan because that's just that's too much geometry like to get a perfect circle in a 2d renderer that's like not like jagged edges you know you need so many vertices why just render a texture it's so much easier and you can have that as smooth as you want really because you're dealing with per pixel basis which is really what to tear n during is about so this set up in general not great because we we have all this extra stuff here like materials and stuff in the future that will come to a 3d renderer stuff that we don't actually need for a two year and release channel let's jump back and take a look at some more things so the biggest the biggest thing here is that we just have one way of submitting render calls and that is to this kind of render submit now the thing is this is intended for 3d rendering so we go a little bit of a different problem how do we discern between what is 3d and the three and the 3d API and then what is kind of 2d and our end or a 2d API well there's a few ways we could do this you might be tempted and let's just go back to renderer begin scene you might be tempted to just just basically say that well okay why don't you begin a 2d scene you know we'll just say begin scene to e you can pass in an orthographic camera maybe you have an actual scene object that defines the scene a little bit in more detail than just the camera for example you could have anything you want want to do that well you could do that but then we have a problem because what if we want to draw a quad we could just do draw quad right but hold on a minute is this quad being drawn in 3d land or 2d land okay well let's maybe look at the scene that was begun maybe we should have a restriction where you to begin either an a scene or a scene to D if you begin a scene to you you have to end the scene to D before you can begin a seam 3d for example which is just a regular scene you could have that so contextually we know that a 2d scene has begun maybe that's a 2 e quad well sure but what about if we want to draw a quad in 3d if does it really look the same and then it just depends if a 2d scene has begun or a 3d scene has begun that seems a little bit like ridiculous and it's gonna just it's gonna cause problems well okay fine what if a quad is 2d and then a rectangle is 3d do we really want to say P either do we really want to be insane and then draw rect is to draw a 3d rectangle and draw quarters to draw a 2d one or vice versa that's gonna create so much confusion why have something like that and so because of that it kind of becomes apparent pretty quickly that we don't want to have a begin same 2d we actually want to have a physically like different renderer and so because of that we are introducing the renderer to D now it would call this render a 3d render or 2d I don't think that's required I think that hazel primarily is going to be a 3d engine anyway it's going to be capable of 2d of course but I think that when you think of the hazel renderer you're thinking of a 3d render not a 2d renderer so because of that we're gonna leave renderer as is but then we're gonna make a renderer 2d specifically for 2d things and don't get me wrong this is not something like I'm making a 3d game in hazel so I don't care about render a 2d yes you do because what about any kind of 2d graphics what about UI what about you know main menus what about you know anything really that is that has to be rendered as an actual 2d kind of projection you have so many things in a 3d game that are still rendered as tui so this still this is very important you'll definitely have this in your 3d game which is why it's important to create this because not only do I want hazel to be able to create 2d and 3d games but even if you're just doing 3d you still need this so then once we have our renderer 2d we can then begin a scene and this will probably take in like an author the camera and then you know maybe it'll take in a scene if we have like a scene 2d kind of object maybe that and there's Litton that might just contain data that is required by a 2d scene and then from there of course we'll you will do render a 2d drop pod and then that will actually create and draw a quad on the screen in a 2d context of course in regards to that camera or that scene or whatever it's being used now I don't want to I don't want to really confuse you guys too much so we'll still just pretend that we have a camera here well we won't worry about scene objects anytime soon see that's kind of what the API begins to look like now from here you might think about well what else you do what what else do you want to draw do you want to draw a circle what about if you want to you know draw a circle that's kind of not filled in well maybe draw a circle versus feel circle we might have something like a filled circle that will actually result in us in like a circle that's been filled with a particular color what about lines like drawing lines is kind of useful rectangles stuff like that as I mentioned earlier though for things like circles you know if you're making a game and you kind of have you kind of just have your let's just say you you know it's like a platformer game and you have this kind of terrain here you have like a bunch of like platforms around here and you have your character which we'll say is a circle as I mentioned you'll probably still draw that as an actual square as a rectangle as a quad and then this stuff will just be kind of transparent in your texture and you apply a texture to it which will contain like essentially a circle is just surrounded by pixels with absolutely no values right so for example a pixel with the Alpha set to zero which means that it's transparent and that's kind of how you'll draw your main character not to mention that you'll probably want to maybe have an actual character you know not just a circle but in this example if we just kind of deal with the game it's really simple and has no real graphics that is how we would probably achieve something like this so we end up with this API that really if we dumb this down all we kind of need is to have this kind of renderer 2d you know begin scene which is kind of our card for actually starting a scene with it kill a camera and then we can have our submission so for example render a 2d and then draw quad and then that is pretty much all we kind of need for the time being now this quad what kind of parameters do we give it well we need to give things like the position we need to give things like this size what about the color or maybe instead of the color it's got a texture stuff like that needs to actually go into draw quad and that's pretty much all that we need of course and this is kind of in the traditional sense thinking that like this is not like some kind of special effect we're drawing this is just you know something we are just drawing some kind of primitive on the screen which has like a texture applied to it or a color applied to it and that's kind of as simple as that really gets so in other words we'd be rendering with just our standard kind of 2d shader now we get to the problem here and the problem isn't really it's not really a problem it might not be a problem depending on what you are building exactly but basically what we might want to have is a lot of 2d images a lot of 2d quads on the screen at one time so how do we do that well we do that by a process called batching now I'm not talking about like you know a visual effects system or a particle system that has millions of particles and we have to like you know compute all that stuff on the GPU because that's the only way it's possible to remember that many actual primitives on the screen now talking about that I'm just talking about maybe you have like a maybe you're you're kind of making a role-playing game you know and you have like this huge kind of tile map and you want to zoom out all the way and you want to be able to see all these tiles at once maybe you see thousands upon thousands of tiles at once what if you have a game well that's made up of that many tiles well do you know how are you gonna render all of them at once well if we have 10,000 tiles that we want on the screen at one time because we really like zoomed out or just for whatever reason we have 10,000 2d quads that we want to draw at once if we try and do that using the method that we're doing right now which is kind of submitting it as like a draw call that's not gonna work like on a great computer that's not really it's gonna give you a terrible frame where it's gonna be very slow inefficient because what we actually want to do is kind of batch all of those together into one piece of geometry so what happens is when you submit a card when you submit it for when you've begun a scene you set a camera and you've started kind of being like to record record record you call render a 2d draw cord 10,000 times what actually needs to happen is those that kind of all of the all of the properties all the attributes that make that quad that quad so its position in size its texture its color all of that stuff that basically all that data goes in as vertex data into a big vertex buffer a dynamic vertex buffer that you're updating every frame so every time this happens not every time you draw a quad but every time you beat every frame you're updating that vertex buffer with the information that it that it needs and that way you know instead of you know ten thousand quads being ten thousand rock walls ten thousand quads are going to be one girl called potential it could be it depends how you kind of change it and in fact that video that I mentioned that kind of hazel to the development log there the first one that actually goes into more detail about this stuff I will probably make a complete tutorial about how to just a batch render in OpenGL I was like a standalone OpenGL video I think not in hazel just for those of you who are interested in it in like kind of a more generic context but basically that's the idea so to batch together those things we need to basically create a batch renderer which is what we will do for this kind of renderer to me that's what it will be it will just be about renderer so our goal is going to be to kind of handle this render batching I'll call this like I'll just say batch renderer and what will list will kind of start listing all of our kind of features I guess that would that we want in our kind of 2d system and what this kind of 2d project and hazel will actually begin to involve so it is that renderer let's set some goals here so I want to draw maybe let's just say 100,000 sprites so I said 10,000 before that's not that impressive I think a hundred thousand for a stress test should be able to happen like 60fps and I want this with textures now not really sure what that's gonna look like if you guys saw that hazel 2d dev vlog that I put up you would you would say that I was actually able to render like half a million I think at that framerate but I think that this this would this is certainly going to be a bit a little bit of a difficult goal especially on hardware that isn't particularly powerful but on my computer in my office which is quite powerful I definitely want to be able to do a hundred K with textures I think that that should not be a problem now when you start involving textures into a bat renderer you quickly discover that if you have something like a role-playing game let's just say with the entire it's a 2d kind of top-down role-playing game and you have this incredibly large world that's a tile map right you start to think about all the different textures that are involved here you know you could have certain areas that are basically like water tiles and then you might have like grass you might have dirt you might have these houses in place you might have a whole bunch of stuff in your 2d world here that basically is gonna be a whole bunch of textures now it's probably rare to have more than like I don't know you know we have a hundred thousand sprites and we might have ten thousand textures like that's that's a little bit ridiculous don't think that will actually happen what will actually happen is you might have my denial let's just say like a hundred to two hundred textures that you want to render out once anything beyond that would be a little bit crazy now that's not too bad because if we look at like a modern GPU with let's just say thirty-two each texture slots let's take away like eight for other uses and we'll say that we have 24 texture slots now eight is being very like generous to take away eight like that's you probably will have the full 32 to use I couldn't like that maybe you'll have 30 like eight is a lot even with that if you have 100 of these that means that you have to flush a render of five times right which means that if you are rendering a hundred thousand sprites with you know a hundred different textures that still only will require five drop so in other words you'll probably be fine however you know if you factor in other things that we might have to do like you know text rendering which we'll talk about in a minute it's basically safe to say that once we start introducing textures to a batch renderer we probably want to have some kind of sprite sheet or a texture Atlas system so what a texture atlas is is basically kind of like how we bash together geometry into one vertex buffer this is basically us patching together textures into one texture so a whole bunch of textures you know we can put into like a single texture basically and that will be a lot more efficient because then we can just read part of that texture when we need to render a particular piece of geometry or when we're sampling it for it like for a pixel in on our screen we can just sample from a sub region of that texture to get the texture that we actually want now obviously if your textures a huge like 4k textures you're probably not gonna get away with having a texture atlas but if you're making like a a low resolution retro style game you could you know and your sprites are like you know let's just say 32 by 32 pixels which is actually quite large you could definitely get away with just simply having all of your sprites probably in a single kind of section Atlas that's not too difficult to pull off so because of that you could still render a hundred or 200 textures or whatever with just a single draw I don't actually know how much will fit in like you know if you have if each texture is 32 by 32 you know you probably will be able to easily fit a lot of textures into about 32 by 32 sorry into the you know if you have like a 4k let's just say you have a 4k um sprite sheet you know a lot of 32 by 32 textures are gonna fit into this area so you will be able to just store everything in there so we all need like a texture other system that's something else that this renderer will have to support so bat renderer lots of sprites with vertex colors and textures texture Atlas support let's see what else do we have once we talk about texture atlases and in general 2d rendering we probably want and so basically what this means is that I want to have animated sprites I want my character to actually move his legs when he moves I want water to actually move right we need some kind of animation how do we pull that off well the simplest way is probably just to harvest another spreadsheet that you take in and this spreadsheet is going to basically be divided let's just say we're going with 32 by 32 every frame is going to be a separate texture in that sprite sheet and all we do is when it's time to render we just have that texture ready to go that's like our player kind of sheet now play a sprite sheet up play a texture Atlas we have that ready to go we upload that should we just bind that texture on our GPU and then we can basically select which frame it's time to render and that's it but all the frames are in one texture easily done now what if you have you know we're assuming this is a low res but why 2d rendering doesn't have to be low resolution what if that player is quite big what if our player textures are 2k or 1000 pixels by a thousand pixels if it's 1024 how are we going to do that well you know you can't really have all of that in a sprite sheet so instead what we'll probably need is some kind of custom format that basically encodes frames together kind of like what like a video codec would do where you kind of have your key frame and then the next frame is basically a bunch of deltas so all the pixels that have changed that's what you record and then when it's time to actually decide what frame number one looks like so this is frame 0 what frame number 1 looks like you basically have to go to your nearest key frame that it's back in time so frame 0 will say and then apply this Delta through that frame and that's how you figure out what this actual what this actual frame will look like so this requires quite a lot of work and you might want to compress that data and do all of that with it very similar to a video codec I actually wrote a system like this for EA a few years ago something like that would probably be required right and you can of course an applied that to 32 by 32 pixels sprites so in that sense instead of ending up with one texture with one sprite sheet you basically just when it's time to render you look up what frame you're - you decode those pixels and then you update that texture that is your player texture with that actual frame data so that is also that might be required that's another thing that you have to consider for a 2d renderer I'm running out of space here let's move over here so next step we've got animation we can render stuff it's looking pretty good but what about UI I mentioned that UI is really really important is a really important component of 2d rendering right and in fact that's even that's probably where you'll see 2d rendering in 3d games the most so what about UI well for that we basically need a layout system now a layout system has to be quiet is actually quite complex because if you look at a screen you might have all these different UI elements on the screen like for example we might have like player's high score up here we might have like you know invent the inventory that the player is actually carrying over here let's just say you know we might have different inventory screens to pop up we might have like a little pause menu that pops up this pause menu has to be centered vertically and horizontally what about this what happens when we resize the window if we make it smaller or larger this has to be kind of I guess anchored to the top and the right edges of our actual screen but then I also want to maintain a certain padding distance you know what if we want to render text but we want it to be right aligned or we want it to be Center aligned how do we do all of these things well we need a good layout system what if I gave is not resizable but we want it we want to support a variety of different resolutions you know what if someone's rendering 4k does 16:9 is like a 4:3 monitor for example what if this is what if this has my boss support and we're on a phone we're you know our resolution might be something like 9 18 it might be in portrait mode you know we might have 9 to 19 you know the whole bunch of different phones out there right now and we might have to support all of this stuff for different kind of layouts for this stuff another great example is an ultra-wide monitor you know we might be like twenty one to nine we need to still be able the game at that resolution and we want to have our high score anchored to the right and our menu appear in the center and all of that stuff speaking of which you know what about text rendering how do we render the word pause on the screen well we need to somehow load a font using probably something like freetype we need to be able to put all the characters that get used as they get used dynamically into a spreadsheet so that we can kind of figure out what the best way to actually pack those rectangles is as well because different letters of course take different shapes and we want to basically instead of just packing them kind of one by one we want to optimally kind of try and save on space save on texture space because there might be potentially a lot of stuff that we render so we need some kind of rectangle packing algorithm as well end up with a lot of stuff here and in fact this stuff having worked on a mobile engine for ei before this is probably the the largest system besides like the actual like 3d renderer to be honest this is huge not to mention having dedicated tools dedicated tools for the artist to actually be able to create these layouts basically having something like After Effects that we actually made so that you can you know animate things using keyframes and have all of these layouts and main menus you know all of that stuff so that artists can actually create what they need to create this is a huge system and it's definitely necessary to have at least two to a certain extent in the hizzle 2d renderer okay what's next we've got a pretty good-looking scene but we can probably do better what about post effects now post effects and all that kind of stuff you might think is more of like a 3d thing and I mean it is to an extent but like there's no reason to not have that stuff in 2d especially we're going for good-looking 2d graphics right so let's just say we have an explosion there's no reason for that explosion to not be so bright that it actually creates balloon and in fact speaking of explosions we probably also want to have some kind of particle system and again this doesn't necessarily have to exist for 3d what about fatuity what if we were to have a 2d explosion you know we could encode it as a video I guess but it'd be cool to have it kind of dynamic and randomized at actual runtime so that requires some kind of visual or like a particle system to have that bloom we also need to think about HDR so that we have a proper HDR pipeline and then we can add bloom using post effects other post effects you know what if we have our pause menu being brought up like this or an inventory screen wouldn't it be nice to just kind of blur the background maybe that would look beautiful right having the rest of our game world just kind of be blurred and out of focus so that people can actually focus on the pause menu or stuff that we want to bring to their attention that also requires post effects what about color grading we could of course just kind of have some kind of color standard that we apply to all of our textures because this is 2d rendering we don't need to worry about like dynamic lighting or things like that speaking of which there might be another thing but let's people enough now so we could enforce that upon actual texture creation but wouldn't it be nice to just kind of do that stuff actually in the engine so in other words you could have like color correction curves you know to add contrast or you know look-up tables to a certain looks and change the way the colors work if you want to have like a blue kind of Tim to everything maybe because it's kind of like a cold environment versus something warm that might be indoors then so much stuff color grading is definitely a must you know you might say blue maybe not blurring maybe not but like color correction and color grading that kind of stuff is super important I think to have if you're going for anything that you think is gonna look good now this kind of stuff that's that this is just the renderer you know what about what we need to make an actual 2-d game well the first thing I think of when I think of like an actual game is of course I think of the interaction for a game so when we think of interaction what do we think of now I I personally and it's probably isn't like the first thing that comes to everyone's heads but I immediately start thinking of scripting because scripting is a way now we don't need scripting because you could just use C++ did all this you know something like like an entity component system and like you know components and stuff is probably the first thing that a lot of people think about when they think of interaction actually how to make a game and what you need in a game engine for that but I kind of think of scripting you know whether that be kind of like a scripting language you know having something like Aloha what about visual scripting something like blueprints in unreal or in frostbite is called schematics how do we have something like that because that is that is kind of the biggest component to how people will actually make games with hazeled they'll write scripts that do certain things what about an entity component system you know or something basically called CGR which is composable game objects basically game objects that are composable so they're composable of components they could they're composed from components rather than just being composed by inheritance for example that kind of stuff you know so that we can have like our player entity essentially and then the player entity will have certain components like a transform component so they exist somewhere in the world maybe like a 2d renderer kind of component so that we can actually render it somewhere what about script attached to it for things like interaction and so that we're gonna hook in things like input you know we need all of this stuff to actually make this happen and you can see that this becomes quite a lot of work so I don't really want to overwhelm you guys and you can see how dark is actually gotten outside this is this is how much stuff there is to do for 2d rendering so this is gonna be something that is really gonna take a while and I'm actually quite happy that we've decided to go with 2d rendering I ran a poll for those of you who don't know and 51% butter for 2d rendering over three rendering for us to kind of do first in the hazel engine I'm really happy we're doing this and the reason is that this is a lot of work if we kind of were to go with Freddy unfortunately what would have happened is three is even more work 3d is something that would really just continue on pretty much forever and the sad thing is that unless we decided to that's it I'm taking a break from 3d this stuff would never get done ever but even though this might look daunting and even though at the end of this I want to basically be able to make games and hazel Tetris you know space invaders asteroids you know all those classic arcade games as well as like a role-playing game or something a little bit new like platformers with really nice graphics and like post-processing effects looks really nice I want to have that stuff done by the end of this and that's really cool because this is actually achievable it might take like a year I don't know I haven't split this up into episodes yet it's gonna be a long journey but it's gonna be really cool and it's gonna teach you guys a lot and sort of that's the reason why it's great that we're doing this stuff now because I feel like if we didn't do this stuff now we would never get around to it with our complex 3d years and how long that would take now I know that this stuff is not going to be interesting for everyone um and it kind of sucks but that's kind of the nature of this series this is the game engine series we're building a game engine yes it's going to be a 3d game engine but it's also going to support 2d rendering of course and because of that it really is hard to tailor my content to everyone but there is still hope for no matter what you're interested in because we have this kind of game engine series that's what's gonna happen with all this stuff that's going to be 2d rendering right now in hazel and this is where we're actually going to be breaking the stuff down I'm gonna be teaching it not just writing the code and this is kind of I guess the learning process but also just like that vlog I made I will still continue to make hazel 2d logs right so like development vlogs essentially and these as a huge circle and those are going to be kind of more of like an overview of as I add all these things because I'm gonna do this stuff personally in my own private code first so that I know of course what to write in the game engine series and what stuff to actually teach so that's gonna be visible to you guys in the form of hopefully nice entertaining vlogs and I'll cover I'll just show off cool stuff basically it'll be like a showcase so for those of you who are interested in this stuff but you don't want to wait like you know week to week like a whole year for all of this stuff to actually be taught and implemented you can get the kind of overview and see where this is going in these kind of things and that will kind of be primarily 2d but then I'll also have all of the hazel 3d kind of vlogs and I did one of them a while ago basically we had I was like fixing animation or something and I'll link that video in the top right corner as well for those of you interested who hasn't seen it but this is gonna be us developing 3d stuff I'm really passionate about 3d all right I'm not gonna if you think that I'm gonna give this up and I'm just for the next year or whatever I'm just gonna focus on to to eat my personal life that's not happening because I literally got into programming the reason I started learning code is because I wanted to render 3d stuff myself I was always kind of an artist I love creating things but instead of kind of using you know programs like 3d max Maya blender that kind of stuff I wanted to render stuff by myself that's why I got into programming in the first place I really want to build a beautiful 3d scene I'm gonna do that I'm gonna write I'm gonna make hazel 3d look absolutely amazing I mean it's already a pretty functional pretty renderer but I'm gonna just add so much more to that probably expand the api's that is the thoughts to support like Vulcan directx12 stuff like that specifically because I want to do ray tracing not because you know real-time right ray tracing using like you know direct X ray tracing and that kind of stuff because just because I want to push that graphic fidelity if it wasn't for that I probably would have sticked opengl because you can still kind of do it or pretty much everything you need to do in OpenGL it may be a little bit slower but anyway the point is I want to push that I'm gonna make a whole 3d scene and I'm gonna still kind of show you guys that stuff in the form of these kind of dev logs of hazel 3d this content is gonna be available for everyone so no matter no matter what you're kind of interested in they'll be stuff for you and in fact I really want to bring back that OpenGL series as well and actually start showing you guys how to implement like you know how to open 3d models for example and render 3d models on the screen in OpenGL in basically one video from start to finish maybe starting with like a based library but essentially stuff like that so there will be 3d actual education content on this channel as well not to mention the hazel 3d stuff and all that source code is always gonna be available for patrons at any time so it will be available to you guys don't worry even though we're picking 2d here and we're going to focus on the hardcore like in depth 2d education as far as like the education side of this goes and teaching you how to do everything and why I'm doing it this way and why it works and how works all that stuff is going to be focused on tui they're still gonna be plenty of content for both 2d and 3d in the form of like a different format essentially on this channel so anyway that's the plan that's where we're heading hope you guys enjoyed this video if you did please hit that like button please help support me and everything I'm doing by going a patron of home for Saturday sure no huge thank you everyone who makes this stuff possible I'm really excited for the future I'm really excited for what we're gonna make here yeah I'll see you guys in the next video goodbye [Music]
Info
Channel: The Cherno
Views: 53,609
Rating: undefined out of 5
Keywords: thecherno, thechernoproject, cherno, c++, programming, gamedev, game development, learn c++, c++ tutorial, game engine, how to make a game engine, game engine series, 2d renderer, how to build a 2d renderer
Id: ULO8JhM9FsQ
Channel Id: undefined
Length: 39min 30sec (2370 seconds)
Published: Sun Sep 15 2019
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.