Éviter la répétition de textures de terrain layers
Éviter la répétition de textures de terrain layers
Bonjour tout le monde,
J’ai une question de débutant concernant le « painting » de terrain dans la dernière version d’Unity.
En appliquant nos textures définies dans le Terrain Layers on se retrouve souvent avec de grandes surfaces de textures qui se répètent et ne font pas très « naturelles » notamment vues de haut.
Exemple caricatural du problème:
En augmentant le Tilling Setting en X et Y l’effet est moins prononcé mais on se retrouve au sol avec des textures basse résolution.
- Peut être faut-il changer le shader « Defaut-Terrain-Standart » par un autre qui mélange les textures différemment ?
- Existe-il un asset qui s’occupe de ce problème d’une manière plus efficace ?
Vos conseils sont les bienvenus. Merci d’avance.
J’ai une question de débutant concernant le « painting » de terrain dans la dernière version d’Unity.
En appliquant nos textures définies dans le Terrain Layers on se retrouve souvent avec de grandes surfaces de textures qui se répètent et ne font pas très « naturelles » notamment vues de haut.
Exemple caricatural du problème:
En augmentant le Tilling Setting en X et Y l’effet est moins prononcé mais on se retrouve au sol avec des textures basse résolution.
- Peut être faut-il changer le shader « Defaut-Terrain-Standart » par un autre qui mélange les textures différemment ?
- Existe-il un asset qui s’occupe de ce problème d’une manière plus efficace ?
Vos conseils sont les bienvenus. Merci d’avance.
Re: Éviter la répétition de textures de terrain layers
Unity a développé un shader pour ça, il y a aussi l'un ou l'autre shader sur l'asset store.
https://blogs.unity3d.com/2019/02/14/pr ... -in-unity/
++
https://blogs.unity3d.com/2019/02/14/pr ... -in-unity/
++
Re: Éviter la répétition de textures de terrain layers
Il n'existe pas de solution "simple" à ce problème, malheureusement.
En mixant deux textures différentes dans le shader (une peu détaillée et couvrant une large surface, avec des couleurs et une autre avec juste des détails, plus petite et en niveaux de gris, le tout en mode multiply), ça aide à atténuer le souci, mais sans le faire disparaitre totalement ...
D'autres pistes ici : https://forum.unity.com/threads/prevent ... es.316014/
http://acegikmo.com/shaderforge/wiki/in ... e_Blending
En mixant deux textures différentes dans le shader (une peu détaillée et couvrant une large surface, avec des couleurs et une autre avec juste des détails, plus petite et en niveaux de gris, le tout en mode multiply), ça aide à atténuer le souci, mais sans le faire disparaitre totalement ...
D'autres pistes ici : https://forum.unity.com/threads/prevent ... es.316014/
http://acegikmo.com/shaderforge/wiki/in ... e_Blending
Re: Éviter la répétition de textures de terrain layers
Merci pour ces infos.
Je me doutais qu'il faut regarder du côté des shader, reste à tester différentes solutions...
Bonne soirée
Je me doutais qu'il faut regarder du côté des shader, reste à tester différentes solutions...
Bonne soirée
Re: Éviter la répétition de textures de terrain layers
Pour les personnes intéressées par ce souci de répétition de texture sur les terrains voici un lien vers un sujet :
https://forum.unity.com/threads/improve ... ng.116509/
Le dernier post donne un lien vers un shader qui fait bien le boulot...
https://forum.unity.com/threads/improve ... ng.116509/
Le dernier post donne un lien vers un shader qui fait bien le boulot...
Re: Éviter la répétition de textures de terrain layers
Oui c'est comme pour faire un terrain aléatoire à base de noise, il faut mixer avec des itérations de plus en plus réduite. Il le fait avec une fois la texture réduite de 4x, mais peut être un meilleur rendu encore avec l'ajout de passe de plus en plus petiteNemo67 a écrit : ↑27 Jan 2020 20:22Pour les personnes intéressées par ce souci de répétition de texture sur les terrains voici un lien vers un sujet :
https://forum.unity.com/threads/improve ... ng.116509/
Le dernier post donne un lien vers un shader qui fait bien le boulot...
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
Re: Éviter la répétition de textures de terrain layers
Faut changer ça dans le fichier de shader ?
Tu peux m'expliquer où ça se passe ?
Tu peux m'expliquer où ça se passe ?
Re: Éviter la répétition de textures de terrain layers
oui ça se fait dans un shader.
Si tu fais un nouveau shader, tu as ça :
il y a pas mal de truc , ça ressemble un peu a du C# mais pas tout a fait, ou du moins des structures différentes. ais dans notre cas ce qui nous importe c'est ça :
et surtout cette ligne :
c'est elle qui viens mixer une couleur avec la texture.
est la texture principal du shader, dans le cas d'un nouveau shader c'est même la seule.
C'est un vector2 (float2 dans les shader) qui sont en fait les coordonné UV du pixel ou du vertex. si tu le multiplie par deux par exemple, ta texture se repetera deux fois plus. (IN.uv_MainTex * 2.0)
Le lien que tu as mis en fait il mixe une fois la texture normal, puis une fois la texture 4x plus petite, donc repetée 4 x fois, en faisant la moyenne des deux.
avec cç tu a une fois la texture normal, avec en plus une foix 4x plus petite et tu multiplie par 0. (au lieu de divisé par 2) pour faire la moyenne .
Si tu fais un nouveau shader, tu as ça :
Code : Tout sélectionner
Shader "Custom/NewSurfaceShader" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
// #pragma instancing_options assumeuniformscaling
UNITY_INSTANCING_BUFFER_START(Props)
// put more per-instance properties here
UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutputStandard o) {
// Albedo comes from a texture tinted by color
fixed4 c = (tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
Code : Tout sélectionner
void surf (Input IN, inout SurfaceOutputStandard o) {
// Albedo comes from a texture tinted by color
fixed4 c = (tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
Code : Tout sélectionner
fixed4 c = (tex2D (_MainTex, IN.uv_MainTex) * _Color;
Code : Tout sélectionner
_MainTex
Code : Tout sélectionner
IN.uv_MainTex
Le lien que tu as mis en fait il mixe une fois la texture normal, puis une fois la texture 4x plus petite, donc repetée 4 x fois, en faisant la moyenne des deux.
Code : Tout sélectionner
fixed4 c = ( (tex2D (_MainTex, IN.uv_MainTex) + (tex2D (_MainTex, IN.uv_MainTex*4.0)) * 0.5 * _Color;
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
Re: Éviter la répétition de textures de terrain layers
Merci djulio pour ces explications !