Superposition de caméras avec masque

Questions à propos du scripting Shader.
Avatar de l’utilisateur
Poupi
Messages : 31
Inscription : 12 Nov 2012 14:45

Superposition de caméras avec masque

Message par Poupi » 06 Mai 2013 18:41

Bonjour à tous !

Je vous expose mon problème :
J'ai deux caméras, 1 et 2 qui rendent chacune une partie différente de ma scène. Ce que j'aimerais faire, c'est superposer le rendu de la caméra 2 sur le rendu de la caméra 1 mais en n'utilisant qu'une partie de l'image, déterminée par un masque en niveaux de gris.
mask.jpg
mask.jpg (46.33 Kio) Consulté 5555 fois
Pour cela j'ai attaché un script à ma caméra 2 contenant ceci :

Code : Tout sélectionner

    
void OnRenderImage(RenderTexture src, RenderTexture dest) 
{
        Graphics.Blit(src, dest, mat);
}
Le material utilisé pour le Blit utilise un shader basé sur le Alpha-Diffuse de Unity, auquel j'ai rajouté une texture supplémentaire pour le masque :

Code : Tout sélectionner

fixed4 c = tex2D(_MainTex, IN.uv_MainTex) ;
o.Albedo = c.rgb;
o.Alpha = tex2D(_AlphaTex, IN.uv_AlphaTex).a ;
Le masque est bien pris en compte, cependant la couleur ne l'est pas, ce qui me donne donc un aplat noir là où il devrait y avoir le rendu de la caméra 2 .
Il y a quelque chose que je ne dois pas faire correctement, peut être que je fais fausse route dans le shader à utiliser :(

Merci d'avance :) !

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Superposition de caméras avec masque

Message par cayou66 » 06 Mai 2013 20:53

Salut,
juste comme ça, ça ressemble beaucoup à ce que fait le render to texture de la version pro.
Est-ce une limitation? Bonne question.
Si t'as la version pro je t'invite à passer par là, même si de mémoire c'est pas évident non plus d'avoir un bon shader qui gère la transparence de ta render texture.

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Superposition de caméras avec masque

Message par ZJP » 06 Mai 2013 21:41

Heu!. Ça n'aide pas?

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Superposition de caméras avec masque

Message par cayou66 » 06 Mai 2013 21:47

ZJP a écrit :Heu!. Ça n'aide pas?
Pitié ! Pas ce post !

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Superposition de caméras avec masque

Message par ZJP » 06 Mai 2013 22:08

Désolé. :?

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Superposition de caméras avec masque

Message par cayou66 » 06 Mai 2013 23:15

ZJP a écrit :Désolé. :?
C'est pas tout à fait ça ceci dit, mais ça se rapproche ;)

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Superposition de caméras avec masque

Message par Max » 07 Mai 2013 07:53

Poupi a écrit :Le masque est bien pris en compte, cependant la couleur ne l'est pas, ce qui me donne donc un aplat noir là où il devrait y avoir le rendu de la caméra 2 .
Il y a quelque chose que je ne dois pas faire correctement, peut être que je fais fausse route dans le shader à utiliser :(
Dans ton cas, tu as deux textures + un mask de mix, alors pour arriver au résultat que tu cherches, tu peux écrire par exemple en décomposant:

Code : Tout sélectionner

	fixed4 c1 = tex2D(_MainTex, IN.uv_MainTex) * _Color; // textue cam1
	fixed4 c2 = tex2D(_Texture2, IN.uv_MainTex) * _Color;	// texture cam2
	half alpha = tex2D(_AlphaTex, IN.uv_AlphaTex).a;	
	o.Albedo = c1.rgb*(1.0-alpha)+c2.rgb*alpha;
	o.Alpha = c1.a;
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
spedy
Messages : 290
Inscription : 16 Nov 2010 16:32
Localisation : Aix en Provence

Re: Superposition de caméras avec masque

Message par spedy » 07 Mai 2013 08:44

Sinon tu peux peut être passer par des shaders ?

J'ai eu a faire la même chose il n'y a pas longtemps pour une minimap et j'ai trouvé cela

Code : Tout sélectionner

Shader "TextureMask"
{
   Properties
   {
      _Mask ("Culling Mask", 2D) = "white" {}
   }
   SubShader
   {
      Tags {"Queue" = "Background"}
      Blend SrcAlpha OneMinusSrcAlpha
      Lighting Off
      ZWrite On
      ZTest Always
      Alphatest LEqual 0
      Pass
      {
         SetTexture [_Mask] {combine texture}
      }
   }
}
C'est un shader à appliquer sur un plan devant la caméra. Si tu utilise un cercle BLANC comme image ( png avec transparence ) dans ton material, cela donnera l'effet que tu souhait.
En espérant que cela pourra t'aider.

Avatar de l’utilisateur
Poupi
Messages : 31
Inscription : 12 Nov 2012 14:45

Re: Superposition de caméras avec masque

Message par Poupi » 07 Mai 2013 13:54

Bonjour, et merci pour avoir répondu aussi rapidement 8-)

J'ai regardé les anciens posts, et je n'ai rien trouvé pouvant m'aider.

@Max : oui, j'ai testé cette solution. Cependant le fait de devoir passer au shader les deux images rendues par les deux caméras m'oblige à utiliser des renderTexture en haute résolution, ce qui a un impact non négligeable sur les performances et sur la consommation mémoire. Cependant cela fonctionne. Dans mon cas j'aimerais plutôt 'supprimer' la partie de l'image de la caméra 2 correspondant au masque et qui va être plaquée sur l'autre rendu dans Unity via le camera depth.

Je me suis rendu compte que la méthode utilisant Graphic.Blit et un shader fonctionne, mais dès que la caméra 2 rend un objet avec de la transparence, ça pète et je me retrouve avec du noir au lieu de ma scène normale : / .

Vu que je commence à piétiner, j'ai fais un package avec les deux méthodes : la première avec Graphic.Blit, et la seconde avec une troisième caméra qui filme un plan rendu avec un shader combinant les caméras 1 et 2 (fonctionnelle mais plus coûteuse).

Lien de téléchargement : http://s000.tinyupload.com/index.php?fi ... 3&gk=cisco

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Superposition de caméras avec masque

Message par Max » 07 Mai 2013 19:14

Bon, j'ai essayé vite fait, mais je n'ai pas trouvé de solution parfaite. Je reprendrais demain si j'ai un peu de temps.

PS: cela fait un bout de temps que tu semble pédaler la dessus visiblement ;)
http://forum.unity3d.com/threads/130480 ... Quest-like
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « les Shaders »