I'm excited to hear from each of you - how many GPU milliseconds does this technique save in your scene? Also, since I made this video, I found a technique I can use in my materials that makes the results much sharper and higher-resolution. I'll be sharing that next week.
If you have a black RVT after the setup (noobie me crashing into every problem haha) make sure you press Set Bounds in your Runtime Virtual Texture Volume > Transform from Bounds after selecting your Bounds Align Actor as your landscape, if you are in 5.3. Thanks again Ben!
Its insane how calm, precise and understandable you describe what you are doing, its really something special that not a lot of Tutors have, looking forward to your channel!
Thanks for making all these shader tuts, Ben. Not many people around to teach these things with such depth and expertise. You should consider making a post over on places like r/gamedev and r/unrealengine etc., now and again to draw more attention to such great tutorials.
when i modify the coordinates of one material in its blueprint it modifies the coordinates of every material in my map, for example if i modify the coordinates of the material of my terrain, it also modify the coordinates of the tiles texture on my walls, why is that? ps im new to ue
Love it! Especially how you went through the detective work to find the problem instead of just giving the problem and solution. Also, I've seen a technique where people use a runtime virtual texture (I think) that has color data in it and then they use that color data to alter the look of all the textures in that area. This technique was used in a game called The Witness really well for colored trees, rocks, and all else. I've always wanted to know how to do it since it can really help get the Quixel megascans assets to blend well together. Thanks again for all you do. :)
Yea this, so many teachers just tell you, ok do this and this and that but never tell you why you do it or how you reached that conclusion and it's so hard to follow like a robot without knowing what you're doing.
Thank you very much for such concise tutorial! Once I understood that RVT basically is about baking shaders, it all clicked for me. Unreal docs on the topic were a little bit confusing.
I've been watching a bunch of tutorials on UE4 purely out of interest (haven't even tried it myself) and I gotta say the structure, pacing, and depth of your videos are perfect, well done man
This is great, exterior scene with landscape always takes a lot of time to render each frame, this helps optimizing scenes for a huge amount! Thanks man.
Great tutorial as always! One note for those who want to do this on world composition - sadly it won't work. Runtime virtual textures have a hard limit of 7, but even if you never stream more than 7 tiles at once, as soon as you move beyond first seven tiles your landscape will stop rendering.
There are a lot of things that don't work as they're supposed to with RVT. They have the beginning of adaptive virtual textures implemented which allows for much larger higher resolution vt's but unfortunately I haven't got it working.
One thing to watch out for is the projection of the RVT on slopes. It causes some real bad stretching. Supposedly you can just use RVT for flatter areas and then use traditional methods for cliffs and hills, but I havent tried that yet to see if its performance viable. Also (you might have mentioned in one of your previous videos but just in case) the shader complexity visualization only accounts for the number of instructions for the shader, not the cost of each instruction on your hardware. So things can have low performance but still be labeled as green on the visualization and vice versa, at the end of the day your ms is what matters.
rvt is top down projection. I had performance issues with two landscapes side by side when using rvt in 4.25++. Hopefully performance has changed for the better.
You'd imagine you'd be able to set the landscape to Static or Stationary and then the engine would do all of the RVT automatically. It's weird this is something you have to implement manually. Fantastic video though!
I had so high hopes with RVT but when i saw the resolution on the textures + the lack of AO and Displacement... this is to be used on phones or something as it offers 2010 quality.
After the last video, I have to say ... I'm having more fun than I probably should have using landscape splines to create roads and paths. Just have to modify my material so I can erase grass.
your streaming pool is going to take a pretty massive hit if you do this. I went from 1800 to 2350, and I'm trying to stay under 2000 budget. Granted my world is 128 sq Kilometers. For those using large worlds, definitely keep it in mind.
Great video! :D Do you happen to know if RVT resolution can be tiled or optimized for very large landscapes somehow? I was watching Epic's deep-dive video on RVT for landscapes and it seems to me that the largest RVT size you can make is too small for large, open-world landscapes...they acknowledged this as a problem in the video and mentioned expanding it in the future, but it seems to be mostly unchanged since then in newer UE versions. I might be misunderstanding the process, though, but it seems like this could kill your landscape texture resolution if your level is too big (and cause some major TD problems). Seems like potentially a big issue for UE5 since I think RVT is REQUIRED for Virtual Heightfield Meshes, which are the only current alternative for landscape displacement since tessellation was removed.
Besides using more ram there is a bigger problem with rvt, that is if you have a fast moving object in your scene if it is interacting with landscape, a car for example. I used a rvt spline tool to create a road for a racing game that I was working on some years ago. When the car moved it left an ugly trail behind it which forced me to abandon rvt altogether.
Hi Ben, thanks for the video. There’s a problem, I think? After 15:54 to 17:09 you can check the framerste and its still 45-46ish mark and the gpu stat still shows 21ms like before. When you went far back, it will obviously increase the fps as the grass won’t be rendered. Except the number of instruction reductions, there’s absolutely no change in the performance? Any thoughts? Thanks
Yep, you're right. I'll need to investigate this a bit and maybe get more scientific with my measurements. The second time I measured performance, it was from a slightly different camera angle, so that could be throwing things off. The other thing that will make performance worse for the non-RVT material is if I start painting layers. What we're looking at here is a version of the material that's only using the first material layer, but if I were to paint several of the other materials in this area, the complexity and cost for the non-RVT version would go up even more, so the RVT savings would be more obvious. What savings are you seeing when you implement it?
@@BenCloward Cool, that’s making a lot sense now. Multi layers make the shader complexity of those landscape components go really high. I’ll have to test it for my open world mobile game and let you know if theres some performance improvement. Thank you again, Ben. Keep them coming ❤️
Hey Ben, Hope you can answer my idea, Am I able to make blend between two setups for landscape, Im pointing at next video where you had to plug only near/Micro detailed version. So how about to make 2 rvt for Micro and 2nd for Macro detailed and later blend Material attributes via some distance mask and then plug it into main Material output to be rendered? Also I would use use 3rd low res rvt only for BC for my Stylized grass meshes. What do you think about it? I think it could possibly work 😅 BTW great videos, Im fan since 2019! Thanks for them ❤
Yes, I believe that could work and it's an interesting idea. The one thing I'd be concerned about is the amount of texture memory that it would require as RVTs tend to take up a lot of space. So you may want to try it and check to see how much GPU memory you're using before you start depending on it.
curious... in previous videos you set up materials to have a far version of textures and a near version... do RVTs utilize that? Because it seems like ud need multiple RVTs for that.
Hey Ben, it’s amazing you helped me a lot with optimizing the landscape, but the objects that has rvt samplers in my scene red how can I make them green? I have tried the same method with rvt sampler but it’s not working maybe I’m doing something wrong? What is the right setup for meshes that have rvt in it?
Thanks for these great tutorials, Ben! How is the transition between near and far textures working when you enable RVT? Given that the textures are rendered only once, is it possible to use this transition? Or are we always using the far textures? Thank you in advance!
when i modify the coordinates of one material in its blueprint it modifies the coordinates of every material in my map, for example if i modify the coordinates of the material of my terrain, it also modify the coordinates of the tiles texture on my walls, why is that? ps im new to ue
Didn't work. I altered the material but when I save to apply it crashes with this "......Assertion failed : .... Failed to acquire space for VT (32 x 32).........". I'm using UE5.0.3
hello,great idea ana tutorial! In my case the fog partickle uses alot of source. Do you think virtual texture work with that? or what i can do for optimisation of such these partickles
If you lose some resolution using this method, can’t you just increase the resolution of the original texture to offset that? Also could you use runtime virtual textures for other things like buildings, or other static objects? Or non-static objects/vehicles?
Once the original textures are rendered to the virtual texture, it's the resolution of the virtual texture that matters, not the resolution of the original. Making the original a lot higher resolution than the virtual texture won't improve the result.
Can you make a video on dynamic landscape material and how to turn it on and off at run time. . aka turn on when snow and rain and turn off when sunny day
@@mic007129 i did get it to work by going to each level giving each a RVT but had stretching of textures worked it out and created an instance material for each level now it works not exactly ideal though but if you just use world composition to set up and build the levels then seperate them after it doesn't seem to get the stretching as its not getting confused to who the texture belongs to... will it work if loading more than one level using one RVT not tried it yet ???
when i modify the coordinates of one material in its blueprint it modifies the coordinates of every material in my map, for example if i modify the coordinates of the material of my terrain, it also modify the coordinates of the tiles texture on my walls, why is that? ps im new to ue
I just followed this tutorial up to the 12:40 mark and once I saved the material my entire project crashed. Now I can't open my project without it immediately crashing. Do you have any idea why or what I can do to fix it?
How could you make this work with a distance blend? The RVT is essentially caching my landscape's far distance UV scaling so it doesn't shrink and become more detailed as you move closer, making it look terrible.
In the next episode - #23, WszelkieBro posted a comment explaining how this can be done. I haven't tried it yet myself, but give it a shot and let me know how it goes.
its working but gained no performance at all, dont know why.. before and after, my GPU still remains at 16ms. but the Shader complexity now show the landscape green everywhere, instead of multiple green tones as before.
@@allashama Very frequently, the performance characteristics of running the built version of the game are VERY different from what the editor is showing you, so when judging performance, it's always best to look at it outside of the editor.
Great Video this was super helpful. I have a strange bug though that's being caused by this technique. When launched in 'Standalone Game' mode, I get flickering at the tops of my mountains where the snow is. I didn't notice it until I did this so I tested it and I can confirm it stopped when I switched back to the old method. It seems to be going from solid snow to a combo of snow and stone. Update: So it has something to do with the size of my terrain vs the RVT resolution settings. Setting the Border Padding to 0 creates a white border at each tile but completely eliminates this effect I'm seeing
I figured it out....I turned down ''Size of each VT tile'' to see if it would fix it and it made it worse, so I turned it all the way up but then I was getting untiled tiles showing up randomly....Finally as a last resort I thought...let me try setting it to 0...and it fixed it. I ended up setting it to 1 and it still worked...So yeah I guess it just depends on the size of your terrain....
I don't know if it's correct but it hink the biggest problem trying to optimize this landscape is that it is HUUUUGE. I tried walking with the default third person mannequin from side to side and it took me 22 mins and 35 seconds. As reference, walking as much in skyrim (tried without sprinting, so with more or less the same speed) was enough to make the long side almost TWICE. I'm not sure if it is a correct way of mesuring, but if it is I think maybe there is a way for optimizing using more smaller landscape, culling the one out of sight?
Yes, making the landscape smaller will always make it go faster. But the real challenge is - how can you make a big landscape run fast? So if you don't need a big landscape, by all means, make a small one, and then you won't have to worry as much about making it fast. But if you need to create a big map for your project, you're going to need to find some other way of optimizing it, and RVT is one such solution. (I'm pretty impressed with your method for measuring size with walking speed, btw. That's cool!)
@@BenCloward Thank you very much for your answer :D I always appreciate your dedication to optimization, your video lessons are a treasure! I'll definitely try RVT, I think there is an enormous potential in those
Hi Ben! Quick suggestion for a future video - UE4 supports HLSL code in the custom node; is there any chance you could explain how that works a bit in a video? It seems to me like you might be the perfect person to explain/understand it. I've been able to do some very basic stuff with it, but I want to be able to make my own wireframe material (in order to make the wireframe thicker) and I can't figure out really where to start, because the custom node doesn't have much (any) documentation and it doesn't seem like you can just type any HLSL in there and it work. Thanks!
Thanks for the suggestion, Stephen. Are there some specific things you'd like to do with HLSL that you can't do with the regular node graph? The HLSL node is there for when you want to do something in the material that isn't possible to do with the available set of nodes. It would be easier for me to do a tutorial on HLSL if I had a specific thing I was trying to do with it.
@@BenCloward Thanks for the response Ben! The specific thing I was trying to do was to make my own wireframe material, so that I could control it's wire width. This way when I deploy the game to Quest, the wireframe hopefully would look less aliased. Currently in UE4 the only way to make a wireframe material I'm aware of is to use the wireframe check box, and it has no settings. So I searched for tutorials on how to make my own wireframe, and found a few small examples that I couldn't figure out how to translate into something I could use in UE4. For example: codea.io/talk/discussion/3170/render-a-mesh-as-wireframe
@@stephenmaloney424 Ok, I’ll see if I can find some time to play with this. It’s fairly off-topic for what my videos are focused on right now, it’s also interesting. I’ll see what I can do.
This is really great, but do You have any idea why the landscape textures are all blurred and it takes them a while to sharpen out? The same goes for Virtual Texturing for normal meshes... And my PC is an actual monster, so it cannot be the case. Cheers!
@@adriamedina2893 hi, unfortunately not. I had to give up RVT for good as no matter what I tried to use, I still had some blurriness from time to time which in my case is not acceptable :/ Even changing configs didn't help.
@@semirukiya5308 If you still want to use it, I opted for using the Brushify free landscape material with the textures I was using for my project in custom layers and seems to be working well
Curious if you have solved the issue with the RVT not being compatible with the camera node? I went through the rest of the playlist and don't see a fix for this
It's not solvable. There is no camera when the RVT is rendered - so if you use RVT, you have to create a shader that doesn't depend on a changing camera location. Mine does unfortunately, so we'll need to re-think the method we use for breaking the tiling.
this virtual texuring sounds a lot like the megatexture tech John Carmak made for idtech 5 and 6. How would this be different considering they ditched it for texture streaming in idtech 7.
It's very much like megatexture - yes. It's ideally suited for terrain/landscapes. idtech attempted to use it for everything - which was a challenge, especially considering the disk speeds at the time.
Hi Ben, have no idea what is wrong with my material. When I am using runtime virtualtexture sample instead, the base pass shader increase from 115 to 234? It is really weird. (I am using 4.26)
If you know of a way to make things render faster - I say go ahead and do it. There are a lot of people who say you should save the optimization until the end, but personally, I like to do it all along the way. If you have all of your grass, rocks, and trees placed when you apply the optimization, you'll get the most accurate measurement of how much of a difference the change makes - but if it's something you're going to do anyway, you might as well go ahead.
Have virtual textures changed since this tutorial was posted? (I'm using 4.26.1) I'm seeing different options in the RuntimeVirtualTextureVolume with a 'Virtual Texture Build' section and different 'Transform from Bounds' options.
I think I may have been using 4.25 for this tutorial. Under 4.26, you just need to select the landscape in the drop-down box called "Bounds Align Actor" and then hit the Set Bounds button.
@@BenCloward Thank you! That issue is now solved :) but still having trouble with my Virtual textures. I've disabled them like you for now and will look back at the tutorials another time
Hey ben, what does it mean to move code to the vertex shader? I am aware of custom UVs, but they only save me an instruction or two per unique UV also when people say that they are only rendering X or Y texture per pixel instead of ghfghfghfhth (Distance blening uses both textures when it could be X or Y for example), is there some custom code that achieves this?
If you have a bunch of math to do that doesn't involve sampling textures, and especially if it does involve UVs, vertex colors, or vertex normals, it's best to do that math in the vertex shader instead of the pixel shader. You can do that with a Vertex Interpolator node, where data going into the node on the left will be done in the vertex shader and data coming out on the right will be interpolated from vertices to pixels and ready for use with the rest of the material. I don't understand the second question.
I was thinking that if it is rendered only once, it means that I can use all those expensive nodes like noise, texture boming etc. Well... Not exactly. I noticed that I get huge performance issues related to VT when I was moving my camera. I think that the whole terrain is not rendered once, but rather the "chunks" of RVT are generated when they are needed. Am I correct?
Yes, that's correct. RVT updates tiles based on what's visible in view. So if your landscape materials is super duper expensive, you'll get hitching as you move around and tiles are updated. It is true that you can make your landscape material a bit more expensive with RVT, but that doesn't mean you can make it ridiculously more expensive.
Hi sir. Do i need to Enable virtual Texture streaming at texture import settings for every texture that will going to RVT output? If i dont, is it possible to use texture 2d array for virtual texture?
I don't believe turning on virtual texture streaming is required for every texture, no. For the other question about using an array, that may be possible but I haven't tried it. My main concern would be the method that you're using to select which array element to use. You want to make sure it's a method that is static (not animated over time) so that the virtual texture can only update itself periodically and get consistent results.
hey just retried this and mine is still very very red I think this only work on your landscape material not any from the asset store if you have a discord could sent you a photo of my material and let me know where I went wrong?
Hey! I was wondering if it's possible to use methods to break up tiling landscapes with RVT, I can't seem to fit the workflow after connecting the RVT sample to the output as it seems to overide anything relating to my tiling breakups in material functions that route through to the RVT output.
RVT doesn’t have a camera, so if you’re using tiling breakup techniques that depend on distance from camera, you’ll need to replace those with methods that don’t use the camera. There’s a pretty nice method used in one of the standard materials that ships with Unreal. I think it might be the gold material. It uses octaves of noise. Take a look and see if you can find it.
Hi. I was following all this superb playlist of tutorials on a Mac and got stuck in this one for lack of support for the platform. I bought a PC and restarted from here, with the Runtime Virtual Textures working like a charm, but a previous issue, that I thought was also related to the OS, popped up again. It seems that I exceeded the max amount of Texture Samplers with the material. To solve it on Mac I just disconnecet one of the detail levels at the Landscape MF, but I expected it to work on PC, which didn't happened: still exceeded the max (I have 12/16 with those nodes deactivated on the MF). Somebody have any idea on which step I'm doing wrong to having the excess on samplers? Thanks in advance. Best regards.
Select each of your texture sampler nodes and set the Sampler Source setting to Shared:Wrap. That will tell the engine to share/reuse texture samplers for all of the textures instead of using a unique one for each sample and will allow you to bypass the 16 sampler limit.
Hey Ben, you said the runtime texture updates only once in a while. Where can this setting be found? Can I tell the RVT to just render only once and never again?
There is not enough texture memory for the entire landscape to be rendered all at once. So the runtime texture only renders what is needed for the current view. When the view changes, it needs to re-render some of the tiles depending on how the view has changed. So the system manages the tile rendering based on what is needed for the view.
@@BenCloward , thank you for explaining this. Does it at least mean that, while we are concerned about memory, we can be less concerned about texture lookups in the material? I am asking because I am having an issue packing RG-normals for normal maps having negative Z (as deriving doesn’t get the sign accurately due to sqrt), so I need to have one more channel, which in case of 4+4 packing means that I am going to have another texture.
Followed the whole series and somehow ended up with my landscape material having 963 instructions whereas Ben's has 324, I wonder where I went wrong! XD
I think you may have your project set to use the forward renderer instead of the deferred renderer. When you first created your project, did you set it for Maximum Quality and Desktop/Console, or did you select Mobile / Tablet?
hey was trying this at 10:21 your show source actor mine show Bound align actor did that but there is no copy bound or copy rotation I have set bounds but its grayed out? then below that is snap to landscape?
hello Can you make a tutorial from start to finish how to make your landscape virtual textures I do not know how to connect further so that it works with disp
I chose not to use displacement since it was draining performance. You might be able to pass the height into the mask input of the RuntimeVirtualTexture Output node and then connect the Mask output of the Runtime Virtual Texture Sample node to the Height input of the MI_LandscapeDisplacement node. Then connect the displacement and tessellation outputs of that to the root. I just tried that and it worked. I also had to convert the the RuntimeVirtualTexture to YCoCg Base Color, Normal, Roughness, Specular, Mask - so that it would store the mask data. The results aren't that nice looking since the landscape resolution is only 1 vertex per meter. This means that the resulting tessellation isn't high enough to make the displacement look good. You can still do it of course, but I don't think the benefit is worth the extra cost.
I don't have any way of knowing that. I don't have any details about your setup. If the technique isn't working well for you in your situation, then don't use it.
That is my understanding, yes. I read somewhere that Epic wasn't planning to support world comp going forward because they're going to replace it with something else, so they're not spending time making other systems support it.
Hi Ben, Thanks again for the new video. I don't remember if you stated your system specs in other videos. I sent you an email with pictures of my material shader but cleaned up a lot in that shader I have way fewer base pass shader instructions and using only 1 texture sample the only thing I have done differently than you made functions for everything and place them into the master material my texture ps lookups are at 24 I am running a 1060 and getting around 100 fps without RTV Textures. If you could please check your email and look at those pictures maybe you can find something I did that made the master material lighter than yours (Functions is what I am thinking here) thanks again
It sounds like your landscape wasn’t that complex to begin with. If you don’t plan on making it any more complex than that, you’re probably better off not using RVT.
@@tylerevangelista8845 then your materials display of 221 is false... you need to set the preview weights in your layer blend node to see true instruction counts... for example, setting 4 layers to 1.0 preview will show the instructions as if 4 layers have been painted
how to work your setting in Brushify Material bcs i buy Brushify material in market i make your settings in my Brushify material not work for me my landscape its red and my sky and water red can you help me how to fix that or maybe give me your material files
I've never seen or used the Brushify materials, so I'm not going to be much help with that. Also, this is a tutorial about landscapes. I haven't done anything with water or sky yet. I'm not really sure what you did to make them turn red.
I'm excited to hear from each of you - how many GPU milliseconds does this technique save in your scene? Also, since I made this video, I found a technique I can use in my materials that makes the results much sharper and higher-resolution. I'll be sharing that next week.
I don't get what "much shader" means. Did you mean much shadier? I don't think you did but it sounds funny.
@@MR3DDev Thanks for pointing out my typo. I meant "sharper." It's fixed now.
My landscape went from 70 to 120 FPS
Thanks a lot
Also, while using that technique. One does not have to multiply specular and AO in a single channel as only Specular is used
That’s so awesome to hear! Thanks for sharing that!
If you have a black RVT after the setup (noobie me crashing into every problem haha) make sure you press Set Bounds in your Runtime Virtual Texture Volume > Transform from Bounds after selecting your Bounds Align Actor as your landscape, if you are in 5.3. Thanks again Ben!
Iv seen alot of VRT videos in my days, but this one is by far the clearest.
Its insane how calm, precise and understandable you describe what you are doing, its really something special that not a lot of Tutors have, looking forward to your channel!
Thanks for making all these shader tuts, Ben. Not many people around to teach these things with such depth and expertise. You should consider making a post over on places like r/gamedev and r/unrealengine etc., now and again to draw more attention to such great tutorials.
when i modify the coordinates of one material in its blueprint it modifies the coordinates of every material in my map, for example if i modify the coordinates of the material of my terrain, it also modify the coordinates of the tiles texture on my walls, why is that? ps im new to ue
only 7 minutes in ... now i finally understand what/why RVT. not actually explained anywhere else i've found.
It’s crazy. For the past couple weeks I’ll explore a technique on my own and then BAM 💥 Ben drops a sick video about it 🤣🤣 Nice!!
Love it! Especially how you went through the detective work to find the problem instead of just giving the problem and solution. Also, I've seen a technique where people use a runtime virtual texture (I think) that has color data in it and then they use that color data to alter the look of all the textures in that area. This technique was used in a game called The Witness really well for colored trees, rocks, and all else. I've always wanted to know how to do it since it can really help get the Quixel megascans assets to blend well together. Thanks again for all you do. :)
Yea this, so many teachers just tell you, ok do this and this and that but never tell you why you do it or how you reached that conclusion and it's so hard to follow like a robot without knowing what you're doing.
Great teachings here . Thank you very much for your time
Thank you very much for such concise tutorial!
Once I understood that RVT basically is about baking shaders, it all clicked for me. Unreal docs on the topic were a little bit confusing.
I've been watching a bunch of tutorials on UE4 purely out of interest (haven't even tried it myself) and I gotta say the structure, pacing, and depth of your videos are perfect, well done man
Thank you for the deep tech explanation. Learned a lot today !!
This is great, exterior scene with landscape always takes a lot of time to render each frame, this helps optimizing scenes for a huge amount! Thanks man.
Great tutorial as always!
One note for those who want to do this on world composition - sadly it won't work.
Runtime virtual textures have a hard limit of 7, but even if you never stream more than 7 tiles at once, as soon as you move beyond first seven tiles your landscape will stop rendering.
There are a lot of things that don't work as they're supposed to with RVT. They have the beginning of adaptive virtual textures implemented which allows for much larger higher resolution vt's but unfortunately I haven't got it working.
This is very good! It helped me a lot.
Amazing tutorial, thanks again
Actually, you could use the mip level node of RVT to replace the distance blend, which could fix that blur landscape.
That's a really interesting idea. I'll give it a try. Thank you very much!
One thing to watch out for is the projection of the RVT on slopes. It causes some real bad stretching. Supposedly you can just use RVT for flatter areas and then use traditional methods for cliffs and hills, but I havent tried that yet to see if its performance viable.
Also (you might have mentioned in one of your previous videos but just in case) the shader complexity visualization only accounts for the number of instructions for the shader, not the cost of each instruction on your hardware. So things can have low performance but still be labeled as green on the visualization and vice versa, at the end of the day your ms is what matters.
rvt is top down projection. I had performance issues with two landscapes side by side when using rvt in 4.25++. Hopefully performance has changed for the better.
@@weirdshit two landscapes in general should give you performance issues.
@@pizzaman11 that is with rvt as compared to normal landscape texturing.
You'd imagine you'd be able to set the landscape to Static or Stationary and then the engine would do all of the RVT automatically. It's weird this is something you have to implement manually. Fantastic video though!
Fantastic channel!
Thank you sensei!
Thanx Sir
Helped a lot
This is a great video, and I have one question. Do you have a video on RVT Cache?
Nice but the tradeoff is huge, low res, no displacement, no ambient occlusion. Also tried it in world comp and it doesnt work very well.
I had so high hopes with RVT but when i saw the resolution on the textures + the lack of AO and Displacement... this is to be used on phones or something as it offers 2010 quality.
After the last video, I have to say ... I'm having more fun than I probably should have using landscape splines to create roads and paths. Just have to modify my material so I can erase grass.
your streaming pool is going to take a pretty massive hit if you do this. I went from 1800 to 2350, and I'm trying to stay under 2000 budget. Granted my world is 128 sq Kilometers. For those using large worlds, definitely keep it in mind.
Great video! :D Do you happen to know if RVT resolution can be tiled or optimized for very large landscapes somehow? I was watching Epic's deep-dive video on RVT for landscapes and it seems to me that the largest RVT size you can make is too small for large, open-world landscapes...they acknowledged this as a problem in the video and mentioned expanding it in the future, but it seems to be mostly unchanged since then in newer UE versions. I might be misunderstanding the process, though, but it seems like this could kill your landscape texture resolution if your level is too big (and cause some major TD problems). Seems like potentially a big issue for UE5 since I think RVT is REQUIRED for Virtual Heightfield Meshes, which are the only current alternative for landscape displacement since tessellation was removed.
amazing
Besides using more ram there is a bigger problem with rvt, that is if you have a fast moving object in your scene if it is interacting with landscape, a car for example. I used a rvt spline tool to create a road for a racing game that I was working on some years ago. When the car moved it left an ugly trail behind it which forced me to abandon rvt altogether.
Hi Ben, thanks for the video. There’s a problem, I think? After 15:54 to 17:09 you can check the framerste and its still 45-46ish mark and the gpu stat still shows 21ms like before.
When you went far back, it will obviously increase the fps as the grass won’t be rendered.
Except the number of instruction reductions, there’s absolutely no change in the performance?
Any thoughts? Thanks
Yep, you're right. I'll need to investigate this a bit and maybe get more scientific with my measurements. The second time I measured performance, it was from a slightly different camera angle, so that could be throwing things off. The other thing that will make performance worse for the non-RVT material is if I start painting layers. What we're looking at here is a version of the material that's only using the first material layer, but if I were to paint several of the other materials in this area, the complexity and cost for the non-RVT version would go up even more, so the RVT savings would be more obvious. What savings are you seeing when you implement it?
@@BenCloward Cool, that’s making a lot sense now. Multi layers make the shader complexity of those landscape components go really high. I’ll have to test it for my open world mobile game and let you know if theres some performance improvement.
Thank you again, Ben. Keep them coming ❤️
Hey Ben, Hope you can answer my idea, Am I able to make blend between two setups for landscape, Im pointing at next video where you had to plug only near/Micro detailed version. So how about to make 2 rvt for Micro and 2nd for Macro detailed and later blend Material attributes via some distance mask and then plug it into main Material output to be rendered? Also I would use use 3rd low res rvt only for BC for my Stylized grass meshes. What do you think about it? I think it could possibly work 😅
BTW great videos, Im fan since 2019!
Thanks for them ❤
Yes, I believe that could work and it's an interesting idea. The one thing I'd be concerned about is the amount of texture memory that it would require as RVTs tend to take up a lot of space. So you may want to try it and check to see how much GPU memory you're using before you start depending on it.
curious... in previous videos you set up materials to have a far version of textures and a near version... do RVTs utilize that? Because it seems like ud need multiple RVTs for that.
No they don't. When rendering to an RVT, there's no camera, so it's not possible to know how far from the camera you are.
Hey Ben, it’s amazing you helped me a lot with optimizing the landscape, but the objects that has rvt samplers in my scene red how can I make them green? I have tried the same method with rvt sampler but it’s not working maybe I’m doing something wrong? What is the right setup for meshes that have rvt in it?
UE 5.2 doesn't even crash. It just freezes completely when trying to pick that virtual texture.
Thanks for these great tutorials, Ben!
How is the transition between near and far textures working when you enable RVT? Given that the textures are rendered only once, is it possible to use this transition? Or are we always using the far textures? Thank you in advance!
I'll be talking about this in next week's video.
@@BenCloward Ok! Thank you again :)
when i modify the coordinates of one material in its blueprint it modifies the coordinates of every material in my map, for example if i modify the coordinates of the material of my terrain, it also modify the coordinates of the tiles texture on my walls, why is that? ps im new to ue
Thanks, Ben!
You said we trade memory for performance, is it RAM or VRAM?
looking forward to the next video
It’s VRAM.
Didn't work. I altered the material but when I save to apply it crashes with this "......Assertion failed : .... Failed to acquire space for VT (32 x 32).........". I'm using UE5.0.3
its realy good video thank you and i got so problems my landscape is much bigger and when i put max VT textures anyway blur how i can fix it?
hello,great idea ana tutorial! In my case the fog partickle uses alot of source. Do you think virtual texture work with that? or what i can do for optimisation of such these partickles
If you lose some resolution using this method, can’t you just increase the resolution of the original texture to offset that? Also could you use runtime virtual textures for other things like buildings, or other static objects? Or non-static objects/vehicles?
Once the original textures are rendered to the virtual texture, it's the resolution of the virtual texture that matters, not the resolution of the original. Making the original a lot higher resolution than the virtual texture won't improve the result.
Can you make a video on dynamic landscape material and how to turn it on and off at run time. . aka turn on when snow and rain and turn off when sunny day
Hey Ben, quick question - do you know if RVT's work with level streaming?
what do I do about multiple landscapes using the same material? i.e world composition
I am wondering the same thing.
@@mic007129 i did get it to work by going to each level giving each a RVT but had stretching of textures worked it out and created an instance material for each level now it works not exactly ideal though but if you just use world composition to set up and build the levels then seperate them after it doesn't seem to get the stretching as its not getting confused to who the texture belongs to... will it work if loading more than one level using one RVT not tried it yet ???
@@Ugly_Baby_Gaming Thanks that is good to know, I need to learn a bit more about this but I will do some tests soon.
I try thats and got better green optimazion but not foun texture or I see grey color, dont know whats wrong?
when i modify the coordinates of one material in its blueprint it modifies the coordinates of every material in my map, for example if i modify the coordinates of the material of my terrain, it also modify the coordinates of the tiles texture on my walls, why is that? ps im new to ue
I just followed this tutorial up to the 12:40 mark and once I saved the material my entire project crashed. Now I can't open my project without it immediately crashing. Do you have any idea why or what I can do to fix it?
How could you make this work with a distance blend? The RVT is essentially caching my landscape's far distance UV scaling so it doesn't shrink and become more detailed as you move closer, making it look terrible.
In the next episode - #23, WszelkieBro posted a comment explaining how this can be done. I haven't tried it yet myself, but give it a shot and let me know how it goes.
Hi i use World Composition. Ue4 says its not supported for this kind of Maps?
its working but gained no performance at all, dont know why.. before and after, my GPU still remains at 16ms. but the Shader complexity now show the landscape green everywhere, instead of multiple green tones as before.
You may need to build and run the project outside of the editor to see a difference. Did you try that?
@@BenCloward no i didnt try it, i'll try it thanks :P
@@allashama Very frequently, the performance characteristics of running the built version of the game are VERY different from what the editor is showing you, so when judging performance, it's always best to look at it outside of the editor.
Great Video this was super helpful. I have a strange bug though that's being caused by this technique. When launched in 'Standalone Game' mode, I get flickering at the tops of my mountains where the snow is. I didn't notice it until I did this so I tested it and I can confirm it stopped when I switched back to the old method. It seems to be going from solid snow to a combo of snow and stone.
Update: So it has something to do with the size of my terrain vs the RVT resolution settings. Setting the Border Padding to 0 creates a white border at each tile but completely eliminates this effect I'm seeing
I figured it out....I turned down ''Size of each VT tile'' to see if it would fix it and it made it worse, so I turned it all the way up but then I was getting untiled tiles showing up randomly....Finally as a last resort I thought...let me try setting it to 0...and it fixed it. I ended up setting it to 1 and it still worked...So yeah I guess it just depends on the size of your terrain....
I don't know if it's correct but it hink the biggest problem trying to optimize this landscape is that it is HUUUUGE. I tried walking with the default third person mannequin from side to side and it took me 22 mins and 35 seconds. As reference, walking as much in skyrim (tried without sprinting, so with more or less the same speed) was enough to make the long side almost TWICE.
I'm not sure if it is a correct way of mesuring, but if it is I think maybe there is a way for optimizing using more smaller landscape, culling the one out of sight?
Yes, making the landscape smaller will always make it go faster. But the real challenge is - how can you make a big landscape run fast? So if you don't need a big landscape, by all means, make a small one, and then you won't have to worry as much about making it fast. But if you need to create a big map for your project, you're going to need to find some other way of optimizing it, and RVT is one such solution. (I'm pretty impressed with your method for measuring size with walking speed, btw. That's cool!)
@@BenCloward Thank you very much for your answer :D I always appreciate your dedication to optimization, your video lessons are a treasure! I'll definitely try RVT, I think there is an enormous potential in those
Hi Ben! Quick suggestion for a future video - UE4 supports HLSL code in the custom node; is there any chance you could explain how that works a bit in a video? It seems to me like you might be the perfect person to explain/understand it. I've been able to do some very basic stuff with it, but I want to be able to make my own wireframe material (in order to make the wireframe thicker) and I can't figure out really where to start, because the custom node doesn't have much (any) documentation and it doesn't seem like you can just type any HLSL in there and it work. Thanks!
Thanks for the suggestion, Stephen. Are there some specific things you'd like to do with HLSL that you can't do with the regular node graph? The HLSL node is there for when you want to do something in the material that isn't possible to do with the available set of nodes. It would be easier for me to do a tutorial on HLSL if I had a specific thing I was trying to do with it.
@@BenCloward Thanks for the response Ben! The specific thing I was trying to do was to make my own wireframe material, so that I could control it's wire width. This way when I deploy the game to Quest, the wireframe hopefully would look less aliased. Currently in UE4 the only way to make a wireframe material I'm aware of is to use the wireframe check box, and it has no settings. So I searched for tutorials on how to make my own wireframe, and found a few small examples that I couldn't figure out how to translate into something I could use in UE4. For example: codea.io/talk/discussion/3170/render-a-mesh-as-wireframe
@@stephenmaloney424 Ok, I’ll see if I can find some time to play with this. It’s fairly off-topic for what my videos are focused on right now, it’s also interesting. I’ll see what I can do.
This is really great, but do You have any idea why the landscape textures are all blurred and it takes them a while to sharpen out? The same goes for Virtual Texturing for normal meshes... And my PC is an actual monster, so it cannot be the case.
Cheers!
Did you manage to solve this issue? I'm having the same problem and can't seem to find a solution
@@adriamedina2893 hi, unfortunately not. I had to give up RVT for good as no matter what I tried to use, I still had some blurriness from time to time which in my case is not acceptable :/ Even changing configs didn't help.
@@semirukiya5308 If you still want to use it, I opted for using the Brushify free landscape material with the textures I was using for my project in custom layers and seems to be working well
hey great but my landscape did not change its now just a big blur and its a bright red trees are green
did this setup change in 4.26 ? all i get is black color but the texture is ok (content browser)
my fault, it wont work with tesellation
Curious if you have solved the issue with the RVT not being compatible with the camera node? I went through the rest of the playlist and don't see a fix for this
It's not solvable. There is no camera when the RVT is rendered - so if you use RVT, you have to create a shader that doesn't depend on a changing camera location. Mine does unfortunately, so we'll need to re-think the method we use for breaking the tiling.
so is this exclusive to terrain or it can be used on static meshes as well?
this virtual texuring sounds a lot like the megatexture tech John Carmak made for idtech 5 and 6. How would this be different considering they ditched it for texture streaming in idtech 7.
It's very much like megatexture - yes. It's ideally suited for terrain/landscapes. idtech attempted to use it for everything - which was a challenge, especially considering the disk speeds at the time.
@@BenCloward interesting. So I could use it for skeletal meshes too in theory? And what about static meshes in the environment?
Hi Ben, have no idea what is wrong with my material. When I am using runtime virtualtexture sample instead, the base pass shader increase from 115 to 234? It is really weird. (I am using 4.26)
Hope to hear from you soon should this be done after every thing is down like grass trees rocks etc
If you know of a way to make things render faster - I say go ahead and do it. There are a lot of people who say you should save the optimization until the end, but personally, I like to do it all along the way. If you have all of your grass, rocks, and trees placed when you apply the optimization, you'll get the most accurate measurement of how much of a difference the change makes - but if it's something you're going to do anyway, you might as well go ahead.
Wait...I think there's a bake material button that could save our ass. :D
Have virtual textures changed since this tutorial was posted? (I'm using 4.26.1) I'm seeing different options in the RuntimeVirtualTextureVolume with a 'Virtual Texture Build' section and different 'Transform from Bounds' options.
I think I may have been using 4.25 for this tutorial. Under 4.26, you just need to select the landscape in the drop-down box called "Bounds Align Actor" and then hit the Set Bounds button.
@@BenCloward Thank you! That issue is now solved :) but still having trouble with my Virtual textures. I've disabled them like you for now and will look back at the tutorials another time
Hey ben, what does it mean to move code to the vertex shader? I am aware of custom UVs, but they only save me an instruction or two per unique UV
also when people say that they are only rendering X or Y texture per pixel instead of ghfghfghfhth (Distance blening uses both textures when it could be X or Y for example), is there some custom code that achieves this?
If you have a bunch of math to do that doesn't involve sampling textures, and especially if it does involve UVs, vertex colors, or vertex normals, it's best to do that math in the vertex shader instead of the pixel shader. You can do that with a Vertex Interpolator node, where data going into the node on the left will be done in the vertex shader and data coming out on the right will be interpolated from vertices to pixels and ready for use with the rest of the material.
I don't understand the second question.
I was thinking that if it is rendered only once, it means that I can use all those expensive nodes like noise, texture boming etc. Well... Not exactly. I noticed that I get huge performance issues related to VT when I was moving my camera. I think that the whole terrain is not rendered once, but rather the "chunks" of RVT are generated when they are needed. Am I correct?
Yes, that's correct. RVT updates tiles based on what's visible in view. So if your landscape materials is super duper expensive, you'll get hitching as you move around and tiles are updated. It is true that you can make your landscape material a bit more expensive with RVT, but that doesn't mean you can make it ridiculously more expensive.
when i do this, it makes no difference to the landscape whatsoever
Hi sir. Do i need to Enable virtual Texture streaming at texture import settings for every texture that will going to RVT output? If i dont, is it possible to use texture 2d array for virtual texture?
I don't believe turning on virtual texture streaming is required for every texture, no. For the other question about using an array, that may be possible but I haven't tried it. My main concern would be the method that you're using to select which array element to use. You want to make sure it's a method that is static (not animated over time) so that the virtual texture can only update itself periodically and get consistent results.
Does Unreal 5 Suport Runtime Virtual Textures ?
I haven't tried it myself, but I believe it does.
hey just retried this and mine is still very very red I think this only work on your landscape material not any from the asset store if you have a discord could sent you a photo of my material and let me know where I went wrong?
Hey! I was wondering if it's possible to use methods to break up tiling landscapes with RVT, I can't seem to fit the workflow after connecting the RVT sample to the output as it seems to overide anything relating to my tiling breakups in material functions that route through to the RVT output.
RVT doesn’t have a camera, so if you’re using tiling breakup techniques that depend on distance from camera, you’ll need to replace those with methods that don’t use the camera. There’s a pretty nice method used in one of the standard materials that ships with Unreal. I think it might be the gold material. It uses octaves of noise. Take a look and see if you can find it.
@@BenCloward Got it thanks! Ah yes I remember you saying about RVT and Camera!
Hi. I was following all this superb playlist of tutorials on a Mac and got stuck in this one for lack of support for the platform. I bought a PC and restarted from here, with the Runtime Virtual Textures working like a charm, but a previous issue, that I thought was also related to the OS, popped up again.
It seems that I exceeded the max amount of Texture Samplers with the material. To solve it on Mac I just disconnecet one of the detail levels at the Landscape MF, but I expected it to work on PC, which didn't happened: still exceeded the max (I have 12/16 with those nodes deactivated on the MF).
Somebody have any idea on which step I'm doing wrong to having the excess on samplers?
Thanks in advance.
Best regards.
Select each of your texture sampler nodes and set the Sampler Source setting to Shared:Wrap. That will tell the engine to share/reuse texture samplers for all of the textures instead of using a unique one for each sample and will allow you to bypass the 16 sampler limit.
@@BenCloward Thanks! I'll try that.
Hey Ben, you said the runtime texture updates only once in a while. Where can this setting be found? Can I tell the RVT to just render only once and never again?
There is not enough texture memory for the entire landscape to be rendered all at once. So the runtime texture only renders what is needed for the current view. When the view changes, it needs to re-render some of the tiles depending on how the view has changed. So the system manages the tile rendering based on what is needed for the view.
@@BenCloward , thank you for explaining this. Does it at least mean that, while we are concerned about memory, we can be less concerned about texture lookups in the material? I am asking because I am having an issue packing RG-normals for normal maps having negative Z (as deriving doesn’t get the sign accurately due to sqrt), so I need to have one more channel, which in case of 4+4 packing means that I am going to have another texture.
Followed the whole series and somehow ended up with my landscape material having 963 instructions whereas Ben's has 324, I wonder where I went wrong! XD
I think you may have your project set to use the forward renderer instead of the deferred renderer. When you first created your project, did you set it for Maximum Quality and Desktop/Console, or did you select Mobile / Tablet?
@@BenCloward If I remember correctly I set it to Maximum quality and desktop/console
hey was trying this at 10:21 your show source actor mine show Bound align actor did that but there is no copy bound or copy rotation I have set bounds but its grayed out? then below that is snap to landscape?
Sounds like you're using a different version of Unreal.
@@BenCloward yes 4.26
hello Can you make a tutorial from start to finish how to make your landscape virtual textures I do not know how to connect further so that it works with disp
I chose not to use displacement since it was draining performance. You might be able to pass the height into the mask input of the RuntimeVirtualTexture Output node and then connect the Mask output of the Runtime Virtual Texture Sample node to the Height input of the MI_LandscapeDisplacement node. Then connect the displacement and tessellation outputs of that to the root. I just tried that and it worked. I also had to convert the the RuntimeVirtualTexture to YCoCg Base Color, Normal, Roughness, Specular, Mask - so that it would store the mask data. The results aren't that nice looking since the landscape resolution is only 1 vertex per meter. This means that the resulting tessellation isn't high enough to make the displacement look good. You can still do it of course, but I don't think the benefit is worth the extra cost.
@@BenCloward ok thanks but what do You recommend to use instead of virtual textures ?? make it all look better
Then why my fps drop when i use virtual texture?
I don't have any way of knowing that. I don't have any details about your setup. If the technique isn't working well for you in your situation, then don't use it.
@@BenCloward im using it on mobile and using ver 4.25 they made it better in 26, ill install it and check
Is it true that run time virtual texture will not work with large tiled landscape in world comp?
That is my understanding, yes. I read somewhere that Epic wasn't planning to support world comp going forward because they're going to replace it with something else, so they're not spending time making other systems support it.
@@BenCloward so its best to wait for my open world game until that time? still Great video learn a lot
I tried this on mine and getting all above 22 looks like my computer needs to be updated
I do have a fairly beefy machine. I'm running a Ryzen 3900X and a RTX 2070.
Hi Ben, Thanks again for the new video. I don't remember if you stated your system specs in other videos. I sent you an email with pictures of my material shader but cleaned up a lot in that shader I have way fewer base pass shader instructions and using only 1 texture sample the only thing I have done differently than you made functions for everything and place them into the master material my texture ps lookups are at 24 I am running a 1060 and getting around 100 fps without RTV Textures. If you could please check your email and look at those pictures maybe you can find something I did that made the master material lighter than yours (Functions is what I am thinking here) thanks again
my instructions went from 221 to 250 and my PS lookup went from 27 to 71 when implementing a RVT. Any idea what would cause this?
It sounds like your landscape wasn’t that complex to begin with. If you don’t plan on making it any more complex than that, you’re probably better off not using RVT.
@@BenCloward thanks for the quick response, shader complexity is showing as dark red so I had hoped to improve performance a bit in that area.
@@tylerevangelista8845 then your materials display of 221 is false... you need to set the preview weights in your layer blend node to see true instruction counts...
for example, setting 4 layers to 1.0 preview will show the instructions as if 4 layers have been painted
This technique is flawed when I use to blend with megascans, their shader complexity skyrockets
i keep getting D3D compile exception error every time i apply, any help? Im on 4.26
When did you start getting this error? Was it during this episode or before? I noticed you posted the same comment in episode 23.
can I use paralax onclussion in lanscape with virtual textures ?
No, parallax occlusion requires a camera vector, and there is no camera when the material is rendered into the RVT.
@@BenCloward meaby bumpoffset ?? also not ?
@@marcinesa1336 also not... displace the vertices or use (wait for) virtual heightfields
Who else found that intro clip so brainwashing?
😂🤣
how to work your setting in Brushify Material bcs i buy Brushify material in market i make your settings in my Brushify material not work for me my landscape its red and my sky and water red can you help me how to fix that or maybe give me your material files
and sorry for bad english
i fix my landscape now its green but my water and sky its red
I've never seen or used the Brushify materials, so I'm not going to be much help with that. Also, this is a tutorial about landscapes. I haven't done anything with water or sky yet. I'm not really sure what you did to make them turn red.
@@BenCloward I bought the sea and sky mutant from marketplace
RVTs in just 50 easy steps 😭