Great video series on this brilliant tool. Well done and thank you very much for sharing ;) On this video, when I use the node difference for remove the grass from the rocks it creates a fairly large empty circle. In fact, the smaller the rock, the bigger the circle ! Best
Exactly what I was waiting for, thank you. Can't wait to see the solution for removing meshes based on landscape painted layers. Hope this is possible!
It should be possible, as we can extract information from the landscape material layers. You should use the Landscape pin instead of the Landscape height. I'm not that familiar with that topic though, I'll have to educate myself more on this matter.
@@adrien_logut I've taken a look at the landscape option. Struggling to find anything related to the landscape material. If I find anything on it, I'll let you know. Thanks for the videos!
@@adrien_logut Like I indicated on the previous video, this would be extremely crucial. I can see that the landscape layers get cached in the PCGWorldActor, but I have no clue how to access that data in the PCG graph, didn't have much luck with randomly trying things out either. Could you maybe get back to us with information on that? Maybe just a short tip, if possible?
Very good video, only small issue is that everything is too small, adding new box is sometimes so small that it is not possible ready text there and I need to watch it stick on the monitor surface. Also the most important part of the screen the PCG graph is in subtitles area for whole video.
I finally made it through this one. I hope we'll touch a little bit on making it appear more realistic. For instance, some plants would grow in clumps or small areas and not randomly distributed uniformly. Maybe masks or something?
This looks great! But, somehow I don't like that this one node is called "Difference", when it is really doing something significantly more complicated... so I asked ChatGPT for some suggestions for alternative names: - Size-based filtering - Overlapping removal - Point cloud subtraction - Geometric exclusion - Intersection pruning - Size-matching culling - Point cloud differencing - Spatial filtering - Shape-based masking - Point cloud cleaning Just posting this here, because I had this idea while watching the video, and maybe someone finds it useful.
Difference is the most generic word for this operation, because it means different things depending on the input data! We can't add "Points" to the name since it is dealing with any Spatial data. Between 2 volumes, it is clearer what the difference means. With points, it's a bit more challenging. I tried to explained it in the video (recorded some explanations) but felt it was too confusing, at least for a second video and it was better to go with intuition. We'll see to add more info in the doc for this node, thanks for the feedback!
@@adrien_logut Yeah, it is probably better to have a generic, inaccurate, term, than a specific, but incorrect one. But at least I notice during coding that names like "numElements" are really bad if I try to "reunderstand" my C++ code a few months later on (which should be similar for Blueprints). But, I don't know, if the operation in the video can do many different things depending on its context or settings, then "Difference" might just be the best word for it, if that is the primary common element of all the different things it can do.
Hey, awesome series! I would love to see an episode about pcg spawning world partitioned level instances. For example spawning "dungeos" or "towers" across our landscape.
Thanks :) Level instances flow is not very well supported at the moment, and it will not probably be in 5.2, as we need to change a few things to the backend.
Hello Adrien. Thanks for your awesome videos. I realized that you were also part of the Electric Dreams deep dive video. I was wondering why in the sample your guys used a union node before each difference node but you did not use it this example. Thanks
Hello! The default behavior for the difference node is to do an union, so implicitly we have a union done. You can add a union node before if you want to be explicit. Note also that those videos are from me when I was less knowledgeable about the system, so there might be some places I did something not useful or optional!
Great video thank you! One thing I can't seem to wrap my head around is if you have different size static meshes in a single static mesh spawner, how do you set different size bounding boxes for those meshes? You have a single rock mesh in your example, but I am trying to spawn a small city using different sized buildings into a single static mesh spawner, so getting rid of overlap accurately is difficult. I either get the larger meshes overlapping or too much space between the smaller meshes.
Indeed that's something limited right now and would need custom logic. What you could do is create your own custom node that takes all the points, then assign to each point a mesh via an attribute. Then for each one also change the bounds according to the mesh bounds. With that you can then so a self pruning to remove all points that would overlap otherwise. That's way more advanced stuff and we are talking internally to make this more accessible since it is an often requested feature.
Adrien, firstly, many thanks to you for this wonderful framework and the tutorials. It helps a lot. Let me ask you: Is it possible now to sample LandscapeLayerInfo, actually get access to the layer weight value? My idea is to create material for a landscape with several layers, and each layer will represent a different biome. Like forest, desert etc. And now PCG will populate content related to each biome.
I know you've said Splines in episode 4, until then is there a hint you can give for where to attach the spline to get it as input data? I've tried attaching a spline component to multiple places, but can't seem to get the data as a PCG graph input.
GetSplineData should yield you a spline! The easiest way is to create a new actor, add a spline component and a PCG component. Then in the PCG graph, use GetSplineData with ActorFilter at Self and you will have your spline :)
Great video series you have here. I do have a small question for an issue I am having while attempting to add the Foliage to the BP. How do I prevent the grass from crashing the Editor when attaching the nodes either at the beginning or the end of the line? I have not been able to place any foliage to the landscape before it crashes to desktop. It appears that PCG is very laggy to use over the original Procedural Spawner. Is there something I am missing like a setting some place? I have noticed it will use 97% (64GB) system Memory and 1% GPU (8BG) Memory once I enable the Static Mesh Spawner. Is there a way to fix this?
Thanks! this is an exciting feature. is there a way to mask the peaks and valleys of the terrain, or different density for foliage which spawn on the slopes?
I can tell you mine, but that would not be really representative, as I have a 4090 and a 7950X. Spawing the full landscape that I have in the video is still giving me 120fps
First, thanks for the awesome videos (and plugin !). I was wondering if I could use it along with my Procedural Mesh (or a standard static mesh) instead of a Landscape ? Can I feed the Surface sampler node with the surface of a static mesh ? The Actor input comment says that if "Parse actor components" is enabled, shapes and primitives should work but I can't manage to have a scatter along their surface. Thanks !
Pretty awesome plugin thanks for your work Adrien ! Is there a way to block the ground normal from passing it to the meshes ? Like I always want my trees to be vertical even when spawning on a slope.
@@adrien_logut Just figured out how to do this and I want to add that you can have several transform points. I have the first one filter out the points that are on steep slopes, where I don't even want to spawn trees, and then the other one I use to align the trees
Thank you for the tutorial series! :) Is there a way to create a natural setup where you have bigger objects surrounded by smaller objects surrounded by even smaller objects?
@@adrien_logut Thanks for your reply. :) I have something like this in mind: ua-cam.com/users/liveLV2IILNzs58?feature=share&t=3029 . I tried for a while, but I don't know how to work with CreatePointsGrid. :(
Is there no "cache" node similar to the animBp cache node to reduce the spaghetti code? Using the difference node and having to make sure no assets intersect can get messy very quickly. I'm very excited about this plugin. I was about to start creating one but now I'm just waiting for this to be completed.
The landscape is not changing as we don't have this functionality yet. I'll need to look at the rule to know exactly what they are spawning, probably gravel and packed actors :) also there are 2 rules there. One for the big assembly, and one for the clearing. And the clearing was adjusting automatically from the big assembly. For the automatic part, when the scene change, we see if it impacts PCG, and if so we re-generate.
Hi there! We need more videos. thank you for these. Q: I don't have the same options in the "StaticMeshSpawner" node. Under "MeshEntries" I don't have "descriptor". Is the version you're using newer?
It is! I'm on the latest commit of 5.2, preview 1 is a bit older. We are in active development, and this will be in the final release of 5.2 so I wanted to make sure my videos don't become obsolete too fast!
Hi! Thanks for sharing this. I havent sit down yet to apply the knowledge learned here but i was wondering: how are instances handled by unreal in this case? is all that space one huge instance actor or how is it? thanks!
I'm not an expert on this, but my understanding is that we have a single component ("Instanced Static Mesh Component" (ISMC) or "Hierarchical Instanced Static Mesh Component" (HISMC)) on the PCGVolume for a given mesh, and we add a chunk of instances in one go, all "stored" under the same component.
@@adrien_logut Thanks. This is impressive and useful work nonetheless (specially coming from somebody working in Houdini Engine for a while), but i wonder how performance is behaving. My experience is that if you have an instance component covering a huge chunk of land it can have some problems as it is loading all of it, so you need to be a bit careful on that. My question is on that direction, but again, havent had time to sit down and apply what it is here and test for myself. Thanks!
Of course having a gigantic volume covering your world isn't gonna work. That's why we have support for partitioned volume, where we spawn partition actors on a grid, and each of them will have the reponsability to generate within their bounds. With that each actor will be loaded/unloaded using the normal streaming system for actors :) Note that it only works on a World Partition map though
Is possible to use landscape material masks to spread procedural foliage? I used this masks or materials to spread foliage in UE version 4.27 and 5.1 This new procedural generation is awesome!
@@adrien_logut thanks a lot for answer, I'm trying, but I can't find a way to use landscape layer blend. how can I use Layer blend? for example I have 8 Layers with different foliage, how can I choose this layers?
I'm very interested, is there a way to combine PCG with Landscape hightmap and material. Flatening surface under cliffs, huge rocks, or maybe houses would be a very useful option.
While doing it I was wondering if I could do it like this. I think there should be a way, so I'll dive a bit more into it and see if I can include it in another video!
At 10:56, what is the purpose for using the bounds modifier to reduce the size of the boxes, rather than just reducing the size of them with the surface sampler node?
As stated in the video, you can have very big bounds in the surface sampler, just to make sure to have a certain distance between all your sampled points. So you can set big bounds, then modify them to suit your needs
And it is good idea to spawn grass like static meshes instead of real foliage? This is the question for I still did not found answer. Everybody just do it like that.
It should be possible, as we can extract information from the landscape material layers. You should use the Landscape pin instead of the Landscape height. I'm not that familiar with that topic though, I'll have to educate myself more on this matter.
Hi Adrien. Is there any way to prune static meshes after spawning? The issue i'm having is that the static meshes I'm spawning do not have similarly sized bounds, so ideally I want to be able to remove collisions AFTER spawning and calculating those bounds accurately. e.g. I have a tall slim tree, and a wide short tree, in the same mesh entry array on the static mesh sampler node.
No you can't you have to prune it before. Once they are spawned they can't be removed. So you have to assign the meshes before hand, partition your points on the mesh attribute, pass it into a loop subgraph to extract the bounds. This video might help you ua-cam.com/video/Q_NoeoPP3zE/v-deo.htmlsi=pd8jFPhvXQl3LdIX
Also, please find a way to set instanced meshes rather than spawning; that would make all the difference. The foliage tool already places instanced meshes, I can imagine reusing the code to automate the placement of meshes with the plugin.
We are using instanced meshes, not sure what is your point. You can check the component created on the PCG volume after generation, it's an Instanced Static Mesh Component
@@adrien_logut awesome! Been looking for something to finally let us get foliage up on massive worlds again. Ue5 and the changes to landscapes really killed our current pipe.
Can the actor be chosen based on an attribute of the landscape? For example, if I have a texture object I sample in my landscape material that contains information about how well the landscape holds water at any given spot (this is nice for determining how dark the dirt is etc) and I want to use the new tools for many small flowers, can I sample the same information to determine the probability to spawn each flower species? If so that is a huge improvement over my current procedural workflow as I have to use different landscape layers and my resolution for plant communities is only as good as however many layers I can make. It would feel phenomenally more real to have that be a property that is determined based on the wetness values I've got and not the wetness class I have to make to fit it into a layer.
It is possible :) that's a bit more advanced and I need to introduce more concepts before being able to do that. But you can get information from the landscape, and you can set an attribute for each point telling which mesh to spawn!
Wow, that sounds amazing - YOU need to be making videos haha. I'd love to know moew about how you extract information like wetness from your landscape - are you creating splatmaps in something like houdini?
Great video but i find i have trouble identifying in the video the node types in the graph as they are small on screen. Would be good to zoom into this area . Does anybody know how to zoom into video on PC like you can pinch zoom into youtube on mobile?
Thanks a lot for this tutorial! It's helping a lot :) Is it possible, somehow, to spawn meshes "in AO" of other bigger meshs? Like small rocks between bigger ones? Btw: are you french? Your name sounds very french :P
@@adrien_logut Par AO j'entend Ambiant Occlusion, je suis certain que tu vois ce que c'est :) baguette baguette J'entends par là, une façon de placer les des petits cailloux dans des recoins, baguette baguette 🥖
Ah oui! C'est une bonne question... Nativement en PCG non je ne pense pas que ce soit possible, mais si en Blueprint t'es capable d'aller chercher cette info, tu peux créer un set de points PCG en Blueprint :)
@@adrien_logut Super merci :) et dernière petite question, est-ce qu'il existe un moyen de projeter/sample d'autres PCG volumes ? J'essaye de faire spawn des PCG sur d'autres PCG (génération de ville procédurale), mais je n'arrive pas à sampler autre chose que le landscape. Est-ce seulement possible ? Je me suis dis qu'il fallait que les PCG communiquent entre eux, mais je ne comprends pas comment fonctionne la node Output, ou du moins : comment la récupérer depuis un autre graph?
On a pas d'interoperation entre les differents PCG components pour le moment. Mais tu peux utiliser des "Subgraph" pour chainer des operations. Tu as aussi "GetActorData" et "GetPropertyToParamData" pour aller chercher des infos sur des acteurs externes.
If you are talking about exposing them to the outside, like PCG Component, it is not possible for now. We are working on it right now, we'll see if it is ready enough for 5.2 or 5.3. You can go the other way around and have a blueprint in your scene, and use "PropertyToParamData" to get values from this blueprint. That will allow you to customize from the outside.
You are the best!!! I have a question for you : What was shown at the exhibition, the mix of materials, procedural adjustment of the environment, etc., all this is configured in the same Blueprint? I hope your tutorials will further explain how to do this. I started using chat gpt to write code for ue (I'm too dumb for that) and it helps me with the generation procedure, cheat code while waiting for your next video😂
You don't have to write code to use PCG. In the demo, we used the blueprint to easily change parameters, like the forest density, because we don't have the option to do it directly on the graph (like material instances and parameters). That's my current task though so we are working on it!
@@adrien_logut I just play with it, try to make process automatically. For example ctrl c+v and code automatically create scene depends on what in your local library. I try to😁gpt can write code on c++ or piton, but so far not so good)
Yeah it's the first videos, learning it the hard way. You could always try to use a plugin to zoom on the video. Though watching it in 1440p, it's pretty sharp to my eyes.
Great video series on this brilliant tool. Well done and thank you very much for sharing ;)
On this video, when I use the node difference for remove the grass from the rocks it creates a fairly large empty circle. In fact, the smaller the rock, the bigger the circle ! Best
Exactly what I was waiting for, thank you. Can't wait to see the solution for removing meshes based on landscape painted layers. Hope this is possible!
It should be possible, as we can extract information from the landscape material layers. You should use the Landscape pin instead of the Landscape height. I'm not that familiar with that topic though, I'll have to educate myself more on this matter.
@@adrien_logut I've taken a look at the landscape option. Struggling to find anything related to the landscape material. If I find anything on it, I'll let you know. Thanks for the videos!
So cool!!!
Can t wait for the next one !
@@adrien_logut Like I indicated on the previous video, this would be extremely crucial.
I can see that the landscape layers get cached in the PCGWorldActor, but I have no clue how to access that data in the PCG graph,
didn't have much luck with randomly trying things out either.
Could you maybe get back to us with information on that? Maybe just a short tip, if possible?
Landscape layer blend weight are stored as float attributes and can be used with attributes operations and the filter points node
Thanks. This is a good series and I like the step-by-step approach.
Very good video, only small issue is that everything is too small, adding new box is sometimes so small that it is not possible ready text there and I need to watch it stick on the monitor surface. Also the most important part of the screen the PCG graph is in subtitles area for whole video.
I finally made it through this one. I hope we'll touch a little bit on making it appear more realistic. For instance, some plants would grow in clumps or small areas and not randomly distributed uniformly. Maybe masks or something?
And that's where you see I'm a dev not an artist :D
This looks great!
But, somehow I don't like that this one node is called "Difference", when it is really doing something significantly more complicated... so I asked ChatGPT for some suggestions for alternative names:
- Size-based filtering
- Overlapping removal
- Point cloud subtraction
- Geometric exclusion
- Intersection pruning
- Size-matching culling
- Point cloud differencing
- Spatial filtering
- Shape-based masking
- Point cloud cleaning
Just posting this here, because I had this idea while watching the video, and maybe someone finds it useful.
Difference is the most generic word for this operation, because it means different things depending on the input data!
We can't add "Points" to the name since it is dealing with any Spatial data.
Between 2 volumes, it is clearer what the difference means. With points, it's a bit more challenging. I tried to explained it in the video (recorded some explanations) but felt it was too confusing, at least for a second video and it was better to go with intuition.
We'll see to add more info in the doc for this node, thanks for the feedback!
@@adrien_logut Yeah, it is probably better to have a generic, inaccurate, term, than a specific, but incorrect one. But at least I notice during coding that names like "numElements" are really bad if I try to "reunderstand" my C++ code a few months later on (which should be similar for Blueprints). But, I don't know, if the operation in the video can do many different things depending on its context or settings, then "Difference" might just be the best word for it, if that is the primary common element of all the different things it can do.
Hey, awesome series! I would love to see an episode about pcg spawning world partitioned level instances. For example spawning "dungeos" or "towers" across our landscape.
Thanks :) Level instances flow is not very well supported at the moment, and it will not probably be in 5.2, as we need to change a few things to the backend.
@@adrien_logutIs the level instance Flow something you have on the roadmap? Even if not on 5.2
Yes!
Wonderful stuff! Keep 'em coming
Hello Adrien. Thanks for your awesome videos. I realized that you were also part of the Electric Dreams deep dive video. I was wondering why in the sample your guys used a union node before each difference node but you did not use it this example.
Thanks
Hello!
The default behavior for the difference node is to do an union, so implicitly we have a union done.
You can add a union node before if you want to be explicit. Note also that those videos are from me when I was less knowledgeable about the system, so there might be some places I did something not useful or optional!
Awesome video! PCG is so powerful. Will there be more tutorials on how to make more complex scenes? Thank you :)
I don't know if I'll have a super complex scene at the end, I'm not a good artist :P but we'll see more advanced features for sure!
@@adrien_logut awesome I can't wait to see! Thanks again.
Awesome can't wait!
keep it coming man, nice video
Thanks for your work,I really need it.😘
thank you it's very informative! do more please
Great video thank you! One thing I can't seem to wrap my head around is if you have different size static meshes in a single static mesh spawner, how do you set different size bounding boxes for those meshes? You have a single rock mesh in your example, but I am trying to spawn a small city using different sized buildings into a single static mesh spawner, so getting rid of overlap accurately is difficult. I either get the larger meshes overlapping or too much space between the smaller meshes.
Indeed that's something limited right now and would need custom logic. What you could do is create your own custom node that takes all the points, then assign to each point a mesh via an attribute. Then for each one also change the bounds according to the mesh bounds. With that you can then so a self pruning to remove all points that would overlap otherwise.
That's way more advanced stuff and we are talking internally to make this more accessible since it is an often requested feature.
@@adrien_logut thank you! Looking forward to seeing future developments 😀
Weee! Haven't watched it yet, but I bet it's awesome!
Very great!! Good job making the tutorial!!
Quick question - Why is nothing connected to the "Output" node? What is that even for if it's not used? (The red "Output" to the right of everything)
Also still looking into things, but maybe this output is meant to be for communicating between different graphs? Just a guess :D
It's a good guess! As I said on the first video, the output node is useful if you chain graphs. We'll see it in the next episode ;)
awesome vid dude thanks
Excellent. Thank you!
Adrien, firstly, many thanks to you for this wonderful framework and the tutorials. It helps a lot.
Let me ask you: Is it possible now to sample LandscapeLayerInfo, actually get access to the layer weight value?
My idea is to create material for a landscape with several layers, and each layer will represent a different biome. Like forest, desert etc. And now PCG will populate content related to each biome.
Yes it is, just use the Landscape pin instead of the Landscape Height, and you'll have those weights as attributes to your points :)
I know you've said Splines in episode 4, until then is there a hint you can give for where to attach the spline to get it as input data? I've tried attaching a spline component to multiple places, but can't seem to get the data as a PCG graph input.
GetSplineData should yield you a spline! The easiest way is to create a new actor, add a spline component and a PCG component. Then in the PCG graph, use GetSplineData with ActorFilter at Self and you will have your spline :)
next part please
👀
Great video series you have here. I do have a small question for an issue I am having while attempting to add the Foliage to the BP. How do I prevent the grass from crashing the Editor when attaching the nodes either at the beginning or the end of the line? I have not been able to place any foliage to the landscape before it crashes to desktop. It appears that PCG is very laggy to use over the original Procedural Spawner. Is there something I am missing like a setting some place? I have noticed it will use 97% (64GB) system Memory and 1% GPU (8BG) Memory once I enable the Static Mesh Spawner. Is there a way to fix this?
Thanks! this is an exciting feature. is there a way to mask the peaks and valleys of the terrain, or different density for foliage which spawn on the slopes?
Yes! We'll see about it in the next episode! But look at NormalToDensity and DensityFilter
Love this!
Hi Adrien! I’d like to know the FPS when working with such large spawn areas. Great vids, keep them coming!!
I can tell you mine, but that would not be really representative, as I have a 4090 and a 7950X. Spawing the full landscape that I have in the video is still giving me 120fps
Thank you
First, thanks for the awesome videos (and plugin !). I was wondering if I could use it along with my Procedural Mesh (or a standard static mesh) instead of a Landscape ? Can I feed the Surface sampler node with the surface of a static mesh ? The Actor input comment says that if "Parse actor components" is enabled, shapes and primitives should work but I can't manage to have a scatter along their surface. Thanks !
Next episode ;) but if you want to try it out before, use MeshToPoints
Hi, very useful tutorial! How could I exclude the WaterBodyRiver running through the forest? It doesn’t work with tag.
WaterBodyRiver is just a spline right ? Tagging the spline and use GetSplineData should allow you to exclude the spline.
Pretty awesome plugin thanks for your work Adrien !
Is there a way to block the ground normal from passing it to the meshes ? Like I always want my trees to be vertical even when spawning on a slope.
Yes! You can use the TransformPoints :) just check the absolute rotation option!
@@adrien_logut Just figured out how to do this and I want to add that you can have several transform points. I have the first one filter out the points that are on steep slopes, where I don't even want to spawn trees, and then the other one I use to align the trees
Thank you for the tutorial series! :)
Is there a way to create a natural setup where you have bigger objects surrounded by smaller objects surrounded by even smaller objects?
Not sure if I understood correctly! But you can generate points around others points, to spawn trees for example then some smaller trees around.
What node are you using for spawning points around other points? If i want to have moss spawned on and around 30% of the rocks as example?
"CreatePointsGrid" should help you for that :)
@@adrien_logut thank you! Love the videos, keep it up 😁
@@adrien_logut Thanks for your reply. :)
I have something like this in mind: ua-cam.com/users/liveLV2IILNzs58?feature=share&t=3029 .
I tried for a while, but I don't know how to work with CreatePointsGrid. :(
Is there no "cache" node similar to the animBp cache node to reduce the spaghetti code? Using the difference node and having to make sure no assets intersect can get messy very quickly.
I'm very excited about this plugin. I was about to start creating one but now I'm just waiting for this to be completed.
See next episode where subgraphs are introduced. Every area can have own subgraph for Trees, Rocks, Grass etc
waiting for the next promised landscape video, when is it going to be released? Thank you
Writing and graph are done, need to record it and edit :) probably tomorrow or Friday
Спасибо
Is there a way to sample mesh intersection with a landspace and spawn extra meshes along that intersection?
How did they make the tech demo, where moving one rock/cliff changes the whole landscape automatically?
The landscape is not changing as we don't have this functionality yet. I'll need to look at the rule to know exactly what they are spawning, probably gravel and packed actors :) also there are 2 rules there. One for the big assembly, and one for the clearing. And the clearing was adjusting automatically from the big assembly.
For the automatic part, when the scene change, we see if it impacts PCG, and if so we re-generate.
You gave an example using natural , but what do you think about using them to create buildings such as architecture?
You can :)
Hi there! We need more videos. thank you for these.
Q: I don't have the same options in the "StaticMeshSpawner" node. Under "MeshEntries" I don't have "descriptor". Is the version you're using newer?
It is! I'm on the latest commit of 5.2, preview 1 is a bit older. We are in active development, and this will be in the final release of 5.2 so I wanted to make sure my videos don't become obsolete too fast!
Hi! Thanks for sharing this. I havent sit down yet to apply the knowledge learned here but i was wondering: how are instances handled by unreal in this case? is all that space one huge instance actor or how is it? thanks!
I'm not an expert on this, but my understanding is that we have a single component ("Instanced Static Mesh Component" (ISMC) or "Hierarchical Instanced Static Mesh Component" (HISMC)) on the PCGVolume for a given mesh, and we add a chunk of instances in one go, all "stored" under the same component.
@@adrien_logut Thanks. This is impressive and useful work nonetheless (specially coming from somebody working in Houdini Engine for a while), but i wonder how performance is behaving. My experience is that if you have an instance component covering a huge chunk of land it can have some problems as it is loading all of it, so you need to be a bit careful on that. My question is on that direction, but again, havent had time to sit down and apply what it is here and test for myself. Thanks!
Of course having a gigantic volume covering your world isn't gonna work. That's why we have support for partitioned volume, where we spawn partition actors on a grid, and each of them will have the reponsability to generate within their bounds. With that each actor will be loaded/unloaded using the normal streaming system for actors :)
Note that it only works on a World Partition map though
Is possible to use landscape material masks to spread procedural foliage? I used this masks or materials to spread foliage in UE version 4.27 and 5.1
This new procedural generation is awesome!
Yes it is, just use the Landscape pin instead of the Landscape Height, and you'll have those weights as attributes to your points :)
@@adrien_logut thanks a lot for answer, I'm trying, but I can't find a way to use landscape layer blend. how can I use Layer blend? for example I have 8 Layers with different foliage, how can I choose this layers?
I'm very interested, is there a way to combine PCG with Landscape hightmap and material. Flatening surface under cliffs, huge rocks, or maybe houses would be a very useful option.
There is no modification of the landscape in PCG atm. Don't know if it can be done in Blueprints though.
Is it possible to use the ''collision mesh'' as a reference to avoid overlaping?
While doing it I was wondering if I could do it like this. I think there should be a way, so I'll dive a bit more into it and see if I can include it in another video!
@@adrien_logut Can be easier :)
At 10:56, what is the purpose for using the bounds modifier to reduce the size of the boxes, rather than just reducing the size of them with the surface sampler node?
As stated in the video, you can have very big bounds in the surface sampler, just to make sure to have a certain distance between all your sampled points. So you can set big bounds, then modify them to suit your needs
And it is good idea to spawn grass like static meshes instead of real foliage? This is the question for I still did not found answer. Everybody just do it like that.
great feature. btw, can we detect the surface color so it generate specific item according to the surface color? it would be nice
It should be possible, as we can extract information from the landscape material layers. You should use the Landscape pin instead of the Landscape height. I'm not that familiar with that topic though, I'll have to educate myself more on this matter.
@@adrien_logut thank you
will there be tutorial on pcg assemblys? Like the video showcase
Probably yes! But since it's an advanced feature relying on a few concepts I haven't introduced yet, I'll go step by step.
@@adrien_logut alright, looking forward to it, thanks for the amazing tutorials :)
Other question: Why does this graph work without anything hooked up to the output? What is the output used for?
Oh this one was already answered in another comment.
How do I hook up custom Input Pins on the PCG Graph? I cant find anything on the component.
Same thing than the output, it is used with graph chains!
Hi Adrien. Is there any way to prune static meshes after spawning? The issue i'm having is that the static meshes I'm spawning do not have similarly sized bounds, so ideally I want to be able to remove collisions AFTER spawning and calculating those bounds accurately. e.g. I have a tall slim tree, and a wide short tree, in the same mesh entry array on the static mesh sampler node.
No you can't you have to prune it before. Once they are spawned they can't be removed.
So you have to assign the meshes before hand, partition your points on the mesh attribute, pass it into a loop subgraph to extract the bounds. This video might help you ua-cam.com/video/Q_NoeoPP3zE/v-deo.htmlsi=pd8jFPhvXQl3LdIX
@@adrien_logut That was perfect! I've implemented this and it's doing exactly what I needed. Thank you so much for the help!
Projectpointonlandscape node missing in ue5.2 please help?
Useful tip: try to type what you want to do in the node list ;)
You'll find the Projection node !
Also, please find a way to set instanced meshes rather than spawning; that would make all the difference. The foliage tool already places instanced meshes, I can imagine reusing the code to automate the placement of meshes with the plugin.
We are using instanced meshes, not sure what is your point. You can check the component created on the PCG volume after generation, it's an Instanced Static Mesh Component
can you spawn the mrandomly every playthrough without moving the spawning area
Yes you can! The randomness is driven by the seed, so changing the seed at runtime then generate will produce different results :)
gracias
Is it Possible to create small levels that's procedurally ran through the same plug-in?🤔
Do you mean generated at runtime? If so yes!
Everyone is using the landscape system, which is quite broken in large scales. Looked into spawning om static meshes instead?
Next episode!
@@adrien_logut awesome! Been looking for something to finally let us get foliage up on massive worlds again. Ue5 and the changes to landscapes really killed our current pipe.
is there a way to rotate in steps? like instead of rotating randomly between two values if you can rotate in steps of 45 or 90 degrees?
With the native node Transform Points no, it is fully random on the range. But you can create your own Blueprint to do it :)
thank you :)
Can the actor be chosen based on an attribute of the landscape? For example, if I have a texture object I sample in my landscape material that contains information about how well the landscape holds water at any given spot (this is nice for determining how dark the dirt is etc) and I want to use the new tools for many small flowers, can I sample the same information to determine the probability to spawn each flower species? If so that is a huge improvement over my current procedural workflow as I have to use different landscape layers and my resolution for plant communities is only as good as however many layers I can make. It would feel phenomenally more real to have that be a property that is determined based on the wetness values I've got and not the wetness class I have to make to fit it into a layer.
It is possible :) that's a bit more advanced and I need to introduce more concepts before being able to do that. But you can get information from the landscape, and you can set an attribute for each point telling which mesh to spawn!
@@adrien_logut then I am super excited for this journey and am ready to come along. Thanks for being the guide.
Wow, that sounds amazing - YOU need to be making videos haha. I'd love to know moew about how you extract information like wetness from your landscape - are you creating splatmaps in something like houdini?
Great video but i find i have trouble identifying in the video the node types in the graph as they are small on screen. Would be good to zoom into this area . Does anybody know how to zoom into video on PC like you can pinch zoom into youtube on mobile?
windows key + Plus key on numpad
Thanks for the feedback, I'll try to zoom more on the nodes in future videos ;)
@@RMC_ that does not zoom into vid - only to the surrounding interface (on windows AFAIK)
@@juiceLoosner it zooms the whole screen
Ahh windows key. I will try that. I read cnt key. My bad. Thanks
🙌🏿🙌🏿Thank you
Thanks a lot for this tutorial! It's helping a lot :) Is it possible, somehow, to spawn meshes "in AO" of other bigger meshs? Like small rocks between bigger ones?
Btw: are you french? Your name sounds very french :P
Yeah I'm French 🥖
And sorry I'm not sure what AO means :D
@@adrien_logut Par AO j'entend Ambiant Occlusion, je suis certain que tu vois ce que c'est :) baguette baguette
J'entends par là, une façon de placer les des petits cailloux dans des recoins, baguette baguette 🥖
Ah oui! C'est une bonne question... Nativement en PCG non je ne pense pas que ce soit possible, mais si en Blueprint t'es capable d'aller chercher cette info, tu peux créer un set de points PCG en Blueprint :)
@@adrien_logut Super merci :) et dernière petite question, est-ce qu'il existe un moyen de projeter/sample d'autres PCG volumes ?
J'essaye de faire spawn des PCG sur d'autres PCG (génération de ville procédurale), mais je n'arrive pas à sampler autre chose que le landscape. Est-ce seulement possible ?
Je me suis dis qu'il fallait que les PCG communiquent entre eux, mais je ne comprends pas comment fonctionne la node Output, ou du moins : comment la récupérer depuis un autre graph?
On a pas d'interoperation entre les differents PCG components pour le moment. Mais tu peux utiliser des "Subgraph" pour chainer des operations. Tu as aussi "GetActorData" et "GetPropertyToParamData" pour aller chercher des infos sur des acteurs externes.
How to expose the parameter or attributes to details panel?
If you are talking about exposing them to the outside, like PCG Component, it is not possible for now. We are working on it right now, we'll see if it is ready enough for 5.2 or 5.3.
You can go the other way around and have a blueprint in your scene, and use "PropertyToParamData" to get values from this blueprint. That will allow you to customize from the outside.
@@adrien_logut i found PropertyToParamData,but i do not know how to use blueprint variables to connect that one,which blueprin node can be use?
Complicated to answer by message without image support, but it will definitely be featured in a future video.
Bon on voie bien que tes un francophone qui parle anglais mais la vidéo est good GG ... :)
Merci 😅
You are the best!!! I have a question for you : What was shown at the exhibition, the mix of materials, procedural adjustment of the environment, etc., all this is configured in the same Blueprint? I hope your tutorials will further explain how to do this. I started using chat gpt to write code for ue (I'm too dumb for that) and it helps me with the generation procedure, cheat code while waiting for your next video😂
do you get it to write c++ or design blueprints?
You don't have to write code to use PCG. In the demo, we used the blueprint to easily change parameters, like the forest density, because we don't have the option to do it directly on the graph (like material instances and parameters). That's my current task though so we are working on it!
@@adrien_logut I tried to figure out how to set parameters in blueprint, but I couldnt figure it out. Maybe a quick hint? :D
"PropertyToParamData" node might do the trick
@@adrien_logut I just play with it, try to make process automatically. For example ctrl c+v and code automatically create scene depends on what in your local library. I try to😁gpt can write code on c++ or piton, but so far not so good)
牛逼~🥳
The text on these nodes are so hard to read. Video quality is not sharp even on 1440p.
Yeah it's the first videos, learning it the hard way. You could always try to use a plugin to zoom on the video.
Though watching it in 1440p, it's pretty sharp to my eyes.
Mon commentaire est has been, mais Merci ! 🥖
Mais non c'est toujours apprécié !
@@adrien_logut Le 666 like est quand même beau, désolé pour le futur 667
Spline pls!
Yes! I'll do it in episode 4 :)
@@adrien_logut thank you so much!
🙃