{"id":1317,"date":"2021-05-29T16:44:52","date_gmt":"2021-05-29T20:44:52","guid":{"rendered":"https:\/\/www.blog.dwgames.net\/?p=1317"},"modified":"2021-05-29T19:26:26","modified_gmt":"2021-05-29T23:26:26","slug":"programmer-ramblings-initial-thoughts-on-ue5","status":"publish","type":"post","link":"https:\/\/www.blog.dwgames.net\/?p=1317","title":{"rendered":"Programmer Ramblings &#8211; Initial Thoughts on UE5"},"content":{"rendered":"\n<p>This one&#8217;s going to be kind of all over the place, and it&#8217;s mostly going to be based on the things that I&#8217;ve been seeing doing an initial pass at experimenting in UE5.  It&#8217;s out an available to start messing around with, whether precompiled on the EGS launcher or <a href=\"https:\/\/github.com\/EpicGames\/UnrealEngine\">through Github<\/a> source.  I went with the latter.<\/p>\n\n\n\n<p>An Unreal Engine major upgrade is always a big deal for me.  I&#8217;ve been working in Unreal for a long time, so making that step forward is always a mix of familiarity with the old style and figuring out what&#8217;s new.  My timeline with Unreal looks like this:<\/p>\n\n\n\n<p><strong>Unreal Engine 2.x<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Unreal Demolition<\/strong> &#8211; 2004-2006, UT2004 mod in Unreal Engine 2.5<\/li><\/ul>\n\n\n\n<p><strong>Unreal Engine 3<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Unreal Demolition<\/strong> &#8211; 2007-2010, UT3 mod<\/li><li><strong>ARC Squadron \/ ARC Squadrox: Redux<\/strong> &#8211; 2011-2013 UE3 game on iOS, Android, Fire OS<\/li><li><strong>Rocket League<\/strong> &#8211; 2013 &#8211; Initial work getting the game ported to non-Windows platforms<\/li><li><strong>Cancelled mobile project<\/strong> &#8211; 2013-2014, engine and tool improvements to modernize UE3 on mobile for cancelled internal project<\/li><li><strong>Smite<\/strong> &#8211; 2014-2016 &#8211; Gameplay engineer manager and generalist for console ports<\/li><li><strong>Killing Floor 2<\/strong> &#8211; 2017 &#8211; Gameplay engineer<\/li><\/ul>\n\n\n\n<p><strong>Unreal Engine 4<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Hand of the Gods<\/strong> &#8211; 2016-2017 &#8211; Protoyped in UE3, ported to UE4 for public release<\/li><li><strong>Studio R&amp;D <\/strong>&#8211; 2017-2018 &#8211; Worked on internal prototypes and R&amp;D for UE4 between KF2 and Maneater projects<\/li><li><strong>Maneater<\/strong> &#8211; 2018-2019 &#8211; Gameplay lead for multiplatform project<\/li><li><strong>Squanch projects<\/strong> &#8211; 2019 &#8211; present.  Studio has continued using UE4 for internal projects since I arrived.  Beyond its use in <em>Trover Saves the Universe<\/em>, the development team in general has a lot of previous history with Unreal.<\/li><\/ul>\n\n\n\n<p>Because Unreal has been so key to my career, I jumped in to UE5 the second I had a chance and have been messing around since.  This ramblings is basically the things that have stood out to me so far in my digging around for the past few days.<\/p>\n\n\n\n<!--nextpage-->\n\n\n\n<h2 class=\"wp-block-heading\">It feels the same&#8230;<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"946\" height=\"438\" src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image.png\" alt=\"\" class=\"wp-image-1318\" srcset=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image.png 946w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image-300x139.png 300w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image-768x356.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>And I don&#8217;t say that as a bad thing necessarily, although it&#8217;s admittedly a bit of a mixed bag.  UE5 is very obviously a major revision of UE4, and not a new engine.  The code base is largely the same.  The class structure is largely the same.  The C++ macro hell is largely the same.  When they say that your UE4 projects can move forward into UE5, this is why.  What you&#8217;re gaining is replacements to core systems that your game isn&#8217;t directly interfacing with, so you drop your existing code in and it more or less just works.<\/p>\n\n\n\n<p>Because of that, the ability for developers to jump from UE4 to UE5 is going to be a much lower barrier than UE3 to UE4 was.  They&#8217;ll be spending more time learning what&#8217;s purely <em>new <\/em>instead of what&#8217;s changed.  They won&#8217;t be figuring out what the appropriate level of BP vs. native is because that knowledge is already built-in to their studio workflow.  They&#8217;ll just drop in and go.<\/p>\n\n\n\n<p>However, in its current state that also means that there&#8217;s a lot of fluff that feels like it could have been cut.  <em>Chaos Physics<\/em> is allegedly going to be the first-class citizen here, but it&#8217;s still marked as beta and the <em>PhysX<\/em> source is still there.  The Paper2D plugin is still there and enabled, despite the fact that it never really reached a level that made it attractive relative to<em> Unity<\/em> for sprite-based projects.  This feels like a point where they can cut things they haven&#8217;t been supporting, even if that breaks some of that transition plan, OR pick this as the point where they can really invest in bringing up some of those less supported features into first-class support territory.<\/p>\n\n\n\n<p>This also means that I&#8217;m inherently suspicious of them pushing things like audio into Blueprint.  One of the biggest single performance issues in the last 5 years that I&#8217;ve continued to work around is Blueprint.  Yes, it&#8217;s extremely useful as a tool set, and yes it allows designers to prototype things in a good fashion, but every UE4 project has at some time hit a reckoning point where development has to stop to hand nativize Blueprints to get performance back and generalize functionality.  The tendency over time has been that the teams I&#8217;ve worked on have used BP less because people end up spending more time working on debugging and rewriting BP than they would have spent if programmers had just written the stuff in native in the first place.  The tools in place like the automated BP nativizer just haven&#8217;t worked consistently enough for me to feel confident in their sustained use.  Without an army of people to then be available to convert prototypes to native as they come online, it&#8217;s typically just been safer for the teams I&#8217;ve been on to limit its use from the start.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"418\" src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image-1-1024x418.png\" alt=\"\" class=\"wp-image-1319\" srcset=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image-1-1024x418.png 1024w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image-1-300x122.png 300w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image-1-768x313.png 768w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image-1-1536x627.png 1536w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/image-1-2048x836.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption>Audio graph used for the ancient valley demo&#8217;s golem laser.<\/figcaption><\/figure>\n\n\n\n<p>Moving other systems into BP is one of those things where I immediately become suspicious.  Admittedly, part of this is a built-in suspicion of Unreal sound in general.  Most projects I&#8217;ve worked on since Rocket League have at some point moved their audio solution off to Wwise instead of using Unreal&#8217;s base solution.  However, I&#8217;m curious about what the performance cost on the CPU will be to be doing large audio graphs in BP, or a BP-type asset.  Taking a peak around, they&#8217;ve got some dynamic elements to modify the sounds at runtime, but in a repeatable fashion.  If it&#8217;s got a high CPU overhead just to process what should be going on, I&#8217;m not sure that I can make a good case for not collapsing this down to a single wave file once the audio folks are happy with the result they&#8217;ve gotten.  In cases where things are truly dynamic, this could give some interesting potential, but given the past history I&#8217;ve had dealing with BP-related performance problems I&#8217;m expecting to have to limit its use to high-value experiences.<\/p>\n\n\n\n<!--nextpage-->\n\n\n\n<h2 class=\"wp-block-heading\">The new stuff&#8230;<\/h2>\n\n\n\n<p>In terms of new stuff, <em>Nanite<\/em> &#8211; the polygon crunching star of the past couple videos &#8211; and <em>Lumen<\/em> &#8211; their updates to dynamic lighting in the engine &#8211; are the obvious stars.  Together they provide a significantly more dynamic visual presence but at a significantly high performance cost.  I&#8217;ve been testing on my work PC which, while not particularly high end is still much higher than your average Steam PC, and has some distinct advantages over the new generation of consoles.  For the purposes of testing performance, I made a cooked Test configuration cooked build (basically most CPU optimizations on, but with some debug \/ stat functionality preserved) for the Valley of the Ancients demo.  My core specs as far as testing the demo are:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>CPU: AMD 3950x (16 core, 32 thread &#8211; 3.5ghz)<\/li><li>GPU: Nvidia GTX 1080<\/li><li>RAM: 64 gigs<\/li><li>Storage: Samsung 970 EVO<\/li><li>Resolution for testing &#8211; 3440&#215;1440 (more details on this later)<\/li><\/ul>\n\n\n\n<p>Compared to something like a PS5 or Series X, I have a far stronger CPU, a slightly weaker GPU than PS5 and far weaker than Series X, significantly more RAM, and marginally slower storage.  I&#8217;m including some screenshots below taken at screen percentages of 50 and 100 with <code>stat unit<\/code> running to show the frame times.  For reference, this can be changed in the in-game console with the command <code>r.screenpercentage x<\/code>.  Under these resolutions, the effective render size is 3440&#215;1440 or 1720&#215;720.  I recommend full screening the captures to see them in detail compared to each other.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_50.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_50-1024x429.png\" alt=\"\" data-id=\"1320\" data-full-url=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_50.png\" data-link=\"https:\/\/www.blog.dwgames.net\/?attachment_id=1320\" class=\"wp-image-1320\" srcset=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_50-1024x429.png 1024w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_50-300x126.png 300w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_50-768x321.png 768w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_50-1536x643.png 1536w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_50-2048x857.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_100.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_100-1024x429.png\" alt=\"\" data-id=\"1321\" data-full-url=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_100.png\" data-link=\"https:\/\/www.blog.dwgames.net\/?attachment_id=1321\" class=\"wp-image-1321\" srcset=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_100-1024x429.png 1024w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_100-300x126.png 300w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_100-768x321.png 768w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_100-1536x643.png 1536w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Campfire_100-2048x857.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>In this first shot of the opening campfire, we hit a bit above 30 fps at  50%, but end up a bit under 20 fps for 100%.  This is going to generally be a pattern that we see for various view.  In this case, the resolution difference is pretty obvious because a lot of the scene is up close.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_50.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_50-1024x429.png\" alt=\"\" data-id=\"1323\" data-full-url=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_50.png\" data-link=\"https:\/\/www.blog.dwgames.net\/?attachment_id=1323\" class=\"wp-image-1323\" srcset=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_50-1024x429.png 1024w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_50-300x126.png 300w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_50-768x321.png 768w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_50-1536x643.png 1536w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_50-2048x857.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_100.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_100-1024x429.png\" alt=\"\" data-id=\"1324\" data-full-url=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_100.png\" data-link=\"https:\/\/www.blog.dwgames.net\/?attachment_id=1324\" class=\"wp-image-1324\" srcset=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_100-1024x429.png 1024w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_100-300x126.png 300w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_100-768x321.png 768w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_100-1536x643.png 1536w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Canyon_100-2048x857.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>For this canyon shot, we see slightly better performance, but a similar ratio.  50% is closer to 50 fps while 100% is a bit above 20fps.  In this shot, the resolution change is less apparent thanks to the temporal anti-aliasing, and at least on 2000+ series Nvidia GPUs we&#8217;d see a similar, if not slightly better situation through the use of DLSS.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"720\" style=\"aspect-ratio: 1280 \/ 720;\" width=\"1280\" controls src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/2021-05-29-16-02-41.mp4\"><\/video><\/figure>\n\n\n\n<p>What I will note here is that there&#8217;s some really bad artifacting around the player character when she turns.  This is exacerbated by the low framerate, which leads me to guess it&#8217;s the temporal anti-aliasing itself, or some other post process dependent on temporal data.  In any case, it doesn&#8217;t look good and really stood out to me in playback.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_50.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_50-1024x429.png\" alt=\"\" data-id=\"1327\" data-full-url=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_50.png\" data-link=\"https:\/\/www.blog.dwgames.net\/?attachment_id=1327\" class=\"wp-image-1327\" srcset=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_50-1024x429.png 1024w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_50-300x126.png 300w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_50-768x321.png 768w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_50-1536x643.png 1536w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_50-2048x857.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_100.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_100-1024x429.png\" alt=\"\" data-id=\"1328\" data-full-url=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_100.png\" data-link=\"https:\/\/www.blog.dwgames.net\/?attachment_id=1328\" class=\"wp-image-1328\" srcset=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_100-1024x429.png 1024w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_100-300x126.png 300w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_100-768x321.png 768w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_100-1536x643.png 1536w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem_100-2048x857.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>The final comparison shots are from the end by the golem.  In this case you&#8217;re talking about 30 fps at 50% and around 15 fps at 100% resolution.  In this case the resolution change again not that apparent because the scene tends to be a bit longer in terms of sight lines.<\/p>\n\n\n\n<p>Given my initial pass, I&#8217;m considering the following four things as a set of visual bars to push for:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Use of Nanite<\/li><li>Use of Lumen<\/li><li>Native 4k, or at least dynamic resolution attempting to hit 4k<\/li><li>60 fps+<\/li><\/ul>\n\n\n\n<p>If I&#8217;m looking at that list, I&#8217;m kind of expecting that the new generation of consoles only gets to pick two of those.  If I were to guess what the current demo was running at on PS5\/Series X given how it&#8217;s playing on my PC, I&#8217;d guess it was dynamic resolution ranging from 1080p to maybe 1440p upscaled at a 30 FPS target.  On a series S I&#8217;m guessing they go even further, with a lower bound maybe at 720 or 900p.  Given this is a tech demo, it&#8217;s pushing more than a typical game would so you can expect some better performance in a general case, but I&#8217;m hesitant to say that it gets you reliably three or four from my list up there.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Nanite_Closeup.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"507\" src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Nanite_Closeup-1024x507.png\" alt=\"\" class=\"wp-image-1329\" srcset=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Nanite_Closeup-1024x507.png 1024w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Nanite_Closeup-300x148.png 300w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Nanite_Closeup-768x380.png 768w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Nanite_Closeup-1536x760.png 1536w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Nanite_Closeup-2048x1013.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure>\n\n\n\n<p>Also, to be frank, I&#8217;m not sure how much of a benefit Nanite is for <em>most<\/em> assets.  Zooming up close to some of the Nanite-focused assets, they often feel artifically lumpy to me.  In cases like that, I&#8217;m not entirely convinced that the old style of a low poly mesh with a baked normal map isn&#8217;t still a better idea.  Where I do think it will be useful is in allowing LDs to go heavy on things like small rocks and other similar detail work, allowing for high density detail work that can be automatically LOD&#8217;d away, but mixed in with more traditional assets to cover the bulk of the screen space.  If you&#8217;re launching on the previous generation of consoles or Switch, you need that anyway since Nanite isn&#8217;t supported there.  Looking at the state of the Steam hardware survey, you&#8217;re going to want the Nanite off fallback anyway for a lot of users.<\/p>\n\n\n\n<p>File size is also somewhat of a concern here.  Even cooked, the Valley of the Ancients demo is 26 gigs, with 11 gigs of that being megascans data.  That&#8217;s a LOT of data for something that is a couple of minutes long.  Stuff like that is going to be a case of picking and choosing the bang for your buck, and not just blanketing your entire game in it, because at the end of the day most teams are going to have to make something that is functionally capable of fitting on a Bluray disc.<\/p>\n\n\n\n<p>On the other hand, Lumen looks wonderful, and I think going with a baked lighting setup is probably not going to be worth the visual downgrade.  Dynamic lighting in UE4 has gotten much better over the engine&#8217;s lifespan, and Lumen seems like the natural continued iteration of that.  The tools in place are far better than they have been for UE4, so I&#8217;m excited to see this continued evolution.<\/p>\n\n\n\n<!--nextpage-->\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping up&#8230;.<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" src=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem-1024x429.png\" alt=\"\" class=\"wp-image-1330\" srcset=\"https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem-1024x429.png 1024w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem-300x126.png 300w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem-768x321.png 768w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem-1536x643.png 1536w, https:\/\/www.blog.dwgames.net\/wp-content\/uploads\/2021\/05\/UE5_Golem-2048x857.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>I&#8217;ve been convinced the entire time that the new generation of consoles would ultimately not be ready for 4k\/60fps once engines caught up to the new tech, and I think this is the first example of that starting to pan out.  Once cross-generation ports stop being a thing, I think we&#8217;re back to 1080p as the goal.  If we&#8217;re looking at a tech demo that is already not at 4k, and already not at 60 FPS, I think the expectation is going to be that you either pick the visual features or you pick the performance.  Giving users options to turn some of the big bullet point features off via performance vs visual quality options has been popular of late on consoles, and I think that&#8217;s going to be something we continue to see a lot.<\/p>\n\n\n\n<p>As far as the engine goes, it&#8217;s more of Unreal.  If you&#8217;re comfortable in UE4, then you&#8217;re going to be comfortable in UE5.  If you&#8217;ve wanted UE4 to be more like Unity, you&#8217;re still going to be unhappy.  The big new features in place allow for better visual fidelity, but aren&#8217;t fundamentally changing how the engine works, especially on the programmer side of things, and honestly that feels like a good thing.  UE3 to UE4 was a transition that needed to happen.  UE3 was reaching a point where the core tech had been dragged along from UE1 to the point where the engine needed to fundamentally change.  However, the iterative patching cycle of UE4 has allowed the engine to grow more organically, with it better able to partition off systems to building block style pieces that can be swapped out easily, and UE5 feels like an example of that.  UE5 is less of a new engine, and more of just another patch version &#8211; albeit with some major systems upgrades &#8211; and developers are going to be able to jump in running, leading to a much smoother transition this go around.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This one&#8217;s going to be kind of all over the place, and it&#8217;s mostly going to be based on the things that I&#8217;ve been seeing doing an initial pass at experimenting in UE5. It&#8217;s out an available to start messing around with, whether precompiled on the EGS launcher or through Github source. I went with &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.blog.dwgames.net\/?p=1317\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Programmer Ramblings &#8211; Initial Thoughts on UE5&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[207],"tags":[],"class_list":["post-1317","post","type-post","status-publish","format-standard","hentry","category-programming"],"_links":{"self":[{"href":"https:\/\/www.blog.dwgames.net\/index.php?rest_route=\/wp\/v2\/posts\/1317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blog.dwgames.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blog.dwgames.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blog.dwgames.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blog.dwgames.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1317"}],"version-history":[{"count":5,"href":"https:\/\/www.blog.dwgames.net\/index.php?rest_route=\/wp\/v2\/posts\/1317\/revisions"}],"predecessor-version":[{"id":1333,"href":"https:\/\/www.blog.dwgames.net\/index.php?rest_route=\/wp\/v2\/posts\/1317\/revisions\/1333"}],"wp:attachment":[{"href":"https:\/\/www.blog.dwgames.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blog.dwgames.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blog.dwgames.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}