HYPER-REALISTIC Grass Wind Animation [UE4, valid for UE5]

Поделиться
HTML-код
  • Опубликовано: 9 ноя 2024

Комментарии • 188

  • @aleca8910
    @aleca8910 9 месяцев назад +6

    Just added it to my project. I really needed to fix the grass performance issue. Thank you for this.

  • @tinchodonte2720
    @tinchodonte2720 9 месяцев назад +5

    wow!!! the mathematics behind video games, incredible simulation!! incredible and beautiful work and the result is exciting

  • @crs11becausecrs10wastaken
    @crs11becausecrs10wastaken Год назад +8

    Every time I think I've mastered the art of material work, something like this comes along and gives me a reality check. I was using a world-aligned texture as my wind mask, but it won't give the same amount of variations you've put into the procedural one.

    • @VisualTechArt
      @VisualTechArt  Год назад +2

      Well, in all fairness, if I had to optimize this shader, probably the first thing I would do would be to use world aligned textures instead of completely procedural noises :D

    • @crs11becausecrs10wastaken
      @crs11becausecrs10wastaken Год назад

      @@VisualTechArt lol, yeah noise is pretty expensive. I'm curious however to see it in action with nanite now that we've got support for foliage, I feel the single blade approach is much more viable.

    • @crs11becausecrs10wastaken
      @crs11becausecrs10wastaken Год назад

      @@VisualTechArt Found out the hard way this method doesn't play nice with UE5's foliage paint system. It's okay though, as I believe I've learned a few new things.

    • @VisualTechArt
      @VisualTechArt  Год назад +1

      What are the issues you encountered? :O

    • @crs11becausecrs10wastaken
      @crs11becausecrs10wastaken Год назад +1

      @@VisualTechArt A few things, with the initial node structure, (before adding in any color or pbr properties) the values make the foliage mesh collapse into a single world axis and defom into a cylinder.
      After adding in the wind direction and variety they instead all collapse to a single straight line on what I believe is the world space X axis averaged to the center of all the foliage instances.
      This is in UE5.1 so not sure if the engine is handling anything differently.
      I narrowed down the problem to the implementation of the bend direction and the radius in the X and y vectors. The z vector on its own leaves the mesh in their current positions but just makes cork screw curls along the z axis.

  • @MarkOfArgyll
    @MarkOfArgyll 6 месяцев назад +2

    Only recently discovered your channel. What a gold mine of useful information! Watched 100% of this video, understood about 50%, loved 150% 😂

  • @levviktorov4470
    @levviktorov4470 9 месяцев назад +10

    📣📣For those who experiencing an issue 📣📣 when your grass is lining up along an axis into one flat row - TURN OFF THE NINITE . ( UE 5.3 )

    • @93Nishi
      @93Nishi 4 месяца назад

      You just saved my life! Any idea about how to make it work with Nanite?

  • @SmurmBreep
    @SmurmBreep 6 месяцев назад +2

    I loved your explaination of the mathematic theory, it really helped me understand, creating procedural shaders is something I've been struggling to wrap my head around recently. This video is a great learning tool.
    Thanks ^^

  • @nintenjo64
    @nintenjo64 10 месяцев назад +2

    This is fabulous! Although not sure i got my head around all the math, the premise looks great!

  • @timiitz
    @timiitz 4 месяца назад

    This looks amazing. You are an artist and make it seem so easy. It was hard to follow, but a very entertaining experience. I will surely try to make something similar myself in my project

  • @Cusey
    @Cusey 2 года назад +2

    looks super nice

  • @MeatFloat
    @MeatFloat Год назад +8

    Hey! Just want to say thank you first, then also I'd like to provide you a solution to use this method with multiple strands in the same static mesh instead of individualy spawning the blades. I made my mesh of multiple strands between the -1 to 1 world space in Maya, then wrote a super small script in python that would encode the pivot per strand in R,G component between 0 and 1. In the blue, I'd encode the max bounding box of the strand and in vertex alpha channel a random float. Having the blue encoding the height, I don't need to manually type it in the shader, just sample the blue channel. In engine, I set up uniform import scale at 50 (since maya export is pretty tiny between -1 and 1). On the shader side, I just replaced the Object Position nodes you found in your tutorial by the following (writing it in pseudo code, but shouldnt be hard to read):
    xy_coords = ((vertex_color.rg - 0.5) * 2.0)
    xyz_coords = transformPosInstanceToAbsoluteWorldSpace((xy_coords.x, xy_coords.y, 0.0) * import_scale)
    The import scale needs to manually be set depending on how much you scaled the static mesh from the maya export. The small math in xy_coords is needed to bias scale the 0 to 1 coords to -1 to 1. After the, the mult from the import scale will make match the pivot positions in real world setting. The append of 0 is for having the strand roots at 0 initially (depending if it was in maya).
    Hopefully it makes sense, and again thank you so much for providing this great basis that helped me work my way through this!

    • @VisualTechArt
      @VisualTechArt  Год назад +7

      Great job with that! It's definitely a working solution :D
      Really happy to see someone giving a go to bouild on top! May I suggest to use UVs instead of VertexColor? You might be able to get rid of needing manual scaling and range remapping altogether ;)
      Be sure to join my Discord if you haven't yet!

    • @MeatFloat
      @MeatFloat Год назад +4

      @@VisualTechArt hey! Thanks for returning back. You just had a great idea and it worked like a charm. Save few instructions and just did a top planar projection, scale to center point the top projection uvs then used it as pivot instead. GG!

  • @akashsalvator5220
    @akashsalvator5220 7 часов назад

    How did you become so good with maths and shaders? If I want to learn anywhere close to you what would be the best way that I can achieve it. You are true genius!

  • @Hellwalker855
    @Hellwalker855 2 года назад +3

    This is the best looking Unreal grass I've seen! Thanks a bunch!

  • @maniacb0y
    @maniacb0y 2 года назад +3

    I'm a simple man. I see technical art, I press like.
    Amazing video.

  • @yieau
    @yieau Год назад

    mesmerizing

  • @thomas-ly1zt
    @thomas-ly1zt 3 месяца назад

    i really love all your videos and the mathematical approach! :-) But to be honest, i allways miss the "shader complexity graph". Anyways, grazie mille!

  • @kraig800i
    @kraig800i 2 месяца назад

    Your video was interesting and I appreciate the time you've put into it.
    I zoned out a couple of times but I think I can understand the why more than the how. I've been trying to make a universal foliage (trees, bushes, flowers, weeds, grass, flotsam) bundle for all of my own game ideas going from blender into Godot or Source 2 (Sandbox). It's only been 5 months since I started and I don't think I'm any closer to getting it completed, just a whole bunch of false starts.

  • @sofialiguori4868
    @sofialiguori4868 2 года назад +2

    Cool stuff 👏

  • @deever92
    @deever92 2 года назад +4

    Wow, this was a long video plenty of information. Also thank you for putting this on gumroad, very useful!

  • @ButtercupVisuals
    @ButtercupVisuals Год назад +3

    its such a great tutorial! It reminded me of grasses from Ghost of Tsushima.

  • @alexm666
    @alexm666 Год назад +3

    Level one: be able to connect nodes to create basic shaders in UE
    Level two: be able to follow simple shader tutorials
    Level three: be able to create your own simple shaders
    Level four: be able to follow your tutorials blindly as the math and logic is beyond comprehension
    Level five: be able to follow your IDEAS while blindly connecting the nodes
    Level six: be able to follow all your math and ideas, understanding exactly what are you doing. Connecting the nodes becomes irrelevant
    Level seven: be able to come up with similar ideas, prep the math and implement everything without following (your level)
    I'm at 4. Some day I hope to be at 7 lol

  • @AmjoodBasha
    @AmjoodBasha Год назад +1

    Thank you! Will this work for the super realistic nanite grass we usually get off quixel?

    • @VisualTechArt
      @VisualTechArt  Год назад +1

      To be used with nanite apparently you need to change few things, other people have made it work already though :)

  • @QuakeProBro
    @QuakeProBro 2 года назад +3

    Perfect! This video was definitely worth the wait^^ Now the only thing missing is the wind flowing around or being occluded by objects. Distance field gradients should do the trick...

    • @VisualTechArt
      @VisualTechArt  2 года назад +2

      Ahahahahah maybe... What about a real time fluid simulation?

    • @QuakeProBro
      @QuakeProBro 2 года назад +2

      ​@@VisualTechArt That would be even better ;) The GDC God of War wind talk should be a nice inspiration^^ As a side product, we could use the render targets to create player interaction. We should consider implementing simulation for flow and occlusion, but also local wind effects (e.g. helicopters and fast moving objects).

    • @VisualTechArt
      @VisualTechArt  2 года назад +3

      @@QuakeProBro Ah yes! I kinda remember that talk, thanks for the tip :D I also already experimented with interaction by using Niagara + Render Targets, it was a lot of fun, I'll see what I can do ;)

    • @QuakeProBro
      @QuakeProBro 2 года назад

      @@VisualTechArt Oh yeah I love how versatile Niagara is! I‘ve also checked the new update of Fluid Ninja Live that came out I think yesterday, it includes a use case example scene with foliage and a local wind sim.

  • @Sav3D
    @Sav3D Год назад

    Incredible thanks for sharing

  • @阿伟-z6u
    @阿伟-z6u 2 года назад

    So Cool. Thanks!

  • @ziruizhu4582
    @ziruizhu4582 6 месяцев назад

    Very nice tutorial! I am not sure what the problem is, when i tried this using UE5.3, it actually worked with actor postion instead of object position

    • @VisualTechArt
      @VisualTechArt  6 месяцев назад +1

      Yes, they did a change in the output of those nodes, at the time of recording this the ActorPosition node wasn't even introduced yet, if I remember correctly :)

  • @prestonschulz9359
    @prestonschulz9359 2 года назад +4

    Really curious about performance here. Also wondering if you had any solutions for how single blade grass gets handled by TAA. I know it's a notorious thing in Unreal with no perfect solution.

    • @VisualTechArt
      @VisualTechArt  2 года назад +4

      I've just taken another look for you now :D
      I'm on a 980ti (which is also half broken) and the scene runs at 30/40fps@1440p, but consider that at the moment I have the Directional Light set with 10 cascades (much better than what I showed in the video sadly).
      The grass has just the shader on and the only "optimization" active are LODs (4 levels).
      When I was recording I used some other optimizations to reach 60fps minimum to be able to use VSync :) I was thinking about a future video about optimizing this scene, there are a decent number of things that can be done.
      Regarding TAA... there's both some flickering and ghosting in the distance, of course :) But that's because I'm keeping single blades for way too far in the distance.

    • @prestonschulz9359
      @prestonschulz9359 2 года назад

      @@VisualTechArt That would be terrific!

    • @prestonschulz9359
      @prestonschulz9359 2 года назад

      @@VisualTechArt Quick question: I just got to 36:26 when the normals should be done, however I'm getting some bad black flickering on patches of the blades. Any idea what I could have messed up there?

    • @VisualTechArt
      @VisualTechArt  2 года назад

      Argh, I got them too few times while I was building the shader, but it was popping in and out on single blades... If you go in the Normal Buffer and you see it there too, should mean you're setting a value of 0 there somehow. To be honest I don't remember exactly what I did to fix it (it was like 2 months ago) and at some point I didn't get it anymore xD
      Oh, if it's on patches maybe you forgot some VertexInterpolator node somewhere?

    • @VisualTechArt
      @VisualTechArt  2 года назад +1

      @@prestonschulz9359 Argh, I had that problem at some point too when I was developing the shader (like 2 months ago) and I don't remember exactly what I did to make it disappear.
      If you see it on cluster you may be forgetting some VertexInterpolato somewhere, I had it on single blades. Also, if you can see them go black in the World Normal Buffer may be because you're trying to normalize a 0 length vector or dividing somewhere a value by another value that somethimes equals to zero.

  • @erictulio
    @erictulio 2 месяца назад

    Awesome! But, i'm having this issue: when i work with the bend parameter, it bends only in the center of the leaf, and not a rounded movement like yours. And it stretches the mesh, making it larger. Could you help me please?

    • @VisualTechArt
      @VisualTechArt  2 месяца назад

      It's a bit hard from here... Is the pivot point at the base of the blade?
      Is Nanite disabled on the mesh? (You need to modify the shader a bit to make it work with it)

  • @YourSandbox
    @YourSandbox 2 года назад +2

    awesome stuff. will grab to my game, literally helped me not doing all by myself :)

  • @abeymiranda5457
    @abeymiranda5457 Год назад +1

    Awesome! loving the look of this. Any idea if this works with WPO on Nanite in 5.1?

    • @VisualTechArt
      @VisualTechArt  Год назад

      There are few adjustments to be made, some people actually did it and wrote about it on Discord :)

  • @小清新-r8y
    @小清新-r8y 3 месяца назад

    Thank you very much for your tutorial. 😘😘😘I completely reproduced it in version 5.3 according to your method, which is very good. The effect is exactly the same, and you really saved me. But there is a doubt: why does the 3D model finally become a 2D patch? I don't understand. It's good to use it to make grass. It's strange to apply it to trees😅

    • @VisualTechArt
      @VisualTechArt  2 месяца назад

      Since I wrote the shader for grass, I did some simplifications and assumed the 3D mesh is flat, probably :)
      So if you try it on trees it might flatten them

    • @TheSlyckx
      @TheSlyckx 2 месяца назад

      @user-cz1de3uy5l
      Have you made it work with 3D objects? I try to replicate the look of wind effect with a wheat field and at least for the models in front, I want them to be 3D. :)

  • @thenoobdev
    @thenoobdev 3 месяца назад

    Amazing stuff!! A lot high tech math stuff going here!! Thanks for sharing!! Could you give me some pointers on how to have it looking good on a top-down shooter game?

    • @VisualTechArt
      @VisualTechArt  3 месяца назад +1

      Well if you have top-down camera I'd say change the type of grass for something like clover ahahah
      Much better coverage than blade grass in that case.
      Other than that, it's up to you and your art direction :)

    • @thenoobdev
      @thenoobdev 3 месяца назад

      @@VisualTechArt man so easy hahah 🤣 guess I just needed a brake and breath after taking in all the info of your video. Thanks for the quick response and I'll be making some wider foliage like clovers and varens for this method..

  • @pubudu781
    @pubudu781 5 месяцев назад

    This sooo awesome, thank you soo much, will you maybe make a video in future about how to optimize this ? like in with Ghost of Thushima methods ? i also saw on RUclips, someone using Niagra for this technique which delivers better performence apparently. if this is properly optimized then this makes one of the most feature packed and good looking grass ever. 😃

    • @VisualTechArt
      @VisualTechArt  5 месяцев назад +1

      Yeah I want to expand on this sooner or later :D

    • @pubudu781
      @pubudu781 5 месяцев назад

      @@VisualTechArt Looking really forward to that. 😁

  • @TorQueMoD
    @TorQueMoD 2 года назад +2

    OMG THANK YOU SO MUCH FOR THIS! I hate the UE4 wind node more than anything I've ever hated in my entire life! I'd say if you use a grass clump mesh, you wouldn't have to worry about each blade being individual as grass tends to grow in clumps anyway and having a few dozen blades moving in the same direction at the same time likely won't look bad at all. Especially with how wonderful your wind animation is.

    • @VisualTechArt
      @VisualTechArt  2 года назад

      Few months ago at work I did a fancier implementation of this where I could use grass clumps but still animate the individual blades separately ;)

    • @kettenotter
      @kettenotter Год назад +1

      You can always store the grass blade pivot in the vertex color or in a texture.
      In most cases you don't actually need the pivot z position (because the start bending all on the same height) so I would:
      R+G = Grass Blade XY pivot location
      B = Grass Blade height
      If the grass rest position is straight like in this example you can most likely get away with just using the vertex position XY. And can also add some height, rotation Variation in the shader for example.

    • @kettenotter
      @kettenotter Год назад +2

      You can also achieve clumping inside of the shader with some noise. (That the grass tips clump together for example) But I think the math might get pretty complicated. An easy solution would actually be to find some nice normal map and use it for clumping (You just point the grass blades along the normal) for example a normal map with some peppples should be nice.
      Just imaging you had some pebbles inside of sand and then take them out. They would leave holes behind. When you now take a bunch of sticks and stuck them inside the sand in the direction of the surface the tips would "clump" together over the Center of the holes.
      Taking the pebbles out was inverting the normal map. And putting the sticks over the surface was sampling this normal map to rotate the grass blades.

  • @newguma
    @newguma Год назад

    Hey man, first migration works fine for 5.2. Now my issue, i try add a material parameter for the force and direction, force works well but direction flicks when timeline is updating the amount. Any tip for solve it? Also, i saw u plan to add a local force/derection based on sphere or cube, when if u update this for next level, who buy will receive the update? Ty for this amazing project!!

    • @VisualTechArt
      @VisualTechArt  Год назад +1

      Yes direction needs a bit more care if you want to drive it from a BP :)
      Usually if I update a project I sell I tend to give it for free unless there's a major feature added, which in case you pay only an extra, not the full price

  • @TheNSJaws
    @TheNSJaws Год назад +1

    I am 7 months late, but I also have a suggestion that corresponds to what you're making here.
    GDC is called Procedural Grass in Ghost of Tsushima; it was quite informative and gave quite a few tips on performance boosting regarding this exact technique.

    • @VisualTechArt
      @VisualTechArt  Год назад

      I remember watching it, they sait that they made it with particles instead of meshes, right?

    • @TheNSJaws
      @TheNSJaws Год назад

      @@VisualTechArt
      sadly, I can't quite remember that part, what stuck out to me more was how LODs were handled on the blades of grass (and I watched it more for the wow factor than anything else 😅)

    • @VisualTechArt
      @VisualTechArt  Год назад

      @@TheNSJaws Fair enough, maybe I'm the one confusing it with another talk :D
      But yeah, I remember the LOD thing now that you mentioned it!

    • @TheNSJaws
      @TheNSJaws Год назад +1

      on the bright side, video was super easy to find again, so imma just put the link here of you are interested (even if it's for a later date)
      ruclips.net/video/Ibe1JBF5i5Y/видео.html

  • @mmertduman
    @mmertduman 2 года назад +1

    Amazing freaking content. I have learned so many things that I had to write them down. I have a question, the Z-scale finding trick does not work for me. I am placing my grass using the Grass node in the landscape material. The landscape grass type is set to scale the grass 3 to 4 times. However when I transform the 0,0,1 vector, it returns 0,0,1 (i visualized it with the debug nodes).

    • @VisualTechArt
      @VisualTechArt  2 года назад +1

      Did you pass the scale thing through the vertex interpolator node, before the display debug one? Otherwise it will return the cluster data

    • @mmertduman
      @mmertduman 2 года назад +1

      @@VisualTechArt Ah yes, that was it! I have one more questions if that's okay :D We're using the ObjectPosition node instead of the ObjectPivotPoint node. Isn't ObjectPosition supposed to return the center location of the object, which should ruin the gradients from bottom to top? Is that somehow different for instanced meshes?

    • @VisualTechArt
      @VisualTechArt  2 года назад +1

      No worries, for instanced meshes the Object Position node returns the pivot location, when used in the vertex shader, otherwise the cluster centre (if I remember correctly)

  • @NukexTheory
    @NukexTheory 7 месяцев назад

    insane tutorial, only issue I am having is with lighting, when messing with the normals sometime the grass will appear too white when bending, Im experimenting with it right now but I dont really know how to fix this,. or even know if this is normal behavior.

    • @VisualTechArt
      @VisualTechArt  7 месяцев назад

      Might be that it's catching a lot of specular, just to test, try to set the Specular to 0 and see if that's the case

  • @unfgames
    @unfgames 2 года назад

    This is awesome, thank you!

  • @zaluper4242
    @zaluper4242 2 года назад

    Amazing ! but I have problem with grass density, its so small. do you know any procedural solution without using foliage tool where I need to hand-paint grass on my big landscape?

    • @VisualTechArt
      @VisualTechArt  2 года назад +2

      One thing that I've been planning to experiment with for a while now is to use Niagara to handle the grass, that way would be so much easier to also make it interactive :D
      You can try go that route!

    • @medmel2160
      @medmel2160 8 месяцев назад

      @@VisualTechArt I would love to see that!

  • @robinj6997
    @robinj6997 Год назад +1

    Thank you for making this video. Such a great project! Beautiful and mathematical impressive.
    I had an issue which I notice other people talk about in the comments; "the cylinder effect" where the grass circulates around an axis into a barrel like cylinder. If I turn of Nanite, this disappears. I'm using 5.2. I don't know if you have found an solution to this?

    • @VisualTechArt
      @VisualTechArt  Год назад

      I didn't look into this yet, but other people fixed it, I think they have changed which is the node that returns the pivot location of the instance, but I'm not sure, you can try ask in my Discord server and see if anyone replies... Or maybe someone wrote the solution here in other comments :D

    • @robinj6997
      @robinj6997 Год назад +2

      I found it! Replace "Object Position" node with "ObjectPivotPoint" and plug into "Mesh Particle Pivot Location".
      But two things happen. The lower stem of the grass all align to y-axis causing them to disappear when looking down a grassy path along the y-axis. And fps dropped by 10 when using nanite haha, so I turned nanite of again.

    • @CGokce6
      @CGokce6 10 месяцев назад

      @@robinj6997 hey I'm getting the same issue. Did you manage to find a fix for it in the end?

    • @robinj6997
      @robinj6997 10 месяцев назад

      I choose to turn nanite off since the fps was lower. And therfore I didn't solve the alignment issue either. I did it in 5.2. There is a discord where you can join.

    • @CGokce6
      @CGokce6 10 месяцев назад

      @@robinj6997 hey I’m in the discord. I couldn’t find your message but I’ll take another look

  • @dirkschiller1637
    @dirkschiller1637 Год назад

    How did you create the tesselated particle rectangle mesh and how did you connect it to the material ? I gues it is ued as a foliage and you did draw it on the landscape ?

    • @dirkschiller9060
      @dirkschiller9060 Год назад

      I found out that it is just a simple mesh with this texture assigned and then foliaged on the landscape. Thank you a lot for this! I had an Issue with the shader and thought the mesh I am using is not correct or it is some kind of particles. Best D

  • @Tylru
    @Tylru 2 года назад +1

    How complicated would it be to allow this to work for a grass mesh with multiple blades? Your example scene has everything scaled up massive to get around the problem that LandscapeGrassType does not allow more than 1000 instances per 10 square metres, which means when using it at a normal world size, you have hardly any grass covering the land.
    My solution was to just create a mesh which covers the necessary space, but your wind setup of course forces the whole mesh, instead of each blade in the mesh.

    • @VisualTechArt
      @VisualTechArt  2 года назад +1

      That's the challenge I left for the viewer at the end of the video! I already solved that problem on my own, but happy to discuss about it :)
      Why don't you join my Discord server and brainstorm there?

  • @Slejdy
    @Slejdy 8 месяцев назад

    Hi I bought the grass, but can't find how to change the scale in my scene? Is there some way how to simply do it? thank you

    • @VisualTechArt
      @VisualTechArt  8 месяцев назад

      You can change the scale of the static mesh itself? Or use your own mesh :)

  • @FunwithBlender
    @FunwithBlender Год назад +1

    I made the nodes but where is the static grass mesh you used? What do I add this material to?

    • @VisualTechArt
      @VisualTechArt  Год назад

      I didn't provide the mesh, it's just a long plane after all, nothing fancy :)

    • @FunwithBlender
      @FunwithBlender Год назад

      @@VisualTechArt cool beans i thought as much :)

  • @cansado2287
    @cansado2287 Год назад

    nice

  • @IbtesamSadiq
    @IbtesamSadiq 7 месяцев назад

    The realism of this wind animation is truly impressive. However, I’m curious if it’s limited to individual grass meshes. I’m wondering if it’s possible to apply this to a grass clump from Megascans, especially when dealing with multiple clumps combined into a single mesh.

    • @VisualTechArt
      @VisualTechArt  7 месяцев назад +1

      It's easy to adapt it for clumps of single strands, for the "billboards" it's a bit more dangerous and not necessarily possible for how I see it :)

    • @IbtesamSadiq
      @IbtesamSadiq 7 месяцев назад

      @@VisualTechArt I am not talking about the billboard. I am talking about the actual 3d mesh. With nanite we don't need billboards anymore.the link that mentioned above is for high quality 3d scanned grass. Image is just a thumbnail. Will this method work on compound mesh?

  • @fddesign
    @fddesign Год назад

    Is there a way to apply this for trees? Maybe, it's too complicated by there complexity? PivotPainter2 remain the best option? But hard to apply if you don't have 3DSmax to generate the PP2 Texture :(

    • @VisualTechArt
      @VisualTechArt  Год назад +3

      I think it's possible to do something entirely procedural with few restrictions :D I may give it a go in the future actually.
      If you want to tackle the problem by yourself I'd say that you can start by applying this exact bend (not as strong) to the entire tree and then make a second layer of bend added on top for the branches ;)

    • @dylankuzmick3122
      @dylankuzmick3122 Год назад

      @@VisualTechArt How would you approach a second layer of bend? Unless it's a species with a straight trunk, I'd say you might have to separate the branches into unique objects to access their pivot points. I'd also think you might have to manually align the z axis of the object to the branch length. I don't think this should be too difficult for a second layer, but more detailed trees might have 3-5 layers of unique branching so idk how to do something like that.

    • @VisualTechArt
      @VisualTechArt  Год назад +1

      @@dylankuzmick3122 Well it depends heavily on the structure of the asset I would be working on. Let's say you have a pine with a very straight trunk and horizontal branches, you can easily break down the movement into 2 layers and apply them on top of each other (kind of in the same way I did in the video to make the grass blades point straight up before bending them) :)

  • @jeronimocanale8124
    @jeronimocanale8124 Год назад

    Does this work with nanite?? Cause ive tried it and it creates really weird things. Amazing tut btw

    • @VisualTechArt
      @VisualTechArt  Год назад

      There are some people that made it work, one thing is that you have to swap the object position node for the particle one I think

  • @abelov001
    @abelov001 Месяц назад +1

    Thank you for the tutorial. Is there any way to use it with custom wheat mesh ?

    • @VisualTechArt
      @VisualTechArt  Месяц назад

      It depends on how you make the mesh, as long it's compliant, yes :)

  • @unlinkedgames6595
    @unlinkedgames6595 2 года назад +1

    I have a problem with the custom node: even if i write it in the same way return float2(-cos(a); sin(a)); i can't compile the shader, i get these errors
    [SM5] /Engine/Generated/Material.ush(2620,22): error X3000: syntax error: unexpected token ';'
    [SM5] /Engine/Generated/Material.ush(2620,30): error X3000: syntax error: unexpected token ')'
    [SM5] /Engine/Generated/Material.ush(2626,22): error X3000: syntax error: unexpected token ';'
    [SM5] /Engine/Generated/Material.ush(2626,30): error X3000: syntax error: unexpected token ')'
    Any idea?
    Thank you kindly.

    • @VisualTechArt
      @VisualTechArt  2 года назад +2

      It's return float2(-cos(a), sin(a)); you have to use a simple comma ',' to separate the float2 terms, not a semicolon ';'

    • @unlinkedgames6595
      @unlinkedgames6595 2 года назад +1

      @@VisualTechArt Oh god, that single point! Thank you, now it works!

  • @slabbash4233
    @slabbash4233 2 года назад

    Nice tutorial! my grass stretches vertically when you change the height parameter, and it doesn't look like yours, but I did everything the same as you, what could be the reason? And how can this be fixed? I need the grass not to stretch in length.

    • @VisualTechArt
      @VisualTechArt  2 года назад +1

      You sure you implemented everything correctly? Is it just stretched or stretches during the bending animation?

    • @slabbash4233
      @slabbash4233 2 года назад

      @@VisualTechArt yes, exactly like yours. Stretches during bending. Could this be because my terrain is up on the Z axis? I had to do this to avoid problems with water.

    • @mr49000
      @mr49000 Год назад

      I believe the reason it doesn't work is because the grass might be Nanite Enabled. I got really weird effects similar to what you describe. Once I turned it back to normal Static Mesh it turned out like in the video. If there's a version of this tutorial but working with Nanite foliage it would be great. But as it stands it doesn't support it. Great tutorial though!

  • @unrealengine5-storm713
    @unrealengine5-storm713 Год назад

    Really nice appreciate your contribution to the community

  • @MrTeathyme
    @MrTeathyme 2 года назад +2

    Wow!
    Now we just need a way to apply local wind forces!
    Would love to see a tutorial for that if you can figure out a way (or a point in the right direction to figure it out myself haha)

    • @VisualTechArt
      @VisualTechArt  2 года назад +2

      I'm planning a video about that for the future, but in the meantime... Why not override locally the wind parameters with a rendertarget? ;)

    • @jamesonvparker
      @jamesonvparker Год назад

      Hi! I am also interested in this. I want all my wind to point towards an actor. Imagine a small black hole that pulls things towards it. I’m trying to figure out how to accomplish this, studying videos like yours. I would be super grateful for a video on the subject.

  • @xurongge7177
    @xurongge7177 Год назад

    learned a lot! thanks for your tutorial!😀

  • @plasid2
    @plasid2 2 года назад

    If you thing you know something about shader some random dude from youtube spitting in face xD amazing job, maybe river water next tutorial?

    • @VisualTechArt
      @VisualTechArt  2 года назад +2

      Ahahahahah it's more a matter of how you apply the little knowledge you have, fancy things are just many simple concepts put together :D

  • @Link-hx5qk
    @Link-hx5qk 4 месяца назад

    I have an issue, I do exactly the same as you and it's not working, my grass appear under the ground, lmao. When I slide the value in the bend intensity, it moves as it should, but under the ground. I feel like there's something off about the height and the bend intensity but I can't find the problem, I tried to put a minus in front of some values but it doesn't work, please.

    • @VisualTechArt
      @VisualTechArt  4 месяца назад +1

      Oh well xD flip the world upside down and you're fine :)
      Maybe there is the default orientation of the mesh itself? Can't do much from here to help you :(
      But if you got the movement right there must be some stupid sign or something like that around

    • @Link-hx5qk
      @Link-hx5qk 4 месяца назад

      @@VisualTechArt I've figured out where the problem comes from, thanks !

    • @ansh9677
      @ansh9677 3 месяца назад

      @@Link-hx5qk Hello I am having the same problem, do you maybe remember how you solved the problem on your end

    • @Link-hx5qk
      @Link-hx5qk 2 месяца назад

      @@ansh9677 Oh, sorry for the late answer, I'm not sure but I think that I took a grass model that I already had, which had two planes stick with each one having two opposed directions. Obviously it is twice more demanding in terms of ressources but this is the only solution that I found.

  • @everInfinity
    @everInfinity 2 года назад

    Are you italian? Thanks for the video!

  • @Lorenzo_3D
    @Lorenzo_3D 2 года назад

    Any reason to not use the slerp (spherical linear interpolation)?

    • @VisualTechArt
      @VisualTechArt  2 года назад

      Yep, if you plot the path a vertex follows from start to end position, it isn't a circumference section! :)

    • @Lorenzo_3D
      @Lorenzo_3D 2 года назад

      True. I wander how big of a visual difference it would be to use the slerp with some dampening based on the distance from the root of the blade. And the difference in cost of your system and a slerp based one, even tho I would guess they are very close.

    • @VisualTechArt
      @VisualTechArt  2 года назад

      @@Lorenzo_3D I guess so... My bending function itself is not that expensive actually, has only simple operations and two trigonometric functions, while the slerp I believe is more trig and less operations in total. If you ever test it let me know how it goes and if it's visually good :D

  • @zakkco
    @zakkco Год назад

    I have everything set up the way you do, but my grass blade curves from the top and bottom. making a c shape. do you know how i could fix this?

    • @VisualTechArt
      @VisualTechArt  Год назад

      May be because your pivot point is at the centre of the mesh, or because you're not looking at an instanced mesh and the Object Position node in that case returns the centre of the object :)

    • @zakkco
      @zakkco Год назад +1

      @@VisualTechArt i cant figure out how to adjust the pivot point. also, when i paint the grass using the foliage tool. the grass curves around a single cylinder. and grass further from whatever point is picked for the cylinder is streched and curved even more. i cant get it to effect each blade individually

    • @zakkco
      @zakkco Год назад

      I actually fixed the pivot point. but i am still having the problem with the foliage tool and every instance of the grass blade sharing one cylinder they all wrap around from both directions

    • @VisualTechArt
      @VisualTechArt  Год назад

      I meant: is your mesh pivot point at the base of your grass? Otherwise it may be you have the wrong Height value set in the shader?

    • @marcelouiki7220
      @marcelouiki7220 Год назад

      same problem i pretty sure my pivot point is at the base, but for some reason when i add the material my grass start to become fat and big, why you just dont share the material, why we need to copy everything ...
      if someone have a solution my grass is making a C shape i try differents height but nothing to do

  • @diogostahnke2368
    @diogostahnke2368 Год назад

    have you placed every blade individually?

  • @DrTheRich
    @DrTheRich Год назад

    I can be wrong, but putting an if statement in the shader is quite expensive. Maybe there is a way that the value never gets 0 in the first place.

    • @VisualTechArt
      @VisualTechArt  Год назад

      These nodes basically never get compiled as an actual branch in the shader code :)

  • @josha10cio
    @josha10cio Год назад

    If I buy the sample scene can this be migrated to UE 5.1?

    • @VisualTechArt
      @VisualTechArt  Год назад +1

      To be honest I don't see why it shouldn't work, but apparently some people tried to reimplement it by following the tutorial had few issues. So in the near future I'm gonna check it personally and eventually add the UE5 version directly on Gumroad :)

    • @VisualTechArt
      @VisualTechArt  Год назад

      I just had a look in my project, which was recently migrated to 5.1 and everything looks fine :)
      If you buy it and have any issue just let me know!

    • @josha10cio
      @josha10cio Год назад

      @@VisualTechArt Could I just buy your migrated 5.1 scene now? Since you have it working and I wouldn't have to troubleshoot

    • @josha10cio
      @josha10cio Год назад

      I did end up buying it and opening it in unreal 5.1, but it doesn't seem to be working correctly. All I see is the brown landscape mesh. I am pretty novice in Unreal also.

    • @UnrealGuru
      @UnrealGuru Год назад

      I followed the tutorial, set-by-step in UE 5.1 Everything works pretty good from the first try

  • @0805slawek
    @0805slawek 2 года назад

    Why not just use gradient texture form black bottom and white top and bend that way?

    • @VisualTechArt
      @VisualTechArt  2 года назад +1

      Because here the objective was to obtain an accurate bend of the mesh (aka consistent length, thickness, shape throughout the animation) and not something eyeballed to not look immediately wrong :D

  • @ConradSly
    @ConradSly 9 месяцев назад

    anyone know how to convert his custom HLSL node to material nodes? @26:50

    • @ConradSly
      @ConradSly 9 месяцев назад

      I figured out that if you divide the radians by 4, then follow the rest of the logic of the expression by inputing the result of the division into a negative cosine into a Make Float 2 X input, and the result of the division into a sine then into the Make Float 2 Y, you get the same result as the custom expression. I guess this is because the CMOT Float 2 has a specific range defined so we need to remap the the angle a bit.

  • @YashRathod05
    @YashRathod05 Год назад

    Any way i can control the speed of wind?

    • @VisualTechArt
      @VisualTechArt  Год назад +1

      You can change the panning speed of the noise for that :)

    • @YashRathod05
      @YashRathod05 Год назад

      @@VisualTechArt Thank You

  • @纪云良
    @纪云良 3 месяца назад

    怎么添加卡信息 为什么我总是添加不上

  • @Live.GamerGuy
    @Live.GamerGuy 4 месяца назад

    can anyone share this project if anyone made pls

    • @VisualTechArt
      @VisualTechArt  4 месяца назад

      You can grab it by following the link in the description :)

  • @iamthetinkerman
    @iamthetinkerman Год назад

    How optimized is this?

    • @VisualTechArt
      @VisualTechArt  Год назад

      It's not the cheapest grass at all, but it is always better to test locally and decide with numbers at hand :)

  • @Tystros
    @Tystros Год назад

    This is very cool, but I'd really love to see your take on a realistic grass wind animation that *also* cares about performance. especially when having grass with a lot of vertices, doing 700 instructions per vertex for wind like this is just too much.

    • @VisualTechArt
      @VisualTechArt  Год назад

      While I agree with your comment, I think you would be surprised by how well this would be handled by modern GPUs :) Definitely going to add some optimisations to this in the future though

  • @Stygmire
    @Stygmire 4 месяца назад +1

    Foremost, THANK YOU for all the information, technique, and knowledge you have provided us.
    I was able to implement your solution successfully. As well, I was able to swap out the height-calculations for the ObjectRadius node since it can be responsive to instance/object scale.
    I DO have a question / request. I understand this is all free as in beer, so feel free to ignore, but...the normals. Is it possible to generate basic-detail on the blade of grass? I'm just-dangerous enough with just-a-little knowledge to know it can be done, but clueless enough to not-really be able to it directly - lol.
    Specifically, I was looking to marry techniques between your excellent work as well as this fellow: ruclips.net/video/YxE9yN9uOXU/видео.html He's running a breakdown on the techniques used for grasses in Ghost of Tsushima. It uses a bezier-curve which can flex fine, but doesn't preserve length like your implementation does. I love you both but in your camp here, the blade is so-long, it shouldn't get any longer or shorter. However, he does have a nifty way of generating normals that it makes a nice vein down the middle of the blade, with some slight/tunable curvature at the edges as well to really sell a 'curved' blade of grass.
    Both your solutions are excellent in their own ways, both VERY performant for the visuals. However, sans using a texture-map, is it possible to demonstrate how one might create a vein/normal-detail from your solution?
    Again, feel free to ignore me, but otherwise, much-appreciated on the teachings; keep 'em coming. :D

    • @VisualTechArt
      @VisualTechArt  4 месяца назад

      Hey :) cheers
      For the normals in the video I show how to compute the correct ones, once you have them (or whatever kind of normals you choose to go with) you can just add on top more details.
      For example through the Material Function BlendAngleCorrectedNormals and so on :)

  • @FunwithBlender
    @FunwithBlender Год назад

    Overall, I believe there is room for improvement in the tutorial. While the math solution provided works well within the specific setup you shared, it does not function correctly when applied to foliage or procedural materials. It seems to only work as intended for single mesh objects. I spent the last 8 hours meticulously reviewing and ensuring that my nodes match exactly, but despite that, the material breaks completely. This suggests that important information might have been omitted from the tutorial, making it challenging to achieve the desired results in these specific scenarios. The meshes should not spiral into circles and not be placed on the grounds or on the ground in single file... additionally the mesh is not suppose to scale disproportionately like it does for anyone following along. This is an advanced grass tutorial, but its not the best way to do things and charging 20 dollars for the answers on Gumroad is outrageous When the average person is only interested to see your approach more so than use in production as is. You blitz through the node setup on fast forward forcing uses to play at 0.25 speed which is not enjoyable... I found the math part interesting I was hoping to see it it all come together but alas something critical was clearly omitted from the tutorial....meaning its a giant waste of time

    • @VisualTechArt
      @VisualTechArt  Год назад

      Thanks for the feedback, I'll try to be clearer next time. Wasn't expecting this since many people before you were able to make it work without problems :(

    • @FunwithBlender
      @FunwithBlender Год назад

      @@VisualTechArt loved the math part just want to say the way you explained things was great, I dont want to poop on your hard work... I appreciate you. I know how hard it is at times explaining complex topics. Out of the 10 wind and grass tutorials yours was the most exciting to learn it was unfortunate
      but thanks for everything either way

  • @谢进
    @谢进 4 месяца назад

    How to use on Nanite model, can pay

    • @VisualTechArt
      @VisualTechArt  4 месяца назад

      I believe someone already explained it in the comments, the main issue is the ObjecPosition node, which returns a different data with Nanite meshes, you have to change it with Instance Position or something like that, don't remember exactly now :)

  • @PrinceBrosnan
    @PrinceBrosnan 9 месяцев назад

    I am so stupid that I don't understand what the matter is here
    how does this win the megaskan + their wind system?
    I do not understand the truth (it is from the stupidity of my own, and not from the fact that it is useless, no it is probably cool)

    • @PrinceBrosnan
      @PrinceBrosnan 9 месяцев назад

      i need 2,000 leaves for the bush each leaf a separate object and with simulated physics and maximum natural wind
      I see in your work the kinship of my thought,
      but I do not understand at all how to implement my task

    • @VisualTechArt
      @VisualTechArt  9 месяцев назад

      For shapes like bushes I think my system would need more work to adapt to their shape and different behaviour.
      This is not meant to be against some other systems (like megascan) is just a different thing :)

    • @PrinceBrosnan
      @PrinceBrosnan 9 месяцев назад

      @@VisualTechArt thank you, I follow you

  • @纪云良
    @纪云良 3 месяца назад

    有人在吗 我的卡信息添加不上买不了这个 谁能帮帮我

    • @VisualTechArt
      @VisualTechArt  3 месяца назад

      I don't know, maybe text me on Discord and we can sort it out :)
      You find the invite in the description of the video