alright this took me about 3 hours to figure out, in 5.3 you have to select specifically your Landscape actor to include the virtual texture arrays, and you need to make sure that each individual landscape proxy has "draw in virtual textures" turned OFF otherwise your height and material data will just render black, hope this can save someone in the future, this was a true monster to solve, and I am mad that it was so simple.
Thanks for putting these videos out. Saved me from Madness many times. So many others keep grabbing the viewport and moving it around in circles every 2 seconds and moving around the editor far too quickly. Appreciate the time you take to help people like myself.
if you're having the issue where textures from the surfaces you download (from Quixel Bridge) aren't able to be assigned to the material, it's probably because they are virtual textures. You can tell this if it has a subtle 'VT' in the bottom right corner of the texture icon. To convert a Virtual Texture back into a normal texture (which will then work in this tutorial), right click on the texture and select 'Convert to Normal Texture'.
For those who got a problem with black virtual texture even tho you followed everything, and nothing happens about the texture on the boulder, instead of setting manually the "Runtime Virtual Texture Volume", just try to select "landscape" then set bounds. For the 2 of them. It fixed the problem for me it took me 2 hours to find a solution I hope it can help at least someone
Wow! Thanks! What caught my attention is your super wonderful and easy way to explain things and there is logic behind everything you do!! TBH I was playing around starting from the interactive world (for the interactive snow) so my landscape is a bit different than yours, and I am trying to apply what you do here in my landscape (uses MS_default_fuzz for meshes). I am still not getting the results, but I feel happy watching this video and looking at how you explain things!
I couldn't get this to work at first, but after looking through my Boulder Material Instance. I had to manual check the Global Texture Paramater to include the VTs. I also had to change the default DR to the item texture, which was original imported as "WhitePlaceHolder".
At minute 26:34, for those who had problems, I share what worked for me, disconnect the node from 1- to alpha, connect the saturate directly to the alpha and the function will work. After restarting the engine and reconnecting the 1-, I had to delete the asset directly to redo it hehe but maybe it's not necessary, good tutorial, greetings!
I finally understood material attributes, its one of those cases where "work with them to understand them" case. Perhaps I could say its just an organized representation of the texture channel values, packed and ready to be blended and manipulated with cause Brown Material Output is "endstop". But its definitely helpful, thanks!
Hello. Working in Unreal 5.3.2 and things are a bit different today with some updates from the time this video was posted. At 13:27 when he selects all landscapes and adds the two virtual texture array elements. This did not work for me. What I had to do instead was select the parent landscape and add the Draw in virtual Textures array elements there.
Not saying we won't do other stuff as complicated as this- we will- but this is close to the most complicated stuff we will need to make a game. And if there's a problem, we got the Discord.
The 1- (one minus) from a saturate which from listening to you is a clamp from zero to one. So a 1 minus a 0.5 for instance is 0.5. And a 1 minus a 0.9 is a 0.1, an inverted value. Also, you were multiplying from another saturate with the 1-, so you get another 0-1 value that you then plug into another 1-, and again get a 0-1 value.
Material Instances for quick adjustments in real time and PostProcessingVolume with lumen global illumination and reflections would make a big difference
23:50 - To better understand the math, let's briefly describe the output effect. As you note at ~24:15, in some parts (where the mesh is straight up-and-down), the stretching is gone, in others, the stretching is reduced, but not gone. We can look at the math to better understand why that happens: * Starting at VertexNormalWS, this reads the World-Space vector representing the direction the mesh is facing at that pixel (the meaning of "world space" vs "local space" is outside the scope of this discussion, suffice it to say, by convention in unreal engine, the X/R-component points forward, Y/G-component points to the right, and Z/B-component points up, for XYZ or RGB vectors). * You then mask to only the Z (/blue) value, which is effectively how "upward" facing that pixel is. If the vector is normalized, then that Z-value is guaranteed to be in the range [-1, 1]. * You multiply by a vertical contrast value * You saturate the result. As others have said (and from the documentation for the saturate node), saturate clamps the value to the range [0, 1], so you have a value from zero to one that in a sense, represents an "adjusted" (via vertical contrast slider) version of "how upward-facing is the mesh at this pixel" ** Some examples, if we set verticalContrast = 5.0, then if the vertexNormalWS had Z-component of -1.0 (the surface is facing straight down), then saturate(-1.0*5.0) => saturate(-5.0) => 0.0; if it had a Z-component of 0.01 (the surface is almost vertical, facing somewhere in the XY-plane), saturate(0.01*5.0) => saturate(0.05) => 0.05, if it had a Z-component of 0.3, saturate(0.3*5.0) => saturate(1.5) => 1.0 ** Note that in the video, I think the verticalContrast was ultimately set to 5.0 (at ~29:06), which essentially means that you've re-mapped the range of values for the Z-component of the vertex normal in world space from [-1.0, 1.0] to the range [0.0, 1.0], but broken up such that a Z-component in the range [-1.0, 0.0] is mapped to a value of 0.0; a Z-component in the range [0.0, 0.2] is mapped linearly to the range [0.0, 1.0], and a Z-component in the range [0.2, 1.0] maps to 1.0 * Picking up from the "saturate" at the end of the height blending, you have a value from [0.0, 1.0] that indicates how much of the static mesh's material we want to use, zero being no-mesh-material and one being only-mesh-material * You "invert" this using the "1-x" node, so conceptually, that it is now a value from [0.0, 1.0] that indicates how much of the landscape's material we want to use * You adjust the value of "how much of the landscape's material we want to use" by multiplying it by "how upward-facing is the mesh at this pixel", which yields a new value in the range [0.0, 1.0] ** Again, to better understand the output range of values here, some examples - I'll use HB to mean the "saturate" output of the height blend, and VN to mean the saturate output of the vertex blend. ** HB=0.0, VB=1.0 => (1.0-HB)*VB => 1.0 ** HB=1.0, VB=1.0 => (1.0-HB)*VB => 0.0 ** HB=0.2, VB=0.5 => (1.0-0.2)*VB => 0.4 * Finally, you "invert" the result again with another "1-x" node, which in a sense changes it back from "how much of the landscape's material we want to use" to "how much of the static mesh's material we want to use", which is then passed to the alpha. Strictly speaking, this isn't necessary, but if you don't include it you'd need to swap the A/B inputs in the Blend Material Attributes node Going back to ~24:15 - what was ultimately implemented was to eliminate the blending when the normal of the mesh is pointing sideways in world-space, and increase the blend based on how not-vertical the mesh is. Anywhere where the mesh isn't horizontal, there's still going to be at least a little stretching, because a smaller area of landscape-texture is being mapped onto a larger-area of static mesh, but the worst of it (the vertical case) was eliminated.
Loving these tutorial series so far, recently got into them and really enjoying the learning curve but sadly getting stuck now in this episode at 13:48 where my VT_HeightData and VT_MaterialData doesn't get generated like it does in the tutorial when applying it to the landscape parent, tried following up on potential fixes in comments / searches on the web but I can't find answers. I've found some differences in the tutorials since I'm using Unity Engine 5.3.2 but that hasn't been a problem thus far. Please help :')! Also I'd love to join your discord for (future) questions but I can't find a link anywhere.
Thanks for these videos you are a beast, sorry for my english if i do some mistakes , i'm from france and really enjoy ur video man ! Really Helpfull +1 like and sub
23:40 I'm not following all the math, but I can at least provide info on how the inversion works. Since the Saturate node is returning a value between 0 and 1, subtracting it from 1 gives the inverted value. If it's 0.9, then 1 - 0.9 = 0.1. The normal instinct to invert something might be to make it negative, but it makes more sense when you think about it as a percentage. The opposite of 90% is 10%, not -90%.
9 місяців тому
Setting the Specular value to zero in the MF_ObjAdjustments function under the M_MS_Default_Material makes the blending appear more natural. Previously, there was a slight shininess in the blended areas.
Hey man! Thank you so much for doing this series, I recently had the feeling that it was time for me to learn game development, so happy I stumbled across your channel! I had a small issue and wasn't sure how to debug it. I finished getting my runtime virtual textures all set up last night, but when I opened my project this morning all the meshes I had placed down were back to normal. Wasn't sure where to start debugging this?
If you guys happen to close the details panel by accident like I did, you can go up to the top of the software, click on the window button, and recheck the details.
so i heard complex collision is performance heavy and so avoided it for my cliff rocks. i found that the auto convex collision with some tweaking can wrap rocks pretty well and assumed it was more performance friendly. i was able to achieve a pretty close collision for all my cliff rocks until i scaled them huge which also scaled the imperfections with the collision... im not brand new with game development and understand that using 10 variations of rocks 100x each is much more performance friendly than using 100 rock variations 10x each. im stating to think that this also applies to collision? I guess i should just try complex on all my cliff rocks and see how my potato handles it? I guess my question is, do you know how performance heavy complex collision is, maybe an example? is it more performance heavy if im reusing the mesh over and over ?
This one was more of a follow along, which I enjoy but I found myself asking "why" constantly, especially with all of the math nodes in the materials. After doing a search on YT, I found few explain the math of why a math node is being added and what it is doing. How did you go about learning what the math is doing under the hood on these nodes? At what point for you did the BP nodes become more intuitive and less memorizing a step-by-step process? Thanks for the video!
I would say materials, to be honest, are one of my weaker areas. I do a much better job at explaining what we're doing as we go through blueprint logic. In terms of sources of 'wisdom' in learning materials, I would check out Ben Cloward's channel. Really detailed material tutorials- he knows his stuff.
Great tutorials so far! I've come into a bit of a headache issue though. I've replayed this video and the previous about 3 times to try tourbleshoot my mistake, however I can't find where I've gone wrong. My VT_HeightData shows as a black image, not a height map like it's supposed too. I've tried looking online for solutions but any solution I try, breaks the rest of the game! I also can't find any links to your discord to ask directly for help! EDIT: I also encountered a problem where, when I set the VT's, the tiling on the Earth texture came back, despite the nodes being perfectly correct. I even tried remaking it from scratch again and it won't randomise the tiling at all! EDIT#2: I managed to fix the height data, I don't know how or why, I just redid the actual making of the VT data's and assigning them.. and it worked! (Who knows what I missed there?). I'm still having the issue where the earth layer isn't randomising the material, despite randomising it perfectly before...
Mate, thanks for all of them. I go one by one just realised something. if the rock mesh goes below some level (for me it was Z - 400) , it does not catch the texture to blend and it starts blending with black colour texture. I do not have the knowledge to fix, I just wanted to share in case someone has an answer :)
( UE Version 5.4 ) EDIT: FOUND OUT YOU CAN LET IT BE LIKE IT IS. I think it didnt work because; 1. Top Right in the Editor u need to click on *Runtime Virtual Texture Volume*, look in the bottom right side into Details, look for Volume Bounds, and put the *Landscape* in the Bounds Allign Actor, and Press *Set Bounds*. 2. If u didnt do it, dont forget to put in Runtime Virtual Texture in the Info Box the Virtual Texture to VT_HeightData 3. repeat this step for Runtime Virtual Texture Volume2 (we created 2 of it) & put VT_MaterialData in the 2nd. 4. Now i tested it, if it works in general, with the way the other guy did it (Look Down, the YT Link) bc you can see if it blends, if everything is Pink. (If you only see the thin outlines, like i did in the beginning, it works! BUT, you need to set the height in the variable (VirtualBlendHeight in M_MS_Default) to a higher number. Just put *VirtualBlendHeight* & *VirtualSharpness* somewhere where you have space, in to his code (i did height into add & Sharpness into Divide) and u eventually set it properly up. like me (: 5. Now that you see it pink, u can use the full code our @NumenBrothers used. But use the full one 23:55 he is adding more to it there. NOW this should work. This took me 1,5 days... I hope i can help at least 1 Person with it. Original Comment: After 1 whole day i FINALY GOT IT. i had to do it in a completely different way + with a bit different code/variables but it finaly worked..... here the video from the guy: ua-cam.com/video/ATfzfvtvfIo/v-deo.html&ab_channel=GameDevAcademy I just started from the beginning and changed everything he did different. Good Lucky!
As soon as i disconnect MF_ObjAdjustments from blendmaterialattributes it goes black then i go to VT_landscape_height and change the virtual texture to VT_height data and connect MF_OjAdjustments to Blendmaterialattributes b and its still black.
Does any have an issue adding array in the virtual texture, I am using unreal engine 5.3 and it seem to have a check box in front of the "Draw in Virtual Texture " and when I click the add sign i do not have a drop down to see the array element. Any help will be helpful in resolving this. Thanks.
@@ukagilly8463you can fix it by just selecting the landscape Parent component and not all like he did and you should be able to add the VRT’s and it would show up when you check the draw in texture when you select all the land scape
i dont get it im slow can u explain a lil better on were to go im in otlinener details do i go down to landscape instead of virtual textutures? @@ukagilly8463
Cannot continue past 13:47 as in my version of Unreal (5.3.2) when clicking to add the two 'array elements'. It says '2 Array Elements' but no area is added to choose the "VT_Height.. & VT_Materia..." . The only way I can add the two "VT_Height.. & VT_Materia..." is to only select the top "landscape" (with the collapse triangle. the root so to speak)... But when I add it only here, when I look at the individual landscape tiles in the list, none show "2 Array Elements" They all show none. I have tried doing each landscape tile individually one by one and that does not allow you to add in the "VT_Height.. & VT_Materia..." either.... I googled this but found no solution. Any ideas? VIDEO OF PROBLEM: ua-cam.com/video/cf0vqZHuTxE/v-deo.html ADDITIONALLY: When I try to do the next step in the tutorial.. And edit the MS_Default Material... I see that Unreal has duplicated every folder in the MSPresent folder and added underscore VT to the end of each duplicated folder names. (_VT). So I'm guessing they have really changed up this whole system. so I'm not gonna continue for now on this tutorial.
Apologies I haven't focused on this since 5.0. This particular episode is not essential for continuing the series. But it would be great to have a solution. I'm sure there's a simple adjustment.
UE5 crashes everytime i try to set the second virtual world texture to VT_MaterialData Edit Fix: fix for me that worked which was to switch the Targeted RHIs in project settings from DirectX12 to DirectX11. You can search for it in all settings or look in the Platforms Windows section for the setting. due to an issue between DirectX 12 and some hardware. In my case I believe due to using an AMD card.
Been following along with all the steps but when I get to 13:57 the textures for the VT Height and the VT Material don't appear as shown... Maybe I'll have to restart from the beginning of this episode...
I know this comment is a little old. But for the next guy. Make sure you added the VT_Height and Material Data to the Run Time virtual Texture Volume 's you created earlier. Works fine then
So this runtime VT is not going to be something easy to scale? I'm eventually going to use a hex grid like what stayathomedev has done, and this seems like beyond what I will need for that but just wondering.
Hi i have same issue as Leandro so i doublechecked all the texture stuff we played with and all seems ok i have just blurry materials and error message when i open texture to this material telling me non-virtual textures so i created new project enabled virtual textures from start and same issue than i disabled them and all working just fine.(I converted them to regular textures and seems to be working but i have original unmodified parent texture M_MS_Default_Material for some reason when my project crashed so i will build it up again tomorrow and update info if it worked or not, but i do not see logic from enabling virtual textures and then converting them back to normal something is wrong and i have no clue. I guess all the blending stuff wont work but we will see.) If you have any ideas i would love to hear them. BTW you hook me up on this soo much you are doing it greatly creating my game is my dream.
Hi Jaroslav, is the link below the process you followed for the conversion to virtual textures? docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/VirtualTexturing/Streaming/#conversionmenuoption If you email me directly some screenshots, I'll see what I can figure out.
@@NumenBrothers i think i fixed it in parent material i changed Albedo texture placeholder from T_somethingsomething to VT_somethingsomething i guess something went wrong during that conversion i guess could you just doublecheck if you have virtual texture here as well ? (also all that blending stuff is working maaan i am squirting dopamine now)
I have done now 13h of your playlist but this... this broke me. 1billion different errors and nowhere an answer.. gotta sleep and try the 9th retry tomorrow... man this took like 4h and the errors are still not found
thanks for doing these tutorials. I love the style of recycling other code from others and everything. i am a complete noob and have no experience programming or with art or photoshop so this series is making it really easy to start to understand some of this stuff. i havent been following along much but i did try to apply a couple of the concepts that you were teaching and i had my first sense of achievment building an almost completely flat map with a river LOL (wow this program is complex though) Starting to learn my way around the program quite a bit, i think i might go back and watch from episode 1 since i only started around 5 when it popped up on youtube. anyway thanks again not sure how this only has 5k views what a great tutorial video series.
ive folowed along yours and two other tuts , but my rvt are blacked out in the the preview , is gtx 1070 the problem cause at the end i always end up with white strip albeit bllending and no texure .x 2 days x 3 tutorials , i ended up taking a tree asset into blender dplicating it chopped of 90% leaving roots, diveded into 6 vertex groups , each group sellected random verts down to a small progressive ammount , ended back into unreal 5 dropped grass texture onto the small tree trunk and placed over full tree asset , have grouped both and shall enjoy using this as a foliage asset, suck it pesky pc and gpu failings. i win you loose universe. (im losing the plot a little bit)
It'd be great if Quixel allowed you to set separate qualities for separate assets. i.e. nanite for 3D assets, high quality for 3D plants, etc. rather than having to manually switch back and forth...
alright this took me about 3 hours to figure out, in 5.3 you have to select specifically your Landscape actor to include the virtual texture arrays, and you need to make sure that each individual landscape proxy has "draw in virtual textures" turned OFF otherwise your height and material data will just render black, hope this can save someone in the future, this was a true monster to solve, and I am mad that it was so simple.
My workaround was to drag and drop onto the “add array” field but yea even my 3D Environment Artist wife couldn’t figure it out 😅
Legend
Thank you for continuing to put these out. Still the best tutorials on here for this.
Don't worry, even if you're my last viewer, I'm not stopping :)
@@NumenBrothers super appreciated! Heck who knows, maybe we'll collaborate someday. ;-)
Thanks for putting these videos out. Saved me from Madness many times. So many others keep grabbing the viewport and moving it around in circles every 2 seconds and moving around the editor far too quickly. Appreciate the time you take to help people like myself.
UE is simply astonishing. I had a Whoa moment when I saw how well the asset blended! Awesome.
if you're having the issue where textures from the surfaces you download (from Quixel Bridge) aren't able to be assigned to the material, it's probably because they are virtual textures. You can tell this if it has a subtle 'VT' in the bottom right corner of the texture icon. To convert a Virtual Texture back into a normal texture (which will then work in this tutorial), right click on the texture and select 'Convert to Normal Texture'.
For those who got a problem with black virtual texture even tho you followed everything, and nothing happens about the texture on the boulder, instead of setting manually the "Runtime Virtual Texture Volume", just try to select "landscape" then set bounds. For the 2 of them. It fixed the problem for me it took me 2 hours to find a solution I hope it can help at least someone
could u please elaborate? regarding set bounds, im foreign to this term
@@bonyfist On the bottom right in the details panel under the location you can just select landscape and then clic on "set bounds"
thank you!
Wow! Thanks! What caught my attention is your super wonderful and easy way to explain things and there is logic behind everything you do!! TBH I was playing around starting from the interactive world (for the interactive snow) so my landscape is a bit different than yours, and I am trying to apply what you do here in my landscape (uses MS_default_fuzz for meshes). I am still not getting the results, but I feel happy watching this video and looking at how you explain things!
I couldn't get this to work at first, but after looking through my Boulder Material Instance. I had to manual check the Global Texture Paramater to include the VTs. I also had to change the default DR to the item texture, which was original imported as "WhitePlaceHolder".
At minute 26:34, for those who had problems, I share what worked for me, disconnect the node from 1- to alpha, connect the saturate directly to the alpha and the function will work. After restarting the engine and reconnecting the 1-, I had to delete the asset directly to redo it hehe but maybe it's not necessary, good tutorial, greetings!
Additionally, I switched to unreal 5.0.3 to take the course since I couldn't get the virtual textures to work in 5.3 U.u
Virtual Texture really interesting. Thank you again. Wonderful series.
I finally understood material attributes, its one of those cases where "work with them to understand them" case.
Perhaps I could say its just an organized representation of the texture channel values, packed and ready to be blended and manipulated with cause Brown Material Output is "endstop". But its definitely helpful, thanks!
I understand much more (but still a long way off) relative to when I recorded this episode!
Hello. Working in Unreal 5.3.2 and things are a bit different today with some updates from the time this video was posted. At 13:27 when he selects all landscapes and adds the two virtual texture array elements. This did not work for me. What I had to do instead was select the parent landscape and add the Draw in virtual Textures array elements there.
Confirmed. In UE5.3.2 don't select the batch of child landscapes. Instead, select the parent "Landscape".
Thank you!
Thank you so much!!
Thank You!!! I only wish I had found it an hour earlier so I would have some hair left on my now bald head. 😀
I'm not going to lie, this was a tough one to take in. Thanks for the info, it really does help me a lot.
Not saying we won't do other stuff as complicated as this- we will- but this is close to the most complicated stuff we will need to make a game. And if there's a problem, we got the Discord.
27:02 Thank you Neal! Just recently I was wondering how to deal with Default Fuzz Material to make it work properly with VT! 🙂
WOW. I have learned so much in your videos. virtual texturing is amazing information thanks
Glad to hear it! I agree- I was thrilled when I first got this working.
Outstanding! I learned some significant new stuff. :)
The 1- (one minus) from a saturate which from listening to you is a clamp from zero to one. So a 1 minus a 0.5 for instance is 0.5. And a 1 minus a 0.9 is a 0.1, an inverted value.
Also, you were multiplying from another saturate with the 1-, so you get another 0-1 value that you then plug into another 1-, and again get a 0-1 value.
Material Instances for quick adjustments in real time and PostProcessingVolume with lumen global illumination and reflections would make a big difference
23:50 - To better understand the math, let's briefly describe the output effect. As you note at ~24:15, in some parts (where the mesh is straight up-and-down), the stretching is gone, in others, the stretching is reduced, but not gone. We can look at the math to better understand why that happens:
* Starting at VertexNormalWS, this reads the World-Space vector representing the direction the mesh is facing at that pixel (the meaning of "world space" vs "local space" is outside the scope of this discussion, suffice it to say, by convention in unreal engine, the X/R-component points forward, Y/G-component points to the right, and Z/B-component points up, for XYZ or RGB vectors).
* You then mask to only the Z (/blue) value, which is effectively how "upward" facing that pixel is. If the vector is normalized, then that Z-value is guaranteed to be in the range [-1, 1].
* You multiply by a vertical contrast value
* You saturate the result. As others have said (and from the documentation for the saturate node), saturate clamps the value to the range [0, 1], so you have a value from zero to one that in a sense, represents an "adjusted" (via vertical contrast slider) version of "how upward-facing is the mesh at this pixel"
** Some examples, if we set verticalContrast = 5.0, then if the vertexNormalWS had Z-component of -1.0 (the surface is facing straight down), then saturate(-1.0*5.0) => saturate(-5.0) => 0.0; if it had a Z-component of 0.01 (the surface is almost vertical, facing somewhere in the XY-plane), saturate(0.01*5.0) => saturate(0.05) => 0.05, if it had a Z-component of 0.3, saturate(0.3*5.0) => saturate(1.5) => 1.0
** Note that in the video, I think the verticalContrast was ultimately set to 5.0 (at ~29:06), which essentially means that you've re-mapped the range of values for the Z-component of the vertex normal in world space from [-1.0, 1.0] to the range [0.0, 1.0], but broken up such that a Z-component in the range [-1.0, 0.0] is mapped to a value of 0.0; a Z-component in the range [0.0, 0.2] is mapped linearly to the range [0.0, 1.0], and a Z-component in the range [0.2, 1.0] maps to 1.0
* Picking up from the "saturate" at the end of the height blending, you have a value from [0.0, 1.0] that indicates how much of the static mesh's material we want to use, zero being no-mesh-material and one being only-mesh-material
* You "invert" this using the "1-x" node, so conceptually, that it is now a value from [0.0, 1.0] that indicates how much of the landscape's material we want to use
* You adjust the value of "how much of the landscape's material we want to use" by multiplying it by "how upward-facing is the mesh at this pixel", which yields a new value in the range [0.0, 1.0]
** Again, to better understand the output range of values here, some examples - I'll use HB to mean the "saturate" output of the height blend, and VN to mean the saturate output of the vertex blend.
** HB=0.0, VB=1.0 => (1.0-HB)*VB => 1.0
** HB=1.0, VB=1.0 => (1.0-HB)*VB => 0.0
** HB=0.2, VB=0.5 => (1.0-0.2)*VB => 0.4
* Finally, you "invert" the result again with another "1-x" node, which in a sense changes it back from "how much of the landscape's material we want to use" to "how much of the static mesh's material we want to use", which is then passed to the alpha. Strictly speaking, this isn't necessary, but if you don't include it you'd need to swap the A/B inputs in the Blend Material Attributes node
Going back to ~24:15 - what was ultimately implemented was to eliminate the blending when the normal of the mesh is pointing sideways in world-space, and increase the blend based on how not-vertical the mesh is. Anywhere where the mesh isn't horizontal, there's still going to be at least a little stretching, because a smaller area of landscape-texture is being mapped onto a larger-area of static mesh, but the worst of it (the vertical case) was eliminated.
Please Never stop! i love your videos! subscribing forever!
Loving these tutorial series so far, recently got into them and really enjoying the learning curve but sadly getting stuck now in this episode at 13:48 where my VT_HeightData and VT_MaterialData doesn't get generated like it does in the tutorial when applying it to the landscape parent, tried following up on potential fixes in comments / searches on the web but I can't find answers. I've found some differences in the tutorials since I'm using Unity Engine 5.3.2 but that hasn't been a problem thus far. Please help :')!
Also I'd love to join your discord for (future) questions but I can't find a link anywhere.
Instead of selecting all the landscape pieces, click on the main landscape that holds them all and add them in there, hope this helps :)
Thanks for these videos you are a beast, sorry for my english if i do some mistakes , i'm from france and really enjoy ur video man ! Really Helpfull +1 like and sub
Slowly getting through your series just now 😅. Fresnel node is named after the guy who made the prisms for lighthouses :D
23:40 I'm not following all the math, but I can at least provide info on how the inversion works. Since the Saturate node is returning a value between 0 and 1, subtracting it from 1 gives the inverted value. If it's 0.9, then 1 - 0.9 = 0.1.
The normal instinct to invert something might be to make it negative, but it makes more sense when you think about it as a percentage. The opposite of 90% is 10%, not -90%.
Setting the Specular value to zero in the MF_ObjAdjustments function under the M_MS_Default_Material makes the blending appear more natural. Previously, there was a slight shininess in the blended areas.
Hey man! Thank you so much for doing this series, I recently had the feeling that it was time for me to learn game development, so happy I stumbled across your channel! I had a small issue and wasn't sure how to debug it. I finished getting my runtime virtual textures all set up last night, but when I opened my project this morning all the meshes I had placed down were back to normal. Wasn't sure where to start debugging this?
Hi Hazed, would have to see some screenshots to know. If you would like to join the Discord and post, feel free!
@@NumenBrothers I got it! Seems the default material got overwritten when I saved the project / reopened - got it all sorted! :)
Default material of what..may i know the fix as i am running into the same problem...@@shanecaudle
If you guys happen to close the details panel by accident like I did, you can go up to the top of the software, click on the window button, and recheck the details.
13:04 You can pull the 'Z' directly off the node in Version 5.3
At 13:25 if your textures shows black images, I saved the project and closed it and opened it again and it worked
so i heard complex collision is performance heavy and so avoided it for my cliff rocks. i found that the auto convex collision with some tweaking can wrap rocks pretty well and assumed it was more performance friendly. i was able to achieve a pretty close collision for all my cliff rocks until i scaled them huge which also scaled the imperfections with the collision... im not brand new with game development and understand that using 10 variations of rocks 100x each is much more performance friendly than using 100 rock variations 10x each. im stating to think that this also applies to collision? I guess i should just try complex on all my cliff rocks and see how my potato handles it? I guess my question is, do you know how performance heavy complex collision is, maybe an example? is it more performance heavy if im reusing the mesh over and over ?
I personally have not found complex collision to be a major factor, performance wise. But measure your frame rate before and after and see.
This one was more of a follow along, which I enjoy but I found myself asking "why" constantly, especially with all of the math nodes in the materials. After doing a search on YT, I found few explain the math of why a math node is being added and what it is doing. How did you go about learning what the math is doing under the hood on these nodes? At what point for you did the BP nodes become more intuitive and less memorizing a step-by-step process?
Thanks for the video!
I would say materials, to be honest, are one of my weaker areas. I do a much better job at explaining what we're doing as we go through blueprint logic. In terms of sources of 'wisdom' in learning materials, I would check out Ben Cloward's channel. Really detailed material tutorials- he knows his stuff.
Great tutorials so far! I've come into a bit of a headache issue though. I've replayed this video and the previous about 3 times to try tourbleshoot my mistake, however I can't find where I've gone wrong. My VT_HeightData shows as a black image, not a height map like it's supposed too. I've tried looking online for solutions but any solution I try, breaks the rest of the game! I also can't find any links to your discord to ask directly for help!
EDIT: I also encountered a problem where, when I set the VT's, the tiling on the Earth texture came back, despite the nodes being perfectly correct. I even tried remaking it from scratch again and it won't randomise the tiling at all!
EDIT#2: I managed to fix the height data, I don't know how or why, I just redid the actual making of the VT data's and assigning them.. and it worked! (Who knows what I missed there?). I'm still having the issue where the earth layer isn't randomising the material, despite randomising it perfectly before...
Mate, thanks for all of them. I go one by one just realised something. if the rock mesh goes below some level (for me it was Z - 400) , it does not catch the texture to blend and it starts blending with black colour texture. I do not have the knowledge to fix, I just wanted to share in case someone has an answer :)
( UE Version 5.4 ) EDIT: FOUND OUT YOU CAN LET IT BE LIKE IT IS. I think it didnt work because;
1. Top Right in the Editor u need to click on *Runtime Virtual Texture Volume*, look in the bottom right side into Details, look for Volume Bounds, and put the *Landscape* in the Bounds Allign Actor, and Press *Set Bounds*.
2. If u didnt do it, dont forget to put in Runtime Virtual Texture in the Info Box the Virtual Texture to VT_HeightData
3. repeat this step for Runtime Virtual Texture Volume2 (we created 2 of it) & put VT_MaterialData in the 2nd.
4. Now i tested it, if it works in general, with the way the other guy did it (Look Down, the YT Link) bc you can see if it blends, if everything is Pink. (If you only see the thin outlines, like i did in the beginning, it works! BUT, you need to set the height in the variable (VirtualBlendHeight in M_MS_Default) to a higher number. Just put *VirtualBlendHeight* & *VirtualSharpness* somewhere where you have space, in to his code (i did height into add & Sharpness into Divide) and u eventually set it properly up. like me (:
5. Now that you see it pink, u can use the full code our @NumenBrothers used. But use the full one 23:55 he is adding more to it there.
NOW this should work.
This took me 1,5 days...
I hope i can help at least 1 Person with it.
Original Comment: After 1 whole day i FINALY GOT IT. i had to do it in a completely different way + with a bit different code/variables but it finaly worked..... here the video from the guy: ua-cam.com/video/ATfzfvtvfIo/v-deo.html&ab_channel=GameDevAcademy
I just started from the beginning and changed everything he did different. Good Lucky!
@NumenBrothers Any way to fix the problem wherein when I restarted, all of the Virtual Texture thing done with the boulder got reset... :( any fixes??
As soon as i disconnect MF_ObjAdjustments from blendmaterialattributes it goes black then i go to VT_landscape_height and change the virtual texture to VT_height data and connect MF_OjAdjustments to Blendmaterialattributes b and its still black.
Facing the same issue. Did you find a solution? Thanks.
Does any have an issue adding array in the virtual texture, I am using unreal engine 5.3 and it seem to have a check box in front of the "Draw in Virtual Texture " and when I click the add sign i do not have a drop down to see the array element. Any help will be helpful in resolving this. Thanks.
Same issue here
@@ukagilly8463you can fix it by just selecting the landscape Parent component and not all like he did and you should be able to add the VRT’s and it would show up when you check the draw in texture when you select all the land scape
@@primessport9935 Amazing thanks! Was loosing my mind trying to figure that out
i dont get it im slow can u explain a lil better on were to go im in otlinener details do i go down to landscape instead of virtual textutures?
@@ukagilly8463
Thank you!
@@primessport9935
Cannot continue past 13:47 as in my version of Unreal (5.3.2) when clicking to add the two 'array elements'. It says '2 Array Elements' but no area is added to choose the "VT_Height.. & VT_Materia..." . The only way I can add the two "VT_Height.. & VT_Materia..." is to only select the top "landscape" (with the collapse triangle. the root so to speak)... But when I add it only here, when I look at the individual landscape tiles in the list, none show "2 Array Elements" They all show none. I have tried doing each landscape tile individually one by one and that does not allow you to add in the "VT_Height.. & VT_Materia..." either.... I googled this but found no solution. Any ideas? VIDEO OF PROBLEM: ua-cam.com/video/cf0vqZHuTxE/v-deo.html ADDITIONALLY: When I try to do the next step in the tutorial.. And edit the MS_Default Material... I see that Unreal has duplicated every folder in the MSPresent folder and added underscore VT to the end of each duplicated folder names. (_VT). So I'm guessing they have really changed up this whole system. so I'm not gonna continue for now on this tutorial.
Apologies I haven't focused on this since 5.0. This particular episode is not essential for continuing the series. But it would be great to have a solution. I'm sure there's a simple adjustment.
UE5 crashes everytime i try to set the second virtual world texture to VT_MaterialData
Edit Fix: fix for me that worked which was to switch the Targeted RHIs in project settings from DirectX12 to DirectX11. You can search for it in all settings or look in the Platforms Windows section for the setting. due to an issue between DirectX 12 and some hardware. In my case I believe due to using an AMD card.
if anyone runs into this, simply just drag and drop your VT_heightData/VT_MaterialData into their respected places
not sure why but everytime i try to add these it crashes unreal lol, break time to figure this out..
glad you got it!
Been following along with all the steps but when I get to 13:57 the textures for the VT Height and the VT Material don't appear as shown... Maybe I'll have to restart from the beginning of this episode...
If you're still stuck feel free to join the Discord. Most likely we'll be able to help.
I know this comment is a little old. But for the next guy. Make sure you added the VT_Height and Material Data to the Run Time virtual Texture Volume 's you created earlier.
Works fine then
😍😍😍
So this runtime VT is not going to be something easy to scale? I'm eventually going to use a hex grid like what stayathomedev has done, and this seems like beyond what I will need for that but just wondering.
It will be pretty easy to scale. Once you have the RVT functions in your overall materials it will apply to anything you like.
@@NumenBrothers I was thinking more along the lines of the VT volume. When I hit play its telling me over texture streaming limit.
@@joeanrachelmiller6529 Depends on your GPU, what RAM and other specifications
Hi i have same issue as Leandro so i doublechecked all the texture stuff we played with and all seems ok i have just blurry materials and error message when i open texture to this material telling me non-virtual textures so i created new project enabled virtual textures from start and same issue than i disabled them and all working just fine.(I converted them to regular textures and seems to be working but i have original unmodified parent texture M_MS_Default_Material for some reason when my project crashed so i will build it up again tomorrow and update info if it worked or not, but i do not see logic from enabling virtual textures and then converting them back to normal something is wrong and i have no clue. I guess all the blending stuff wont work but we will see.)
If you have any ideas i would love to hear them. BTW you hook me up on this soo much you are doing it greatly creating my game is my dream.
Hi Jaroslav, is the link below the process you followed for the conversion to virtual textures? docs.unrealengine.com/4.27/en-US/RenderingAndGraphics/VirtualTexturing/Streaming/#conversionmenuoption
If you email me directly some screenshots, I'll see what I can figure out.
@@NumenBrothers hi not exactly its eu4 i guess, I send you some photos on mail i hope it do not bother you much
@@NumenBrothers i think i fixed it in parent material i changed Albedo texture placeholder from T_somethingsomething to VT_somethingsomething i guess something went wrong during that conversion i guess could you just doublecheck if you have virtual texture here as well ? (also all that blending stuff is working maaan i am squirting dopamine now)
I have done now 13h of your playlist but this... this broke me. 1billion different errors and nowhere an answer.. gotta sleep and try the 9th retry tomorrow... man this took like 4h and the errors are still not found
thanks for doing these tutorials. I love the style of recycling other code from others and everything. i am a complete noob and have no experience programming or with art or photoshop so this series is making it really easy to start to understand some of this stuff. i havent been following along much but i did try to apply a couple of the concepts that you were teaching and i had my first sense of achievment building an almost completely flat map with a river LOL (wow this program is complex though)
Starting to learn my way around the program quite a bit, i think i might go back and watch from episode 1 since i only started around 5 when it popped up on youtube.
anyway thanks again not sure how this only has 5k views what a great tutorial video series.
ive folowed along yours and two other tuts , but my rvt are blacked out in the the preview , is gtx 1070 the problem cause at the end i always end up with white strip albeit bllending and no texure .x 2 days x 3 tutorials , i ended up taking a tree asset into blender dplicating it chopped of 90% leaving roots, diveded into 6 vertex groups , each group sellected random verts down to a small progressive ammount , ended back into unreal 5 dropped grass texture onto the small tree trunk and placed over full tree asset , have grouped both and shall enjoy using this as a foliage asset, suck it pesky pc and gpu failings. i win you loose universe. (im losing the plot a little bit)
Check to see if this is your issue: forums.unrealengine.com/t/runtime-virtual-texture-renders-black/154487
I have errors when importing quixel textures telling me non-virtual textures, any solution?
they look so blurry
Can you tell me if it's this issue here? ua-cam.com/video/oGfH9BFKWEc/v-deo.html
my garden material asset wont save? even when i remove the code it fails to save the asset
i just had to restart. however my material doesnt copy the landscape
The material turns white. maybe its because the parent material is different?
ah so i answered my own question lmao when i switched the parent class to the default it worked!! I'm a genius
It'd be great if Quixel allowed you to set separate qualities for separate assets. i.e. nanite for 3D assets, high quality for 3D plants, etc. rather than having to manually switch back and forth...
what a frustrating lesson