In this video, we are trying to optimize an Unreal Engine landscape to run on a budget Android device. Get OpenLand: bit.ly/2Yu8Omy Join our Discord: / discord
Really great that was really helpful , hope u can do similar experiment with - post-process volume on mobile - level streaming for open world game ( they split the world into small chunks to decrease memory usage but idk how they do it ) - one one how to use occlusion culling for mobile ( i added the occlusion volume but didn't see any difference in performance)
Thanks for the ideas. occlusion volume only has effect for static meshes in your app, not for the landscape I guess. Level streaming is something I am looking at it. I am trying to use static meshes instead of landscapes to see whether they can give us some better results. Will update as I go.
@@GDi4K Yeah thank you , i used occlusion volume on a city like environment to hide static buildings meshes but i didn't notice any difference in performance so i think there is something om the settings i didn't activate for it to work ( other than the enable mobile occlusion tick box )
@@mohamedmustafa9743 Then that's fine. Maybe that affects when you are looking at the distance. Also, check the using precomputed visibility volume on the game play area. That might help. Guide: docs.unrealengine.com/en-US/RenderingAndGraphics/VisibilityCulling/PrecomputedVisibilityVolume/index.html
Wait, so your optimization includes removing the texture and adding no texture at all. I guess based on that we can remove any textures from our game and that will speed it up. Also add no sound or Ai as that will keep it running smoothly at ... 30fps
With 2000 triangles it’s get 15 fps That’s mean open world game it’s not gonna work for that device, I am wondering how many triangles can the most phones devices these days can handle and what is the most important factor to get good performance for the open landscape on the phones?
Hello, I have found very interesting information about mobile landscape. Can you provide more information about this topic, for example, the fps friendly, mobile layering landscape material (how implement the best), removing tiling effect, how to make hole in mobile landscape, level streaming in mobile, mobile shaders, effects and many other things relative to mobile game development on UE4
I am working on something on that, here it is: github.com/GameDev4K/unreal-open-land For now, level streaming is not part of the goal. This is about the mobile FPS improvements: th-cam.com/video/vxKr9ztfh8U/w-d-xo.html
Try exporting your terrain at 505 and scaling by a factor of 4 to reach 2x2klm at quarter density... Custom UV's are a must... Will require a new material as this can't be switched on instance... There are atlas texture creators... 2 texture per layer (fake spec/rough, pack height... derive Z from normal etc)
I tried the scaling down approach. But it doesn't help much. Because, with LOD distribution, I can get the same effect (basically reducing the tris count) Also, played with different component sizes and changes are not much. I just released the material improvements. Yes, I am using custom UVs. Since we only have 3 of those in ES3.1, I'm only using that for the ground layer & it does improve a lot. I'll have a look at atlas texture creators for sure. Thanks.
to try: near Landscape parts where player doesn't need detail (e.g. flat desert) force higher LOD in component setting (select comps in tool). Even better is WorldComposition and convert the far streaming LODs to meshes you can literally reduce poly by 95% depending on what you get away with visually. Here is the process th-cam.com/video/YbnGVrpIGEo/w-d-xo.html it should reduce draw calls as well i guess since sections are not rendered but just 1 mesh for each level, unless you make very small levels =). As such its even useful for small/medium worlds if desired to optimize. This is the only tutorial i ever seen how exactly to do this so maybe you could make one as well =). Plus you can create multiple mesh LODs to smooth transitions
also keep in mind that LODs are per component so in a smaller world with sections 2x2 being aggressive on LODs can look worse. 1x1 drawcalls should be not much different, rather slightly less due to occlusion, and if that is a bad idea due to the mystery "CPU cost per component" that increase 4x i would really love to see an actual profiling on that... i suspect its much more material driven but idk gonna test it one day..
@@realmodel1132 yeah! I played with resampling with different components sizes. It gets worst when we have more components for sure. In my case we have 81 components, but I tried to reduce it a bit & increase it a bit. Then it changed draw calls & tris count as expected. But there is no final FPS perf. change.
@@GDi4K per docs drawcalls are based on sections, not components, so the number is equal for any same overall landscape size at a given scale (,ignoring occlusion which is per component and thus should reduce a couple of calls). I did test this. But sadly i didn't have the granular profiling yet to see if the comp amount had any actual impact and the docs just say high numbers of components should be avoided without giving any particular reason. So its on the to do list =) In any case, this should really not matter because at a large landscape world comp is a no brainer even on high end pc if there is any need for optimization
There's an issue. On the mobile preview (Es 3.1 and IOS) only the auto material renders on the landscape. Even if we try to paint, it shows it normally in the windows mode but once we switch to the android/mobile view, it hides all the painted layers and just shows the auto material. Can you please tell if there's something we can paint layers for mobile?
Unreal Engine does not support layer painting on mobile. ES3.1 mode. I talk more about it here: th-cam.com/video/FNxE7uGNDk4/w-d-xo.html I haven't tried, but we could try to use Landmass brushes to get around with that.
@@GDi4K Okay, thank you very much. I am using the github version for the project. I'll buy it from the marketplace once it solves this issue - I open the default map for mobile, and the grass/foliage doesn't shows up. It says - Building Grass maps but it shows nothing. Even if I use the auto material on other landscapes. Still nothing. Any reasons?
Thank you so much. That worked! I've been doing gameplay programming for last few months, just hopped onto the environment/material aspect and that's why felt a little newbie. Is it possible to contact you somewhere directly? Regarding some business/paid work?
so much optimizations in the project settings I've found this week, haven't even been able to do anything because of all the shaders that need compiling as we play with project settings lol
Only thing that Unity does better.. Its mobile and 2D. Ive been using Unity for ages, but I really consider moving to Unreal. With nanite and lumen. Unity is light years behind now
Great tutorial, this really bridged a lot of knowledge gaps I had on tweaking the landscape LODs. Can't wait to try this in the morning!
thanx alot bro that was really helpful kep going👍👍
Thanks.
so glad to come across this video. really good info
How I change textures of mobile landscape material?
You're a life saver!
Thank You!
Really HelpFul
Really great that was really helpful , hope u can do similar experiment with
- post-process volume on mobile
- level streaming for open world game ( they split the world into small chunks to decrease memory usage but idk how they do it )
- one one how to use occlusion culling for mobile ( i added the occlusion volume but didn't see any difference in performance)
Thanks for the ideas.
occlusion volume only has effect for static meshes in your app, not for the landscape I guess.
Level streaming is something I am looking at it. I am trying to use static meshes instead of landscapes to see whether they can give us some better results.
Will update as I go.
@@GDi4K Yeah thank you , i used occlusion volume on a city like environment to hide static buildings meshes but i didn't notice any difference in performance so i think there is something om the settings i didn't activate for it to work ( other than the enable mobile occlusion tick box )
@@mohamedmustafa9743 Then that's fine. Maybe that affects when you are looking at the distance. Also, check the using precomputed visibility volume on the game play area. That might help.
Guide: docs.unrealengine.com/en-US/RenderingAndGraphics/VisibilityCulling/PrecomputedVisibilityVolume/index.html
@@GDi4K thank you , waiting for ur next video
Wait, so your optimization includes removing the texture and adding no texture at all. I guess based on that we can remove any textures from our game and that will speed it up. Also add no sound or Ai as that will keep it running smoothly at ... 30fps
With 2000 triangles it’s get 15 fps That’s mean open world game it’s not gonna work for that device, I am wondering how many triangles can the most phones devices these days can handle and what is the most important factor to get good performance for the open landscape on the phones?
Hello, I launch 2,5 million triangles on Samsung S23 and get 120 fps
bro try mobile fsr plugin
Hello, I have found very interesting information about mobile landscape. Can you provide more information about this topic, for example, the fps friendly, mobile layering landscape material (how implement the best), removing tiling effect, how to make hole in mobile landscape, level streaming in mobile, mobile shaders, effects and many other things relative to mobile game development on UE4
I am working on something on that, here it is: github.com/GameDev4K/unreal-open-land
For now, level streaming is not part of the goal.
This is about the mobile FPS improvements: th-cam.com/video/vxKr9ztfh8U/w-d-xo.html
If we adjust Every martails it's gonna take take. How we can save our time ?
shuru se hi textures aur baaki material low res mei lekar chal na toh dikkat nhi hogi
Try exporting your terrain at 505 and scaling by a factor of 4 to reach 2x2klm at quarter density... Custom UV's are a must... Will require a new material as this can't be switched on instance...
There are atlas texture creators... 2 texture per layer (fake spec/rough, pack height... derive Z from normal etc)
Fully rough, unlit shader
What is normal is your landscape using to auto blend? strictly from vertices or pixel normals as well?
I tried the scaling down approach. But it doesn't help much. Because, with LOD distribution, I can get the same effect (basically reducing the tris count)
Also, played with different component sizes and changes are not much.
I just released the material improvements. Yes, I am using custom UVs. Since we only have 3 of those in ES3.1, I'm only using that for the ground layer & it does improve a lot.
I'll have a look at atlas texture creators for sure. Thanks.
@@ethanwasme4307 tried the unlit shader but it had an effect on baked shadows. But I will give it a try again.
@@ethanwasme4307 It's normal-based. (via world aligned)
Also, directly use VertexNormalsVS for smart masks.
to try: near Landscape parts where player doesn't need detail (e.g. flat desert) force higher LOD in component setting (select comps in tool). Even better is WorldComposition and convert the far streaming LODs to meshes you can literally reduce poly by 95% depending on what you get away with visually. Here is the process th-cam.com/video/YbnGVrpIGEo/w-d-xo.html it should reduce draw calls as well i guess since sections are not rendered but just 1 mesh for each level, unless you make very small levels =). As such its even useful for small/medium worlds if desired to optimize. This is the only tutorial i ever seen how exactly to do this so maybe you could make one as well =). Plus you can create multiple mesh LODs to smooth transitions
Thanks for the idea & the link.
I will try that for sure.
also keep in mind that LODs are per component so in a smaller world with sections 2x2 being aggressive on LODs can look worse. 1x1 drawcalls should be not much different, rather slightly less due to occlusion, and if that is a bad idea due to the mystery "CPU cost per component" that increase 4x i would really love to see an actual profiling on that... i suspect its much more material driven but idk gonna test it one day..
@@realmodel1132 yeah! I played with resampling with different components sizes. It gets worst when we have more components for sure.
In my case we have 81 components, but I tried to reduce it a bit & increase it a bit.
Then it changed draw calls & tris count as expected.
But there is no final FPS perf. change.
@@GDi4K per docs drawcalls are based on sections, not components, so the number is equal for any same overall landscape size at a given scale (,ignoring occlusion which is per component and thus should reduce a couple of calls). I did test this. But sadly i didn't have the granular profiling yet to see if the comp amount had any actual impact and the docs just say high numbers of components should be avoided without giving any particular reason. So its on the to do list =) In any case, this should really not matter because at a large landscape world comp is a no brainer even on high end pc if there is any need for optimization
@@realmodel1132 got it. Keep us posted :)
Thanks for great 👌 tutorials 🔥❣️
Bro plz tell me how to setup my android device to check my game via unreal . I'm a beginner
This is all you need: docs.unrealengine.com/en-US/SharingAndReleasing/Mobile/Android/GettingStarted/index.html
@@GDi4K thanks!
can u pls tell me how to show draws and prims under the fps i cant find it
Run `stat unit` command.
There's an issue. On the mobile preview (Es 3.1 and IOS) only the auto material renders on the landscape. Even if we try to paint, it shows it normally in the windows mode but once we switch to the android/mobile view, it hides all the painted layers and just shows the auto material. Can you please tell if there's something we can paint layers for mobile?
Unreal Engine does not support layer painting on mobile. ES3.1 mode.
I talk more about it here: th-cam.com/video/FNxE7uGNDk4/w-d-xo.html
I haven't tried, but we could try to use Landmass brushes to get around with that.
@@GDi4K Okay, thank you very much. I am using the github version for the project. I'll buy it from the marketplace once it solves this issue - I open the default map for mobile, and the grass/foliage doesn't shows up. It says - Building Grass maps but it shows nothing. Even if I use the auto material on other landscapes. Still nothing. Any reasons?
@@well.8395 did you check the related grass type file & modify that accordingly.
th-cam.com/video/oSA6H4vvhDc/w-d-xo.html
Thank you so much. That worked!
I've been doing gameplay programming for last few months, just hopped onto the environment/material aspect and that's why felt a little newbie.
Is it possible to contact you somewhere directly? Regarding some business/paid work?
@@well.8395 Ha ha. No worries. Everyone is a newbie at many things :D
To contact me, drop me an email on arunoda@hey.com
dude have you try using world composition in mobile,,,,,does it work,,,
Nope. I haven't try that.
best tutorial on youtube
*(?)Clear Scene Hardware Clear
*(?)Apply Pre-exposure before writing to scene color False
*(?)Forward Shading True
*(?)Vertex Fogging for Opaque False
*(?)Disable vertex fogging in mobile shaders True
*(?)Mobile HDR True(?)
*(?)Custom Depth-Stencil Pass Disabled
*(?)Custom Depth with TemporalAA Jitter Disabled
*(?)Support Vulkan True
*(?)Support armv7 False
*(?)Support arm64 True
*(?)Enable Particle Cutouts by default True
*(?)Use GPU for computing morph targets False
*(?)Support Software Occlusion Culling True
*(?)Forward Shading True
*(?)Support reversed index buffers False
*Detect Vulkan Device Support True
*Mobile MSAA no MSAA, 2x or 4x MSAA
*Anti-Aliasing Method none, MSAA
*Reflection Capture Resolution 32, 64 or 128
*Max Movable Point Lights 3
*Maximum number of CSM cascades to render 2
*Cook only maps True
*Exclude editor content when cooking True
*Exclude movie files when staging True
*Blueprint Nativization Method Inclusive
*Scalable 3D or 2D
*Game Discards Unused Material Quality Levels True
*Render Unbuilt Preview Shadows in game False
*Max Movable Spotlights / Point Lights 2
*Package game data inside apk? True
*Remove Oculus Signature Files from Distribution APK True
*PVRTC Compression Quality 1
*ASTC Compression Quality vs Speed 1
*ASTC Compression Quality vs Size1 1
*Mobile Ambient Occlusion True
*Planar Reflection Mode MobilePPR
*Mobile Reflection Capture Compression True
*Reflection Capture Resolution 32
*Auto Exposure Auto Exposure Basic
*Warn about no precomputed visibility
[Disabling Pre-Z Pass]
*Occlusion Culling False
*DBuffer Decals False
*Early Z-pass None
so much optimizations in the project settings I've found this week, haven't even been able to do anything because of all the shaders that need compiling as we play with project settings lol
Vulkan and/or forward renderer
Tha this an empty game, imagine for a detailed game!
Only thing that Unity does better.. Its mobile and 2D. Ive been using Unity for ages, but I really consider moving to Unreal. With nanite and lumen. Unity is light years behind now
Nanite and lumen don't support mobile