Solaris Workshop - Intro to USD Concepts | Rob Stauffer | Houdini HIVE Worldwide

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] okay uh let's get started um so before we really dive into everything that we're going to talk about today um i thought i would uh give us a little bit of a just a really quick overview of some very key usd terms and we'll probably go over this several times today i know jeff will cover some of this stuff again when he talks about assets and i'll of course cover it later on today as well but i thought it'd be a good idea for those of you that might be new to uh for those of you that might be new to usd to uh just go over some of these terminologies i did this back in siggraph last year um but um i did update it a little bit uh with some better looking assets and so on so um so what is usd um obviously it's a universal scene description it's a file format that just defines or describes a scene graph um so here's just a quick look at a what a scene graph might look like here um and uh it describes geometry animation lights cameras and shaders so um it really defines any data that you want it's really just data underneath so any sort of data you want to throw at it it can handle um and what you do is you reference these usd files or you composite the files on top of one another um a lot of times you'll hear the the analogy that it's very similar to how photoshop works that as you build up layers in photoshop whatever is on top without a mask is covering up what's underneath so think of that same thing and i'll probably reference that a couple times throughout today so well how does that help well it's a single place where you can describe your entire scene in one open file format so uh it provides a it's a rich common language for defining and packaging and assembling and editing uh your 3d data it uses multiple uh you know makes it easier to deal with passing assets and so on between multiple packages you know it allows for greatest greater artist collaboration in that way and uh if you can imagine like let's take a look at a hypothetical pipeline um so imagine you had one shot so each shot can be described in a single file um then uh you know there'll be a usd file per department so the weakest layer could be the layout layer where the assets are they're combined they're positioned the next layer may add some characters to the scene from the animation department which may or may not move something or adjust something in the layout if necessary and what you're doing because you're layering that on top you're giving it a stronger opinion um and and then the effects department one might want to add some new geometry on top of that and ultimately at the end uh we're gonna add some lighting to that scene so um no matter which department opens up shot usd in this case uh they see the latest input from all the departments if they want to so you can imagine that at any point uh if you work in layout and you want to see what the lighting is doing because it could actually potentially affect your layout or you just want to see what's going on you can you can kind of do that at any time um and of course this is all dependent upon how you want to structure if you want to use this big shot usd um sort of notion and we'll see a little bit of that when i do some layout stuff later on and so but again the layout artist can hit render and see exactly what the the same output that the lighter would see so that could help them build layer better layouts um so let me uh just really quickly uh even give more of a practical example of what that could look like let's just pop into houdini so if you can imagine here that i have my market layout that we'll be using throughout the day today and then i had some effects that someone had done for me uh just taking that tent and isolating the tent i'm running it through vellum and you'll see here that as i sub layered on top it was white you know it was gray before and maybe not even necessarily in the right location but now it's taking the stronger opinion of the effects layer that i sub layered on top and is applying anything that's different to it so it's saying well these points should be moving um doesn't affect the material because the material doesn't we didn't have an opinion on that material we'll talk about opinions in a moment but it is overriding the point positions because we ran a simulation on that so so let's talk about some terminology here the first one that i want to bring up is layer and layers are simply a file on disk you'll hear that a lot everything is a layer basically uh inside of of usd so it could be something on disk and inside of that it's pointing at another layer and then once you're inside and you're sub layering things on top those are layers that are looking at layers underneath uh so a file on disk character usd is an example um and a stage the next uh it's a rather it's simply it's just a loaded file the usd composes the stage so this is because not only on rare occasions the entire scene stored in a single file flat file it's usually lots of different references there's at least a few layers like i just mentioned that could be usd usda files on disk and they're composed together to present the user with a complex view of the stage and so it is really like it says here is the resulting composition of your layers um composition arcs is the next term i want to i want to bring up and composition arcs are basically the operators that allow usd to create these compositions so uh it contains mixes of sort of a base scene any sort of description or scene description any sort of overrides that are layered or sub-layered on top of those things so with usd it's really important to understand how multiple files on disk can be combined into a single stage or scene graph because every usd file contains a complete scene graph for that single object even if it's just a table that usd file contains a scene graph that represents that table and so the first of these composition arcs that we're going to look at we're not going to cover all of them today we're going to couple cover what are sort of the basic or most important ones especially for most people and that first one we're going to look at is sub layer so you just imagine that one scene graph is laid directly over top of another if the if the any part of that hierarchy uh overlaps with the other then they would you know in this case they don't so it'd simply be a union of the two scene graphs um so each primitive is just defined solely by one usd file or in the other so in this case like we see here um if we were to combine these two it's just a union of of the other two um so you see not only is every part of set a in that resulting scene graph in the middle but every part of set b is in there so let me pop over to houdini again and i'm going to show you a bit of a more practical example to that so just imagine here that we have if we look at our scene graph here and i can clear my viewport overrides so imagine that i have in group a i have a barrel and a bucket and in group b i have a basket and a cooking pot and that is all merged together in this one particular usd file so that's my scene graph there right and then imagine here i have another one that is uh contains a group c and d and c has a cooking pot in it and d has some books and some buckets and i want to sub layer those together so when i do a sub layer so i would use our sub layer node and i drop down and i feed this into the right hand side and i want to say sub layer inputs you'll see that the resulting graph that i have here is exactly what i said it's just a union of the two so we have a we have b and then we have the union uh you can ignore that texture error it's dropping the texture for some reason um but you get the idea so now i have this uh resulting uh scene graph that is just a combination of the two uh so um so the next term uh before i go on and i want to talk about is namespace so it's the path to the primitives in your scene graph so we saw that just a moment ago when i was playing around with uh some of these merging these guys together here so everything here is a path to those primitives to is represents a location if you want you know think of it as a directory structure um and that's pretty much exactly what it is and that's important because not only is it important when you sub-layer things but it's also super important when you're referencing things or any kind of overrides that you want to do when you're dropping down nodes inside of solaris you're going to want to make sure you're using the right namespace and i'm going to mention that a few times today but to show more of an example of what i mean by that so uh we have here if we look at our scene graph we have a couple of different groups um so let's bring in another stage that has actually group b just like we had in uh over here right there that has this our first group b has a basket asset and a cooking pot asset in a particular location so let's say we have another stage or another usd layer that we want to bring in and this also has a cooking pod asset but it has a broom asset so that's something that wasn't in the other one before so just to get a look at what the results are of that we see that okay so the cooking pot asset because we're sub layering this in over top of what we had before the cooking pot asset is being moved uh in place of what was there so if we say here's our original cooking pot sorry there's the other cooking pot they're in the same place so the only one we're seeing is the one with the stronger opinion and that is the one uh that was in this third uh node that we brought in and now we also have on this node we have a d which doesn't exist anywhere so that is just simply laid there on top or union with with what was existing already we could also say what if we were to take uh just two of them so if you imagine here again we have a and b and then i want to sub layer in these two make sure i say sub layer inputs and you see it add sum and then move some based on whatever is there so it added a d but it also moved b over so i think you're starting to get to understand a little bit about what i mean by name spaces and and so on and how important that is for uh for what you do so um so the next thing that i want to talk about and i mentioned it a couple times and we'll pop that over again in houdini in just a second is opinions and it's basically opinions uh by definition of the atomic elements that participate in value resolution in usd uh so each time you author a value for anything any sort of attribute relationship you're expressing an opinion for that object in that particular layer so on a composed stage uh any of those layers or any objects in the in in that stage might be affected by different opinions and there's something that uh is called strength ordering which i believe jeff will talk about later which determines what how usd figures out which opinions uh are stronger than the others so uh just to pop back into houdini one second again and that's what i meant by when we say here we have this bucket asset or cooking pot asset rather and we also have one here because uh in this particular case since i'm in houdini i'm sub-layering as you're adding you're adding it's becoming the strongest position so in fact if i said weak is positioned and then show this then my cooking pot doesn't move at all because it's what i sub-layer layered in is actually being sub layered in is a weaker weaker to what was there before so um those are important things to to think about most of the time you're probably not going to do it this way um i would imagine most of the time you're going to stick the sort of i don't know the old-fashioned way if you can say that about usd um so and again same thing here that we could do exactly the same thing here and it'll adjust what we would see so again uh these are all things to keep in mind as you're building your layers but it makes for like i showed in my example here with the layout and effects that i want to um i can turn off the ground plane by the way that i want to see those overrides because i'm i'm sub layering this on top so this is the same thing i did this in line by putting this in line i'm effectively putting this on top of that layer okay so while we're here and we're we're looking at these layers there's a couple of other things i want to just point out too is we want to make you know sort of understanding this stuff as easy as possible so with solaris we do provide some handy tools so if i click on say shop back and i looked at the layer stack i actually can see every layer that was involved in building out this particular layer this effects layer same thing here if i click on that and click on any one of those things you'll see that there's a magic mark market layer which is what i brought in but that is uh that is some layering in or layered on top of the full scene which was the original usd file that i used to make that particular layer um i can also look here at the composition stack or if i go over here we also have the scene graph layers panel and what's great about this is that while you are working and we'll see this again later on today um you're able to control what you see in these layers like you can i can go in here and just start turning off because remember everything's a layer so each layer i have some control over what i see as well as i can turn off the effects if i want let's say i'm i don't want to slow my scene steam down or i don't want to see the effects for at that particular moment because they're not ready yet um and this will constantly be updated so if your effects department is lighting or writing to that effects layer all the time then you'll always be able to get the latest updates as you're working so as a lighter you bring in that effects layer and the idea is that it's always pointing at that latest version excuse me um so now the next thing that i want to talk about that was sub layering so some key things to point out with sub layering is they're fixed scene graph locations you can do a sub layer per department and there's no conflicting edits or sharing issues because each department is working in a separate layer they don't have to worry about sharing that single file um and and having conflicting edits because you're sub layering things on top so if you have a stronger opinion based on that that opinion order that you're doing so when i brought in the effects layer and i put it on top of the layout that has a stronger opinion um so whatever you're doing in layout you don't have to worry about messing up what's above too much or i should say if you're doing something later in effect you're not necessarily messing up what is on layer you're just over you're have a stronger opinion than what's on layer which can be muted at any time and the layout portion is is left untouched um you know non-destructive um so the next thing i want to talk about is references um so it's another sort of primary method of combining these usd files into a single scene graph and unlike sub layering referencing takes the scene graph of the reference file and sort of graphs it into a location in the referencing scene graph so what this means is that the scene graph locations of the reference file are added on to the path into which the file is referenced so to better illustrate how that works let me pop into houdini again okay so what i'm going to do here is let's say i'm going to reference in i'm going to take my original stage stage here this one here with a and b and then what i want to do is i'm going to reference in this one over here that set that's third one that we had done and so let's see what my scene graph does well it's not doing anything yet i need to say reference from multi-input so it's referencing from that second input there so you now you already see um that it puts it just added it didn't override anything like when i sub layered it it combines stuff and if there was any overlap or if there's anything that it has stronger opinion upon or about that it would put it on top of that but in this case it actually just stuck that entire scene graph in a location now when you're saving out references and i'm sure uh we'll talk about this later um you it always usd wants to have a default primitive which is it's always good to define a default primitive even if it's like you know i could say group a is a default primitive or something like that um and and here our reference node is trying to find an automatically chosen primitive but i can say well i want a specific one so if i control and click on this menu i can say i want to bring in the broom asset so that's all i'm referencing in from that and i can actually put it wherever i want i can specify well let's put it in group a and we'll even make a new group there and so now you'll see or we'll make a new branch or a new new path so you'll see i have group a i have brooms and then i have that first broom we can just say broom a or broom one whatever you want to call it but you get the idea so it's putting in in that that broom asset it's taking that graph or that that scene graph from that asset or that layer that i'm referencing in i'm choosing exactly which primitive in that that i want to bring in and i put it in a very specific location in in uh in my scene graph um so it's a great way to kind of uh sort of you know if you i think of references as sort of what you want to do with the base layer so as you're as you're building up in fact a steep stage manager here when i built this these are all references i'm bringing them in and i'm putting them in an exact location but what i do after that any sort of anything i do with effects layers or anything like that is going to be sub layered on top of that stuff okay final way of bringing a usd file into or bringing usd files into an existing scene graph is through a mechanism called a payload so it's almost identical to a reference the only distinction is that it's it's possible to tell the scene graph to not load the payloads until they're specifically requested so when you're when files are combined with payloads it's easy to control which parts of the scene are loaded into memory so it keeps memory use and processing time down while letty letting you just kind of load and focus on the parts of the scene that you're interested in so in fact if we go back to houdini for a second okay so you see here um i have that market scene again uh that i'm sub layering in uh and if i look at my scene graph tree here uh i can say let me zoom out a little bit this um i can go over here and say where is it load all payload so i have some viewport controls here for the payloads and i can turn that off and it unloads everything that means that everything there was essentially payloadable it was a and then as i look through my scene graph tree uh cyclorama is not you see the tent as an example is one you see that it's changed color because it's no longer loaded i can right click and say load payloads and i'll load that and i can start to go through do that for uh some of the other things as well um say this load payloads so i'm not going to go through and do every one but you get the idea but it's a good way to do some management as far as what is being shown in the scene keep things efficient you're only seeing what you want and there's also other ways to do it as well if we were using a stage manager node there's an option up here that you'll see that you can check or uncheck whether to load a payload or not there um so i think so that about covers that so that's payloads so instancing uh so obviously i think we all know a lot about instancing it's many instances of the same object so it's that's just a few same objects or a few objects repeated over and over again uh it's kind of like what we used in the market scene for the shelves so you're instant instancing all these objects to a bunch of points and so therefore it creates what we call prototypes we'll see in just a second which are just the objects that are getting instanced onto the points the important thing to remember is that each instance of each object is the same uh you can't override beneath that root primitive uh of the prototypes um and but it can be broken so later in the day we'll see some tools that we have that we can use to do things like hero out an instance and infect it or you know use it in some way if you want to pick a particular instance and do something to it um so with usd it works sort of the same as as you would expect if you can imagine here i am going to actually drop down a point instancer um and then on this side i'm just going to put some dummy objects i'm going to use a sock create node which we'll see more of later today so i'm not going to talk about it much but inside i'll put a cube or box something like that to make it smaller and then maybe i'll drag and click and put something new in here and maybe in here i'll put i don't know put the rubber toy make him smaller there and then i can feed this into this right hand side of this point instancer and i can say well i want to use the second input and i want to use i don't want to use the entire stage i want to specify the reason being is if i use the entire stage well then it's it's going to instance the entire stage to that point as you see here in fact let me just put a grid down i'll use that as my points and so you see it's putting that at each individual or the entire stage which is consists of the the rubber toy in the box and it's putting it at each point so it's instancing it at each point what i want to do is say i don't want to use the entire stage i want to specify which ones i want to use and that can be sop create one i actually can use an asterisk here and it makes it nice you know we you know our our point tool makes it pretty easy to kind of randomize these things in some way but what i want to point out back to the real usd portion of things is if i now take a look at my scene graph now you'll notice here and again we'll cover this throughout today this is more about usd but i'm seeing some uh things here that aren't even in the stage that i'm looking at and that's because it's stored a viewport override so in order to get rid of that i want to clear the viewport override because once you you do some sort of viewport or override we store that for you in fact you can even save them out so that you bring them in um with your scene anytime you want but again here so i only have we we've created what are called prototypes and what that does is the prototype are the objects that you want to instance onto the points that are just simply contained inside of that point instancer so next we're going to talk about variance sets and variants um so with variant sets it's a set of alternatives it's non-destructive and so just an example here this is sort of an old example but these are the carpets and we had one asset that i brought in and everything is stored as a variant on top of that which is kind of cool so you can have you know a modeler make a bunch of different assets or a bunch of different individual models and then from that combine that into a larger asset that contains all the variants and you just get to choose which one you want to use it every time and we will see how that can be helpful later on when i deal with placing books and so on and barrels and stuff like that so in fact in that market scene a lot of the assets that you saw that compose that scene are assets that have multiple variants to them and then you can choose the variant and place it however you want one handy thing about variants or one thing that could be you know useful is you could also use variants to create lods so basically what this is doing is this is an hda that is running through the asset you feed it and however many lods you want to create we're just doing a little uh poly reduction on it and then storing that lod as a variant on top of that um and then you can do things like set up something where you say okay based on the distance of the camera or based on some other location in space or as we build these tools maybe add some more control over that to say oh now that i'm further away i want to be able to you know grab whatever variant it is based on a certain threshold that i give it so here we're going to use a camera and then we're just going to move that give it a threshold and then you'll see in just a moment that as we move away we get that threshold as we move past the threshold distances the auto select lod tool is going to choose um which one to look at so we're watching the bottom there we see that there we go it's changing as i get further away so now real quickly since we've been talking about uh variants uh let me just quickly show you what it looks like to really um take an asset and add it and add a couple variants to that primitive so i'm just gonna drop down and stop create here and we'll call it sphere and if i go inside i'm going to put down a sphere like this like so let's make it a mesh like that here's my mesh um and then i want to say add variance to existing primitive because i want to add it to the sphere um and what i want to do is let's feed this into the first side as well as there and now i'm going to drop down a mountain stop well first i've got to put down a stop modify remember we're in lops right now and we'll call this mountain one let's go inside and i want to add a mountain soft inside of here now it's not doing anything there's a number of things i could do here i could either do a usd unpack or i could just go up here simply on here and say unpack usd primitives to polygons and so now i'm getting my polygons and i get my mountain i can do whatever i want there change that a little bit and then i'm going to alt click and drag another one let me dive inside here and just do something drastic just for demonstration purposes and then i also want to make sure that i'm feeding in my original one because i want that to be part of my variance um so you see here that it created a new primitive but i want the variant primitive to be actually the primitive itself so if i want to say sphere put that there and now you'll see it doesn't work and the reason why is because some of the opinions of these and we'll get into this uh you know won't deal with this too much maybe jeff may talk about this a little bit but the opinions um are stronger than uh or weaker than the actual primitive itself so what i want to do here instead of saying oh put the variant primitive right on the original i'm going to use this as a source i'm going to use the source primitive where i'm going to set the source primitive to be that sphere and maybe here we'll call this sphere asset and right here i actually want to change this to be just sphere as my source whoops and so now i have my uh now i can go in here and change all of my different variants here i'm just adding down the bottom here i'm adding some edit variant nodes i can also do things like set the variant selection through that or not so it's using the first one or it's not using any of the variants or i can set it to one of one of these i can change the name here i can say base [Music] i can say mountain one mountain two and so now like i said i have all my different variants there for me so just a quick look of how i would take something and add and the reason why i did it with this with this context options block and adding it to an existing primitive is because i if i don't want to just be storing the sphere over and over again with just the different changes i only want to be storing the changes and so that's what i'm doing i'm adding to that primitive i don't want to make a new primitive or anything like that it would be it's much more efficient in this case to do that because i'm not actually creating any new geometry so so using variants really is a great way to you know have one asset maybe the model is the same but you want to just vary the materials and be able to store it and transport it just as a single single asset we'll see that later today with a lot of the objects we use in the market scene but you can do things like add aging to the texture so as your sequence progresses things get older or you the plates get dirty uh or whatever you need so it's just a great way to work and i think you know you'll find that when it comes to usd it's good to plan ahead and and jeff will talk about that today as far as you know setting up your assets properly and and so you get the most out of usd um and the last little tidbit is hydra hydra is the api um that a renderer has to use in order to get the updates from usd so basically it's what allows you to see usd in your viewport so everything in that viewport like for example the solaris viewport is a hydro delegate and so that also means that you can have a unified viewport for things like karma render man redshift arnold i know has a hydra delegate so instead of having separate windows per renderer you can essentially have it in one single place and you just choose which renderer you want to use as a drop down and of course we have our new renderer karma if you haven't heard about it and there's lots of others out there so anyway that's it for me for this first part and i am going to hand it over and i'll see you guys later on today
Info
Channel: Houdini
Views: 3,460
Rating: 4.9365077 out of 5
Keywords:
Id: H-RYtuacUlM
Channel Id: undefined
Length: 33min 0sec (1980 seconds)
Published: Thu May 21 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.