Mixer un shader de projection UV et de contour

Questions à propos du scripting Shader.
Avatar de l’utilisateur
rattle-snake
Messages : 187
Inscription : 23 Jan 2012 23:37

Mixer un shader de projection UV et de contour

Message par rattle-snake » 15 Sep 2014 10:05

Bonjour à tous,
Je me relance sur unity après quelques temps d'absences !
J'étais deja venu vous embeter avec un shader un peu technique et je pense que je viens de trouver la solution la plus simple (j'espere).

J'ai un shader de projection UV depuis la camera (Le slot _MainTex est une image blanche, et le slot _Detail est une image de pointillé en mode repeat) :
Image

J'ai un shader de contour :
Image

Et j'aimerais obtenir un mix des deux :
Image

N'ayant pas eu le temps de me plonger dans l'apprentissage des shaders je n'ai pas les connaissances techniques pour faire la fusion.
En échange, je peux offrir des compétences en modélisation 3D par exemple qui est mon métier d'origine.

Shader de projection UVs :

Code : Tout sélectionner

    Shader "Example/ScreenPos" {
    Properties {
    _MainTex ("Texture", 2D) = "white" {}
    _Detail ("Detail", 2D) = "gray" {}
    }
    SubShader {
    Tags { "RenderType" = "Opaque" }
    CGPROGRAM
    #pragma surface surf Lambert
    struct Input {
    float2 uv_MainTex;
    float4 screenPos;
    };
    sampler2D _MainTex;
    sampler2D _Detail;
    void surf (Input IN, inout SurfaceOutput o) {
    o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
    float2 screenUV = IN.screenPos.xy / IN.screenPos.w;
    //screenUV *= float2(8,6); //half the tiling x/y
	screenUV *= float2(80,60); //half the tiling x/y
    o.Albedo *= tex2D (_Detail, screenUV).rgb * 2;
    }
    ENDCG
    }
    Fallback "Diffuse"
    }
Shader du contour :

Code : Tout sélectionner

Shader "Outlined/Silhouette Only" {
	Properties {
		_OutlineColor ("Outline Color", Color) = (0,0,0,1)
		_Outline ("Outline width", Range (0.0, 0.03)) = .005
	}
 
CGINCLUDE
#include "UnityCG.cginc"
 
struct appdata {
	float4 vertex : POSITION;
	float3 normal : NORMAL;
};
 
struct v2f {
	float4 pos : POSITION;
	float4 color : COLOR;
};
 
uniform float _Outline;
uniform float4 _OutlineColor;
 
v2f vert(appdata v) {
	// just make a copy of incoming vertex data but scaled according to normal direction
	v2f o;
	o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
 
	float3 norm   = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);
	float2 offset = TransformViewToProjection(norm.xy);
 
	o.pos.xy += offset * o.pos.z * _Outline;
	o.color = _OutlineColor;
	return o;
}
ENDCG
 
	SubShader {
		Tags { "Queue" = "Transparent" }
 
		Pass {
			Name "BASE"
			Cull Back
			Blend Zero One
 
			// uncomment this to hide inner details:
			//Offset -8, -8
 
			SetTexture [_OutlineColor] {
				ConstantColor (0,0,0,0)
				Combine constant
			}
		}
 
		// note that a vertex shader is specified here but its using the one above
		Pass {
			Name "OUTLINE"
			Tags { "LightMode" = "Always" }
			Cull Front
 
			// you can choose what kind of blending mode you want for the outline
			//Blend SrcAlpha OneMinusSrcAlpha // Normal
			//Blend One One // Additive
			Blend One OneMinusDstColor // Soft Additive
			//Blend DstColor Zero // Multiplicative
			//Blend DstColor SrcColor // 2x Multiplicative
 
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
 
half4 frag(v2f i) :COLOR {
	return i.color;
}
ENDCG
		}
 
 
	}
 
	Fallback "Diffuse"
}
Merci d'avance, vraiment !

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

Re: Mixer un shader de projection UV et de contour

Message par boubouk50 » 15 Sep 2014 11:28

Le mix correspondrait à:
Récupérer d'un coté l'alpha généré par l'Outline Shader et l'insérer dans le shader de projection (en faisant attention que celui-ci devienne de type Transparent).

Je ne peux pas plus t'aider que te diriger vers la soluce, j'ai dû laisser Unity de coté pour quelques temps et je suis très pris par mes projets pro.
"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

Avatar de l’utilisateur
rattle-snake
Messages : 187
Inscription : 23 Jan 2012 23:37

Re: Mixer un shader de projection UV et de contour

Message par rattle-snake » 16 Sep 2014 21:58

Merci pour la réponse boubouk...

Je vais essayer de voir ce que je peux faire :oops:

Répondre

Revenir vers « les Shaders »