Are in-game props modular or bespoke? Everything else in Star Citizen seems to be going to a modular system, like the truck stops, satellites, moon bases, etc. For example, will there be standard sizes for boxes, crates, suitcases, etc.?
TL;DRProps are not generally modular but follow set size metrics where gameplay needs them, such as cargo and cover sizes and grip sizes, with modular sets only where sensible, and LayerBlend lets many materials share one draw call.
Well, there's already standard sizes in the props. We use various metrics: standard cargo units for cargo, and we use cover metrics for everything else. So we try and build consistency in terms of how assets can be used as cover, like full-size cover, standing behind, half-size cover, crouching behind, and so on.
Because we cover such a wide range of things, it really does depend on the individual asset. We've got to be very, very careful when we create assets. So you think, oh, yeah, I'm going to make a cup, and it'll take me a few hours, it's great. But then you've got to consider, well, okay, we've got animation for this cup, and then you've got a pint glass or a shot glass, and so we have set sizes for a lot of our different types of props. So this would be a cylindrical pick-up-able prop, and we'd want to work within the min and max grip sizes. One thing we did run into slightly in the past is that we were really, really strict with it. And then you get them in the character's hand in game, and what you think is two centimeters difference, it won't make a difference, and then you see it and you're like, ah, that's ridiculous.
Like a standard 330 milliliter can. If you're trying to adhere to metrics, sometimes it's a bit like, you look like you could club someone with that. It's massive. It's not can-sized anymore.
We have a set of metrics. It's not that everything's going to fit within a 25 centimeter box. It very much depends on what it is. As Cory mentioned, things like cargo and pick-up-ables, it's really important that we are consistent with our sizes. It doesn't mean that if you're building a laptop it has to be 50 centimeters by 25. We have flexibility, but where the contact points are is what's really, really important. As Cory says, we are making a universe with a huge amount of variation in it, but cover metrics is really, really important, especially for Star Marine. That's why our cargo and cover sizes are the same, so that anywhere that you can place crates and boxes and things like that, we want them to be used as cover and have gameplay use. Smaller items than that, for pick-up-able crates and things like that, where we can and where they don't make things look silly, we will work to a division of that 1.25 metres, so that we know that if we stack three on top of each other, it can be used as set dressing, but it also is another cover point. As the game has progressed, the more and more important this stuff becomes. Absolutely, if you're flying around the universe, you will find boxes that aren't 50 centimeters tall. But where we know that it's going to impact the gameplay, we absolutely work to a metric system. In terms of modularity, there's only one way to really make a cup.
You can't really make a modular cup.
It's where it makes sense. So if we're doing the counter units, like the shopping counters and things like that, we will make them modular, in that we'll make straights and corners and curves and things like that, and they can snap together and work as a modular set, just so that it makes it much easier from a building point of view. And also, generally in the real world, things tend to be built in a way that they do work together, like our desk here is built up of smaller sections that all go together. So we do where it makes sense, but I think the environment team work to a 60-40 split, and the ship team are around that. We're nowhere near that level of modularity, just because most of our stuff has unique shapes and unique forms.
Plus we have technology such as LayerBlend to optimize having lots of different materials and stuff together. Which, I just opened a can of worms there, explaining LayerBlend now.
So LayerBlend is the material system that we use. It's the same material system that the character team use, and weapons. And what it allows us to do is, if we're making this model ship, for example... can you see that? Let's go here. I don't want to break it. So if we're making this ship, for example, rather than having it completely uniquely unwrapped, so all of this detail is on one texture... the problem with that is that we're limited by the texture size. And because we want to make things look really, really good, we want it to stand up when you get close to it. If we're limited by our texture size, that can hold back the quality.
You wouldn't want every single surface to have a 2K texture on it when, if it's a flat surface, we use a lot of basically really small tileables with LayerBlend, and they're pre-cached.
So the way the LayerBlend library works is that we have a library of surfaces and materials in there. So we'll have bare metals and plastics and rubbers and cloth and all that sort of stuff. Recently wood. And what that allows us to do is, using masks and material IDs, we can break up this model and say, okay, so we've got these two different finishes on the metals here, and normally they'd cost us two draw calls if we were using two material IDs, or a big chunky texture with all the information on it. But what LayerBlend does is it condenses that all into one draw call. So it's a really, really powerful way of having lots of different... like if you look at this here, you've got a few different metals, you've got glass, you've got plastics, there's all sorts. You might end up with 10 or 12 different material types or surface types. And by utilizing the LayerBlend system, it allows us to combine all that into one draw call.
It all gets munched down. It's using only 256 by 256 textures instead of a...
And then where we get our variation... so that's the base level library. It uses these small tileable textures, and then we get our variation by using different masks that blend those textures together. So we use something called a WDA map, which is wear, dirt and AO, and that allows us to control when we start to age these assets, because we make everything new. And then we have sliders in engine that allow us to age it. And eventually that stuff will be, if something's in an abandoned environment...
Driven by volumes. So you'd have a volume of space and you'd say, I want everything in this space to be worn by this amount.
So we could do the surface outpost and say this surface outpost hasn't been touched in 10 years, so everything's completely worn and knackered. And we use higher res shared masks that allow us to control where that wear and that blending between the materials come in. The other really nice thing about the LayerBlend system, especially for the character team, and we utilize it if we're doing things like rucksacks and bags and even toys sometimes, is if we've got sub-polygon... I appreciate this might not be that interesting to some people, but if we've got sub-polygon surface changes, so we want to pull out these logos, then we can use, again, a higher res texture to tell the shader where we want the different surfaces to be. It's a big mask texture, basically. Once you invest the time in the library and getting these nice textures, it's a really, really flexible system, because it allows us to, like I say, make a really wide range of assets, and the scale of assets as well, because you can make a pen rather than that pen either being a unique texture or a lot of different materials. If we want to pick it up and look at it, we want it to stand up and look good. So it allows us to make high detail on small props, but then still on our larger scale assets, still make really good, convincing...
A lot of variation on large flat surfaces as well, which you wouldn't think is that easy to achieve with 256 textures. But with the masking system, we can get it to work.
Where we blend the materials together is really powerful.