- 14
- 208 727
Adrien Logut
Canada
Приєднався 12 лип 2013
Computer Science Lover and Tools Programmer at Epic Games.
I started this channel first to talk about the new PCG plugin in Unreal Engine 5.2
I started this channel first to talk about the new PCG plugin in Unreal Engine 5.2
Unreal Engine 5.4 PCG - Ep 8 - Combining offline and online gen
Video tutorial to learn more about combining offline generation and online generation.
In this video we'll see:
* How to send data from one graph to the other
* How to sample multiple meshes
* How to use data pre-computed offline at runtime
Link to GitHub for tutorial material: github.com/Amathlog/TutorialPCG
My twitter if you want to be notified for future videos: amathlog
Link of the Unreal Source Discord: discord.com/invite/unrealsource
Link to tutorial in Epic Dev Community: dev.epicgames.com/community/learning/tutorials/j4xJ/unreal-engine-introduction-to-procedural-generation-plugin-in-ue5-2
PCG Biomes documentation:dev.epicgames.com/documentation/en-us/unreal-engine/procedural-content-generation-pcg-biome-core-and-sample-plugins-in-unreal-engine
Unreal Fest 2024 PCG Live Demo: ua-cam.com/video/j3ke6MmcaeY/v-deo.htmlsi=j2KPK45cq9J7FQNN
PCG documentation: dev.epicgames.com/documentation/en-us/unreal-engine/procedural-content-generation--framework-in-unreal-engine
00:00 Introduction with PCG Biomes
01:37 Setuping the producer graph
03:17 Combining it with the consumer graph
05:20 Infinite loop danger
05:54 Expected pins from producer data
08:13 Timelapse of a simple offline generation graph
09:32 Setup done!
09:53 Partition data on unique meshes
10:41 Create the loop
11:47 Extract the mesh for sampling
13:38 Filter points under a certain height.
17:22 Linear gradient on scale
18:58 Output the results
20:17 Let's tackle grass with runtime gen
21:57 Use the PCG Biome foliage material to mitigate popping
22:28 Read offline data for intersection
23:55 Disable bounds option in the static mesh spawner
24:42 Loop for copy points on trees
27:00 Output and spawn grass
27:59 Final result and conclusion
In this video we'll see:
* How to send data from one graph to the other
* How to sample multiple meshes
* How to use data pre-computed offline at runtime
Link to GitHub for tutorial material: github.com/Amathlog/TutorialPCG
My twitter if you want to be notified for future videos: amathlog
Link of the Unreal Source Discord: discord.com/invite/unrealsource
Link to tutorial in Epic Dev Community: dev.epicgames.com/community/learning/tutorials/j4xJ/unreal-engine-introduction-to-procedural-generation-plugin-in-ue5-2
PCG Biomes documentation:dev.epicgames.com/documentation/en-us/unreal-engine/procedural-content-generation-pcg-biome-core-and-sample-plugins-in-unreal-engine
Unreal Fest 2024 PCG Live Demo: ua-cam.com/video/j3ke6MmcaeY/v-deo.htmlsi=j2KPK45cq9J7FQNN
PCG documentation: dev.epicgames.com/documentation/en-us/unreal-engine/procedural-content-generation--framework-in-unreal-engine
00:00 Introduction with PCG Biomes
01:37 Setuping the producer graph
03:17 Combining it with the consumer graph
05:20 Infinite loop danger
05:54 Expected pins from producer data
08:13 Timelapse of a simple offline generation graph
09:32 Setup done!
09:53 Partition data on unique meshes
10:41 Create the loop
11:47 Extract the mesh for sampling
13:38 Filter points under a certain height.
17:22 Linear gradient on scale
18:58 Output the results
20:17 Let's tackle grass with runtime gen
21:57 Use the PCG Biome foliage material to mitigate popping
22:28 Read offline data for intersection
23:55 Disable bounds option in the static mesh spawner
24:42 Loop for copy points on trees
27:00 Output and spawn grass
27:59 Final result and conclusion
Переглядів: 2 119
Відео
Unreal Engine 5.4 PCG - Ep 7 - Generating bigger worlds
Переглядів 3,5 тис.2 місяці тому
Video tutorial to learn more about the generation modes to generate bigger maps. In this video we'll see: * How to scale graphs to cover a big landscape * What are PCG Partition actors and PCG World actor * Pitfalls of partitioning * Hierarchical Generation * Runtime Generation, with Hi-Gen. Link to GitHub for tutorial material: github.com/Amathlog/TutorialPCG My twitter if you want to be notif...
Unreal Engine 5.4 PCG - New Features Ep 2 - Spline surfaces/subgraphs with loops and feedback
Переглядів 9 тис.8 місяців тому
New series of videos to learn how to use the Procedural Generation Content plugin in UE 5.4. Link to GitHub for tutorial material: github.com/Amathlog/TutorialPCG My twitter if you want to be notified for future videos: amathlog Link of the Unreal Source Discord: discord.com/invite/unrealsource Link to tutorial in Epic Dev Community: dev.epicgames.com/community/learning/tutorials/j4...
Unreal Engine 5.4 PCG - New Features Ep 1 - Array of meshes
Переглядів 12 тис.9 місяців тому
New series of videos to learn how to use the Procedural Generation Content plugin in UE 5.4. Link to GitHub for tutorial material: github.com/Amathlog/TutorialPCG My twitter if you want to be notified for future videos: amathlog Link of the Unreal Source Discord: discord.com/invite/unrealsource Link to tutorial in Epic Dev Community: dev.epicgames.com/community/learning/tutorials/j4...
Unreal Engine 5.3 PCG - Short Ep 2 - Custom Blueprint Node Follow-up - Point processing
Переглядів 3,4 тис.10 місяців тому
Series of videos to learn how to use the Procedural Generation Content plugin in UE 5.2/5.3. This short second video talks about: * Use the point color for debug color * Point processing in Blueprint nodes DISCLAIMER: This plugin is still in experimental mode, to learn more about Experimental, see: docs.unrealengine.com/5.3/en-US/experimental-features/ Link to GitHub for tutorial material: gith...
Unreal Engine 5.3 PCG - Ep 6 - Custom Blueprint Nodes
Переглядів 10 тис.Рік тому
Series of videos to learn how to use the Procedural Generation Content plugin in UE 5.2/5.3. This sixth video talks about: * The limit of the select points node * How to create oue own custom blueprint node, for your custom logic * What are the advantages and drawbacks of BP nodes DISCLAIMER: This plugin is still in experimental mode, to learn more about Experimental, see: docs.unrealengine.com...
Unreal Engine 5.3 PCG - Ep 5 - Parameters and runtime execution
Переглядів 12 тис.Рік тому
Series of videos to learn how to use the Procedural Generation Content plugin in UE 5.2/5.3. This fifth video talks about: * How to create generic graphs in PCG with Graph Parameters * How to create Graph Instances * How to Generate at runtime, switching graph/parameters DISCLAIMER: This plugin is still in experimental mode, to learn more about Experimental, see: docs.unrealengine.com/5.3/en-US...
Unreal Engine 5.2 PCG - Short Ep 1 - Sampling on any static meshes
Переглядів 16 тис.Рік тому
CHECK THE PINNED COMMENT FOR THE UPDATED DEPENDENCY METHOD ON 5.3 AND BEYOND Testing a new format to learn specific uses of the Procedural Generation Content plugin in UE 5.2. This first short video talks about how we can sample on something else than a landscape. DISCLAIMER: This plugin is still in experimental mode, to learn more about Experimental, see: "docs.unrealengine.com/5.1/en-US/exper...
Unreal Engine 5.2 PCG Plugin - Ep 4.1 - Update on Splines + Discord/FAQ
Переглядів 6 тис.Рік тому
Hi everyone! Quick video to give you an update on the final version of 5.2 that changed how the Surface Sampler is working, making the previous tutorial with Splines not working. Previous tutorial: ua-cam.com/video/IE9Evj5suYA/v-deo.html DISCLAIMER: This plugin is still in experimental mode, to learn more about Experimental, see: "docs.unrealengine.com/5.1/en-US/experimental-features" My twitte...
Unreal Engine 5.2 PCG Plugin - Ep 4 - Splines
Переглядів 22 тис.Рік тому
CHECK THE PINNED COMMENT FOR IMPORTANT INFORMATION Series of videos to learn how to use the Procedural Generation Content plugin in UE 5.2. This fourth video talks about: * How to use Landscape Splines and Splines in PCG * How to exclude splines from generation * How to sample points inside a spline * How to use density and attributes to influence spawning probablity and points properties. DISC...
Unreal Engine 5.2 PCG Plugin - Ep 3 - Mesh sampler, Density filtering and Subgraphs
Переглядів 20 тис.Рік тому
Series of videos to learn how to use the Procedural Generation Content plugin in UE 5.2. This third video talks about: * How to get an actor from the scene * How to sample points on a mesh * How to transfer one point cloud into another point cloud reference * Density filtering with either random noise, or using a dot product with a reference vector * Use a graph in another graph, to chain compu...
Unreal Engine 5.2 PCG Plugin - Ep 2 - Bounds and exclusions
Переглядів 30 тис.Рік тому
Series of videos to learn how to use the Procedural Generation Content plugin in UE 5.2. This second video talks about: * What are the points bounds and how they influence the generation * How to remove overlapping points in the same point cloud. * How to remove overlapping points between 2 point clouds * How to quick profile the graph, to detect nodes that takes a lot of time DISCLAIMER: This ...
Unreal Engine 5.2 PCG Plugin - Ep1 - Introduction
Переглядів 62 тис.Рік тому
IF YOU ARE ON 5.4 AND BEYOND, CHECK THE PINNED COMMENT FOR IMPORTANT INFORMATION Series of videos to learn how to use the Procedural Generation Content plugin in UE 5.2. This first video talks about: * How to setup a project to use PCG * How to scatter points on a landscape * How to spawn static meshes on those points * How to introduce randomness in meshes. Episode 2 is out! ua-cam.com/video/L...
hmm ich finde den PCGPARAMDATA nicht und komme nicht weiter :(
It would be Attribute Set
Hello again, I would also like to know how to sink the assets into the ground surface. Thanks.
Hello, I just started working with this new PCG system. I worked through your first two videos so far. I was wondering how to adjust for cliffs, so my trees are only spawned on semi-flat surfaces. Thanks.
Hey there, come join the discord if you have questions! discord.com/invite/unrealsource
Amazing as always buddy!! Thanks for making this amazing system.
Truly incredible stuff. My goodness... This works like a charm.
Hmm I can't even find this in my list of plugins, anyone have any help with this?
Check the pinned comment
Hi Adrien, talking about offline generated content. I have one question you may be able to answer :) My team and I use a lot of alembic files created with Houdini. To get these into Unreal, we are using the "PCG External Data Interop" Plugin. This works to a certain degree pretty nicely, but I encountered a problem with the "Alembic to PCG Exporter". I would like to understand something about the usage of this one - using the python class "unreal.PCGLoadAlembicBPData" (or blueprints) the alembic file path parameter is not exposed and is only a editor property. Is there a reason for this? And if not, is it possible to make this public as someone who is not into C++? Nonetheless, thanks for the great tools, your helpful videos and have a nice day :) EDIT: I may found a solution. The "PCGLoadAlembicBPData" class is exposing a "set_editor_property" function and in my first test, I could overwrite the alembic file path with this. Awesome :D In case it works, I am posting the solution for future reference as an answer.
Couldn't post a link - so if you are interested, search for 'Quicktip - Batch convert alembic files to PCG Assets'.
I believe this is the only video on the subject, great! Straight forward and very insightful, you got a new subscriber :D
Glad you liked it!
Thank you for all of this info. I have "is partitioned" in the pcg component enabled. I have a closed loop spline in the scene that pcg uses via spline sampler to get interior points and spawn meshes. When i enable is partitioned, i see in the outliner the separate PCG Partition actors that now get created under the PCGWorldActor, but each of them is identical.. when you select each one individually, it highlights in the scene the entire generated area, instead of highlighting the individual 'sections' like shown in this video. it's as if each section is the size of the entire spline area and they're placed in the same location. The names of the PCG Partition actors are all the same also.
You are duplicating the work, the spline is sampled entirely on all partition actors. Check again the pitfalls section. You can try Cull Points Outside Actor Bounds also (I use it in Episode 8)
Can you cover the "Get Texture Data" node and how to make it work with PCG partition and not blow up the RAM usage? I have the need to sample a large map (8km by 8km) and a large texture covering it (4K)
I think we discovered an issue with the texture that just draw more and more memory, so we'll have to investigate that front. I would recommend to use the Get Texture Data at the unbounded level and sample it downstream.
Cool! Thanks for your tutorial! I am trying to apply priority using the PCGMesh Selector Weighted Entry but I dont know how to get the mesh attribute to point. Is there any way to get the mesh in PCGMesh Selector Weighted Entry? Or I can only use dataasset to apply priority?
You can't have the mesh as attribute and using the weighted entry. The selection must be done before with Match and Set attribute, that's where it will select the mesh to spawn with your weights. You don't have to use a data asset, you can have an array of meshes and an array of weight. You can then use add attribute from one array to the other to have an attribute set that have pairs of mesh and weight and use in the match and set.
Thanks! Now I solved it by using an array of meshes and an array of weight!
difference节点放在SurfaceSampler 后面就有效 放在前面就是失效的!
Check the follow up video!
Why not using the "Cull Points Outside Actor Bounds" node instead of the intersection one?
Why not? :) They both do the same thing I use the other one in the next video.
@@adrien_logut Ah good. I was just wondering if there was any specific advantages...
If I need to process point data individually inside a loop how can I do this? I want to take a set of points and build a connected graph. I need to build an array of edges, compute point to point distance, etc. but i can't figure out how to get the individual point positions. I can't figure out how to get any data from a PCGPoint object. I tried the get transform attribute and get vector attribute nodes, tried with attribute names "Position" and "$Position". Nothing works.
Well on a whim I just tried to copy the position data to a new attribute set and now i can access it there. I don't know why I couldn't access to original data. So much of this stuff is not intuitive. I really wish the documentation was better. I still don't understand the data types well at all.
You can have a look to the next video, it shows how to loops on point As for the "static" attributes, they are part of the PCG point structure. When you do get points on the point data, it's PCG point and you can break it to get it's internals like any structure in BP. You'll find the transform. Come to discord people will help you
@@adrien_logut which discord?
discord.com/invite/unrealsource
Can we use the print str node inside a PCG Blueprint Element's execute function? I can't get it to work. How can we debug?
Yes you can, you can also put breakpoints that will be hit when the node gets executed.
Hello! It's me again, Adrien from the future! In 5.3 and beyond, to force dependencies you need to use the gather node and its dependency only pin! You can plug the World Ray Hit into the In pin of the gather node and the output of the first static mesh spawner in the dependency.
Hi you mentioned that from ue 5.3 the dependency check for the world ray hit will be implemented. do you know how to access it ? thank you!
Gather node, dependency only pin
at min 2:25 i add the spline on my viewport and is not visible, im on 5.4
Hello there, I have a problème whit the Input node, my vision of unreal 5,4. I follow Hal the step in your tuto but when I want to develop the input node I have only the in available. somme on ave a ID?
Check the pinned comment ;)
In case problems around 04:20 with foliage not working properly: instead of one Difference to which you connect Landscape data and output to Surface Samplers, you need to create Difference nodes AFTER each Surface Sampler. Put SS to Source and Spline Sampler to Differences. Output connect instead of previous connection between Surface Sampler and whatever (Transform Points or Subgraph).
That's the followup video! It changed in 5.3
@@adrien_logut Oh, I havent reached that far! I'll check it!
"Thankfully, I can cancel execution and immediately remove this abomination." Words to live by, in so many situations. :D
Amazing! Thank you so much for walking through this.
But which method is the most optimized for open world? Which one to choose from the 3?
It's not different methods, they are using the same underlying system, just for different purposes. Partition (normal or Hi-Gen) is the way to go for big maps, with runtime gen for details.
@@adrien_logut OK. Thank you very much!
Quick question Adrien, is there a video for the Biome sample you mentioned? I'm going over the documentation you provided in the description but am wondering if there is a video since I can't seem to find one, gotta get my hands on that grass material lol
I didn't do one no, and we don't have an official one, only the doc
This is exatcly what we needed, thank you Adrien!
Great tutorial
You are a lifesaver
I might be on the wrong path here but I've been struggling to use PCG for decorating larger rooms. It seems like its geared toward talking to landscape, specific meshes, or mathematically calculated points, but it doesn't like more general world interactions (like doing ray traces). I've been using blueprint functions with PCG to fill that gap, but it's extremely slow in comparison. Would it be possible to have a tutorial where you show us how to use PCG to do something like decorate a room with garbage, maybe some sort of wall lights, cables etc to showcase the ability to use PCG outside of landscape or single mesh solutions?
5.5 will come with a World Raycast node that will be prefect for that. I'll plan to do some tutorial with new 5.5 features, but in the meantime you can have a look how it was done in the Live Demo presented at UE Fest, to fill a space station with clutter. ua-cam.com/video/j3ke6MmcaeY/v-deo.html
@@adrien_logut Thank you!
Heya thanks for this, always great to learn more about PCG - here's a question - any ideas how you can run C++ to perform processing on a node before spawning a mesh? In my game I want to be able to use the power of PCG graphs to create my levels but also NPC encampments/dungeons and it would be a lot easier if I could get available points and then decide through code what needs to go there. It's probably staring me right in the face but I can seem to locate anything in the docs 🙂
Of course, almost all PCG nodes are done in C++, so you can definitely design your own nodes to implement your own logic. Usually I advice to try to do it in pure PCG first, to get a grasp of how the system works. But if you feel too limited, you can go in C++. Inspire yourself from the existing nodes and come to Discord if you have questions :)
Hi Adrien, thank you so much for your awesome video. Could I ask you a question. In Unreal Engine 5.4, I can't find the type of variable (AttributeSet) like in Unreal Engine 5.3, could you let me know how to fix it?
Hum that's weird, it's either Attribute set or PCG Param Data.
@@adrien_logut Thank you so much. I fixed.
Absolutely great vid as always even a year later! A question I had while watching this tho, is there a way to skip an index/point instead of the BP picking random points? This would be pretty neat for more repetitive control for splines etc. I tried with a Modulo node but didnt get it to work :D
Oh crap already 1 year has passed... You have full control with the BP to output the points you want! You can also check the follow up video with the Point Loop Body function that can return false to discard a point. Come on Discord if you want to talk about it :) it's better than the UA-cam comments x)
@ I actually managed to get this to work with the Modulo node! It’s skipping an index each time. Thanks for the knowledge you share, it’s really really valuable, also I joined the Discord so I’ll see you there some day :)
I tried using three different rocks, but the seedlings didn’t work on them. I went back to using just one rock, and it worked. I think we need to set up a separate spawning node and a named reroute for each rock we want to use.
That's because the mesh sampler has the rock hard-coded. If you have multiple rocks, you need to have a mesh sampler per different mesh. I'll show that in my next video, but you can use an attribute partition after the static mesh sampler to Partition per different mesh and use that in a loop where you can extract the mesh, do the sampling and output the sampling data.
@@adrien_logut Very cool if you'll cover that in the next tutorial! Also, if you can cover a little about the biomecore graph, especially the biome cache and the debug biome cache, I find it really cool to procedurally generate different biome types using the "texture to project on." I know it's well explained in the documentation, but I think it is part of the process of generating entire worlds with all the complexity permitted by PCG.
I don't plan to talk about Biome Core because I didn't have to time to dive too deep into it yet!
@@adrien_logut It's okay, but I think the topic of your video is closely related to Biome Core, and if anyone here could easily understand what's happening in that graph to explain it in simpler terms, it's you.
@@adrien_loguthow would that work? You can only use one mesh per mesh sampler node? Can you have an array or meshes to feed in and override the static mesh of the mesh sampler?
Your channel is literally my bible for PCG
Thanks for the kind words it's greatly appreciated :) Glad you like it!
This plugin is awesome and works well with impostors. Only question i have: How to setup PCG to not take up the entire CPU pipeline? If I make a mistake with the settings (oops, generated 256M points...), it always hangs up and sometimes I have to restart the editor... Is there not a setting config to limit the PCG tasks taking over the editor?
Unfortunately there is no safeguard like this as it is difficult to implement and have a good default value. You have in some cases the opportunity to cancel the generation, on the component and in 5.5 directly in the notification window. But if the node that has too many points don't give back the control to the engine, you're screwed.
@@adrien_logut Ha! Well, I guess I learn something every time I make this mistake. Thanks so much for your work!
Truly grateful for you sharing your knowledge.
Haha thanks for the nice words! You're binge watching them :D
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
Very Exciting!
Amazing, truly!
Glad you enjoyed it!
Great video like always! Can i use this knowledge and make a video based on it for my community! Ofc i’ll shout out your channel and put a link to follow you! Great work as always!🙌
Of course :)
Genius, thank you so much!
wow, thanks this demonstration. Is it a good idea to use this technic on "low platform" like Switch ? I do not know if realtime generation cost way too much for this kind of device.
I haven't played with low end platforms, so I can't say for sure, but I don't see why it could not be used. I think the most important there would it to be paired with a Quality Branch node so you adapt the density and perhaps even the meshes themselves for different quality settings.
This video helped me indeed a lot! Was struggling with partitioning for a while now. Much appreciated! But one question though. How do you combine runtime generation and offline generation? Taking the forest as an example. Trees should never disappear and HLODs are build. This is one graph. Then I need to create a second graph to get the runtime functionality for the undergrowth, right? But how do I get the result of the first graph, the trees, into my second graph so I can scatter foliage around trees?
Haha yes indeed that's the follow up video I want to make because this one was already long! You can have 2 components, one that is generated offline and has all its relevent data plugged into the output node. And a second one, running at runtime that can query this data with "Get PCG Component Data" or "Get Actor Data" with "Get PCG Component data" mode :)
@@adrien_logut Ahh. This information already helps a lot. Also thought, that there must be a "Get Data" node. Good to know. Will give it a try later :) EDIT: Works perfectly fine :)
Je rencontre quelques problèmes avec ce système, lorsque je coche l'option "is partitionned" elle reste décochée et quand je la force en BP la génération prends beaucoup plus longtemps (mon composant PCG est intégré dans un acteur)
Dans le cas des blueprints, ça sera fixé dans 5.5.
@@adrien_logut Ok merci!
🐐 🐐 🐐
Amazing but it seems complex, would be cool to just have all those as options in a basic pcg graph no?
Not sure I follow, what options and how basic the graph would be?
@@adrien_logut I mean having one pcg graph, the basic one, that you scale on all over the world and it will partition and stuff automatically
Is Partitioned is already doing that for a quick and easy partitioning. There is no "one size fits all" as we don't have all the information and it's often very dependent to what you are trying to achieve.
Looks like a ton of work went into this jeeez Super impressive man
Great to have another video from you! Do you have any tips for situations where your cameras are always seeing far into the distance (i.e. aerial shots)?
In that case, it's probably better to combine offline generation, HLODs and runtime gen for close range.
@@adrien_logut So it’s not recommended to use Hi-gen with runtime for meshes that are far away? I’ve set up 2 grids, one small and one large, merged them, then used the distance node to essentially get an inner grid and an outer grid. Then I used no performance friendly settings for the big grid and quality settings for the inner grid. Is this not recommended?
Great job!! thank you!!
hi! totally new to your tuts. Was wondering if I should start watching this series from the 5.2 introduction, initial vid, or if maybe it would be more confusing to do so, and should start from here? still wanna watch all... just don't wanna get confusing info that maybe get updated later with new engines? :)
Most of the concepts are the same from 5.2. all you see in the first videos are still feasible in 5.4, just a few things changed like the UI or the fact that the landscape needs to be queried using the Get Landscape Data node instead of the input pin. 5.4 added a lot of functionalities on top, and it's probably good to start at the beginning to get a better understanding of the systems :) I hope you'll have fun :D don't hesitate to join the discord to get some help if you need some :)
Hi my previous point does not work and i dont know why I have set it up like you have and done a union but still it does not work the only difference is that i use a box extent instead of a spline and its not unbounded could you help?
Never mind i was just stupid i didnt have the same name on the input and output previous points. But anyways Awesome guide!