Home Technical Talk

What is the conventional workflow for texturing rocks for an environment?

polycounter lvl 2
Offline / Send Message
coolguyslims polycounter lvl 2

I'm learning how to create environment assets and I'm wondering what's the conventional way to texture rock meshes. I've created props in the past before by baking a high-poly model to a low-poly asset, but I think they treat environment assets differently? I'm not sure. I have all the necessary software and have already created my high-poly sculpt.

Replies

  • gnoop
    Options
    Offline / Send Message
    gnoop polycounter

    Last time I did it it was a combination of uniquely unwrapped big floating pieces done from Lidar scanned point clouds plus lots of manual cleaning and over sculpting altogether with extra UV channel for a second layer of tilable normal and color textures

    Plus Substance Designer generated tilable displaced materials in somewhat shifted piece to piece and flipped manner to fill the gaps in-between scanned unique blocks .

    I am still not sure I did it most optimal way or anyhow "conventional" at all so share your way if you can .

    My guess in Unreal5 it all should be much easier.

  • sprunghunt
    Options
    Offline / Send Message
    sprunghunt polycounter

    For most rocks in modern games I've worked on we've used a blended shader that has a large uniquely unwrapped texture, baked from a hipoly, combined with a tiling detail texture. So you still need to bake a texture - just combined with another texture.

    This breakdown from God of War: ragnarock shows a similar technique:

    https://www.artstation.com/artwork/r98425

  • Benjammin
    Options
    Offline / Send Message
    Benjammin greentooth

    You can still use a high poly bake, but typically you don't create unique albedo maps. We do a normal map and some kind of packed mask map, with AO, curvature, whatever you need. Then some material wizardry, a secondary normal map, and some tiling triplanar rock textures.

    The key with big rock/landscape meshes (which UE5 "solves") is the LODs and keeping them looking decent at a distance (You've probably seen it, where big rocks or cliffs look much softer at a distance). I create my LODs, then take the normals from a mid to low LOD level (the lowest level if I can get away with it) and transfer them to the higher LODs. That way, the baked normal map keeps its form, even at a distance.

    All of that is maybe too much info up front....🤣

    The gist for getting started is the material stuff in whatever engine you're using.

  • coolguyslims
    Options
    Offline / Send Message
    coolguyslims polycounter lvl 2

    Can you specify what you mean by a large uniquely unwrapped texture? So sculpt in ZBrush, low-poly in Maya, then bake whatever maps you need, create tiling albedo in Designer, import into UE5, and then create a shader for creating details / secondary normal map for the tiling texture? That sounds like the gist of what people are saying. Wouldn't it be easier to just create a unique texture? Why is it common to do it with shaders instead of Substance Painter for example?

  • Neox
    Options
    Offline / Send Message
    Neox godlike master sticky

    well it depends on how big we are speaking. i guess everyone here assumed really big environmental pieces. it is just a matter of texel density or memory usage. a uniquely textured rock will likely eat a lot of texture memory or look very blurry compared to other, smaller elements in the game.

  • coolguyslims
    Options
    Offline / Send Message
    coolguyslims polycounter lvl 2

    Oh I understand, I should've specified what kind of rocks I mean. I'm talking about what I guess you would describe as like, hero rocks? Human sized boulders. A static mesh that's scattered around the landscape that will draw the players eye and be at their height. Something the player will look at and should be very pretty. But it's also nice to understand how people do it for big environment rocks now, too.

  • coolguyslims
    Options
    Offline / Send Message
    coolguyslims polycounter lvl 2

    Maybe it would be a good idea to have the option to vertex paint moss inside of Maya? I've seen some posts from Jonathan Benainous where he vertex paints things how I describe, but I've never done that before. You'd have to create a custom shader inside of Maya's Hypershade? Wouldn't it be better to create this vertex paint shader inside of UE5? Actually maybe he isn't using UE5, so it's easier to do it in Maya. I don't know, just topics for discussion.

    https://www.artstation.com/artwork/g8do3x

  • Benjammin
    Options
    Offline / Send Message
    Benjammin greentooth

    @coolguyslims They've probably got some sort of bridge between maya and their engine. One of the captions specifically says the shader was built with a proprietary tool.

    Human sized rocks would still likely be textured the same way, because a) you want to save your VRAM for where it matters, b) you probably want them to match the environment, and c) they're going to be heavily instanced and possibly scaled in all sorts of ways, which could leave you with inconsistent texel density and obvious repetition.

  • sprunghunt
    Options
    Offline / Send Message
    sprunghunt polycounter

    Yes - Naughty Dog uses their own engine. Their engine doesn't have an editor like Unreal. They do everything in Maya. If you're using Unreal ignore the way they're doing things.

    @coolguyslims I'd download the Paragon environment assets from the Unreal Marketplace. There's some large concrete bits and rocks in that pack that have shaders you could look at as examples of what we're talking about.

    https://www.unrealengine.com/marketplace/en-US/product/paragon-agora-and-monolith-environment

  • coolguyslims
    Options
    Offline / Send Message
    coolguyslims polycounter lvl 2

    I took a look at the Paragon environment and it's very interesting. I can see that the static meshes use a material that has a unique normal texture, mask texture, and albedo map, but it looks like the albedo map is blended with a tri-planar albedo map, too. It also looks like the normal map may be blended with a tri-planar normal map, but it's hard to tell. I see what you were saying now.

    I'm just wondering why? If you're already using unique maps for each individual rock why blend that with a tiling detail texture? Does that keep the texel density consistent when scaled?

  • Benjammin
    Options
    Offline / Send Message
    Benjammin greentooth
  • coolguyslims
    Options
    Offline / Send Message
    coolguyslims polycounter lvl 2

    Ok I see, I'll try it out and see how it looks. Thanks for the help!

  • coolguyslims
    Options
    Offline / Send Message
    coolguyslims polycounter lvl 2

    I created my rock, texture maps, detail texture maps, detail shader, and tested it out. Here is how it looks!

    Same rock just scaled way larger with different detail texture parameters.

    It's not perfect but I'm very happy with how it turned out. I hope you all think it's good, too. I really want my shader to be more advanced so that I can add moss based on world rotation and discoloration towards the top and bottom of the rock now, since it looks a little flat and disconnected with the environment. Does anyone have any resources for adding more interesting parameters such as those?

  • Benjammin
    Options
    Offline / Send Message
    Benjammin greentooth

    Good start, yeah 👍️ - a shader like this in production would likely be iterated on over time as more assets are added and the environment gets developed.

    A fancy rock shader can get pretty expensive once you start throwing multiple maps (especially if they're triplanar mapped) and effects at it, so keep an eye on your instruction count.

    In terms of understanding how to do that, its really down to the fundamentals of material creation and lots of reference. The linear interpolate (aka LERP) node is going to be one of your best friends. For blending with the ground you might use RVT (I think they call it something different in UE5?) or some sort of distance field function.

    Just google stuff and experiment.

Sign In or Register to comment.