J'essaye de réaliser une fonction de téléportation pour se déplacer en VR à l'aide d'Unity. J'ai déjà réalisé toute la mécanique, et je peux me téléporter au sein de l’environnement. Maintenant, j'essaye de rendre cela joli en essayant d'ajouter la texture de ma parabole qui est dessinée à l'aide d'un lineRenderer dont les points sont recalculés en temps réel.
Pour ceci, je voudrais réaliser un shader qui prend en entrée une texture et certains paramètres afin de répéter un motif en y intercalant un espace entre chacun. Je découvre les shaders, j'ai beaucoup de mal à imaginer une solution bien que j'ai déjà trouvé ça sans arriver à trop comprendre pour l'adapter à mon problème.
Comment faire un shader qui répète une texture en espaçant chaque occurrence d'une certaine distance ?
J'ai déjà ça. C'est le template par défaut, sur lequel j'ai ajouté la prise en compte des couleurs du LineRenderer.
Code : Tout sélectionner
// Définit le nom du shader
Shader "Unlit/Arrow"
{
Properties
{
// Définit une variable utilisable dans le shader
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
// Définit l'ordre de traitement
Tags { "RenderType"="Transparent" }
// Ignore les objets dont le LOD est suppérieur
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog
#include "UnityCG.cginc"
// Définit une structure de donnée utilisée entre la carte graphique et l'application
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
fixed4 color : COLOR0;
};
// Définit une structure de donnée utilisée entre le vertex shader et le fragment shader
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
fixed4 color : COLOR0;
};
//
sampler2D _MainTex;
float4 _MainTex_ST;
// Manipule les sommets du modèle à afficher
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.color = v.color;
return o;
}
// Définit la sortie du shader (couleur et emplacement)
fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 color = (tex2D(_MainTex, i.uv) + i.color) / 2;
// apply fog
UNITY_APPLY_FOG(i.fogCoord, color);
return color;
}
ENDCG
}
}
}