Пікірлер
@astrixx
@astrixx 22 сағат бұрын
Shit is not hard, it's easy to get 75-80% there, which for most cases is good enough. the last 10-15% is the tough work of fine-tuning it and experimenting to be perfect for your application. Game companies can afford to do that because each extra percent nets them more time they can keep a player addicted to their game.
@Oleg_UE5
@Oleg_UE5 Күн бұрын
Could we use load instead of sample? Its faster and we dont get into interpolation problem.
@ghislaingirardot
@ghislaingirardot Күн бұрын
You could and you should. I forgot this was an option at the time.
@devonroyer8044
@devonroyer8044 2 күн бұрын
THATS WHY HES THE GOAT! THE GOAT!!!
@boarnoah
@boarnoah 2 күн бұрын
This might be a silly question, but why is there a memory concern with the flipbook? Isn't it a single 4096x4096 texture that is sampled multiple times? Is that not particularly small in the grand scheme of things, in the case of a game that would utilize 2 or 2k textures for most assets?
@ghislaingirardot
@ghislaingirardot 2 күн бұрын
Height & Normal, that's already 2 4Ks, plus potential Crest map, that's 3. For one single wave set. You may need multiples for different ocean conditions or to break the tiling. And each flipbook only offers an actual 512px tile resolution so you might need 8Ks. So there's definitely a memory concern, especially compared to a mathematical approach where the memory cost is null. GPU memory isn't as tight as it used to be but is still a limited resource and I wanted to point out that using multiple 4Ks texture isn't as given as people might think, in any production.
@kettenotter
@kettenotter 3 күн бұрын
Amazing I was thinking about something like this for vr games where I don’t want to stress the gpu with distance field collisions. For the last problem you could just parent the particle system to the mesh and have the calculations in local space until it drops?
@ghislaingirardot
@ghislaingirardot 3 күн бұрын
Yup! There are lot of ways to go around this if you're willing to do a bit of manual labor. To do this automatically is another thing entirely :)
@omri1324
@omri1324 3 күн бұрын
Awesome! Looking forward to part 2!
@roadtoenviromentartist
@roadtoenviromentartist 3 күн бұрын
Other solution less complex.. im my case use in videogames when my lead don't want use fake particles with stripe billboards is: one emisor for impacting traced particles with the ceil surface where I use o the position of the hit and killed position generated death, 2nd emissor for spawned owned particles emisor taking position with a event handler, finish this one again with other emisor for create the droplets when hit the other emisor on the floor surface using a similar method that in the last situation. In all this process Iam not using CUSTOM nodal scripting. I apologize you because not speak english nice. I prepare this fx in less 10 minutes with a nice enhancement. I wish to know the advantges your complex and interesting propousal. Nice day guy.
@ghislaingirardot
@ghislaingirardot 3 күн бұрын
Not sure I understood. It sounds very... similar to what I suggested :D But yeah, there are always many different solutions.
@claremz2475
@claremz2475 6 күн бұрын
Help~ I can't find "Add Particle" from NeighborGrid3D, I'm using UE5.1
@ghislaingirardot
@ghislaingirardot 6 күн бұрын
Hi. It was likely a feature added somewhat recently. Feel free to do it the old way using HLSL, see 1:19:30
@lucasbaron5500
@lucasbaron5500 6 күн бұрын
when is the grass model tutorial, its awesome
@ghislaingirardot
@ghislaingirardot 6 күн бұрын
Let's say it's a work in progress... :p The scope of that third video changed and requires a lot of work. I'm trying to finish other things first.
@korakot2003
@korakot2003 9 күн бұрын
Quick question, I'm currently using latest version of unreal engine and I'm contemplating whether to use lod or nanite grasses for my game, which one is better for the current state of ue? Performance wise, thanks!
@ghislaingirardot
@ghislaingirardot 8 күн бұрын
Impossible to tell, foliage is still where Nanite suffers a lot. Performance will depend highly on your meshes/workflow/ability to accomodate for Nanite's weaknesses.
@korakot2003
@korakot2003 8 күн бұрын
@@ghislaingirardot thank you for the quick answer! Love ur stuff
@ghislaingirardot
@ghislaingirardot 8 күн бұрын
@@korakot2003 Np. Thanks, appreciated!
@1221fun
@1221fun 9 күн бұрын
Why your wind texture uv can scroll by it texture node self without any time node? 16:01
@ghislaingirardot
@ghislaingirardot 8 күн бұрын
It doesn't scroll, it's a render target generated via my wind system. I made a video about it.
@1221fun
@1221fun 8 күн бұрын
⁠​⁠@@ghislaingirardot oh! Thanks!
@QuakeProBro
@QuakeProBro 9 күн бұрын
I would love to see you implement this with the actor pooling you've mentioned. I might give it a shot aswell if I have the time. This could be like an automatic solution for limiting the amount of skeletal meshes you want to simulate at once, if there are multiple pawns interacting with foliage, since the system is dependant on the amount of pooled actors you have spawned in the beginning. We may need to implement prioritization around the player, since this is the area we want to see the effect all the time. And what about using two LODs of the skm, one with more bones and one super simplified with for example only the root bone, that is only used if another pawn in medium distance is interacting with the foliage? I have no idea if that would even be worth it regarding the extra work and the visual effect tho.
@ghislaingirardot
@ghislaingirardot 9 күн бұрын
Yup, doable. I did that at one point. The thing is, it adds quite a bit of nodes to implement the pooling thing, and even more so if you want to add a priority & LOD system, so because of the massive blueprint overhead, it can actually cost more to run that logic in BP than the performance gain it gives... In CPP that'd be a different story
@QuakeProBro
@QuakeProBro 9 күн бұрын
Hmm yeah that makes sense. I thought of comparing player position & instance transform inside the foliage actor, if it’s over a certain threshold we notify either the LOD0 pool or the LOD1 pool via an interface, see wether there is a skeletal mesh available and place it. The interface only sends over the transform to the pool. But I guess we would also need to store indices to return the correct skm to the pool + looping through the pool array to either compare transforms, get a bool or int, whatever we use to determine if a skeletal mesh is available or not. That indeed feels a bit much compared to simply spawn & destroy 😅 I‘ll test if this works for my project or not. I‘m still sad, that the lightweight instance system isn’t really working, since it sounds great on paper. Great video as always!
@ghislaingirardot
@ghislaingirardot 8 күн бұрын
@@QuakeProBro Yeah something like that would likely work. Pooling shouldn't too big of a hassle to implement tbh :) Good luck!
@andreik8885
@andreik8885 11 күн бұрын
I'm familiar a bit with c++ myself already (created a few not very complex game features), but I would still be looking forward to see your approach.
@ghislaingirardot
@ghislaingirardot 10 күн бұрын
Roger that, ty for your feedback!
@mendeleev_9H2PDsgXu7NmphCUEH
@mendeleev_9H2PDsgXu7NmphCUEH 11 күн бұрын
omg your videos is unpredictable fr fr
@ghislaingirardot
@ghislaingirardot 10 күн бұрын
Is that a bad thing? :D I go with the flow!
@somename371
@somename371 10 күн бұрын
​@@ghislaingirardot to me it isn't, it's always very interesting stuff!
@altindublaj7452
@altindublaj7452 11 күн бұрын
How's performance? It's for big projects?
@jamaalsineke2405
@jamaalsineke2405 12 күн бұрын
Awesome tutorial. How would this be applied to physical boids like other AI enemies, not Niagara particles
@jomesias
@jomesias 7 күн бұрын
If you use a mesh renderer and select the ai skeletal mesh it could work. But I’m not sure if they would run the AI behavior tree/ code !
@jamaalsineke2405
@jamaalsineke2405 7 күн бұрын
@@jomesias Interesting..... thank you for taking your time to comment. I appreciate you
@a.akhileshhwarxc0753
@a.akhileshhwarxc0753 15 күн бұрын
Really amazing, is there any possible to make the tutorial for waves and foam for sailing boat, thanks in advance 🐱
@Pengman19
@Pengman19 17 күн бұрын
1:14 where is this plugin located at?
@ghislaingirardot
@ghislaingirardot 16 күн бұрын
On my Patreon
@AK-trud
@AK-trud 17 күн бұрын
Hi, does checking off "World Position Offset Writes Velocity" setting on the InstancedStaticMesh component help with that velocity glitch? Didn't have opportunity to check it myself yet.
@AK-trud
@AK-trud 17 күн бұрын
FYI there is a typo at 13:22 :)
@ghislaingirardot
@ghislaingirardot 17 күн бұрын
It will but you need to write velocity for TAA & MoBlur. It's just too important to completely skip for such an effect.
@sigxfs
@sigxfs 18 күн бұрын
Amazing tutorial. Would you consider doing a tutorial for making an interactive snow material / system? I tried making one using parallax occlusion mapping and render targets but never got it fully working.
@juancarlosgzrz
@juancarlosgzrz 20 күн бұрын
Is there a way to implement this into my arch viz project?
@evanlane1690
@evanlane1690 20 күн бұрын
Yesssssss
@ghislaingirardot
@ghislaingirardot 21 күн бұрын
A couple of things from all the feedback I gathered: 1 - Static instances could be simply scaled to (0,0,0) for the skeletal swap, instead of removing/adding instances! You'd then need to store that index in the skeletal blueprint so you can revert that instance's scale back to its initial (x,y,z) scale to swap back with the static instance. 2 - Static instances could be configured to have a simple spherical collision and overlap events could be triggered on your character to get instances you'd be overlapping with. The 'OtherComp' hit component could be cast to an FoliageInstancedStaticMeshComponent and the 'OtherBodyIndex' would thus point to the instance's index, to trigger the skeletal swap. That would allow you get rid of the 'get instances overlapping sphere' method and solve the spatial query problem by letting Chaos handle that optimization on its own. 3 - The dual character capsule setup is unecessary. You can call 'IgnoreActorWhenMoving' function on the character's main capsule and provide the spawned skeletal actor to prevent the two-way interaction! Thanks to all of you for your very valuable feedbacks!
@JeckleCed
@JeckleCed 21 күн бұрын
Au lieu de supprimer une instance et l'ajouter de nouveau plus tard, il est possible de passer une transform avec un scale de zéro ( via la fonction UpdateInstanceTransform ) C'est une technique utilisé communement
@ghislaingirardot
@ghislaingirardot 21 күн бұрын
Ah ben oui je suis con! Je suggérais de faire ça dans le vertex shader mais on peut juste faire ça en effet xD
@Pengman19
@Pengman19 23 күн бұрын
Does this grass properly move when a player character walks through it? I apologize, but I watched the video and I still am not clear if it's physicalized in this manner.
@ghislaingirardot
@ghislaingirardot 22 күн бұрын
No but it would be fairly easy to implement thanks to the way wind is added. You can inject extra offset at the same time as wind, for things like interaction and let the shader do its thing.
@Pengman19
@Pengman19 22 күн бұрын
@@ghislaingirardot My 2 cents for your next video! 😀😅🤣
@ghislaingirardot
@ghislaingirardot 22 күн бұрын
@@Pengman19 My existing advanced grass interaction system/video outputs a velocity map that could simply added to the wind offset as-is. No need for an extra video :)
@Pengman19
@Pengman19 17 күн бұрын
@@ghislaingirardot I will check it out
@LyriaStudio
@LyriaStudio 24 күн бұрын
Hum, et si on utilise le lightweight instance, qui permet de changer automatiquement un ISM en actor correspondant, ce serais pas plus pratique ?
@ghislaingirardot
@ghislaingirardot 24 күн бұрын
Il y a toute une partie de la vidéo qui est dédié à ce sujet 🤷
@LyriaStudio
@LyriaStudio 23 күн бұрын
@@ghislaingirardot Mince, j'ai du looper, pourtant j'ai vue la vidéo entière 🤔
@ghislaingirardot
@ghislaingirardot 23 күн бұрын
@@LyriaStudio ben y a un chapitre LWI à 9:35 - Lightweight Instances :D
@swrcPATCH
@swrcPATCH 25 күн бұрын
Is this gonna run on mobile? And how "cheap" is it actually (like would you do this for actualy games)? I really like this idea tbh
@shannenmr
@shannenmr 26 күн бұрын
What I don't understand is EPIC has a HEAP of different more efficient data structures available in C++ they could expose to BP to help people out instead of everyone doing AllActorsOfClass / Sphere Overlap on their Character etc that everyone currently does... THierarchicalHashGrid2D (MASS and SmartObjects use), THierarchicalSpatialHash, TSpatialHashGridPoints, TPointHashGrid2, TPointHashGrid3, FSparseDynamicOctree3, TOctree, TOctree2, FSparseDynamicPointOctree3
@tmdquentin5095
@tmdquentin5095 26 күн бұрын
Est-ce qu'il ne serait pas simplement possible de faire un capsule trace sur le tick ou sur un timer et de simplément convertir les objets qui sont dans le hit?
@ghislaingirardot
@ghislaingirardot 26 күн бұрын
Tout à fait possible. Il a été porté à mon attention que tu peux configurer les static foliage asset pour avoir une simple primitive de collision et utiliser un overlap event sur ton character pour récuperer les instances avec lesquelles tu dois interagir! Tu peux cast le hit actor to FoliageInstancedStaticMeshComponent et le OtherBodyIndex corresponds ducoup a l'index de l'instance! Bien mieux que ce que j'ai montré dans la vidéo :)
@tmdquentin5095
@tmdquentin5095 26 күн бұрын
@@ghislaingirardot exactement, quelque chose de la sorte. Je crois que le mieux serait d'utiliser une interface au lieu d'un cast.
@abdoulraoufgambo
@abdoulraoufgambo 26 күн бұрын
Merci pour le bon contenu !
@ghislaingirardot
@ghislaingirardot 26 күн бұрын
Merci à toi pour ton retour! 👍
26 күн бұрын
I made similar thing about month ago and had most of the same problems and found few things. You don't need to replace skeletal meshes with static meshes, there is render static bool on skeletal mesh component, that renders it without bones and you can change it in runtime. I placed them in level as bp with sk components and tried to turn off tick on bp, but through insights I found that skeletal meshes are still ticking separetly, so you have to turn them off too, that was quiet heavy on CPU. There is also only tick pose when rendered option on sk component and you can also turn off simulate physics, when you are far from it. Disabling skin cache for sk asset can get you some performance, because you don't need it when its interactive.
@ghislaingirardot
@ghislaingirardot 26 күн бұрын
Oh, very interesting! Thanks for the info, I'll check that out.
@CAyou
@CAyou 25 күн бұрын
Crazy tip!!
@trevor4664
@trevor4664 22 күн бұрын
Are you available for hire? I could use some help creating a good interactive foliage system
@ghislaingirardot
@ghislaingirardot 22 күн бұрын
@@trevor4664 me? nop
@trevor4664
@trevor4664 22 күн бұрын
@@ghislaingirardot no the guy who started the comment thread
@kettenotter
@kettenotter 27 күн бұрын
I had the same experience with lightweight instances! What a pain. But in theory they can do things which are very hard to do by yourself. If I remember correctly they will do some conversion under the hood if you trace against them they will get converted as soon as you acess the underlying actor. So the pointer will point to an actor which doesn't exist yet. Or was it on trace hit? No idea. And no idea if it actually works. But sounds pretty cool especially if you don't have to replace line trace code and such.
@ghislaingirardot
@ghislaingirardot 26 күн бұрын
Yup, I've seen something like that using a trace hit. But what if I don't want to do traces? :D Or maybe the way to go is to do a multi-capsules trace in place, at the current's character position, and check hit actors :shrug: I dunno, it felt soooo sketchy to use haha. I'm sure it'll improve though.
@Ziboo30
@Ziboo30 26 күн бұрын
@@ghislaingirardot I really don't think it would be unmanageable to make it work large scale. I'm not super familiar with FoliageInstanes, but I am with ISM and tracing + switching is pretty fast. What I would do instead of a BVH, is to simply chunk all instances into cells (volumes), so you wouldn't iterate over all of thems, but only the ones in cell the player is currently in. Sure it will be a little more drawcalls depending on your cell size, but would definitly be worth it :) In 5.4 if you can use PCG and enable runtime partition generation, it will chunk them automaticly based on the Grid Size you choose :)
@ghislaingirardot
@ghislaingirardot 26 күн бұрын
@@Ziboo30 Yup! The way I see it, there are two ways this could be scaled up: 1) to support a large world, in that case yeah there are solutions like you mentioned it. ISMC could be used to create a grid, like you said. You could also make your foliage have simple collision and rely on overlap events on your character to get the ISMC & instance index upon overlap, and let Chaos do the heavy work of partitionning/spatialization. Definitely doable! 2) to support a large 'simulation context', meaning, have many actors interacting with the foliage or a large scale simulation to support wind etc. In that case this technique is definitely not scalable.
@davidcastellano3668
@davidcastellano3668 27 күн бұрын
could apply this to fluid flux?
@NathanLee-fg3bp
@NathanLee-fg3bp 27 күн бұрын
Hi! May I know how to slow down the scan outline effect and also how to make the blue color transparent (from the video 11:08)? Because I set my range to a very big number, the effect happen too fast, causing not gradually smooth transition. The blue color also covered up my entire sky and it doesn't look good. Thanks in advance! Fyi, the MF_ScanEffect_GetGridWorldPosition function can be fixed from (BPAC_Scan Component), I think it is from the [event begin play > set scalar parameter value > grid cell size default value], set the value other then 0, should be working properly
@ghislaingirardot
@ghislaingirardot 27 күн бұрын
Hi! The speed is set in the blueprint component, if I recall correctly? Regarding the blue color, hmm, that's just a color added in the post process material, so I suppose you could just get rid of it. You could also use a bilinear gradient to have that blue color fade in & out and have it show just at the edge of the scan effect. For your last point, yup, correct. That's what screwed the effect for most people, I added a note in the video description since then. Ty for your feedback!
@NathanLee-fg3bp
@NathanLee-fg3bp 23 күн бұрын
@@ghislaingirardot Tried it, it works! Could I ask is it possible to activate the reveal effect in level sequencer and how to change to post process happen based on location of mesh instead of the middle point of camera? For example, I want to get a close-up shot of reveal transition, so I need to set another camera for that. Do you have any suggestion or other resources if this is out of topic? Thanks again!
@VonchkynProduction
@VonchkynProduction 28 күн бұрын
Couple feedbacks as I finish this tutorial episode. Thank you so much for the free content. This is absolute gem. Everything is high quality, artistically and technically. With everything plainly shown. 14:16 - I love that you explain everything in depth, even though in the final product you don't really use the implementation. It really helps us understand what we are doing, instead of blindly following the tutorial. (TBH, I don't understand half the things about the Technical Art side, but it's nice to see what affects whatXD) About optimization - I was beyond surprised that the frame time was so low. I implemented mine in C++ (which is why it's been taking me longer than it should). Got the frame count to be around 0.03ms... I'm going to have to test it out in VR (maybe it'll be around 0.2 - 0.3ms?), which means if I'm going to use Forward Rendering, I will disable some more features, which might possibly decrease it even more (around the 0.2ms mark). Excited to go to the next episode.
@ghislaingirardot
@ghislaingirardot 28 күн бұрын
Thanks for your feedback!
@cg-school
@cg-school 28 күн бұрын
Cool video! Great chennel! Subscribed.
@KahramanlarMeydani
@KahramanlarMeydani 29 күн бұрын
Nothing makes sense. If you want to teach something, explain it step by step from the beginning to the end in a single video. Even if you made a blade of grass in Blender, explain how you did it. This way, nothing makes sense. You would only satisfy yourself.
@KahramanlarMeydani
@KahramanlarMeydani 29 күн бұрын
Personally, I am a novice and I didn't understand anything, my friend. Even idiots like me need to learn.
@ghislaingirardot
@ghislaingirardot 29 күн бұрын
@@KahramanlarMeydani Learn the basics first :) This is clearly an advanced topic.
@KahramanlarMeydani
@KahramanlarMeydani 29 күн бұрын
@@ghislaingirardot teach me from the basics
@ghislaingirardot
@ghislaingirardot 29 күн бұрын
@@KahramanlarMeydani Sure, I'll do a 40hrs long series on graphics programming and 3D modeling, starting from how circuit boards work and how electrons can be harnessed to build logic gates and create bit-operations.
@KahramanlarMeydani
@KahramanlarMeydani 29 күн бұрын
@@ghislaingirardot If you publish the work you did in this video in its raw form from start to finish without editing it with editing programs, people would understand much better what you did and how you did it. It would be like being in a classroom. This is exactly what is being asked of you. There's no point in joking about doing a 40-hour course. I am 30 years old. I have been developing high-level projects with Unity for 15 years. Now, I want to do something with Unreal, but since I am unfamiliar with the interface, everything remains unclear. Is it stupid or ignorant to want to see everything in this video in detail? Or should I go and spend four years at university just to make a wind effect?
@VonchkynProduction
@VonchkynProduction 29 күн бұрын
Is there any way to implement the outline effect with Forward Rendering, or is it only for Deferred Rendering? The World Normal node seems to be only supported by Deferred Rendering
@ghislaingirardot
@ghislaingirardot 29 күн бұрын
Forward rendering does not use GBuffers, so no, World Normal doesn't work with Forward rendering. Post process effects is one the Forward Rendering's weaknesses.
@VonchkynProduction
@VonchkynProduction 28 күн бұрын
@@ghislaingirardot ah I see. Thanks:)
@VonchkynProduction
@VonchkynProduction Ай бұрын
1:50 :D
@VonchkynProduction
@VonchkynProduction Ай бұрын
Hi I am a beginner UE5 developer. Is there a reason why you spawn the postprocess actor instead of just making it a component of the Player Controller? Also, what are the instances we have to set the post process priority to a high number? What could be some specific circumstances where overlapping volumes cause a problem? As always, thanks for the video:)
@ghislaingirardot
@ghislaingirardot Ай бұрын
Hi! 1) Nothing comes to mind, specifically. I could, I guess. I suppose it's good to compartmentalize and keep things separate though? You do you :) 2) I'm not sure. I'm guessing anytime you'd use a second post process volume that also uses a material, a priority would have be set?
@VonchkynProduction
@VonchkynProduction Ай бұрын
@@ghislaingirardot Oh okay! Thanks for the reply:)
@norvsta
@norvsta Ай бұрын
Great tutorial! Although I'm way out of my depth, I maintained enough neural buoyancy to get it all working up to 18:00 in UE 5.4.1. And now for the waves. And my question: would this work with Niagara Wave Pool system? Or even Houdini wave/particle sim brought into UE with the HoudiniNiagara plugin? TY again for the tut, I'll see if I can recreate that super simple water Material shader next.
@ghislaingirardot
@ghislaingirardot Ай бұрын
Ty! Like explained in the video, this system can, in theory, work with *any* system, as long as you can provide Niagara a way to sample the wave data like it's done in the material or whatever render pass. I'm not familiar with the Niagara wave pool system so I can't provide much more information. Buoyancy using Wave/Particle simulation is another topic but again, it's technically doable. Just have to provide Niagara the means to sample the wave height so that it can be sent to BPs
@AK-trud
@AK-trud Ай бұрын
Approximately after 30:00 my brain started to explode :)
@colelindbom6012
@colelindbom6012 Ай бұрын
Really cool stuff, Ive been working on a foliage generator in engine using geometry script and my own implementation of the LSystem branching algorithm.. with some tweaking it could output that point data no problem along with a generated mesh.
@ghislaingirardot
@ghislaingirardot Ай бұрын
Geometry scripting is awesome!
@Mittzys
@Mittzys Ай бұрын
blueprint struct 😱😱
@ghislaingirardot
@ghislaingirardot Ай бұрын
I liker danger
@tomtawadros
@tomtawadros Ай бұрын
This is fantastic.
@ghislaingirardot
@ghislaingirardot Ай бұрын
Ty! Sketchy though!
@JieDu-yj2vd
@JieDu-yj2vd Ай бұрын
It's more expensive to make vegetation interaction based on bones, so it's not as good as shader.
@ghislaingirardot
@ghislaingirardot Ай бұрын
Clearly, you haven't watched the video. This is not bones & it's a shader
@JieDu-yj2vd
@JieDu-yj2vd Ай бұрын
@@ghislaingirardot Sorry, I didn't finish reading it
@CGC_Studio
@CGC_Studio Ай бұрын
Nice work.happy to see you progress :)
@carlweiss830
@carlweiss830 Ай бұрын
I still don't understand how you created a random color for all the grass
@ghislaingirardot
@ghislaingirardot Ай бұрын
Color texture projected in a top down fashion using XY world coordinates to add random tint + using 'random value per instance' to further randomize things if you need to
@faimenDev
@faimenDev Ай бұрын
WOw!
@bringfire
@bringfire Ай бұрын
This just makes me smile. I joined your Patreon to support your work. Thanks for the amazing breakdown!
@ghislaingirardot
@ghislaingirardot Ай бұрын
Thanks for the support!