[Résolu] RenderTexture avec background de caméra transparent

Questions à propos du scripting Shader.
Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

[Résolu] RenderTexture avec background de caméra transparent

Message par cayou66 » 06 Avr 2014 03:02

Salut à tous !
Je cherche à utiliser les render textures dans un projet, pour afficher les NPC dans une case lorsqu'on leur parle.
J'ai donc créé une render texture et je place automatiquement une caméra en face de leur tête, qui les regarde. Et j'affiche la render texture dans un élément de UI, en utilisant NGUI ou pas d'ailleurs ça ne change rien.
Le problème étant que le fond de la caméra est d'une couleur, et donc cette couleur ressort dans la render texture.
J'ai tout essayé, de placer la camera en depth only, de changer de shader pour la render texture, mais sans succès.

Existe-t-il un moyen de rendre le fond de la camera transparent pour la render texture?
Si j'y vais directement en utilisant le view rect ça marche (en depth only) mais je ne peux pas faire ça, pour des raison d'animation.

Je vous met en pièce jointe une image qui illustre le résultat actuel (avec notre cher Ethan):
erreur_rendertexture.png
erreur_rendertexture.png (206.55 Kio) Consulté 6073 fois
À noter que j'ai déjà été confronté à ce problème y'a 2 ans environ, mais je retrouve aucune trace sur le forum de ma question...

Merci !
Dernière édition par cayou66 le 06 Avr 2014 18:19, édité 1 fois.

Avatar de l’utilisateur
Franck
Bricoleur
Bricoleur
Messages : 2884
Inscription : 08 Jan 2011 18:43
Localisation : Tours

Re: RenderTexture avec background de caméra transparent

Message par Franck » 06 Avr 2014 08:39

La texture que tu utilises est bien complétement transparente?
Dés fois j'bug, dés fois j'bug pas.

Avatar de l’utilisateur
F@B
Messages : 1844
Inscription : 01 Août 2013 10:41
Contact :

Re: RenderTexture avec background de caméra transparent

Message par F@B » 06 Avr 2014 11:17

Cayou si je me trompe pas c'est ça que tu veux faire ?

http://forum.unity3d.com/threads/98827- ... xplanation

ça devrais fonctionner normalement si tu n'as pas de probleme de Depth entre tes caméras, mais je n'ai jamais trop testé ce truc...
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ

Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

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

Re: RenderTexture avec background de caméra transparent

Message par cayou66 » 06 Avr 2014 16:11

Franck a écrit :La texture que tu utilises est bien complétement transparente?
Tu parle du shader? Car la render texture elle même tu choisis pas grand chose. Et j'ai essayé différents shader sur mon Quad, en vain.
F@B a écrit :Cayou si je me trompe pas c'est ça que tu veux faire ?

http://forum.unity3d.com/threads/98827- ... xplanation

ça devrais fonctionner normalement si tu n'as pas de probleme de Depth entre tes caméras, mais je n'ai jamais trop testé ce truc...
J'ai du mal à savoir si c'est ça, le gars chercher à afficher deux caméras en même temps, en appliquant un filtre toshop, comme deux calques en fait.
Moi c'est plutôt utiliser la render texture normalement, mais effacer le background de la caméra, pour ne laisser que le NPC dans la render texture.

Avatar de l’utilisateur
F@B
Messages : 1844
Inscription : 01 Août 2013 10:41
Contact :

Re: RenderTexture avec background de caméra transparent

Message par F@B » 06 Avr 2014 16:30

une idée comme ça, tu ne dois pas avoir d'alpha sur ton RenderTexture, le fond doit etre noir et c'est tout...

si t'ajoute un fond vert et que tu clip dans ton shader pour créer l'alpha qui te manque?

avec un truc dans le genre :
http://pastebin.com/rxJak3jB

enfin c'est bizarre ton REnderTexture devrait avoir l'alpha en principe, t'as essayé le transparent cutout shader?
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ

Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

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

Re: RenderTexture avec background de caméra transparent

Message par cayou66 » 06 Avr 2014 17:03

Intéressante ton idée Fab ! On fait comme un fond vert en gros, il faut juste admettre qu'aucun personnage n'aura la couleur choisie, mais j'aime bien cette idée.
Faut juste voir ce que ça donne au niveau crénelage, je vais faire des tests, parce que ton shader c'est 0 ou 1 en alpha, ça va forcément crénelé.

Voilà le résultat que j'arrive à avoir avec un cutout:
erreur_rendertexture_shadercutout.png
erreur_rendertexture_shadercutout.png (166.52 Kio) Consulté 6049 fois
J'avais aussi trouvé un shader de render texture, qui découpe bien le noir mais qui rend aussi la texture un peu additive:
erreur_rendertexture.png
erreur_rendertexture.png (159.42 Kio) Consulté 6049 fois
Voici le code du shader (je suis une bille en shader...):

Code : Tout sélectionner

Shader "Transparent/RenderTexture" {
    Properties {
        _MainTex ("Black (RGB)", 2D) = "black" {}
    }
    SubShader {
        Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
        Blend SrcAlpha SrcAlpha
        ZWrite off
        
        Pass {  
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
            
                #include "UnityCG.cginc"

                struct appdata_t {
                    float4 vertex : POSITION;
                    float2 texcoord : TEXCOORD0;
                };
 
                struct v2f {
                    float4 vertex : POSITION;
                    float2 texcoord : TEXCOORD0;
                };
 
                sampler2D _MainTex;
            
                v2f vert (appdata_t v)
                {
                    v2f o;
                    o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                    o.texcoord = v.texcoord;
                    return o;
                }
           
                half4 frag (v2f i) : COLOR
                {
                    float4 black = tex2D(_MainTex, i.texcoord);
                    return float4(black.r, black.g, black.b, 1);
                }
            ENDCG
        }
    }
}
Merci à vous !

Avatar de l’utilisateur
Franck
Bricoleur
Bricoleur
Messages : 2884
Inscription : 08 Jan 2011 18:43
Localisation : Tours

Re: RenderTexture avec background de caméra transparent

Message par Franck » 06 Avr 2014 17:17

cayou66 a écrit : Tu parle du shader? Car la render texture elle même tu choisis pas grand chose.
Non pas le shader.
Je n'utilise pas de render texture ( pas d'unity pro), je pensais que tu assignais une texture a ton material de façon classique, mais cela n'a pas l'air d'être le cas.
Dés fois j'bug, dés fois j'bug pas.

Avatar de l’utilisateur
F@B
Messages : 1844
Inscription : 01 Août 2013 10:41
Contact :

Re: RenderTexture avec background de caméra transparent

Message par F@B » 06 Avr 2014 17:28

un principe un personnage avec un vert ou magenta a 255 c'est plutôt rare ! ;)

par contre je pige pas trop ton shader la, il fait rien a part supprimer l'alpha? ce qui n'est pas vraiment ton but.

d’ailleurs tu pourrais écrire :

Code : Tout sélectionner

return float4(black.rgb, 1);
ton Maintex devrait avoir l'alpha aussi, bien que je ne soit pas sur que ça joue.

Code : Tout sélectionner

_MainTex ("Base (RGB) Trans (A)", 2D) = "black" {} 
pourquoi fait un tu un blend SrcAlpha SrcAlpha ?
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ

Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

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

Re: RenderTexture avec background de caméra transparent

Message par cayou66 » 06 Avr 2014 17:29

En fait tu créé une render texture, comme si tu avais une texture normale.
Ensuite dans la caméra tu lui assignes la render texture.
Et enfin tu te fais un plane, un quad, un cube, ce que tu veux, et tu lui assigne la texture dans le material, comme n'importe quelle texture en fait.
Et là tu peux choisir le shader et ses propriétés.

Sur les paramètres de la render texture, y'a pas grand choix à faire, tu peux par exemple choisir la résolution de cette dernière et l'antialiasing.

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

Re: RenderTexture avec background de caméra transparent

Message par cayou66 » 06 Avr 2014 17:30

F@B a écrit :un principe un personnage avec un vert ou magenta a 255 c'est plutôt rare ! ;)

par contre je pige pas trop ton shader la, il fait rien a part supprimer l'alpha? ce qui n'est pas vraiment ton but.

d’ailleurs tu pourrais écrire :

Code : Tout sélectionner

return float4(black.rgb, 1);
ton Maintex devrait avoir l'alpha aussi, bien que je ne soit pas sur que ça joue.

Code : Tout sélectionner

_MainTex ("Base (RGB) Trans (A)", 2D) = "black" {} 
pourquoi fait un tu un blend SrcAlpha SrcAlpha ?
Si tu as vu mon message tu as du lire "je suis très mauvais en shader" :lol:
J'ai trouvé ça sur le forum officiel, rien de plus. Je comprend pas grand chose de ce qu'il y a écrit...
J'vais essayer de suivre tes conseils :P

Répondre

Revenir vers « les Shaders »