You have probably experienced stretched and ugly-looking textures on steep slopes when using the terrain engine in Unity. It is caused by a simple planar UV mapping that is employed by the built-in terrain shader. The problem can be solved by applying the triplanar texture mapping.
It gives nice-looking textures on vertical surfaces and other complex shapes. This tutorial explains how the technique works, and it provides simple code examples. First, let us focus on the problem. The Unity terrain is textured according to the UV coordinates. They are evenly distributed on the X-Z plane. The Y-axis is ignored, and a texture is stretched on tall objects. It gives relatively good results if there are no steep cliffs, or a player looks on the terrain from above.
There are many ways to solve this problem. One of the simplest is the triplanar mapping. It samples a texture from three different directions: X, Y, and Z.
Finally, the result is blended into one color. It gives smooth transitions between surfaces at different angles. Let us look at an example implementation. The code that uses the default planar texture mapping looks similar to this:. In the code above, the texture is simply sampled according to the provided UV coordinates. In the next part, we will modify the sampling method. The triplanar technique uses world-space coordinates instead of UVs. Let us begin by calculating colors mapped for each of the three directions:.
The discussed technique provides much better graphics, but it is slightly more computationally expensive.
However, if performance is not critical, then it is more efficient than preparing the same terrain in 3Ds Max or Blender. How-to improve Unity terrain texturing tutorial By nihilplures 2nd September May 23rd, Tutorials.
No Comments. The Problem First, let us focus on the problem. Triplanar Mapping There are many ways to solve this problem. Implementation Let us look at an example implementation. Summary The discussed technique provides much better graphics, but it is slightly more computationally expensive. Recent Posts New truck interiors and more Merry Armour! Making a vehicle simulator in Unity vs Unreal Engine We are hiring! Military vehicles. Recent Comments. Share Tweet Share Pin.
Raving Bots Sp.Okay so I have created a random terrain using perlin noise 3D. What i have done is make it so that if the terrain is above a certain height i used setpixel to change the color, creating green grey and blue areas. The problem is i want to make it so that instead on colors it is a texture. I Carnt make a texture as the terrain is generated at runtime so is there a way to set induvidual materials instead of using setPixel?
Thanks :D Oh and btw im using c. I Ment i couldent just make a texture in photoshop and map it over it, i would have to use multiple textures and thanks. Attachments: Up to 2 attachments including images can be used with a maximum of To help users navigate the site we have posted a site navigation guide.
Make sure to check out our Knowledge Base for commonly asked Unity questions. Answers Answers and Comments. Multiple Cars not working 1 Answer. Distribute terrain in zones 3 Answers. How to handle Perlin Noise? How do I go about creating a 2D world? Changing tonnes of textures  1 Answer.
Login Create account. Ask a question. Your answer. Hint: You can notify a user about this post by typing username. Welcome to Unity Answers The best place to ask and answer questions about development with Unity. If you are a moderator, see our Moderator Guidelines page. We are making improvements to UA, see the list of changes. Follow this Question. Answers Answers and Comments 22 People are following this question. Related Questions.Thomas Deliot y Eric Heitzfebrero 14, Have you ever tried using tileable textures to cover large surfaces or add fine-scale detail to your meshes?
At Unity Labs, we have developed a new texturing technique that avoids this issue, Procedural Stochastic Texturing. Tileable textures are a useful tool to add detail to your 3D scenes. However, whenever you want to texture large areas or achieve highly detailed surfaces using tileable textures and detail maps, tiling patterns become visible. This effect is illustrated on the left-hand side of the following picture.
Typically, reducing repetition patterns requires bigger textures or hiding the visible repetition with additional objects. In this blog post, we provide a plugin that solves this problem for textures with stochastic appearances, such as rust, moss, bark, etc. Its impact is shown on the right-hand side of the following picture. Rusted metal material with regular texturing left and our technique right.
Download the plugin here. Given an input texture, the plugin will procedurally generate an infinite texture that matches the appearance of the input. We do so by leveraging a state-of-the-art texture blending function that operates on a modified version of the input texture, which only requires three texture samples per fragment, and by fetching a small lookup-table.
Since the plugin avoids the need for tiling, it makes it possible to cover larger surfaces with smaller textures and higher levels of detail without any repetition artifacts. The plugin provides a variant of the Standard shader, which is included in a Unity package. Once you have imported the package, select the StandardStochastic shader for your material. The interface is the same as that of the Standard shader, with the addition of two new controls at the top, corresponding to the two required setup steps:.
Wood detail maps with albedo, normal and occlusion textures. Rock material with albedo, normal, occlusion and height textures. This technique is only compatible with tileable stochastic and near-stochastic textures, such as textures resembling random noise when viewed from a distance and typically natural-looking materials without precise geometric shapes.
This is a research prototype; it is not under active development. We are currently working on a ShaderGraph implementation for custom shaders and compatibility with the new rendering pipelines. Look out for updates on the forum thread! Curious about how the plugin works? Check out our two recently published research papers on the subject, which our plugin builds upon:. The code delivered with the plugin features comments referring to specific sections of the technical chapter.Discussion in ' Shaders ' started by purplelilgirlFeb 25, Search Unity.
Log in Create a Unity ID. Unity Forum. Forums Quick Links. Asset Store Spring Sale starts soon! Texture Blending Discussion in ' Shaders ' started by purplelilgirlFeb 25, Joined: Feb 24, Posts: Is there a shader in Unity that allows blending of two textures? I found a shader in the Wiki, which is the Alpha Blend, which sort of achieves the effect that I want, however, it requires the use of a separate map to define which part uses what textures.
Thanks in advance. Joined: Apr 2, Posts: Isn't it frustrating when you don't get an answer? I'm wondering the same thing. MaethorApr 9, Joined: Feb 28, Posts: 2, How do you want to blend between the 2 images?
If you want to use a slider then try this: Code csharp :. HonorableDanielApr 9, This is great!
Subscribe to RSS
Thanks for replying so quickly. I posted this a while back and almost forgot about it. I will try it out. Joined: May 4, Posts: Thank you so much! This is exactly what i've been looking for.
Terrain Shaders in Unity - A Research Essay
HMachucaMay 11, Joined: Sep 4, Posts: JonnyHillyFeb 6, Grady Lorenzo. Joined: Jan 18, Posts: Works wonderfully! What if we can get it do be dissolve-looking thing? It would be great for animating rust on metal or somethingYou can add texture images to the surface of a terrain to create coloration and fine detail. Since terrains The landscape in your scene.
The painted textures can be applied with variable transparency so you can have a gradual transition between grassy countryside and a sandy beach, for example. The paintbrush button on the toolbar A row of buttons and basic controls at the top of the Unity Editor that allows you to interact with the Editor in various ways e. More info See in Glossary enables texture painting. Initially, the terrain has no textures assigned for painting. Here you can set a texture and its properties.
Depending on the material type you set in Terrain Settingsthe color channels of the main texture map may have different uses. These are listed below in Terrain Texture Settings.
Click on Select to see your texture assets Any media or data that can be used in your game or Project.
An asset may come from a file created outside of Unity, such as a 3D model, an audio file or an image. More info See in Glossary in a separate Select Texture window not shown. Click on the texture you want and it displays in the Add Terrain Texture window. See Add Terrain Texture window, before and after, in Fig 1 below.
The different Add Terrain Texture windows are listed here. Standard [image above in Fig 1 ]: RGB channels are the albedo color of the terrain surface, while alpha channel controls the smoothness. Custom : How the splat map is used depends on your custom shader A small script that contains the mathematical calculations and algorithms for calculating the Color of each pixel rendered, based on the lighting input and the Material configuration.
Besides the main texture map, you can also specify a normal texture for all of the 3 built-in material types. Or, you can simply double click on its thumbnail. However, you can add as many textures as you like; the subsequent ones will be available for painting using the familiar brush tools. Below the textures in the Terrain inspector A Unity window that displays information about the currently selected GameObject, Asset or Project Settings, alowing you to inspect and edit the values.
More info See in Glossaryyou will see the usual Brush Size and Opacity options but also an additional option called Target Strength. This sets the maximum opacity value that the brush will build up even if it passes over the same point repeatedly. This can be a useful way to add subtle patches of color variation within a single terrain type to break the monotony of a large, flat area with the same texture tile repeating over and over.
Did you find this page useful? Please give it a rating:. What kind of problem would you like to report? It might be a Known Issue. Please check with the Issue Tracker at issuetracker. Thanks for letting us know!
This page has been marked for review based on your feedback. If you have time, you can provide more information to help us fix the problem faster.Textures are often applied to the surface of a mesh to give it visual detail.
Because Terrain Layers are Assets, you can easily reuse them on multiple Terrain tiles. You can add Textures to the surface of a Terrain to create coloration and fine detail. Terrain GameObjects The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. More info See in Glossary are usually large, so it is best to use a base Terrain Layer with Textures that tile over the surface and repeat seamlessly. You can use multiple Terrain Layers, each with different Textures, to build up interesting, varied Terrain surfaces.
The first Terrain Layer you apply to a Terrain automatically becomes the base layer, and spreads over the whole landscape. In addition, you can paint areas with other Terrain Layers to simulate different ground surfaces, such as grass, desert, or snow. To create a gradual transition between grassy countryside and a sandy beach, you might choose to apply Textures with variable opacity.
To create a Terrain Layer directly in the Terrain Inspector A Unity window that displays information about the currently selected GameObject, Asset or Project Settings, alowing you to inspect and edit the values. More info See in Glossaryclick the paintbrush icon in the toolbar A row of buttons and basic controls at the top of the Unity Editor that allows you to interact with the Editor in various ways e.
Here, choose the image to use as the Diffuse channel of the Terrain Layer. To assign a Normal Map A type of Bump Map texture that allows you to add surface detail such as bumps, grooves, and scratches to a model which catch the light as if they are represented by real geometry.
Then, configure the various properties in the Inspector window for your new Terrain Layer. For information about how the number of Terrain Layers affects rendering The process of drawing graphics to the screen or to a render texture. By default, the main camera in Unity renders its view to the screen. More info See in Glossary performance, see Rendering performance. Even assigned Terrain Layers that you do not actually paint onto the Terrain tile might impact the rendering performance.
Initially, a Terrain has no Terrain Layers assigned to it. By default, it uses a checkerboard Texture until you add a Terrain Layer. Double-click on a Terrain Layer in this window to add it to your Terrain. Depending on the Material that is set in the Terrain Settingsas well as the Render Pipeline that is currently in use, you might see different options and properties in the Inspector. Unity applies the first Terrain Layer you add to the entire landscape. If you add a new Terrain tile without any Terrain Layers, and paint on it, the system automatically adds the selected Terrain Layer to that new Terrain tile.
Because this is the first Terrain Layer, that Texture becomes the base layer, and fills the entire Terrain tile. In the Terrain Inspector, under Brushesthere is a box that displays the available Brushes, along with the Brush Size and Opacity options underneath. See Creating and Editing Terrains for more information about these tools. The number of Terrain Layers you assign to a Terrain tile might impact the performance of the renderer.
The maximum recommended number of Terrain Layers depends on which render pipeline your Project uses. This means that although you are allowed to use as many Terrain Layers as you want, each pass increases the time spent rendering the Terrain. For maximum performance, limit each of your Terrain tiles to four Terrain Layers.
It only takes a minute to sign up. Every Material is made of 3 texture: one main texture and 2 minor textures to be blended with the main one depending on the slope.
Every material has its own shader attached. So I have a terrain made of a certain number of chunks, that are a certain number of meshes generated as the game launches.
Inside every chunk blending if okay, since I have the only material for the current mesh I have only to blend its textures depending on heights - and this is done by the shader. As you can see, everything is mostly divided in "squares", which are the meshes. Each square has a texture green or beige grass or sand. My concern is that : When passing from grass to sand there is no blending, i.
But those vertices are only from one mesh. To blend correctly I would need informations also about the vertices of the mesh nearby.Unity Terrain Blending
So the question is: how can I blend properly materials belonging to different meshes? Check out this link Archive. Has a huge demo project size since he uses a big static mesh, but he applies the textures using a shader as well so you can take a peek at his blending algorithm.
He also managed to make it seamless with multiple meshes. Sign up to join this community. The best answers are voted up and rise to the top. Home Questions Tags Users Unanswered. Procedural terrain - how to blend textures between dynamic meshes Ask Question. Asked 6 years, 1 month ago. Active 1 year, 9 months ago. Viewed 6k times.
Using the StandardStochastic shader
I'm developing a procedural terrain structured with voxel chunks. Every chunk : contains a NxNxN voxel array generated with perlin noise 3d contains a Mesh derived from the surface points of the voxel array is rendered with marching cubes algoritm Every mesh has its own Material Every Material is made of 3 texture: one main texture and 2 minor textures to be blended with the main one depending on the slope. In this attached image you can see quite clearly what I acheived until now.
Leggy7 Leggy7 1, 10 10 silver badges 27 27 bronze badges. Active Oldest Votes.