(Tutorial) UE5 Hair Simulation - Group IDs, Custom Guides, & Physics Setup

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hey everyone welcome back to the channel my name is Andrew janini and I'm a character artist working in AAA games so today I'm going to be bringing you a new tutorial for xgen and unreal Eng Gen 5 so in our last video we gave a general overview of the process of setting up your xgen grooms in Maya and although we mentioned it briefly in that last video we didn't go into too much depth on actually setting up separate group IDs and custom hair guides for hair physics in ue5 and so we're going to rectify that process today in this 1 hour plus long video breaking down the process and great detail and by learning this process it should enable you to tackle a variety of different hairstyles and enable you to create Cutting Edge to optimize simulations for your hair grps as well and as far as I know this is the first time you'll see this process documented and demonstrated online anywhere and so if you appreciate tutorials like this I just ask that you hit the Subscribe button and feel free to hit the Bell notification button if you want to be notified as soon as more useful tutorials like this are released in the channel and so for this tutorial we're going to be demonstrating the process on the hairroom work of Malaki Corvin who was the first person over in our Discord server to ask the question regarding this process he was gracious enough to let us showcase and use his work for this demonstration so do me a favor and check out his art station the link will be in the description below consider giving him a follow as well and if you want to ask questions and chat with me directly I have access to all the scripts useful tools and links the link to join our Discord server will be in the description below it's totally free and everyone is welcome to join and so without further Ado let's get started all right so his question was he was having issues setting up the uh the hair physics and unreal um with the ponytails so I'm going to show my approach to do that I have a couple different ideas and approaches on how to do it one involves having to kind of cut this into two separate pieces but I think first I'm actually going to try a slightly different method first and if that works we might not even have to cut it uh transfer process right uh Interactive Group editor okay so at the top left here he has everything pretty well organized I think we're just going to find his descriptions just like in our tutorial we're just going to do one at a time so that out convert no convert to interactive grou okay yeah looks like it matches up and I'm pressing the letter G to repeat again again I'm G to go normal X gun okay just going to hide all these off auto update make sure everything's hidden so these look like this got a little noisy right so just like before we should go through and rebuild everything there we go the first will export all of these right [Music] generate cash export cash settings look good export okay save and now with that all set up file okay now we're going to import the Olympic cash I cut the video to cut out the loading we're going to now go through the process of setting this up so I'm going to go ahead and hide all the major groups so the first thing I need to do is kind of decide how I'm going to organize everything so I think that's going to be one group right I'm going break out the spline group manager which again in the Discord you can grab this for free uh link will be in the description for that I'm going select these two pieces refresh pick the top [Music] one BL group zero rename that pick it again click reparent right so that part set up should be right that we'll do the same thing with our Fringe right again you don't have to unhide these you can just leave them hidden if it speeds things up for you I'm call that Spine Group one Fringe description ready to go do basically these last pieces onto their own uh description too wisp DC so we we're going to have our Fringe our ponytail which is going to be the two main ponytails and the Wisp right so the next thing we need to do is figure out how we're going to set up our our guides because that's going to determine how everything simulates right let's go to our ponytail for starters right that's our ponytail description I'm going to select just one of these to become the guide for each side we go here like this utilities guides to Curves so that's just for the um the ponytails and we're going to modify these okay next one is going to be or wisp and we're just going to pick all of them all right curves and then we're going to get our curves for The Fringe right for this I'm just going to kind of pick him from the top and I'm just trying to get like a decent spread and this is going to help us optimize better too uh longer uh pieces are usually better because I can catch stuff underneath too okay sure we can include both of those do same on that okay so all of that is going to act as our guides I'm just going to delete these first couple vertex so select them delete I made a backup there we go want to open up uh GS curve tools I want always on top and curve highlight so we're going to use this as our simulation gun okay something on this side oh for so I'm I'm just trying to shape the guide so it sort of encompasses the center of this Clump like the whole ponytail and and just moving things around highlighting using a combination of the smooth here makes this pretty simple process oops so we're just going to use these two guys to drive our two ponytails basically that's the idea all [Music] right and these four will drive all of these and these guys will drive all of those clumps so I think we're set on all everything here so we can call this pony tail guides okay okay I'm going to um so one thing we need to do if we look at the um script from epic that you use to tag your groom guides uh this doesn't have anything that will tag your guyses with a group but we need to have have a version of the script that basically tags it with the groups 2 the same way groups ID does so groups ID you enter the names of your groups and then it iterates over each group and right here is where it tags the group ID so starting with this one it tags it with zero and then it goes up in number so 0 one 2 it goes in that order basically so we need to tag so we need to take this sort of fun function and add it to this so if we look at the um X guidelines on the website back to those scripts right if we come to our group IDs and we look at the code here this is the piece that adds the um the group ID so we need to take this to start with I'm going to put it above the groom guide tag right and so for this to work we can't use attribute name because attribute name is is defined as group guide so we just need to put um directly Define it directly like this just copy this groom group ID with the quotation marks and then come over here instead of attribute name we put that so it's marked as groom group ID so it's going to add attribute groomer group ID and so so I'm going to name these first again retail guides yeah we'll just do that ponytail guides wisp guides uh friend guides I think I need to rebuild these as um make sure they're linear too so curves rebuild just going to keep it at 50 make sure it's set to linear for your guides good otherwise you're going to run into an issue when you export with Maya now going back to script editor right so under groom group ID uh first I want to duplicate this and make a backup in case we messed up right and so with our guides backed up we just want to um delete two of them and have only one we're going to run through each set of guides one at a time so once we're done with that once we run it through we'll delete it make a copy of the other one reparent it uh basically click and control click press P you can rename them if you want and then we're run it through each one one at a time just like that so this is going to be on the Discord this is the um updated script basically this is for it's going to it's similar to the original but we've added um the ability to tag it with a group so basically it's going you have to start with zero so we'll start that at zero your first group's going to be zero second group's going to be one third group is going to be two and you're just going to keep going until you're out of groups um and you want to go in the same order that you list them here for your groom group ID now again starting with the um um the ponytail guides just to show you one more time duplicate place that under so we're going to start with our ponytail guides right I'm going to start with under command attribute guides group our default value I'm going to set that to zero for the first one and then in order to avoid a naming conflict we need to rename these so I'm going to come up here XG groom actually I'm just going to do hytail guides guide hit enter with those highlighted just rename both we should be able to run this now so me those two ponytail guides right so with that done we can delete those let's do our Wisp and I also name these pyta it's zero to mark it as a group of zero so our wisp here same thing let's just rename them okay oh let's get our code again so under again guides group for this one it'll be one so mark that as one that wisp that Fringe duplicate parent same stuff this one I'm going to Mark as number two so default value two under guides group okay right two cool all right okay now going in the same order we need to do our descriptions so now we're just going to run the script for this the group ID stuff let's light name them in the same order so Fringe was two right ponytail and you can use the spline group manager if it's slow for you but it's fine for me so yeah ponytail was Zero wisp was one okay we're going to put those in the same order basically so Spine Group zero is going to be ponytail pony tail description number one will be wisp description one Fring description r just play this hopefully it works looks like we're good everything should be in the correct order and just for completion this sake we're going to also bake our root UVS uh you're going to find that script here in that same page right here uh again you're going to have to add which I already have here in my under print you're going to have to add these um parentheses these closing and opening parentheses otherwise it's not going to work with the newer version of um uh Python and we'll need to go through each one one at a time I'm going to use the original here he has so if we look at his original hair Camp check it out looks good yep we're in map one I'm just going to delete this one for now okay map one right I want to make sure check something so I think you might have an issue if you don't freeze this first so we need to come back here here okay so make sure you freeze Transformations orange description let me check this one more time too so we're using this as our UV mesh we're going to start with ponytail again actually capital T run this Okay cool so now we'll do our wisp one okay now we'll [Music] do French two okay so now when we go into unreal it should export everything a separate groups and we should be able to separately set up our physics so pause here and then we'll come back when we set up first real quick we'll go through the process of exporting um so I want to select all of our descriptions here that we've set up generate cash Olympic export our settings current frame we have our attributes here okay let's go ahead and Export that we our u5 version ue5 save right so I made a new folder called ponytail [Music] demo I'm going to import look like our root UVS are good they have three groups see guide count 26 That Should Be The Fringe guide count two sounds like the ponytail yeah group zero so group zero group two group one this is the Wisp guide count four so it looks like everything came in correctly let's import save all okay um because he was working in um ZF my import settings are incorrect so I believe this just needs to be one keep these at zero and I still think you need to put negative one here to flip it um import save all now we're good now we're getting something so go to our physics panel me turn on ponytail should be this group zero so turn that on so we're a little wacky right now turn preload to one start with okay let's also add raise our Collision radius so you can see we're just like really stiff right now so what I'm going to do to start with we're going to click our stiffness here so we're under group id1 or you know group zero under stiffness scale we're going to create new curve and yeah we want to stick this in this folder and we're going to name this um ponytail stiffness curve save so we navigate to that and open this up we're going to get like this new graph so right now it has these two points we have our stiffness Bend stiffness at zero right for these top hairs and what I'm going to do basically start by creating a slope so this is a factor from 0 to one so z y one here one here Z's down here it's a little confusing so it's going across one and we're going to bring it down no not both of them it's s just s so I think the easiest way to do is select one and then under y I can put uh 01 to start with let's see what that does right save that save that let's project to project see we're getting some movement now let's try raising our substeps to start with okay turn o we're getting a little bit more movement but it's not nearly enough yet that helped fix some of that funkiness so obviously it's still too stiff right so back to our curve what I'm going to do is just move this in so we're going to move this to 0.1 basically it'll more quickly start lowering the stiffness and res set this so now with the wind it's having more fact right so now we're moving but we have the issue it's not staying where we wanted to so I'm going to come over here set this to let's put this at two goes a little more space want to create a little bit more of a waterfall to it probably push this out more4 maybe even5 do this there all right cool we might be in business let's see so now um they're staying pretty well within the um these pieces ideally you would have some movement there too but I mean sometimes you just got to work with what you have okay so cool right not bad not bad so there's obviously some funkiness going on here so I'm going to show you the process of cutting it up too to avoid that so this is probably going to work the best but I'm not totally happy with how some of this is reacting I think for that reason I would still split it turn that on too probably keep that at zero for the gravity preload keep that at five just kind of want to do a similar thing here I'm going to copy the same one uh no actually I won't let's make a clear this what I'll do is I'll set this base to 0.1 Z down here okay I think we're okay you can see our guides right get the idea I think for The Fringe we are going to just use the um kind of the same settings I'll probably raise that to 10 to 10 I was going to crank that just to give it more stability and then five for that that's just what I'm going to try for now do whatever you think you feels best to you same stiffness scale as the wisp I think is fine let's see how that works for us um one more thing we can do I think it would make more sense to have this um flat so the um the fs is a little stiff looking maybe we can loosen that up I think okay see how that works for us so aside from like the noise we're getting here this is working pretty well there there something C ing that it's hard to say for certain it's only when I turn on the physics and okay well aside from that issue depending on what you're doing this should work for the most part so I'm going to show you how to do it with cutting up the ponytail next so it's pretty good it's not perfect but you can see now we got some nice hair physics that's one way to approach it if you don't want to cut it but I think now I'm going to try a version where I cut the ponytail in two separate descriptions let's see see how that goes okay so basically for the next part of the process I pre-recorded the video and I'm basically just going to talk through this I basically just wanted to try something a little different this time so we'll see how this works so the first thing I'm doing here is basically organizing my scene a bit I'm going to duplicate the uh guides from the original base ponytail and make some new groups and just for the record here I'm playing back this process at 400% speed so it's four times the original speed I think the process is straightforward enough that you should be able to still follow along though so again I've just duplicated the original guides for the ponytail section and I've added them to new groups so to begin this process we're selecting our guides and then we're going to go and open up GS curve tools and basically all we're doing to start this is to rebuild these guides to a high number like 50 and so with all those curves rebuilt we use the lasto select to select all the CV points pass the cut off point and we press the delete key to get rid of them and we're going to do this on both sides so again we're just rebuild first and then we use lasso select to select all the CV points Beyond um the hair tie basically and then we press delete to get rid of them so the next thing we do is use the selection slider and GS curve tools to select all the roots and with some adjustments to the pivot rotation we then use the scale to line up all those new roots and then just move it towards our scalp like that and then from here I just decide to rebuild the curves one more time and so basically what I end up doing is using the rebuild slider and GS curve tools to get it low enough to have a little bit more control over the shape of these roots so now again with reselecting all the roots we use a combination of the scale tool and soft select to just get a bit more of a spread and so from this point this is a bit more of a straightforward but tedious process we just go through and we kind of just work on getting a cleaner spread on the roots just to get more even density on the hair growth from the guides and just keep in mind like the the placement of the root doesn't have to be perfect it can float a little bit over or under the scalp the guide will just attach to the closest surface point so from this point I just make some few minor adjustments to these curves to just get them inside the ring that ties the pigtail together from this point I'm just doing the same thing to the other ponytail same exact process so it's not perfect but I think it's good enough as a demonstration at this point I'm just trying to select all the inner curves and doing a spread that's separate from the outer curves on them so again just to reiterate like the goal here is just to get an even spread because that affects how the density is applied per Clump guide and again same thing just making some minor adjustments to get all those guys inside the ring and so now going back to our copy of the original growth cap I'm just going to extract a new uh growth cap for each of the um ponytails and so with those pieces extracted from the scalp I basically separate those into two separate meshes so I can create separate descriptions for each ponytail and so then from here we're going to create our first new description for ponytail left side and like usual we go to our utilities Tab and we use the curves to guide function and with our guides created from the curves we're ready to start working with the modifiers for this so starting with the setup in our Primitives tab we're going to crank up the density to like a th000 to start with and it's going to go even higher than that and we'll have to of course raise our CV count as well so we can get those curve details in there I end up settling a 25 CV count for now and of course make sure to lower the width of your hairs so we're starting with our first clamping layer and setting those to our guides as before so for this video we're going to move through the process of building up our modifiers and our description pretty quickly but in the very near future I'll put together another video outlining this process more carefully for you guys I'll demonstrate and show you how to set up your modifiers and the mindset of the workflow as well but for now since this video is already long enough we're just going to use a sped up process for this one but if that's something you want to see in the near future please consider subscribing and hit the Bell icon so you can be notified when that video drops which should be very soon but for now to begin with we're starting with our first clumping layer and we're setting up a random modifier in their Clump to get some variation in those clumps and we really take our time with our curve here as well I like to create an aggressive slope in the beginning to get some early clumping so being happy with the clumping and variation of the first layer we start with our second clumping layer so when I set up the maps for this second clumping layer I try to make it uh three to four times more dense than the original and with that in mind I'm basically just eyeballing it from there adjusting the density slider and hitting generate until I get something that feels about the right density I'm looking for so this time with my Clump scale curve I'm just pulling in the end point to make the clumping more aggressive towards the root and then for my second clumping layer I also move to the noise effect and then set up a random modifier as well and just like before we move that end point to get a more aggressive effect towards the root and on this one I do it from the root Point as well so we can start the effect after the cut off point that we want and of course the general purpose of this layer is just to create that extra breakup using the new clumping layer so obviously this is nothing close to final we're just trying to set up our Clump layers right now and again the same principle applies to the next clumping layer and where I want about three times the density from clumping Layer Two to clumping layer three and the same sort of workflow applies to this next layer as well to set it up initially so at this point I realized I need to make adjustments to my curve for the initial clumping layer to try to take into account that cuto off point where the hair binds with the band so that's what I'm doing here and so what I feel is that this just lets me get more aggressive with how I adjust the clumping earlier on and it's also worth keeping in mind that we'll be able to fine-tune this farther when we um get into interactive room we'll be able to use our grooming brushes to really fine-tune this also keep in mind I didn't notice it at the time but I was a little off with that dip in a slope it should be move forward a bit regardless of just keep making these adjustments to our curves both our noise and Main clumping until we get the uh basically the clumping we want for each layer and again I'll do a new video soon uh more carefully explaining this process but we just want to quickly go through it for this video but again we're just focusing on primarily our clumping and the noise for each Clump layer and we only apply noise to clumping layers two and three I ignore on one because that's primarily set up with our guides and random modifiers expressions are a good way to basically get that Clump variation in there too as well so at this point I start increasing the density just to see the effect of it I type in I think I go as far as high as 3,000 and so from this point we do start setting up our cut modifier with the random expression but just keep in mind I do end up moving it to the top of the stack here to uh get better results then finally we're using a stray expression for our noise modifier because we only want to affect the Stray hairs we don't want to affect the main body so again to do that you set the second value of the input to zero and you can only make changes to the first value here until so you can see here the odd results we're getting that's because the mod cut modifier needs to be on top for this to work properly and so you can see there now we're working well and again you set stray percentage in the description menu at the top of the xgen window so at this point we're just playing with uh keep parameter and rep parameter for the cut to see how that affects things and we're going to continue to adjust our frequency and magnitude for the Strays and continue to make adjustments to those curves as well to get really fine tune things until this one final adjustment I decide to make I decide to taper the tips towards the end of the noise modifiers in order to get a cleaner more pointy tips to reiterate it basically reduces the noise specifically towards the tips and I'm doing this on all of our modifiers and then after lots of adjustments we go through each of our layers and make overall adjustments to our mask to adjust the strength of each clumping layer to get our final look and again also the density as well just keep making adjustments as you go along and so for this final part I'm not sure this will make a huge difference and unreal but I also try to add a very strong taper towards the root to help blend it into the rest of the hair that it's split from but that's the only taper I add to my hair strains and so for the next portion of this process I'm going to use the interactive groom version of the ponytail original to just cut off the um ponytail portion from the root section but of course before that I decid I want to continue to make some adjustments with the original ponytail in there to see if I can blend it better with the um curves at some point here we also turned on our lighting and shadows to get a better look at how this feels at this point I add a sculpting layer into interactive groom into our original base ponytail and we just used the cutting tool to cut the uh ponytail portion from this it's very easy at this point and again just making final adjustments to our new ponytails that are split off to try and get a nice uh consistency in terms of the density going from the base to the new ponytail and again just continuing to make adjustments to our noise as well you can also use that generator generator seed value to try and get different results that are kind of random so from here I'm just copying all the modifiers we just made so we can copy it over to the other side to the other ponytail that should make rebuilding it very quickly so I want to confess I went into a small issue here initially you cannot save your descriptions for xgen as the same name as other objects in the scene and I already have objects named ponytail R and I got lucky with the left side because I misspelled it by accident but you need to create it as with a new name basically which I'll do here in a second cuz you can see nothing's getting generated so basically I just delete that description and redo it with a new name at this point we're just importing all of our same modifiers from the other ponytail and rebuilding all the clumping points as well starting with all the basic same setup stuff too so again going through each clumping layer and just redoing our setup maps and all the clumping maps should all be set up the same already you just have to click generate or guides for each layer we can see we got that very quickly rebuilt by comparison and so at this point there isn't a ton to say we're just going through the same process of converting our new ponytails to to interactive exg so we can export it to Unreal at least start that process but before we do that I create new sculpting layers and our new interactive xgen descriptions so I can make those final adjustments and really fine-tune those um those hairs and really get it into the um the ring for the ponytail and one thing I want to point out as you watch me do this is I'm clicking and then pushing into the hair with the uh the comb tool and you just want to work through it and check it from multiple angles but this makes it simple and easy to make those adjustments so at this point we start the same process here with the other ponytail we um add modifier sculpt and then we click edit and then we start making those adjustments with the comb brush as well so one thing I want to point out here is i' like to use the uh freeze brush to basically highlight specific hairs and if you use the reverse freeze functionality on the comb brush you can control specific uh hair strands and we're just trying to clean up using that same method with the freeze brush some of these stray hairs and again with invert freeze set up we can just move those blue hairs and I'm just pushing in from the edge clicking and then pushing in and I also turn off the uh invert to affect the other hairs as well invert freeze I mean just take your time with this process we can see our final hair with split ponytail now basically I just need to cut off one more piece for these uh breakup layer he has again with the uh new sculpt layer on the uh this part of the groom and we just use this cutting brush to cut it to the right size again just one more time we're just going to look at everything together and I think it's pretty close to working but I think we need to do one more sculpt layer and make some final adjustments to the base part of the groom and basically I'm just making uh some final adjustments to the Wisp I just want to pull them off the uh the neck a bit so at this point we're just starting the process of exporting and then reimporting the Grooms as a curv splines first we're saving out that initial ponytail and we get that imported in and I also end up reimporting exporting and reimporting the portions of the um groom that aren't part of the new ponytail as well just so we can get everything fresh but we are going to reuse the same guides we already set up so we're going to skip that process this time and again just setting up our groups like we've shown before with the um spline group manager which is again it's Linked In the description to the Discord so you can download that tool for free Sor right at this point I'm also exporting the um The Fringe and the Wisp as well my main reason for for doing this cuz I want to run all the hair pieces through the um group ID script at the same time so make to make sure everything gets uh assign the proper number and to be honest technically we could um make adjustments to the script too to do that but this way is also valid I think so again we're just assigning and setting up our groups with the SP spline group manager so we're going to copy paste our spline group ID stuff and we're going to set up all our spline group IDs for the first three we're setting up the ponytail then the Wisp and the French uh so that we have the same order as our guides and then we're going to make the the isolated body part of the ponytails the part that's part of the scalp we're going to put that as our fourth group and that'll be assigned the last group and so it won't export and be assigned any guides because we're just going to keep the physics turned off for the base and then for this next part we're just doing the same process of setting up our groom rot UVS which this isn't really part of this tutorial but it's the same process as in our other video we just need to go through each uh description one at a time and so then from here we're just going to start the process of exporting our Grom up updated gr for unreal and we're going to include our original guides we already made too and everything should match up in unreal okay so now we're just going to start by duplicating the original groom and unreal and reimporting it as a new file and we're just here checking to make sure our guide numbers are matching our groups and things ended up getting shifted around a little bit but we'll fix it so if we turn off the guides for this first group you can see that's the body now which is our new group and it's she just using generated gr guides because we didn't import guides with it and so we have the guides for our Fringe and here I'm just testing to make sure it's applying to the right um part of the hair so basically this is just going to come down to um just adjusting all the settings to how we had it with the other groom and I think we should have better luck this time without a lot of the Stray noise that was happening with the non-cut version of this hairroom so my original intention by copying duplicating the original groom and then just reimporting as a new file was I was hoping I wouldn't have to redo all the settings but because the um GRS got reordered a bit I have to basically shift everything down and rework everything a little bit but it's not the end of the world you just have to take your time working through it again you can also always open up your other groom and uh copy the settings that way too uh this is also why it's useful to do external curves as well because in that drop down you can just reselect the same curves you already set up so it's not a big deal you see that the new room doesn't have the same spor stray hairs issue so you can see and with some of the initial testing here uh the ponytails ended up being a little stiff again with the original curves we had set up they are working fine for sure but we just need to make some minor adjustments to them I did do some initial testing of the dampening too but that didn't satisfy me ended up coming down to this curve which we just had to make the um the slope a little bit more aggressive than what we had and so I just moved that in to.5 and I think that fixes it and yeah it's worth noting there I turned the simulation off and on sometimes you have to do that to apply the new curve settings so we're just pushing it in a little bit more to make that slope a little bit more aggressive and so this is the closest I've gotten to having a nice result it's not perfect and if you're doing this for a project I would spend a little bit more time on it just to really na it in but I think this gets you like 90% of the way there adjusting damping is a good way to speed up or slow down how the uh hair reacts to forces like turning and everything so higher dampening can slow down the movement a little bit if it's just moving too quickly and just here some final refinements to our curve I guess just some final testing here we're just about finished with this and this is basically how you would set up a ponytail and unre engine with hair physics so I hope this tutorial was helpful for you uh if you did find it helpful please consider subscribing I also have links to my patreon in the description if you want to support this type of free education there's no perks right now it's just there if you want to support these videos will remain free for you and then of course there are links to the Discord in the description as well where you can ask me questions directly on there and you also have access to all of our free scripts and tools for Maya and xgen and all that yeah if you found this useful please consider subscribing to the channel and if you want to take the extra step and support free educational content like this please consider supporting me on patreon the link to that along with the Discord will be in the description below thank you so much
Info
Channel: Andrew Giovannini - Realtime 3D Hair & Fur
Views: 2,775
Rating: undefined out of 5
Keywords: Unreal Engine 5, UE5, Hair, Grooms, Physics, Simulation, Setup, Game Development, Real-Time, Realtime, Fur, V-Tuber, Realistic Hair, Cyberpunk 2077, Cyberpunk, Ponytail, Pigtails, Xgen, Maya, Blender, 3D, Video Games, Video Game, Tutorial, Guide, Patreon, VTuber, V tuber, Star Citizen, Alembic, Alembic Hair, Alembic Groom, Spline, Splines
Id: SfcJsXtRq48
Channel Id: undefined
Length: 81min 38sec (4898 seconds)
Published: Sun Feb 25 2024
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.