Modifications taille objet = texture reste taille réelle
Modifications taille objet = texture reste taille réelle
Bonjour,
Pour une meilleur explication du titre.
J'ai une maps avec des mêmes rochers mais avec des tailles différentes? Mais le problème, la texture prend la même taille du rocher.
Ce que j'aimerais faire, c'est que la texture reste égale (même taille) pour tous les rochers de toutes tailles (Donc, un material pour tous).
A-t-il une solution ? déjà existant ? bumped specular si possible ?
Merci.
Pour une meilleur explication du titre.
J'ai une maps avec des mêmes rochers mais avec des tailles différentes? Mais le problème, la texture prend la même taille du rocher.
Ce que j'aimerais faire, c'est que la texture reste égale (même taille) pour tous les rochers de toutes tailles (Donc, un material pour tous).
A-t-il une solution ? déjà existant ? bumped specular si possible ?
Merci.
Re: Modifications taille objet = texture reste taille réelle
salut
Un objet 3D possède ce qu'on appelle des coordonées UV, c'est un dépliage a plat de l'objet pour y appliquer une texture plate en 2D forcement.
Le fait d'agrandir un objet n'agrandit pas sa texture, c'est normal il faudrait changer son UV, pour ça tu le tilling dans le material qui permet de répéter une texture sur une UV. Tu peux faire un script qui scale l'UV inversement a l'objet.
Un objet 3D possède ce qu'on appelle des coordonées UV, c'est un dépliage a plat de l'objet pour y appliquer une texture plate en 2D forcement.
Le fait d'agrandir un objet n'agrandit pas sa texture, c'est normal il faudrait changer son UV, pour ça tu le tilling dans le material qui permet de répéter une texture sur une UV. Tu peux faire un script qui scale l'UV inversement a l'objet.
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Re: Modifications taille objet = texture reste taille réelle
En passant par un shader de "triplanar mapping" Tu obtiendrais peut être un résultat qui te conviendrai. Modifier les coordonnées des UV à l'arrache va forcément faire apparaître les "seams".
____________________________________________
Hop Boy
Hop Boy
Re: Modifications taille objet = texture reste taille réelle
Titan a écrit :En passant par un shader de "triplanar mapping" Tu obtiendrais peut être un résultat qui te conviendrai. Modifier les coordonnées des UV à l'arrache va forcément faire apparaître les "seams".
oui bien entendu il faut une texture seamless
en tout cas le triplanar est une solution également,
http://www.martinpalko.com/triplanar-mapping/
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Re: Modifications taille objet = texture reste taille réelle
C'est exactement ce que je cherchais, merci.
J'ai trouvé un et j'ai modifié pour rajouté "bumped specular" mais comme je ne suis pas fort de tout, il y a des erreurs.
Pouvez-vous corriger SVP ? comme je ne suis pas très fort
Merci.
J'ai trouvé un et j'ai modifié pour rajouté "bumped specular" mais comme je ne suis pas fort de tout, il y a des erreurs.
Code : Tout sélectionner
Shader "TriPlanar"
{
Properties
{
_Color ("Main Color", Color) = (1,1,1,1)
_SpecColor("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
_Shininess("Shininess", Range(0.03, 1)) = 0.078125
_MainTex ("Base (RGB)", 2D) = "white" {}
_BumpMap ("NormalMap (_Y_X)", 2D) = "bump" {}
_SizeX("SizeX", Float) = 1
_SizeY("SizeY", Float) = 1
_NX("NX", Range(0,1)) = 1
_NY("NY", Range(0,1)) = 1
_NZ("NZ", Range(0,1)) = 1
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
sampler2D _BumpMap;
fixed4 _Color;
fixed _NX;
fixed _NY;
fixed _NZ;
half _SizeX;
half _SizeY;
half _Shininess;
struct Input
{
half3 worldPos;
fixed3 worldNormal;
};
void surf (Input IN, inout SurfaceOutput o)
{
half2 scale = half2(_SizeX, _SizeY);
fixed4 c0 = tex2D(_MainTex, IN.worldPos.xz/scale);
fixed4 c1 = tex2D(_MainTex, IN.worldPos.xy/scale);
fixed4 c2 = tex2D(_MainTex, IN.worldPos.zy/scale);
fixed3 d0 = text2D(_BumpMap, IN.worldPos.xz/Scale);
fixed3 d1 = text2D(_BumpMap, IN.worldPos.xz/Scale);
fixed3 d2 = text2D(_BumpMap, IN.worldPos.xz/Scale);
fixed3 nWNormal = normalize(IN.worldNormal*fixed3(_NX, _NY, _NZ));
fixed3 projnormal = saturate(pow(nWNormal*1.5, 4));
half4 resultText = lerp(c0, c1, projnormal.z);
resultText = lerp(resultText, c2, projnormal.x);
half4 resultBump = lerp(d0, d1, projnormal.z);
resultBump = lerp(resultBump, d2, projnormal.x);
o.Albedo = resultText.rgb * _Color.rgb;
o.Alpha = resultText.a * _Color.a;
o.Specular = _Shininess;
o.Normal = normalize * resultBump.rgb);
}
ENDCG
}
Fallback "VertexLit"
}
Merci.
Re: Modifications taille objet = texture reste taille réelle
Je ne parlais pas des bords de la texture mais des coutures du mesh. Même avec une texture qui boucle et même en ne multipliant que par des nombres entier, j'imagine mal comment on pourrait le faire coller (exemple de dépliage de caillou comme je le voie).F@B a écrit :oui bien entendu il faut une texture seamlessTitan a écrit :En passant par un shader de "triplanar mapping" Tu obtiendrais peut être un résultat qui te conviendrai. Modifier les coordonnées des UV à l'arrache va forcément faire apparaître les "seams".
La prochaine fois que tu a un probléme demande si on peut t’aiguiller plutôt que de demander à ce qu'on te le corrige, donne les erreurs de la console ou un screenshoot du résultat...Pouvez-vous corriger SVP ? comme je ne suis pas très fort
Il ne suffit pas de multiplier la normal de la texture par la normal de l'objet, il faut mettre les deux valeurs dans un référentiel commun. Pour ça tu a besoin d'ajouter la tangente aux informations des vertices mais Je ne me rappel plus des détails. Si tu n'a pas envie de te prendre la tête, prend le pack de shader triplanar PBR du store, mais si tu a le temps, fait le c'est un bon exercice.
____________________________________________
Hop Boy
Hop Boy
Re: Modifications taille objet = texture reste taille réelle
Ok merci.
J'ai corrigé cette ligne :
Mais après je ne comprend les autres erreurs :
- incompatible types in initialization; invalid initialization at line 62
- assignment of incompatible types at line 63
- implicit cast from "half4" to "half3" at line 63
- implicit cast from "float4" to "float3" at /UnityCG.cginc(304)
- implicit cast from "float4" to "float3" at /UnityCG.cginc(603)
Code ligne 62 et 63 :
J'ai corrigé cette ligne :
Code : Tout sélectionner
o.Normal = normalize * _resultBump.rgb;
- incompatible types in initialization; invalid initialization at line 62
- assignment of incompatible types at line 63
- implicit cast from "half4" to "half3" at line 63
- implicit cast from "float4" to "float3" at /UnityCG.cginc(304)
- implicit cast from "float4" to "float3" at /UnityCG.cginc(603)
Code ligne 62 et 63 :
Code : Tout sélectionner
half4 resultBump = lerp(d0, d1, projnormal.z);
resultBump = lerp(resultBump, d2, projnormal.x);
Re: Modifications taille objet = texture reste taille réelle
Je t'ai expliqué que même une fois que tu aura corrigé toutes tes erreurs de compilation, ton bump ne marchera toujours pas correctement. Maintenant je suis d'accord que la première étape reste d'être capable de coder un truc qui compile.
Les erreurs "implicit cast" te disent que tu essai de faire une opération/assignation entre un vecteur de 4 valeurs et un vecteur de 3 valeurs.
pour les résoudre tu peut faire "value.XZWX"pour définir quels membres assigner, ou alors float4 (value.x, value.z, value.w, value.x)
Même probléme ligne 63, 64: d0 et d1 sont des float3, lerp utilise donc la version float3, mais tu essai de l'assigner à un half4.
Les erreurs "implicit cast" te disent que tu essai de faire une opération/assignation entre un vecteur de 4 valeurs et un vecteur de 3 valeurs.
pour les résoudre tu peut faire "value.XZWX"pour définir quels membres assigner, ou alors float4 (value.x, value.z, value.w, value.x)
Même probléme ligne 63, 64: d0 et d1 sont des float3, lerp utilise donc la version float3, mais tu essai de l'assigner à un half4.
____________________________________________
Hop Boy
Hop Boy