[Résolu] Blend textures avec soft mask par dessus

Questions à propos du scripting Shader.
Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6187
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [RESOLU] Blend textures avec soft mask par dessus

Message par boubouk50 » 16 Nov 2017 16:24

Essaie ce code:

Code : Tout sélectionner

Shader "Screen_Clamped_Emissive_Fade_Alpha" {
  Properties {
    _Color ( "Main Color", Color ) = ( 1, 1, 1, 1 )
    _Blend ( "Blend", Range ( 0, 1 ) ) = 0.5
    _MainTex ("Main Map", 2D) = "white" {}
    _Texture2 ( "Texture 2", 2D ) = "white" {}
    _AlphaTex ("Alpha mask (R)", 2D) = "white" {}
    _EmissionPower ("Emission Power", Range(0,20)) = 1.0
  }
   
  SubShader {
    Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
    ZWrite Off
    Lighting Off 
    Blend SrcAlpha OneMinusSrcAlpha
    LOD 100
      
    Pass
    {
      SetTexture[_MainTex]
      SetTexture[_Texture2]
      {
        ConstantColor ( 0, 0, 0, [_Blend] )
        Combine texture Lerp( constant ) previous
      }    
    }

    Cull Off
      
    CGPROGRAM   
    #pragma surface surf NoLighting alpha noforwardadd
    #include "UnityCG.cginc"
      
    half4 LightingNoLighting (SurfaceOutput s, half3 lightDir, half atten) {
      half4 c;
      c.rgb = s.Albedo;
      c.a = s.Alpha;
      return c;
    }
    
      
    sampler2D _MainTex;
    sampler2D _Texture2;
    sampler2D _AlphaTex;
    fixed4 _Color;
    float _Blend;
    float _EmissionPower;
      
    struct Input {
      float2 uv_MainTex;
      float2 uv_Texture2;
      float2 uv_AlphaTex;
    };
      
    void surf(Input IN, inout SurfaceOutput o) {
      half4 tex = tex2D(_MainTex, IN.uv_MainTex) * _Color;
      half4 c;
      if (IN.uv_MainTex.x > 1.0 || IN.uv_MainTex.x < 0.0 || IN.uv_MainTex.y > 1.0 || IN.uv_MainTex.y < 0.0)
        c = half4 (0, 0, 0, 0);
      else
        c = tex;
    	half4 tex2  = tex2D ( _Texture2, IN.uv_Texture2 ) * _Color;
      o.Emission = lerp(c.rgb * _EmissionPower, tex2 * _EmissionPower, _Blend );
      o.Albedo = fixed4 (0, 0, 0, 0);
      o.Alpha = tex2D (_AlphaTex, IN.uv_AlphaTex).a;
    }
      
    ENDCG
  }   
  Fallback "Unlit/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

Jayme65
Messages : 47
Inscription : 31 Jan 2017 00:43

Re: [RESOLU] Blend textures avec soft mask par dessus

Message par Jayme65 » 17 Nov 2017 12:17

Merci pour le code...mais pas de changement Boubouk!
Si ça peut aider (^^ j'aurais p'tet dû y penser plus tôt) on peut voir l'effet..mais de l'autre coté (et donc renversé, ce qui ne m'arrange pas). Je parle donc bien du code que j'ai posté et du tien (pour ne pas que tu ailles chercher dans la direction de ton code spécifiquement)

Image

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

Re: [RESOLU] Blend textures avec soft mask par dessus

Message par boubouk50 » 17 Nov 2017 12:29

C'est le Cull Off qui génère cela, il copie la face avant et l'applique à la face arrière. Il doit y avoir quelque chose qui ne fonctionne pas totalement. Aussi la face arrière est en miroir.
Si tu n'as pas besoin de cela, enlève le Cull Off ou bien mets Cull On.
Si tu veux la face arrière sans miroir, duplique ton mesh et tourne le à 180°
Si tu veux la face arrière en miroir, duplique ton mesh, tourne le à 180° et scale-le à -1 dans la largeur.
"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

Répondre

Revenir vers « les Shaders »