Creating seamless and unique environments - My final university project

polycounter lvl 8
Offline / Send Message
teaandcigarettes polycounter lvl 8
Hey guys, I'm currently in the middle of working on my final year university project and had decided that it might be a good move to make a thread for it.

To give you a quick overview of what my project is about, I’m currently trying to develop a workflow for creating seamless and unique looking environments. Basically, I will be attempting to reduce the visibility of texture/shading seams and texture repetition while relaying mainly on lowpoly geometry and tiled textures. Essentially, I’m trying to bring the quality of the assets created this way closer to the ones made using the next-gen workflow without being limited to unique unwraps.

To develop this workflow I'll be making a small diorama that will act as a proof of concept and a playground for experimenting with different methods.

Here's a blockout mesh of that environment:

It's currently quite small, but once my report is submitted, I will have a few more weeks to expand it into something larger. That will be also a good test of that workflow, since making everything easily reusable is one of my goals.

Anyways, over the course of next two or three weeks I will be documenting everything I do.

Now here's where I need your help guys :). I'm intending to use this thread as a basis for the last part of my report in which I'll be evaluating my own progress. I'm hoping to use your feedback and critique to back up my discussion, so please do rip my work to shreds. The more issues you find, the more I will have to write about :)

Once this environment is done I will compile my methods in a form of a tutorial that I will put up somewhere online. I’m hoping that you guys will be able to give me some feedback about its usability and its content as having it peer-reviewed would count as testing of my project’s product.

In any case, feel free to ask me question about the project and its purpose. After writing whole pages about this project, it’s difficult to summarise it in a few sentences ;) If there’s something that isn’t clear, just let me know and I will update this post.

I should be able to post my first update today if all goes well. Currently I'm at the stage of creating some of the tilling textures.


  • samcole
    Wow, this sounds like it will be a fun, yet challenging project Tea. One suggestion would be to use Mudbox to do your texturing. After you unwrap whatever meshes you intend to unwrap, you can projection paint in Mudbox and it affords little to no seam issues, since your painting on the model, and straight to the UV's without having to worry about border issues and what not.

    Check out the website where the guy released a From Mudbox to UDK tutorial series".
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    Samcole: Thanks for the reply and thanks for the link :) Yes, I'm familiar with projection painting in Mudbox and normally that would be how I would work with smaller, uniquely painted assets. However, I should clarify that my goal is to avoid unique unwraps on large meshes and instead to use tilling textures that could be reused.

    For instance, in case of this terrain mesh, I'm hoping to use multiple UVW channels and blend between them via vertex colour. I will also look into changing the shape of the mesh to hide the seams so that they are invisible to the viewer.
  • benji
    Sounds interesting, look forward to seeing your results and I'll be happy to give feedback. Which university are you at?

    I've been working through your foliage tutorial on 3dmotive by the way, and learning a tonne, so cheers for that.
  • d1ver
    Offline / Send Message
    d1ver polycounter lvl 9
    hey Damian, best of luck with the project!

    I think that to make your point you need to make a conscious effort to include different kinds of surfaces. For example
    yes everyone know tileable textures is pretty much the only way to do terrain/ground/cliffs, but will it work with props? Or maybe instead of making rocks, can you make planks with it, or maybe rusted metal objects, fabrics, plastic? etc. etc. this way you can show how much potential this approach has and if it could be used wider than it is now.
    I'm pretty sure you're aware of this:
    but I think it would be hefty to include as a demonstration of the variety within a single tiling texture.

    also are you planing any specific shaders to take it up a notch?

    Maybe a mask for wear and tear to blend thorugh 2 different textures? etc...

    Anyway, I'll be sure to check this thread once in a while:)

  • Prtofdacrowd
    Offline / Send Message
    Prtofdacrowd polycounter lvl 5
    Hi this looks like a fun challenge, but dont limit yourself with the maps remember there are numerous ways to make an asset look unique!

    If you stick to low poly tiling textures it will not do wonders for your portfolio, it will just say this guy can unwrap and go to cg textures.

    Remember always the while your modeling your final product, how can i make this unique how can i trick the player. Can you simply make an asset that can be intersecting the ground plane but flipped on the z have an entirely new silhouette.

    Even something as simple as using Unreal and the RGB channels to change colors and decals to break the monotony of tiling textures.

    Or at the lowest level vertex painting add a few more verts, get in unreal have some fun. You can still hit very low optimization targets and meet next gen graphics.
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    List of changes:

    - I have made two tilling textures; one for the ruined brick wall and one for the rocky parts of the ground mesh




    Description of the progress:

    For both textures I have used Zbrush, Max, Xnormal and Photoshop.

    Brick wall:

    Here's the run down of the process for this mesh.

    1. Sculpt three bricks of different sizes and shapes
    2. Import them into max and decimate to keep make the scene easier to manage.
    3. Arrange the bricks in front of a square plane (in my case, 1024x1024 units)
    4. Duplicate the bricks that go over the border by the length of your plane on X and Z axes to avoid any seams when rendering AO/Normal/etc maps.
    5. Import the bricks into Zbrush
    6. Import the lowpoly plane that had been used in step 3. and subidivide it.
    7. Sculpt the plane via a combination of Clay Tubes, Clay Buildup, Trim Dynamic and Clay Polish brushes to create the mortar.

    Now at this point the bricks had been tilling pretty well, but mortar was producing some major seams. Here's what followed next:

    1. Export the mortar plane and render out a heightmap in Xnormal (this is just a personal preference of mine)
    2. Bring the heightmap into Photoshop and use the offset filter to center the seams.
    3. Import a new plane into zbrush and subdivide it.
    4. Use the heightmap to displace the plane.
    5. Sculpt away the seams; since the mesh is very organic some random brush strokes should be enough.
    6. Export the now seamless mortar mesh back into Xnormal
    7. Bake out a heightmap.
    8. Bring it back into Zbrush and apply it one more time to the plane.
    9. Export bricks and mortar and render out your maps.

    While this works pretty well and gives you seamless results it's a pretty cumbersome. Switching between apps, exporting meshes and waiting for the renders to finish is both tiring and difficult to manage. Also, getting the same shape of the mesh after displacing it is a little bit difficult if you are pedantic about precision. You need to guess what looks right.

    While I could have used 2.5d sculpting to tile my mortar quite easily in Zbrush I'm not very fond of 2.5D sculpting brushes.

    Cliff face:

    With the cliff I have tried a different approach and I'm quite happy with what I came up with. This is my process:

    1. Find a photo of a cliff that has the features you want.
    2. Bring it into Photoshop and create a rough tilling texture
    3. Convert that photo into a displacement map
    4. Follow the rest of the steps that Bobby Rice discussed here:

    Now since my displacement map produced slightly "blobby" results, I had to go and sharpen up the cliff via a combination of Flatten, Flatten Planar, Trimd Dynamic, Planar, Polish Brushes and Smooth. I would often switch between the Subtractive and Additive modes when necessary. When sculpting I tried to avoid touching the edges of the plane as much as possible so that I wouldn't have to remove too many seams.

    Now removing the seams was surprising easy. Here's how you can replicate my process:

    1. Duplicate your subtool four times.
    2. Import another lowpoly plane and subdivide it.
    3. Offset each of the the cliff faces by exactly 100 units on X and y axes in both directions; surround the subdivided plane with your cliff faces like this
    5. Go to the Subtool tab and select the subidived plane.
    6. Go to the Projection section and change the Dist setting to 1 and Proection SHell to Z.
    7. Hit Project All
    8. You can now remove the seams.

    Now this made sculpting my rocks incredibly easy and I no longer had to worry about getting too close to the edges of my plane. The process takes a little while to get used to, but the benefits of not having to leave zbrush or going into 2.5 d are great.

    Planned updates:

    -Create grass, dirt and roof textures.

    -Try to avoid using external apps for baking normal/AO maps if possible.
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    Sorry for the doublepost; I'm want to keep the actual updates in different posts to make things easier to manage for myself.

    benji, d1ver, Prtofdacrowd:

    Thanks for the feedback guys :) You've made some good points. I will try to answer your questions a bit later; probably after I get a few hours of sleep :poly142:
  • m4dcow
    Offline / Send Message
    m4dcow polycounter lvl 7
    Since you're talking about workflows, I always found it a bit cumbersome to do those tiling fixes you mention in your workflow, for both the mortar and the rock face.

    What I do to avoid this, is make a plane that is double the size of what I want to tile, and turn on the zbrush wrapping mode of whatever brush I'm using to 2. You get the added benefit of previewing how the sculpt will tile.

    The only problem that comes up is that you are now quadrupling the polygons you have active in zbrush. To alleviate that I setup a plane that has detail in the middle part, and the polygons on the edges are collapsed. I explain it a bit better here:

    The reason I don't set the wrapmode to 1 and just work on a regular sized plane, is that zbrush acts weird when it hit edges, and unless you constrain a brush to one axis it will mess up the tiling which is what the method was trying to avoid in the 1st place.
  • Computron
    Offline / Send Message
    Computron sublime tool
    Mudbox tiling plane bitches!!!

    I do prefer zBrush though, so I gotta try what m4dcow is saying.
  • alloa
    Offline / Send Message
    alloa polycounter lvl 6
    OMG!!! your tilable ruined brick wall is just gorgeous! oO
    You have increase your skill on this one, sculpt and texture.
    Nice job
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    Hey guys, sorry for the late reply.

    benji: Thanks man. I'm currently in my last year at Northumbria University (it's in Newcastle).

    Thanks Andrew, you make a good point. Unfortunately, I'm running on a tight deadline so there is a limit to what I can do within that time and I had to narrow down the focus on my project. So instead of dealing with different surfaces types, I've narrowed it down to the types of objects (organic, hard-surface, structural element) and to the type of patterns in the texture (organic, geometric or combination of both).

    In fact, I think I might need to narrow down the scope even further and get rid of that water well. I've been thinking of raplacing it with a tower and focusing on applying this workflow solely to larger structures. I believe that might make the purpose of this project more clear.

    I've been thinking of using some more advanced shaders, but unfortunately that might be something I might have to leave for later. It's something that's been interesting me for a long while, so I will continue working on this even once this assignment is finished. In fact, I really want to look into perhaps making a material that could fake this effect (you will need to skip to 36:00)

    [ame=" 2011 - World Of Warcraft: Mists of Pandaria - Art Panel (Full) - YouTube[/ame]

    Unfortunately, that's something beyond my current level of knowledge, so I will need to read up much more on the shaders before I attempt to do something like this.

    Prtofdacrowd: Thanks man. As I mentioned, there are some limitations and assumptions I need to make with this project. Don't worry though, I will be trying out some cool shaders :)

    m4dcow: Thanks a lot for those tips man. I completely forgot about the wrap mode; I used it in the past, but I had the problems with getting seamless results around the edges that you had mentioned. I will definitely try this out; my laptop should be able to handle 4million points.

    Computron: Thanks for the tip mate :) I've been under assumption that tilling plane could be used only for 2D texture. But I just looked it up and it looks like a great tool. Unfortunately it seems like you need to be on subscription model to use it. I'm on a student license, so I can't really get access to it.

    alloa: Thanks a lot man :thumbup:
  • d1ver
    Offline / Send Message
    d1ver polycounter lvl 9
    Thanks for the vid, Damian, can't believe I missed it.
    interesting shader idea, though would need some research on my side as well.

    Time constraints are nice and fun, so don't worry, I'm sure you'll still manage to do a lot.

    I have one question though:
    Why is your tiling textures process so cumbersome? Or am I missing something?

    The video I linked makes heavy use of the tilde("~") button that allows you to manually offset your canvas - which is pretty much all you need to avoid seams.
    Also zbrush has a sufficiently comfortable system of 2.5 layers that provide you enough flexibility to change things down the road in 2.5 documents.

    I think Behroozes old vid pretty much covers it all:
    [ame=" texturing sculpting rock formations - YouTube[/ame]

    And a bit more in depth here:

    I've tried the photo approach and it is pretty nice actually. Though generally I think you'll need 1.5 - 2 more hours tops on that kind of rock surfaces and this not so bad for having complete artistic control. But that's just a preference of course.

    Also are you going to do any heightmap blending? Because if yes then adding moss in the bricks, might be jumping the gun a bit. It's pretty and subtle but tiled 20 times might become visible - hard to tell right now.

    Keep it up man! Doing great so far.
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    Hi Andrew,

    The reason why I avoid 2.5D like fire is because I don't feel that working in 2.5D offers me the same level of control that 3D does. Generally, I can achieve much better results if I can rotate my mesh in 3D and use all those cool brushes that Zbrush comes with.

    In any case, the second workflow I posted (the one where you have to duplicate planes) is not really that cumbersome. It might seem complicated, but once you get used to it, it takes less than a few minutes to reproject your mesh onto a new plane. It seems like a reasonable tradeoff for being able to sculpt in 3D.

    Speaking of blending, yeah I'm hoping to do that. However, I plan to blend in a layer of concrete/plaster on top of the bricks and I will be doing that to hide the brick pattern in places where it doesn't match the mesh. Hopefully this will make it easier to hide the seams at intersections.

    On a side note, I have updated my blockout. I've decided to go with a larger mesh as that would fit the purpose a little better. I will post another update today.
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    List of changes:

    - Created tilling roof, grass and dirt textures
    - Unwrapped the ground mesh seamlessly by using multiple UV channels blending them via vertex colour




    Description of the progress:

    Ground mesh:

    Getting seamless results was quite easy with this type of a mesh. I have started by unwrapping its 3rd UVW channel first and then copied that layout into the first channel. Then, I split each UVW island in half and merged the halves in such way that I got a layout that looked like the opposite of the 3rd UVW channel.

    But getting that right was a little bit tricky and at some point I got a bit confused with where my seams were originally. So instead of doing it blindly I've decided to stop and to preview my results in the viewport.

    What I did first was I loaded up my 3rd UVW channel and painted all seams with Red vertex colour.

    Next, I created a material that blends between both the UVW channels and grass and rock textures. Getting it to work was quite challenging, as Nitrous viewport completely died on me when I tried to preview any UVW channel other than the 1st. Instead, I enabled DirectX mode and everything worked flawlessly.

    Now to get this material to blend correctly I had to do exactly what I would do in UDK. I created a Mix node that would blend between the UVW channels first and the connect to it two other Mix nodes that would blend between the grass and rock textures. Here's how my setup looks like:


    With the way it works, I could unwrap the mesh seamlessly pretty easily, as I had completely dynamic preview in the viewport. The only problem was that this material seems to be quite taxing. I've planned to blend in a dirt texture as well, but decided to leave that till I import everything into UDK, since I didn't want to kill the performance completely.

    Overall, it wasn't difficult process though certainly time consuming. Something like a blended box shader would be a much easier solution, though as far as I'm aware it would be much more costly. If I have some time I will try it out as well.

    Roof texture:

    For this texture I have tried follwoing what m4dCow had suggested. I simply aligned a few sculpted tiles along a plane, baked out a height map, tiled it in Photoshop and brought it into Zbrush to displace a plane. This way, I had my sculpt tile 4 times and I could sculpt it with the wrap mode enabled. That worked pretty well, but I've noticed that my some of my brushes seemed completely unresponsive when wrap mode was enabled. I'm not sure whther that was because my mesh was quite dense (4 million points) or because there are some issues with the Wrap Mode itself. If I can get these issues sorted out, then it would be perfect.

  • samcole
    Tea, you may have helped me speed up my sculpting of my own Canyon for my side project. I've been looking to capture some of the photo textures height information that I grabbed off cgtextures to be able to sculpt within Mudbox. I'm not a very good sculpture so this will help give me that realism without hours of toil. Thanks.
  • SnowInChina
    Offline / Send Message
    SnowInChina polycounter lvl 7
    your rock texture are really ace
  • Oniram
    Offline / Send Message
    Oniram polycounter lvl 10
    those textures are looking amazing! do you plan on having tileable textures only for this? or will you create some tileable meshes that have some of the texture info modeled out?
  • breakneck
    Offline / Send Message
    breakneck polycounter lvl 9
    I like where this is going, keep it up!
  • brandoom
    Offline / Send Message
    brandoom polycounter lvl 8
    Great updates Tea!

    This is going to be an awesome thread by the end of your project. :)
  • Sean VanGorder
    Awesome stuff as always man. Huge fan of your texturing.

    Was there a certain technique you used to get the edge highlights on your bricks in the wall?
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    SnowInChina, breakneck, brandoom:

    Thanks guys :)


    Glad to hear you found that useful :) Now, be aware that this will only help you lay out the major shapes; there is still quite a lot of sculpting involved in getting a decent sculpt out of it.

    Oniram: Thanks! My focus is on making things easily reusuable. So while I will be using mainly tiled textures, I will use some semi-unique pieces as well; like windows and doors for instance. I won't be making tilling meshes however, since I wish to look at things beside the the modular workflow.

    Sean: Thanks! I usually use multiple Zbrush matcaps, overlay them on top of each other and mask the details out using a variety of brushes and blend-if tool. I believe that I extracted these highlights from one of them.

    Anyways, I've made a nice breakthrough today, so I will post an update in a second.
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    List of changes:

    - Made some progress on material that can be used to reduce the seams between static meshes and the ground.



    Description of the progress:

    I have to say that I'm quite happy with the results so far, even though this solution is a simple and dirty trick. I won't be posting a full breakdown of it, as I still need to figure out if there is a more elegant way of doing this, but here is the basic overview.

    The material uses vertex colour to blend between grass and a rock material (I've used one of the default UDK meshes) and between the phong lighting model and flat shading. I've used a MLM_Custom lighting model and rebuilt the phong setup as seen here:

    Next I created another network below it and replaced the setup responsible for calculating the shading (Dot product of the Light Vector and Normal) with a Constant parameter. Tweaking that value changes the brightness of the mesh within the painted area of the mesh and allows to match the shading of the mesh to the shading of the ground.

    Now the problem with this setup is that while it works greats for the lit areas, the shaded areas look the same as they normally would. So to brighten them up, I've multiplied my Diffuse by a constant parameter and plugged it into a Lerp node. Then, I plugged the Lerp into Emissive slot, made a constant node with a value of 0 (solid black; meaning it won't affect the emissive) and used Vertex Color again as the alpha.

    At this point, I only needed to tweak the constant parameters until the seam between the ground and the rock was almost unnoticeable. It's not a perfect solution and the seam is still there if you look really closely, but this approach seams to be very flexible and is a bit similar to the method that Blizzard uses. One of the main issues with this material is that changing the brightness of the lighting or the ambient lighting requires the parameters to be tweaked.

    On the other hand, I've tried using floating geometry with alphas before and while that produced slightly better results modelling transition geometry around each object would be much more difficult to setup and would make it very difficult to modify anything once these floaters are in place. Moreoever, using alphas with soft transparency would be more costly, while using 1-bit alphas didn't produce very good results.

    Anyways, this approach seems like the way to go. I should be able to achieve even better results if I model my meshes accordingly and create slopes in the area where they intersect with the ground. If I could somehow figure out how to project the UV coordinates of one mesh onto another, then I would be able to get completely seamless results.

    Planned updates:

    - Finish the textures for the building
    - Finish the ground-blending material
  • JasonLavoie
    Offline / Send Message
    JasonLavoie polycounter lvl 12
    Really awesome progress so far Damian, you are quickly becoming one of my favourite artists on polycount.

    I'm looking forward to digging deep into this thread as your progression continues, should be a lot of nice tips and tricks to come from this :)
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    List of changes:

    - Modified the material to project the grass texture on top of the mesh



    Description of progress:

    I've had some luck and figured out a solution to my previous problem. Making the grass texture to be projected from the top was surprisingly easy. I used the World Position node and derived the blue channel (Z direction) by connecting it to the component mask node and stripping away the red and green channels. Then, I multiplied the results by a constant 2 vector with low values (0.01, 0.01) to make the texture tile reasonably. As you can see on the image above, the results are completely seamless.

    There is some stretching and I could probably get rid of it by turning it into a blended box material, but I would like to keep it simple. I don't want this material to be too demanding; currently it uses 49 instructions, although I didn't add specular yet. In any case, stretching could be easily reduced by making the bottom part of the mesh sloped.

    I could make this material completely procedural by replacing the vertex colour input with a height based gradient, but I'm currently not sure if I can make that gradient relative to the surface of my ground mesh.

    In any case even with vertex colour as input and stretching this material should be quite flexible, given that objects are modelled to compromise for the shortcomings
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8

    Thanks a lot Jason poly120.gif In two or three weeks I will try to compile everything I will have written by then into a proper tutorial. Hopefuly that will be a better read than my current, messy ramblings ;)

    edit: 4th update is on the last page, I guess I will keep them in seperate posts afterall to keep things organised
  • samcole
    Tea, I like how even though you think its rambling I can get a sense of the problems you encountered while working through your steps. Usually tutorials are very clean this is a welcome change.

    As to your previous comment, yea I know I'd have to add more sculpting, but that will give me a nice base in which to start the forms.
  • lupi
    epic rocks:) Keep Rocki'n dude!
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    Lupi: Thanks mate :)

    Samcole: Yeah, with photos generated from the displacement maps you can get some nice forms. One thing I can suggest is that you try to use photos that are relatively free of noise and ones that have well defined forms.

    Sometimes, you can also use the blend if tool and remove certain brightness values in your photo prior to generating a displacement map. This way, you will end up with some flat surfaces in your displacement map.
  • DInusty
    Offline / Send Message
    DInusty polycounter lvl 10
    tea! loving this thread man! :) your almost out the door. i would love to see the node setup your getting that blend with. does this allow for the movement of the meshes separate from the ground but still be seamless? i have been toying with this idea in my head and just haven't had the time to try it. seems like it would work really well tell u get to some crazy harsh angles.
  • toxic_h2o
    Offline / Send Message
    toxic_h2o polycounter lvl 6
    What you are still in school? I agree with Jason you are awesome. Im really glad you are taking the time to explain your process and share your knowledge. Thanks so much!
  • nordahl154
    Offline / Send Message
    nordahl154 polycounter lvl 7
    I can't tell you how awesome this is of you to do...

    Edit: Might there be a way to make the seam disappear between the rock and grass (or anything for that matter) by editing the normals in UDK? Or can't you edit normals directly in UDK?

    Found this bit on a UDK update note page:

    Custom Normals with FBX
    FBX importer now supports custom vertex normals
    This is useful for 'combing' vertex normals on foliage, or when you need smooth lighting continuity between multiple meshes
    To use this, first export normals (and/or tangents) using the FBX exporter in your modeling program
    Next, enable the new 'Explicit Normals' option while importing the FBX file into UE3

    The only problem I could see with this is it costing a lot of time (though tea's method wasn't the quickest and lightest solution either) if you're going to be doing this for multiple meshes, and especially ones that won't have the same normals edited. Like say, rocks where you would scale, move, rotate. (so you would have to edit different normals where each rock would meet up with the grass)
    Also, these would most likely have to be unique models unless you can selectively apply custom normals on a mesh in UDK. (Can you?) Also, if you can, would you be able to apply this normal change outside of the normal map? It would still probably interfere but that's not a problem.
  • salman_fas
    Really liking where this is going.

    I have a quick question. I have been trying to make tileable textures in zbrush. Its perfectly tileable when I am using tiled(whatever its called) key, but when I do grab doc it makes a seam around it. am I missing anything?
  • Grimm_Wrecking
    Offline / Send Message
    Grimm_Wrecking polycounter lvl 7
    Tea, I gotta say, the vert blending you're doing is pretty awesome. Really appreciate the breakdowns of the process too.

    Looking forward to where this is going for sure. Keep it up.

    Question though, with using the Z direction to project the texture blend does that remove the ability to apply it to a more vertical based slope like in the original image? I can see that towards the rear center there is a more vertical slope, but its hard to tell if it has curvature that applies or not.
  • Ack Master
    im loving this, your break downs and work flow are awesome! Great work man :) wish i saw more break downs like this
  • cptSwing
    Online / Send Message
    cptSwing polycounter lvl 6
    great thread, can't wait for the extended breakdown.
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    Hey guys, sorry for the late reply. I've bee super busy last week.


    Thanks Jeremy. Yes, you can move the meshes around freely and it sems to be working pretty well :) I'm currently done with the textures, so I will post the detailed breakdown of the material soon


    nordahl: Thanks! That's exactly what this material does. It modifies the normals of the object within the area painted with blue vertex colour. That means you can rotate the objects around freely and move them in any way you want as long as you change the vert colours for each instance afterwards. I hope I got your questions right :)

    Ack Master, cptSwing, toxic_h2o:
    Thanks a lot guys :) Glad to hear you found it useful.

    Thanks! Yes, the way it works right now it will produce quite a lot of stretching if you decide to apply it to more vertical slopes. But I've been thinking of going with proper blended box mapping. Choco suggested to me in his thread to use material functions; in fact it appears that there is one that does blend mapping out of the box.

    salman_fas: Thanks. I have to admit that I didn't solve this problem. Since my tilling sculpts are essentially duplicated 4 times, I render my textures at 2048x2048 and then crop the area in the center to 1024. This way, you get no seams.
    There's probably an easy fix for that if you're using the 2.5D mode, but frankly said I have never looked into that properly.

    Anyways, as I mentioned, I'm pretty much done with all the textures, so I will post another update in a few minutes.
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    List of changes:

    - made three textures; tiled brick texture, texture with unique details like windows and door and trim texture



    Brick wall


    Door and windows


    Description of progress:

    My workflow with these three textures had been roughly the same as previously.

    The trim textures will be used to create more natural transitions between different materials. Since I'm expecting that these textures will have slightly stretched UV's I tried to keep them free of high-contrasting noise. The roof and destroyed brick wall trims will rely on the alphas and will be placed in the areas where seams cannot be avoided.
    In case of the stone trims, I tried to keep the blocks relatively straight as I intend to place them in such way that the shadowed areas are algined with the lines in the tiled brick texture. The trims also have bevels along the edges and this should also help make the seams less visible.

    In case of the tiled brick texture, theres not much for me to talk about. I tried to kep the texture relatively simple and flat, since it will be reused quite extensively.

    The doors and windows are rather simple. Similaily to the trims, I made the bricks bevelled along the edges to make the transition more natural when I combine them with the building.

    Stylewise, there are some subtle inconsistencies between the textures, but since I'm on a tight deadline I will change that sometime later. I haven't done a proper specular map for the door and windows texture and its sculpt could use a little bit more work, but that will have to do for now. I will now move to modelling and unwrapping.
  • gibson543
    Offline / Send Message
    gibson543 polycounter lvl 7
    Damn tea your bringing it man i love all these textures and thanks for posting the process!
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    Thanks Gibson! Here's another update.

    List of changes:

    - I have textured the building and brought the whole environment into UDK
    - I have tested different ways of making seams less noticable



    Description of progress:

    I've made quite a lot of changes since the last update. Mainly I've been focusing on texturing, unwrapping, making materials and putting everything together. At this point, I'm pretty sure that making a completely seamless environment using standard modelling techiniques would be pretty much impossible. However, there's a few ways that can help reduce the visibility of seams. Here's a further breakdown:

    Organic meshes:

    That material I made earlier seems to work extremely well with organic objects like rocks and so on. Unforunately, the material works only when the grass texture is projected from the top; creating a setup that applies textures according to the slope requires the use of Vertex Transform node, which unfortunately doesn't work with vertex colours. But adding slopes to the meshes worked great at reducing stretching. Here are some results:


    Multiple UV channels:

    My previous approach for the terrain mesh doesn't seem to work as I had originally hoped. Previously, I tested the mesh in UDK to see if blending between multiple uv layouts worked fine but I only tested that with the diffuse textures. When I applied normal maps I started seeing very noticeable seams as seen below:


    I'm not sure why the seam is there. My guess is that Unreal splits the mesh at the borders of UV islands, but I couldn't find much on this topic. I think I might have to abandon using multiple uv channels and use the World Coordinate3Way function to create UV's on the fly. The only problem with doing that is that I will be unable to use vert colour (again, Vertex transform doesn't seem to work with it) but I can still makes things easy to modify by painting a mask texture in UDK via Mesh Paint.

    Reducing seams between grass and non-organic objects.

    Reducing the seams between the terrain and the building was quite difficult. At first, I tried to use the same material as I used for the rocks and make the base of the building sloped. That didn't seem to work too well as my textures would end up being stretched. In the end, I had to create another material, but this time instead of overlaying grass from the top, I used the UV's of the object. Because of the, the grass texture no longer flows seamlessly. Also, because the base of the building is not sloped after the lighting is baked there is a slightly visible shading seam. Regardlesss the transition between terrain and the building is still better and adding foliage or smaller props would make it look a lot better.


    Trims and indents

    Trims seem to work quite well with non-organic objects. Making the grout lines match was quite easy when they were placed horizontally and was a good way of making transitions between different surfaces and hiding texture seams. When the texture information didn't match and I had to make a transition between the roof and brick texture I added some indents to the mesh.


    The idea was to move the seam between the roof and the trim so that it is not visible when the mesh is looked at from the player's point of view.

    Unique details

    Adding details such as windows and door was a bit difficult and I tried a few methods to make the transition between the brick texture and the mesh look more natural. My goal here was to keep windows and doors as floaters, so that they can be easily moved around and reused. I tried creating indents in the area where they meet with the wall, but that didn't look too good. I tried cutting into the wall and outlining the shape of the window/door with vertex color. That worked fairly well and it did make it look like the brick was cut, but adding geometry around every window and was quite time consuming and made me end up with very dense geometry. Ultimately, I decided to use the mesh as a decal with soft alpha. This way, I was able to add a soft outline around the windows/door as seen here:


    I'm not quite happy with this solution, since the only way to get decent results was to use the Translucent lighting mode, making these objects very expensive to render. I will probably try to figure out a better way of doing this than using the transparency. I'm hoping that making indents bigger and playing around with the lightmass settings might give me some nice AO that will make the transition smoother.
  • ParoXum
    Offline / Send Message
    ParoXum polycounter
    Nice work. Did you think of using glue meshes for your building transitions to ground? Like a moss or dirt glued trim with alpha test. Used everywhere in lots of games, to hide seams and add detail on simple geometry. We used that a lot on C2 to make rubble pieces.

    Also I can second on the 2nd uv channel splits on normal map, I experienced it two years ago when doing the same test in a cave to get rid of any seams. I was waiting to see if you'd run into the same problem, and it is the case, then. Annoying.
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    ParoXum: Thanks mate :) I did use glue meshes before, but I found it to be not very flexible when used to cover the seams on terrain. It works great for unique meshes though and I used that method for the broken walls and roof.

    Yeah, I was quite surprised myself to see that multiple UVW channels would cause such issues. I was aware of normal seams on uniquely unwrapped meshes, but I thought it had something to do with the normal map rendering process. In any case, I have managed to come up with a different method which works pretty well but doesn't allow for the same level of control as multiple UV channels. Here's the update:

    List of changes:

    -modified the terrain material to remove the seams
    -added decals to the broken walls
    -added heightmaps to the grass-blending material to get a more varied look
    -modified vertex normal of the building to get sharper shading while keeping normals averaged (meaning no shading seams will be visible)



    Description of progress:

    This will be the final update for the time being. The deadline for this project is now very close, so I will stop here and document the whole process. Overall, I'm fairly happy with the result. I was not able to create a completely seamless environment, but I have managed to remove some of the most jarring seams and avoid visible texture repetition. There are some issues here and there, mainly related to Lightmass, but most of the could be easily hidden with smaller props such as foliage etc.

    Here's a breakdown of the changes:

    Terrain material:

    I have decided to completely abandon the idea of using mutliple UVW channels and instead decided to use the WorldAlignedTexture function to create the texture coordinates. The main problem with using this function is that it relies on the Vector Transform node, meaning I had to abandon vertex colour completely. However, that wasn't as big of a problem as I had orginally thought. Since UDK's Mesh Paint now allows to paint textures from within the editor I decided to use black and white masks to interpolate between grass, dirt and rocks.

    However, using masks instead of vertex colour requires the mesh to be uniquely unwrapped, meaning that there will be shading seams where the UV's are split. To avoid that, I've decided to minimise the amount of seams as much as possible and place them in the areas of the mesh where no normals will be used. Essentially, I've split the UV's into two island and placed the seams in the area that will be covered with grass. Here's how this setup looks like:


    Now while this got rid of the visible seams on the terrain, my worry was that UV's will be too stretched to get decent masks. Turns out, this wasn't such a massive problem; since my masks are completely black and white stretching is pretty much unnoticeable. The other benefit to using masks instead of vertex colour is that I could get much more detailed blends, while still making things easy to modify from within the editor.

    Once my report is done, I will probably abandon vertex colour completely and use masks to control the blending for all of the props. This way, I will be able to use the vertex transform node and maybe work out a better way for blending props with the terrain. The current method essentially removes the lighting from the areas covered with grass and because of that the lighting is a bit inconsistent.


    I added decals to the ruined walls to remove texture and shading seams. To do that, I duplicated the wall meshes, applied the decal material and unwrapped the mesh in such way that the decal covers the top parts of the mesh and intersects with the sides. Then I used the Push modifier, to move it slightly away from the surface of the wall, ensuring that there's no Z-fighting in UDK. The image shows how that works:


    The transition is not the most realistic and I could improve that by modyfing the decal texture and making the bricks more damaged, but that will have to do for now.


    To improve the quality of blending I used heightmaps that were rendered from my highpoly poly meshes and used them in conjcuntion with vertex colour. Essentially, I have multiplied the vertex colour by the heightmap and used a few parameters to control the strength and sharpness of the transition.
    Here's the before and after comparison:


    Vertex normal:

    To remove shading seams caused by split normal, while maintaining correct shading I've decided to edit the vertex normal of several objects in the scene. To do that, I used the GetVertNormalsFromFace script that Syncview had made. Here's another comparison:


    Anyways, that's it for now. It's time to document my workflow. I will try to post it on monday.
  • fearian
    Offline / Send Message
    fearian Polycount Sponsor
    Thos last two updates are really neat. Have you thought about at some stage going to paint on larger (I guess 'grunge' would be the closest term?) decals over most things to break up the hue in the grass and stonework?

    I'm thinking something like this, using Mesh Painting? Sorry, I've not been reading much into your more technical solutions :>

  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    Hey Fearian, thanks for the tip :) I've been thinking lately of doing something similar. Since my grass is only barely affected by lighting, I've been thinking of painting a soft, colour map that I could overlay on top of the grass and dirt. This way I could get some nice gradients in there and make the lack of lighting less obvious. Unfortunately, I ran out of time so I will do that when I come back to this environment.
  • Shoy333
    Hey Fearian how exactly did you do that effect shown in your gif?
  • Oniram
    Offline / Send Message
    Oniram polycounter lvl 10
    Shoy333 wrote: »
    Hey Fearian how exactly did you do that effect shown in your gif?

    its part of a tutorial from chris albeluhn
  • Shoy333
    Awesome thanks man!
  • rasmus
    Awesome effort Tea, I'm really liking your painted-out custom lighting technique and that stone-and-mortar texture is lovely.
  • teaandcigarettes
    Offline / Send Message
    teaandcigarettes polycounter lvl 8
    Thanks a lot Rasmus :) I will try to get some more work done on that material later on. I have a few ideas on how to make it completely procedural and more similar to the one used by Blizzard. I'm thinking of creating height-dependant gradients and using them as a mask for the props, meaning that painting with vertex colour should be no longer necessary.
Sign In or Register to comment.