Houdini as a Comprehensive Gamedev Tool | Ben House | GDC 2019

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] okay howdy I'm Ben house I'm a technical artist at Blue Point games out in Austin this talk is gonna be kind of high-level I can't go into like a lot of detail into exactly how all of these processes are done but after this if you want to talk to me we can ask questions I can go more in depth with that kind of stuff so Blue Point games a lot of people don't really know what that is so quick overview it was started in 2006 as just a way to make a game engine to rapidly make games and eventually it kept picking up new projects to ports new games and then eventually we got the title masters of the remaster we didn't call ourselves that ourselves I think it was Digital Domain gave us that title but we've worked on remastering Shadow of the Colossus uncharted gravity rush titanfall and God of War just some of the stuff that we've been working on so a lot of our processes are a little bit unique and that we work a lot with existing game content and existing designs rather than creating a whole bunch of stuff from scratch to get into like a bigger overview of what the talk is going to contain I'm gonna go into terrain a little bit I know Ari Danish literally just gave a talk on terrain so I'm gonna go through that pretty quickly but it'll give you some insight into like kind of the process that we do and how we use terrain and fix some of the problems and address some things with that and then our going how we use vellum soft body simulations for cloth and wind and then I'll go over our real quick game ready hair process and some high-level asset processing stuff that we do just to make artists lives easier on a day to day basis so going into the terrain stuff so one of the things that we get a lot with terrain is like the art director will come in to be like I want a hill here but it needs to have a slope here at this kind of angle because the silhouette needs to look exactly like this and and a lot of other terrain generation softwares you really lack a lot of that really high-level artistic control to get exactly the shapes that you want and Houdini allows us to influence the terrain based on custom input geometry with and then convert that to height fields and use masks to do what we want to it and it basically we can take a mishmash of meshes that the art director has maybe can put together himself and then just project that to a height field and then once that's projected into a height field we can add some initial surface distortion on that and then run the erosion and slump and emulate all the loose materials and all of that kind of stuff and then maybe add some more surface noise and more erosion and then we can generate masks to isolate specific places based off of the actual angle of the slope and or hand paint any of this stuff in a lot of times artists were or will want to hand paint stuff in or procedurally generate it so depending on how you set up your HTA in your pipeline for this we're using it all as a like an enclosed HDA so it's almost all procedurally done but it's at any point in this process you can break your HDA up into unique chunks and say up to here is going to be an HD a then an artist will touch it by hand and then we'll feed the rest back into the HD a like a separate HD a to continue automating the rest of the pipe so we have all of these masks and we can use these masks to dictate all of the different attributes that we want so where we should put grass what parts should be rocks the different noise that should be applied to different sections and then as already mentioned is last thing most of the time in games you can't bring in this massive huge thing you need to cut the terrain up into grids so we do that also we isolate one grid of our terrain and we kind of convert all of it to polygons and then we run a whole bunch of noise operations on that to give us the cliffs and more feature definition and then we use the V DB operations and bops to give more natural overhangs and stuff that you the kind of detail that you want to seem like a realistic train but you lose with just using high fields and a lot of times this will get done by hand in ZBrush and we've kind of figured out that you can use bops to get 90% or all of the way for a lot of the noise that you want to get on this kind of terrain and then we basically just grab the original mesh that we had and combine the new terrain that we've got together and all of the attributes to go over after this point we'll do a really quick cleanup usually with some boolean operators and dissolves and then when we combine everything together we bring it into the game all of the attributes are auto assign all the materials they put all the grass they scatter the trees based off of the settings that you've put in and where you've painted your attributes you get a really good starting place for your environment artists really quickly and so this whole process basically I'm gonna mishmash a whole bunch of shapes together that the art director says needs to look this way you run it through the pipe and then out you get this and like a matter of like minutes and it's just really fast streamlined workflow to get your artists going and they can edit it from here as much as they want to and I've got like a quick preview of it but you can also use this to generate rivers and like where streams and water bodies should go as well so next and we're gonna jump into cloth and wind as everybody knows Houdini 17 brought in this really powerful vellum soft body simulation stuff so we wanted to take advantage of that but we did want to run all of this cloth in real time we wanted to bake it out into skin meshes that animate but still look very realistic and then along with this we make use of a lot of Houdini's wind simulations simulations to create vector fields that we use to drive all of our particle effects in game and are I'm going to go into our wind setup real quick basically our wind setup requires a few elements we need the level geometry in any collision geometry that would be affected by our wind field solver and then we also need the collision geometry that may interact with any of the velum simulations that could be affected by this wind and then we do the valley that we need the geometry that the velum simulation itself is going to be doing so this is an example of what our cloud or wind solver will look like basically we just generate a vector field as an FG a running over our landscape environment and really all of this is is a velocity or air field sim is just a dot gas simulation utilizing velocity and pump velocity with some collision objects and we run this for as many frames as we need until we start getting some nice patterns and stuff basically when it's all nice and colorful and we get some cool looking swirls whatever is visually interesting or whatever you need and then we basically just save out one frame of that and use that as our field in our game engine to drive all of our guest simulations in real time basically just tell us the particles where to go and how to behave as they move through the air and so this is like starting fresh to a more complex thing just so you can get something that's way more interesting than just flat rolling hills this simulation itself is typically run at a 50 centimeter to a 1 meter per voxel resolution and then we down sample that later in a post process the wind field is usually used to drive like I said particles but we also use it for vertex animations so grass or any of the foliage interactions that we need to behave naturally without a character direct character interaction and really this is just a really fast easy way to get realistic behavior out of particles that the effects team then doesn't have to worry about it we just bake this filled out and then the particles behave naturally in the game so quick look into getting simulated cloth objects out of Houdini is a skinned mesh in the example I showed we have this nice banner the rigs and animation are processed in several steps basically the flag is broken down into different components for the Pens the loops the cloth and the collision elements and these are basically just assigned with group names or attribute names and then in this in this image we just have the pins that are configured to connect any loops and cloth in the geometry to the collision object and which in this case is the poles and then we assign any attributes like up vectors or occlusion and we store those as vertex attributes on the mesh and then usually the collision geometry itself is separated and then we run a point cloud across the collision geometry just to evenly distribute points across it when we use these point locations to generate rigs because in most cases when you're generating a class in the thing the cloth is attached to can also animate and Bend so we kind of just combined that in this process and do that we can remove it later or have it as an option to run or not so we kind of assume worst case all the time all elements are going to be rigged including all of the sports structures just in case animation needs it for whatever reason down the road so during the actual velum configuration the loop and pin geometry needs to get stitched together and then we run the simulation and catch that data out and then just like we did with the supporting structure on the poles that simulation is baked into a point cloud which we use to drive the joints location on our rig and wearily we just scatter points and relax them enough to make sure that they're evenly distributed across the mesh so that we get nice deformations as we bake this out so this isn't as high fidelity is it would be if we were doing this for every vertex but it allows when we bring this into game it runs really nice and quickly in real time and the final step is basically we just take all of the stuff together generate a really messy looking skinned mesh rig and bring it into game and then we get nice realistic animation that works with the vector fields and now I'm gonna go over fast game ready hair so I got our nice greaser so the the purpose of this pipe is basically we wanted a way to develop hairstyles and get them in the game as quickly as possible because we wanted our art staff to be able to block out a new style for the hair and then see it in the game in the same day and we the target platform could change specs may change and we didn't want the artists making the hair to have to go through a whole bunch of processes to change it we wanted to automate this and make it as fluid as possible so in our case we're using Maya's Interactive groom splines to comb out hair styles this is a process that's traditionally used for film and animation but really for the Houdini in this process any software package that can export splines is use just fine so it's really agnostic on what software you want actually want your hair artist to make their hair in so we just export the IGS data out as an Olympic cash to process that in Houdini we have a series of basically just like a kit of hair processing hcas that we use and these are broken up into four five ish main tools the high level hair setup HDA is the top thing that feeds in the main mesh and that hair hair splines this is used to calculate all of the attributes such as how the UV should be laid out occlusion out vectors for the hair how thick hair should be the hair nearest neighbor roots tip position all the attributes that you would need or that your artist wants to define for what were they're using with their shader and stuff that you need a game so we store all of that on all of the guide curves and then we result all the results of that or cache to disk and then those add boots are used and sorted into groups further down and the process as the artist needs to break it up and get more granular with like how to control the polygons that are used to make the hair for this asset basically we always assume the worst case like I said earlier so we we basically assume that we don't have any additional data aside from just the guide curves and the model that that's gonna be on so there's no other input that anybody needs to use to do any of this so alongside this process we compute the edges of the groomed areas one of the problems that we ran into in doing this is getting like really nice clean edges where around the hairline instead of like having cards that are like offset down the hair and messy hair lines and a lot of other things that we've seen and artists without to go back in and post and I clean up the hairline and move the cards back into position so we basically volume sample the normals to get the overall hint hair shape over the skin and then we generate a cluster of cards to follow the edge so that the cards that are generated blend and rotate to follow the overall hair volume that was defined the next thing after all of this is done at the very highest level this is where the artists can go in and isolate particular parts of the hair that they want so we have a separate delete and selection tool that allows for different deletion modes using the attributes that were created from the setup that they had before and these options are again posted up there but for more granularity and just letting the artist be an artist in this environment we let them break it up as much as they want to we can also use this process to isolate desired areas of detail and remove unnecessary guy tears if you really want to get nitpicky with the hair curves that you use or the specific guides that you want and maybe like at the end of the process like everything came out nice except for like a couple curves where you can isolate just those curves and then rebake that out and not have to worry about redoing the whole process again so the card generator itself is the next main step and that creates the actual geometry for the hair cards and you've ease them and the hair edges tool which is a separate process basically just fills in tiny cards to make sure that there's a nice clean edge along the hairline so this hair grouping ratio down here at the bottom of the HDA parameters is basically just the cluster points node with different biases that allow the user to add or take away hair clusters from one group and assign them to another based off of some different threshold values so if they need I need more hair on the inside or more hair on the top and less cards along the edge the artist has control over that just by modifying these numbers around and with all of this the artist can say well I can't all of these for one target platform but now I have another target platform they can start with what they've already done and then just copy this node change the threshold values a little bit and have all of the cards baked out for the new target platform that they have and then this is just an example of the types of cards that can be generated from this process if these are all that the card type is user controlled so we can have you they can control the shape the segment per card the number of cards per guides so we get cross sections along the curves or just one flat curve along the guide and then finally we just have an exporter so the artist doesn't have to worry about going file export or leaving out any of the data it was just a clean export node that cleans up the geometry and exports it as an Olympic to bring back into Maya or whatever system that you need and kind of the process end result will look like this we have the edges the bottom hair cards the mid meet of the hair and all of that outer surface hair cards and then when you bring this all together I think this is thirteen thousand tries which for like a hero hair is pretty good I think in horizon zero dawn it was like yeah like 200 K so that was pretty heavy um and kind of the awesome thing about this system is you can get as high or low as this as you want and the artist never has to change anything from their original hair guide setup they just have it how they had it and it processes through and if they make changes to it then they have it using the same settings they just open up the hip file recache it and boom it's done so quick gift just showing the different angles of the hair just so you can see it it does fill out and we have control over all of this it's pretty cool greaser dude and then I'm just gonna do a quick rundown of one way just so you can preview the hair shader and game real quick what you basically we use Maya's IGS to do the actual Alpha creation for this and then we just use the standard Yui for inputs in this example to make our quake hair shader alpha and ID and RGB channels are used just to set the different color for hair and depth and then we use depth and root for the speck and roughness values and then depth and alpha again to create the edge mask and at the end you just get game ready hair assets and less than an hour from when the actual hair was done and then I'll go into some asset processing stuff so this is kind of what I end up doing on the day-to-day basis when I'm using Houdini for an environment team everyday I walk around and I asked my artists is there something that you're doing that takes you have to do this boring task 500 times you don't consider it art it's really repetitive like can I take kind of let you be an artist again take away all of the repetition and the boring stuff still give you all the full artistic control but you don't have to hand place bricks anymore please stop wasting your time doing that be don't be a robot and so most of the time the answer that I get to this is uh I don't know I I have been doing this this is the way I've been making assets for 10 years and a lot of times I'll just follow the stock and artist and just follow them around and look over their shoulder and figure out like ok I've watched you do this six times here I can automate this do you never have to do this again and I'll make a tool so that they do that and then after I get them roped in on one tool then they're like come to me with every single thing they're like oh I may have to do this twice can you make me not have to do it the second time like I don't know if it's quite worth it let me let me see but usually you can get them one time and then they're kind of sold on the process so if you're in a bigger studio a small doesn't really matter a lot of times especially when you're outsourcing you kit Bosch assets basically it just means take a whole bunch of assets that have been pre textured and isolated and shove them all together to make unique assets at the end this usually is used to speed up workflow and it ensures consistency so like if you're making like a stone column all of the bricks that made up that column look like they were mined from the same quarry if you have a whole bunch of different columns they all look like they were might like mined and blocked out from the same quarry this lowers production costs and a whole bunch of other stuff the problem with this is you kit bash this thing we have all of this internal geometry and an artist has to go in and clean all of that stuff up so if the video will play play okay so here's an example of a type of HDA I kind of just threw in a whole bunch of settings in here as a one-size-fits-all solution for an artist so well they can just bring in their mesh if they want to clean up I don't know if you could read that number it's just displaying the poly count on screen we can see it took out all this nasty geo and I've just got a setting on here on the HD a just to remove interior geometry and basically this just checks for occluded geometry occluded points and then calls them so there's no more cleanup and the artist doesn't have to do anything just one click button fix and then using the poly reduce we can just probably reduce this down and you basically end up with what was a 10 K pillar and we brought it down to about 2k and looks basically the same so that's a really powerful workflow that saves a whole bunch of artist time and give tools like this to your artists and they're like oh my gosh thank you I never want to mess up with cleaning kit batch assets ever again and then another thing that a lot of my artists complain about is collisions like I hate making collisions for geometry and so here I basically just um I have a whole bunch of different ways to generate nice clean real low poly collisions for geometry and this is lot light not a one-size-fits-all solution it just works on a per asset basis but there we go we got really nice I think it ends up being about a hundred and fifty Poly's nice clean collision geometry for an asset and artists didn't have to think about it anymore so I'm gonna do a quick rundown of that collision generation process and it's really like that looks really awesome but it was really simple to set up basically you take in your original geometry and I VDB it which just gets rid of all of the stuff on the middle and I convert it back into a polygon after the VDB in another node I generate a bounding box and fill it with a grid full of points and then the artists can determine the actual grid size that they want and then I have a quick vex wrangle to snap all of the points to the nearest point on the grid and then I group all of the hard angle points I run a dissolve to get rid of all of the interior geometry or all of the brick or geometry and then you divide it and you're done and that's really like a twelve note setup just right there and it it really is that simple it's not much more complicated than that and obviously if you get more complex geometry you have to do more stuff to clean up this and address different solutions but it works pretty good in that case another thing that I see artists doing a lot at a lot of different studios so I thought this was a good example of a way that you can get rid of artists repetitive tasks is we have this brick wall or brick material and then you need it to be like a broken wall we need destruction on this wall so the artist will then make they'll sculpt bricks that match that material and then the artist will do the damage on the wall and cut it up and then they'll go hand place all of the bricks to line up with the bricks on the material so a solution for something like that so the artist never has to place another brick by hand is I have this HDA that I've lovingly called the wall buster and basically they can just use this to punch holes in a wall they can bring in their own geometry as well if they want and a thing I also noticed with a bunch of artists is some of them really like procedural control they just want it to be done and then other artists want everything to be done for that or they want like do all the busy work for me but I still want to be a complete artist and have complete control over how the cut is made and some of them may want to place their own geometry or a bunch of different ways that they would want to interact with how they want to be an artist because they're all different and so I have which is just a blob noise cutting a hole into the geometry and then go over to just they can define some custom input geometry and then go and set that and punch the hole out and the soul you can preview the collision geometry there and it punches the hole out and then generates all of the blocks that go into the right locations and then something I added here is depending on the style of your game you may want bricks just along the edges or you may want them to fan farther out and so I just have a little detection I'll go farther and - like exactly how this HDA would work another thing I noticed is a lot of artists are like well I just want to like I don't want to model the geometry that I used to cut it out I just want to draw it and so here is really just the poly drawl and it just takes that poly draw path and then extrudes it and cuts up the geometry so the artists really can just sketch where they want the destruction to be and they don't have to worry about anything else and I kind of hid the poly draw functionality and a bunch of buttons on the HDA that are basically just callback scripts to set different note handles and if anybody has any particular questions about that I can talk about that later or just contact me I'll walk you through that kind of stuff and then that kind of show so yeah so how are we getting the bricks placed on the geometry in this and in this case so like I said our direct ability the artists can make any kind of wall pattern they want with stuff like this and control the damage one of the techniques for creating brick patterns that I have seen a lot is they'll actually a lot of artists want to make high-res sculpts to get all of the nice detail and everything like they're going to ZBrush and sculpt up a bunch of bricks and then place them and literally like build a wall by hand they especially want to do this if they want the wall pattern to look really hand built naturally because it's hard to get that natural artistic look and substance designer for a lot of cases and so basically I just process that sculpt that they already made down res that and 2-game res bricks and then get a material put on all of the bricks and then when I have the bricks that match the material that was used to make the brick wall material and then we start out with our brick wall geometry and we have our cutter that cuts away the the geometry where we want it to be in this case I'm just keeping whatever the largest piece is of the geometry there's probably way more intelligent solutions to this and then once we cut it up isolate all of the scene points where the cut was actually made and then I basically have all of the bricks lined up to match the you v's on the geometry where it was cut and then it just puts all of the bricks in place that have been duplicated across the mesh and then you end up with the artist never having to place bricks again which is it's supposed to be what location yes so basically I'm taking the exact brick pattern like this is a tileable brick sculpt yeah so if I get the brick pattern or I make it for them to match it and then that brick pattern I just copy across in the same location as the where the UVs are laid out in the zero to one space and then because I have the brick pattern and the bricks are already in place it's a no brainer it's a really simple solution and it just looks a lot more challenging than it actually is [Music] so okay one of the kind of powers of Houdini is the Houdini engine and making all of these tools way more accessible to your artists one of the struggles that I ran into is none of my artists want to use the Houdini engine in Maya they don't like the the attribute editor interface one of the problems that they ran into this was there's no tooltips and the layout that you've made doesn't line up with what you have actually created in the type properties for your HDA it's just in this big vertical layout and hidden parameters don't work and yeah so what I ended up doing was creating a wrapper for the Houdini engine plug-in basically I just have this HD export script that you attach to any HDA that I would make and it just exports out all of the parm data on the HDA and every time you update or change new parameters or update the type properties for your HDA it just exports out a JSON file with the layout and everything for that aged that HDA and then I can just bring this into Maya so I've got the same pillar that I had over here just showing it's got all of the get bashed bricks set together I'm just gonna import the script and I didn't want to speed up this video at all just to show that it's not I'm not cheating or doing anything crafty under the hood this is just how it runs and yeah so I import the separate function that I created to just call into HD a path and then it calls in The Associated JSON file and it generates a interface and Houdini using PI QT that looks exactly like the interface that you created in Houdini and I found that once I got this working the oh my artists were like way more inclined to use it because I was able to offer them all of the tooltips with the help stuff that I've put in and the hidden parameters work and I could create big high-level tools like this that allow the artist to swap around all of the different HDA functionality without having to dig through a vertical list of parameters which half of which didn't works they were hidden or unloaded so yeah here's just an example of the same HDA that I was demoing before so the artists can bring in their pillar they can clean up the interior geometry in this case I'm just using a quick voxel ization and so that was just the full res voxel ization and then I'll just probably reduce it and this rapper is actually very modular so it just kind of goes into any other QT layout that you would have so this is actually built into a separate interface that I have so the artist can just save out the age the geometry at one point and they continue working in the same HDA to process it and different light so in this case they're just cleaning up the HDA with the VD bees and then swapping over to the bounding box method of processing the HTA to generate the collisions so they just yeah so and really like two minutes they've cleaned up a mesh generated collisions for it and they're done so big time-saver lets the artist be an artist so anybody have any questions thanks for coming to the talk yeah BluePoint so we have our effects team and all of those guys you sue Dini and that's about five six guys right now and then we have four actual like environment artists or a slash technical artists that use Houdini on a daily basis and then a lot of our environment artists kind of pop into Houdini to do some simple processes usually and they really cleaned up interface where we hide a lot of the nodes and stuff so we don't scare them environment or just get startled very easily and so there's some process some HDA processes don't really work in Houdini engine maybe or they're like maybe they take a lot longer to process and goodie the engine where they're sort of more fluidly in Houdini so do you have people dedicated to helping create tools yeah that's basically one of my main jobs yes another quick question about the flag the fabric waving huh so is that animation then is it kinda cake and animation and that it's just valid for that single winfield that you big down yes okay is there any way to like blend in like more like real time like additive as well yeah you could if you wanted to have like an extra field that you generate or extra vertex animation that goes on top of that you can totally bake that out and do that as well if you wanted okay I don't I don't see a reason why you couldn't do that cool well thanks you telling everybody
Info
Channel: Houdini
Views: 11,583
Rating: undefined out of 5
Keywords:
Id: EjkQv8L3z4s
Channel Id: undefined
Length: 37min 11sec (2231 seconds)
Published: Fri Apr 05 2019
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.