Hey Polycounters. Learning to be an environment artist and I'm struggling with something. When to bake and when not to bake.
Example: Let's say I'm creating a modular building to be used across my level. Am I making a high poly version of this building and baking it down so I get nice edges on all my 90 degree edges, or is this something that can just be skipped since you don't really pay a whole lot of attention to the buildings? I've seen the Sunset Overdrive technique about using a trim sheet for every 90 degree edge in your game, but I also see a lot of games don't do this and just have regular, non normal mapped sharp edges.
But back to my example, should I be making a high poly version of this building, or is something like a building something that can be skipped as far as normal mapping edges goes? Should I really only be making high poly versions of things like props and weapons and baking those things down?
Just struggling to figure out the balance. Any tips would be appreciated
Replies
Just want to preface this by saying I'm a student learning the same thing, so I am by no means a pro. Just trying to share some info I've gathered.
You mention trim sheets which, to my understanding, is an industry standard for normal mapping environments. It keeps texture resolution low, but you can still keep your detail diverse. You may have read this already, but its worth a look if you haven't:
https://80.lv/articles/tiling-textures-in-game-environments/
His Gumroad tutorial is pretty bomb too. Give it a Google when you get a chance.
I suppose in response to your general question of when to bake/trimsheet vs when not to, it depends. What style are you going for? How efficient do you need to be? How much time are you given for a project?
It isn't a bad thing to make a high-poly version for each of your environment pieces and bake them down. I did that for a game I helped work on over the summer. You just need to be thinking about how much of that environment will be seen/loaded at one time. Textures take up video memory, and full video memory causes performance drops. That's why trimsheets are so cool: it's one or two small textures, and you get a whole world out of it. Sure, it's a more geo-heavy workflow, but it's easier for a graphics card to load more verts than it is to load a gazillion 1k-4k textures.
Hope I helped at least a tiny bit
And what do you mean by using trim sheets is more geo-heavy? Wouldn't it be the opposite since you can use the trim sheet to get nice rounded edges instead of beveling them? Maybe I'm misunderstanding.
edit: went ahead and bought the tutorial. looks great! thanks!
That doesn't mean you wouldn't create a high poly, or use normal maps, it just means you wouldn't make a unique high poly mesh for the entire building.
Generally, what you would do instead is create tiling textures, which again you may want to create highpoly source meshes to bake normals, ao, curvature, etc. You can approach this in a few different ways, the old school way would be to slap tiling textures on simple geometry. The more advanced way would be to create modular sets where you've base tiles, trims, windows, doors,, etc, which may or may not share the same texture and all generally work together.
For something like beveled edges on the corners of the building, you would generally bevel the low poly geometry.
I notice not everyone uses this technique, so just trying to figure out why and when to bevel/not to bevel small pieces. Thanks again!
Adding bevels to the textures makes them less modular, harder to do things like offset the uvs for additional variation.
For something like a window frame, you could if you wanted some unique detail, make a highpoly and bake that down. This has the problem with the bevels baked in into the texture but even more extreme though. You would need to have multiple window frame textures in your atlas if you want any variation.
Yet another option is to use a secondary UV set and secondary normal map to add the bevels, this would result in a pretty complex shader but you could do lots of interesting things with it to get variation.
You could also set up a blended material with secondary UV mask or vertex colors to control the blending, this way you can use more unique uvs and textures but blend them with alternates to get variation.
So, plenty of options, depends on whats best for the situation, what sort of constraints you have and what your engine is capable of.
Just some questions regarding your reply, I just want to make sure I'm understanding this correctly.
So, if I were to make a big house prop, I would make some tiling textures (roof, stucco, wood, etc.) in lets say Substance Designer, and use those to texture the house. I understand that. Since I don't want the house to have sharp edges, I would do a bevel in the geometry itself with either 1 or 2 divisions to give it that rounded look. Correct? But I'm a bit confused...what do you mean by adding bevels in the texture? You mean baking down a high poly to low poly? Also confused about using a second UV set to use a normal map for the bevels. Wouldn't this require making a high poly of the house to get those bevels in a normal map? I thought making a HP of the house wasn't necessary?
I guess I'm just a bit confused about the workflow and am getting some terminology mixed up.
Thanks for you time!
By bevel in the texture, I mean baking bevel from high to low.
For multiple UV usage, check out this thread by Tor Frick: http://polycount.com/discussion/89682/an-exercise-in-modular-textures-scifi-lab-udk/p1
Will it be easier to take it out later or add it in?
If the asset is going to be duplicated and instanced all over the place and you'll see a bunch of them pretty close up, you might want to rethink that but again it is really specific to the object and the game.
My most recent project used Alex's trim method:
https://www.artstation.com/artwork/8Y0oR
Guess I'm a little confused as to what you mean by beveling in the texture itself. You mean by baking from a high poly to a low poly, there would be bevels in the texture? Then I wouldn't be able to reuse that texture anywhere else?
I read through that whole thread by Tor Frick, really inspiring and interesting how he did all that. I understand thats how the trim sheet technique is used. But, isn't there an issue with texel density with that technique? Like, if you're using one trim sheet for a whole environment, wouldn't bigger pieces have way less texel density than smaller pieces resulting in uneven texel density?
Just trying to understand this completely, sorry if I'm not 100% getting it.
"If Im making a town filled with houses and big walls and a castle, trying to figure out the best way to approach this. Would just creating maybe 3 or 4 unique looking houses, then using tiling textures to texture the stucco/stone and then maybe a trim sheet to texture the wood support around the house? Would that be an efficient way to go about this? Bevel the edges of the wood trim so its not sharp as well?"
Yeah, pretty much that.
"What if I used 2 or so 2k texture maps for a house and just texture in Painter...I feel like I can get nicer, quicker results that way. Is that not a good way to do it?"
In short, no. If you do this, your texel density will be terrible. If you're making an RTS or something that might be fine, but for a FPS style game or anything where you can get up close you'll need more resolution. Try to imagine a 2048 covering an entire building. You can make a simple block out and do a unique UV for it to see what sort of resolution this will give you.
"I read through that whole thread by Tor Frick, really inspiring and interesting how he did all that. I understand thats how the trim sheet technique is used. But, isn't there an issue with texel density with that technique? Like, if you're using one trim sheet for a whole environment, wouldn't bigger pieces have way less texel density than smaller pieces resulting in uneven texel density?"
You would want to keep scale in mind when you create your trims. You wouldn't have a base tile that's 1024px high and then stretch a 64px trim on it. Gotta make sure you plan it out sensibly. Generally you design your trim sheets to tile at the same interval as your base tiles. There's a bunch of info on modular environment creation in the wiki: http://wiki.polycount.com/wiki/Modular_environments
Before you get too far you should block out the basic proportions for a simple asset, figure out what sort of texel density you want, and then do some tests with trims.
And for my town I’m creating, it’s third person, so you will get up close to the textures. What’s the best way to determine the *best* texel density? I’ve made some environments in the past but it’s always just been like “yeah that looks good, all props look to be even texel density give or take”
As of now, in my environment I'll just be using trim sheets without bevels baked in and instead i'll just be beveling the edges of my geo. I feel like this is the simplest way to go about this. I think the only issue I see here, is that I won't be able to get any edge normal detail like in Olsens technique, instead every edge will be clean no matter what the material is.
And how would you go about putting things like edge wear on a large environment piece that has a tileable texture or trim sheet texture on it? Is this where masks come in?
last question - regarding Olsen’s technique, how would you even create a 45 degree angle bevel for a trim sheet?
Bevels can become expensive as small, and especially thin triangles are more difficult to rasterize. In a real game it will likely not be your big bottleneck these days, but if you're down to the wire when figuring out where a bottleneck lies, definitely take a look at the geometry of the scene. Too much may cause issues:
http://www.fragmentbuffer.com/gpu-performance-for-game-artists/
http://www.ericchadwick.com/examples/provost/byf1.html
http://www.ericchadwick.com/examples/provost/byf2.html
Edge wear can be handled with vertex painting, probably combined with some type of curvature detection.
A 45 degree angle normal map like in Sunset would probably be created by just baking down a box modeled to the correct angles. Same for cylinder caps.
And as far as edge wear and vertex painting goes, would it also be possible to create a mask for tiling assets and blend materials in UE4? I did this for some assets a while ago that had tiling textures. Just not sure the performance cost to have blended materials for every single asset thats using either tiling textures or trim sheets
And yeah that's what I was suggesting. It can add up if you're using triplanar textures, but aside from that a bit of extra shader math + keeping a couple extra masks in memory isn't too bad (and vertex paint is free).