Feels like all we are sharing recently are tutorials and no real updates on the project 😀
I can assure you that the content of these tutorials actually goes into the game!
Were currently doing a final art pass on one of our environments so I will be able to share some ingame screenshots for that soon, I think it looks amazing and I hope you will think so too!
The third and final part of our tutorial series on landscape material creation in unreal engine 4 is online:
Check it out and let us know what you think of it!
Please let us know in the comments if your interested in more content like this 🙂
The second part in our landscape tutorial series is online! It covers procedural puddles!
Feel free to check it out and let us know what you think 🙂
This is the first in a series of blogposts which are going to highlight some of the main characters in our game “Sane” as well as their German voice actors!
We start with Zoè, a confident and smart but bitter and cold young woman.
She is the daughter of the Conrells, the family that takes Ameliè, our protagonist, in after she looses her parents during the events of WW1.
While the head of the family has his own reasons for accepting Ameliè in his house, Zoè has nothing but disdain for her.
She reminds her of her own childhood, as she too lost her mother early on and her father, Arthur, neglegted her in favor of his work ever since.
That Arthur acts more like a father now than he ever did before puts her on edge and makes her cruel towards Ameliè.
The german voice of Zoè is the talented actor “Maria Kepner”!
We had a great time during our first recording session and would like to thank her for her great work!
Thats it for today, stay tuned as we have quite a few more characters to tell you about.
Last week we shared a breakdown on our landscape material and got a lot of requests to do a proper video tutorial.
So we did!
Feel free to check out part one on our youtube channel:
Let us know what you think or if you have ideas for other gamedev topics you would like to see tutorials for!
We added a moss material layer to our rocks!
It has some nice parameters and should allow for really fast placement.
Its xyz-worldaligned so that we can use it for nice blends between meshes.
The parameters drive how much of the rock it covers, how strong the normalmap should influence the result and if there should be a color overlay on the edge of the intersection (for nice brown moss around the edges)
Vertex color is used to mask the whole effect by hand.
Let me know if this is something you would be interested in seeing a breakdown for.
Ill do one… someday… 😀
Movement and interaction is a important part of an immersive world so we started adding wind and player interaction to our foliage:
Our system uses vertex color to drive the world position offset of the material, very similar to what you can find in the unreal engine content examples.
The reception of the breakdown for the landscape material we did yesterday really surprised us (in a positive way). Please let us know if you are interested in more content like that.
By popular request Im doing a quick breakdown of the landscape material that we showed in our last post!
If there are any questions or if you would like an even more indepth look at it in form of a video tutorial or something let me know in the comments 🙂
This is the material we are talking about:
It has distance based tessellation, height blending between the textures and procedural puddles that you can paint on top.
And its settings:
Its not using a mask since we dont need holes but it should not be a problem to add that to your version.
And this is what an instance looks like with all of the settings that are exposed to the artist:
The interesting part here are ofc the puddles.
So lets break down the Material, starting with the UVs:
Nothing too crazy here, just a world position and a multiply to control the tiling. This means the texture will stretch on steep angles, not important for us since we wont be using it there but you might want to change this if you plan on using it for rocks and stuff.
Next up is one of the material layers:
We put our materials into functions to keep the graph from getting messy and just expose the relevant settings as parameters. Were also feeding it the world position uvs.
Detail shot of the function:
Pretty simple and regular setup with a few inputs for the parameters. We have the roughness, height and ao stored in one texture to save memory. Since the material attributes do funny things to the scalar value of the heightmap and were going to use that to mask stuff I created a separate output for that.
Important: If your using a lot of textures or layers you need to set the texture Sampler Source to Shared:Wrap.
We then use a regular Landscape Layer Blend node to blend the layers:
The important part here is having an unused alpha blend layer as well as having one layer that is going to cover the whole landscape as weight blended. We use this to get rid of problems with black spots on the landscape as well as it not compiling properly and showing the grey worldmaterial when more then 3 layers are used with tessellation.
We also use the separate heightmap output for the height input on the blend node.
Since we arent using the material attributes for the height information we need to blend that separately:
Here we sample the layers mask information and use that to lerp between the different heightmaps.
Once the materials are blended we add the puddles ontop:
This layer has a lot of parameters that arent really necessary, I was experimenting with my procedural setup which is why I have so many 😀
We input the blended Material as well as the blended heightmap and the layer information for the landscape “puddles” layer that we sample here into this function.
This is screenshot of the puddles function:
Its still really messy as I havent found the time to clean it up yet. Its basically a custom blend, using the heightmap to blend between the terrain material and constants as well as a 3-vector for the puddle values. The cool stuff is in some features like normal blending and wetness on the edges, color and opacity for depth or dirty puddles and a option that allows us to shift the height of the puddle from nothing to covering the whole area. All of this is then masked by the puddle landscape layer information.
You can take a look at some other puddle tutorials to get similar results, most of them use vertex color to blend in the puddles, just use the layer information instead.
Edit: Added detail shots of this graph for anyone interested in what exactly it does.
Final step is the tessellation:
Here we use the heightmap information to get our worlddisplacement for the landscape material (upper right).
Our tessellation setup is dependent on the camera location and has the vector length in there since unreal likes to tessellate the whole object otherwise (which we obviously dont want) We have some extra parameters to control the fade distance, offset and tessellation resolution.
We use a material parameter control to input our overall tessellation strength since we want to be able to control the effect via the users option menu (on all our materials at once).
And there you have it!
Keep in mind that this is a pretty expensive material and we only use it on the highest settings, its probably not something you should use on very big terrains and fewer layers is always better for performance.
Let me know if this was of any help or if you have any questions in the comments!
Continuing the work on our textures we have started work on our terrain materials and just finished the first of many:
It blends between the textures with their heightmap and has distance based tessellation so that we can displace it and give it some real depth.
We can also paint in procedural puddles that conform to the underlying textures:
Here is what the same scene looks like without puddles:
The puddles have settings like depth to control their color and opacity or edge wetness which makes them very versatile.
Since they are completely procedural their material function is rather complex and we still havent really cleaned it up so it looks like a spaghetti monster:
We still need no make some tweaks but were already happy with the result!
Were also scheduling the voice recordings for the demo right now so we are going to be able to share details on our actors and their roles soon!