UVs

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Ladub
Messages : 18
Inscription : 22 Mai 2018 15:48

UVs

Message par Ladub » 22 Mai 2018 15:53

Salut à tous,
Je travaille actuellement sur l'UV Mapping de texture.
J'ai vu qu'il y avait des méthodes sous Unity comme wrapModeU ou wrapModeV mais je dois dire que je ne comprends pas trop à quoi elles servent et comment elles marchent (il n'y a pas d'exemples). :pleur4:
Quelqu'un pourrait m'éclairer ou me proposer un exemple ?

Merci :-D

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: UVs

Message par boubouk50 » 22 Mai 2018 16:15

Salut,
Sur quoi travailles-tu? Un modèle 3D? -> Il faut faire les UVs sous ton logiciel 3D.
Les mode de Wrapping dans Unity sont plutôt une technique d'interprétation pour leur utilisation: Clamp, Ping, Repeat, Mirror plutôt qu'une affectation.
Dis nous en plus pour qu'on t'aide mieux, là c'est un peu trop générique.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Ladub
Messages : 18
Inscription : 22 Mai 2018 15:48

Re: UVs

Message par Ladub » 22 Mai 2018 16:32

Merci pour ta réponse.
En fait, le projet consiste à récupérer une image en basse définition, de la mettre en texture puis de récupérer ses coordonnées sur le mesh pour pouvoir faire un rendu de l'objet avec la même image en haute def. Les images étant très lourde, je ne peux pas utiliser directement les images en haute définition dans unity.
Les deux premières parties sont déjà faites mais je bloque sur la récupération des coordonées de la texture.

Voila, je sais pas si je me suis fait bien comprendre :gene:

Merci :)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: UVs

Message par boubouk50 » 22 Mai 2018 16:35

La texture ne possède pas de coordonnées, c'est le mesh qui les possède.
Une texture haute def ou basse def sur le même mesh ne change rien, mis à part la définition de la texture. J'ai donc du mal à comprendre. Tu veux faire un Render To Texture?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Ladub
Messages : 18
Inscription : 22 Mai 2018 15:48

Re: UVs

Message par Ladub » 22 Mai 2018 16:46

Je stock des images en haute def (15000 x 10000) sur une base de données. Ces images sont utilisées pour en faire des texture sur un objet. Lorsque j'utilise mon appli, le téléchargement des images est beaucoup trop longue. Je veux donc avoir une image en basse def facilement téléchargeable et que je puisse en faire ce que je veux (changer l'offset, la rotation ...)sur mon objet via une texture. Ensuite, j'aimerais savoir où se situe mon image en basse def sur mon objet pour pouvoir faire un rendu avec mon image en haute def là ou j'avais placé mon image en basse def.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: UVs

Message par boubouk50 » 22 Mai 2018 17:23

Ok. Donc c'est un peu plus délicat.
De base, Unity n'offre que le Tilling et l'Offset. Je vois que tu dois pouvoir aussi faire d'autres transformations (Rotation) comme ce n'est pas générique, cela est difficile de te répondre du coup.
Pour ce qui est du tilling et de l'offset, finalement c'est assez simple puisqu'il s'agira d'appliquer la transformation
Avoir un Tiling de 4 par exemple reviendra à diviser par 4 les coordonnées d'Uvs, un offset sera une soustraction des valeurs. Par contre, attention à l'ordre des transformations. Une division suivie d'une addition ne donnera pas le même résultat qu'une addition suivie d'une division.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Ladub
Messages : 18
Inscription : 22 Mai 2018 15:48

Re: UVs

Message par Ladub » 23 Mai 2018 09:54

En fait pour avoir la position de ma texture sur le mesh, j'aurais juste besoin de l'offset et du tiling si je comprend bien ? Pour la rotation j'ai déjà un shader qui me donne l'angle de rotation de la texture.

Merci de tes réponses =)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: UVs

Message par boubouk50 » 23 Mai 2018 11:32

Pour l'angle, il faut aussi savoir quel est son centre. Est-ce avant l'offset ou après? Comme dit, ce n'est pas permutable.
Sinon, tu pourrais faire ton propre shader, avec ton propre Tiling/Offset/Rotation pour pouvoir recréer la transformation finale sur les UVs.
Sinon, essayer de sortir ces données du shader une fois modifiées.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Ladub
Messages : 18
Inscription : 22 Mai 2018 15:48

Re: UVs

Message par Ladub » 23 Mai 2018 12:11

Voici mon shader, ce sera plus facile ainsi :

Code : Tout sélectionner

*************************************************
Shader "Custom/UV rotation"
{
	Properties
	{
		_MainTex ("Texture", 2D) = "white" {}
		_Angle ("Angle", Range(-5.0,  5.0)) = 0.0
	}
	SubShader
	{
		Tags { "RenderType"="Opaque" }
		
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#include "UnityCG.cginc"

			struct v2f {
				float4 pos : SV_POSITION;
				float2 uv : TEXCOORD0;
			};

			float _Angle; 

			//calcul de la rotation
			v2f vert(appdata_base v)
			{
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);

				// Pivot
				float2 pivot = float2(0, 0);
				// Matrice de rotation
				float cosAngle = cos(_Angle);
				float sinAngle = sin(_Angle);
				float2x2 rot = float2x2(cosAngle, -sinAngle, sinAngle, cosAngle);

				// on applique la rotation
				float2 uv = v.texcoord.xy - pivot;
				o.uv = mul(rot, uv);
				o.uv += pivot;

				return o;
			}

			sampler2D _MainTex;

			fixed4 frag(v2f i) : SV_Target
			{
				// Texel sampling
				return tex2D(_MainTex, i.uv);
			}

			ENDCG
		}
	}
}
**************************************************
Il me permet de controler le tiling, l'offset et la rotation. Je dois dire que je ne suis pas un expert dans ce langage de programmation. En tout cas changer le tiling ou l'offset ne change pas le pivot. Il reste toujours au même endroit.
Je dois alors garder pos, mon pivot et l'angle pour avoir mes coordonnées ?

Répondre

Revenir vers « Unity le logiciel »