[Résolu]Problème shader d'atmosphère

Questions à propos du scripting Shader.
Avatar de l’utilisateur
Shaowkan
Codeur
Codeur
Messages : 319
Inscription : 30 Sep 2012 12:37
Localisation : Marseille
Contact :

[Résolu]Problème shader d'atmosphère

Message par Shaowkan » 04 Juin 2014 16:07

Bonjour à tous.

J'essaye de reproduire un effet d'atmosphère. Pour cela j'ai utiliser le shader "Planet" qui est poster sur Unify Community : Ici

Voilà mon soucis en image :

Image

Comme vous pouvez le voir, il y a un contour noir. Cette couleur provient de la couleur du "Background" de la camera. Mais quand je met une Skybox j’obtiens ce résultat.

Est-il possible de remplacer cette couleur noir par du transparent ?

Merci d'avance.

Voilà le code du shader au cas où :

Code : Tout sélectionner

Shader "Custom/Planet"
{
    Properties
    {
        _MainTex("Texture (RGB)", 2D) = "black" {}
        _Color("Color", Color) = (0, 0, 0, 1)
        _AtmoColor("Atmosphere Color", Color) = (0.5, 0.5, 1.0, 1)
        _Size("Size", Float) = 0.1
        _Falloff("Falloff", Float) = 5
        _FalloffPlanet("Falloff Planet", Float) = 5
        _Transparency("Transparency", Float) = 15
        _TransparencyPlanet("Transparency Planet", Float) = 1
    }
   
	SubShader
    {
        Pass
        {
            Name "PlanetBase"
            Tags {"LightMode" = "Always"}
            Cull Back
           
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
               
                #pragma fragmentoption ARB_fog_exp2
                #pragma fragmentoption ARB_precision_hint_fastest
               
                #include "UnityCG.cginc"
               
                uniform sampler2D _MainTex;
                uniform float4 _MainTex_ST;
                uniform float4 _Color;
                uniform float4 _AtmoColor;
                uniform float _FalloffPlanet;
                uniform float _TransparencyPlanet;
               
                struct v2f
                {
                    float4 pos : SV_POSITION;
                    float3 normal : TEXCOORD0;
                    float3 worldvertpos : TEXCOORD1;
                    float2 texcoord : TEXCOORD2;
                };

                v2f vert(appdata_base v)
                {
                    v2f o;
                   
                    o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
                    o.normal = v.normal;
                    o.worldvertpos = mul(_Object2World, v.vertex).xyz;
                    o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                   
                    return o;
                }
              
                float4 frag(v2f i) : COLOR
                {
                    i.normal = normalize(i.normal);
                    float3 viewdir = normalize(_WorldSpaceCameraPos-i.worldvertpos);
                   
                    float4 atmo = _AtmoColor;
                    atmo.a = pow(1.0-saturate(dot(viewdir, i.normal)), _FalloffPlanet);
                    atmo.a *= _TransparencyPlanet*_Color;
               
                    float4 color = tex2D(_MainTex, i.texcoord)*_Color;
                    color.rgb = lerp(color.rgb, atmo.rgb, atmo.a);
               
                    return color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0), i.normal);
                }
            ENDCG
        }
   
        Pass
        {
            Name "AtmosphereBase"
            Tags {"LightMode" = "Always"}
            Cull Front
            Blend SrcAlpha One
           
            CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
               
                #pragma fragmentoption ARB_fog_exp2
                #pragma fragmentoption ARB_precision_hint_fastest
               
                #include "UnityCG.cginc"
               
                uniform float4 _Color;
                uniform float4 _AtmoColor;
                uniform float _Size;
                uniform float _Falloff;
                uniform float _Transparency;
               
                struct v2f
                {
                    float4 pos : SV_POSITION;
                    float3 normal : TEXCOORD0;
                    float3 worldvertpos : TEXCOORD1;
                };

                v2f vert(appdata_base v)
                {
                    v2f o;
                   
                    v.vertex.xyz += v.normal*_Size;
                    o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
                    o.normal = v.normal;
                    o.worldvertpos = mul(_Object2World, v.vertex);
                   
                    return o;
                }
              
                float4 frag(v2f i) : COLOR
                {
                    i.normal = normalize(i.normal);
                    float3 viewdir = normalize(i.worldvertpos-_WorldSpaceCameraPos);
                   
                    float4 color = _AtmoColor;
                    color.a = pow(saturate(dot(viewdir, i.normal)), _Falloff);
                    color.a *= _Transparency*_Color*dot(normalize(i.worldvertpos-_WorldSpaceLightPos0), i.normal);
                    return color;
                }
            ENDCG
        }
    }
   
    FallBack "Diffuse"
}
Dernière édition par Shaowkan le 04 Juin 2014 16:44, édité 1 fois.

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

Re: Problème shader d'atmosphère

Message par F@B » 04 Juin 2014 16:36

Salut ajoute ceci au début de ton sub shader! :)

Code : Tout sélectionner

       
SubShader
        {
		Tags {"Queue"="Transparent"}
ʕ·͡ᴥ·ʔ ==> 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
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Problème shader d'atmosphère

Message par Max » 04 Juin 2014 16:41

as-tu essayé un ZWrite Off sur la partie AtmosphereBase
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
Shaowkan
Codeur
Codeur
Messages : 319
Inscription : 30 Sep 2012 12:37
Localisation : Marseille
Contact :

Re: Problème shader d'atmosphère

Message par Shaowkan » 04 Juin 2014 16:43

Parfait :)

Merci F@b.

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

Re: [Résolu]Problème shader d'atmosphère

Message par F@B » 04 Juin 2014 16:46

de rien!! :)

je t'ai piqué le shader du coup !

les transparence c'est le bordel! :) il y a aussi le Tag AlphaTest et le "RenderType"="TransparentCutout" a garder en tête! ;) je sais plus trop le pourquoi du comment...
ʕ·͡ᴥ·ʔ ==> 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
Shaowkan
Codeur
Codeur
Messages : 319
Inscription : 30 Sep 2012 12:37
Localisation : Marseille
Contact :

Re: [Résolu]Problème shader d'atmosphère

Message par Shaowkan » 04 Juin 2014 16:48

Ben ta raison de l'avoir pris :)

Si ta un tuto sur comment coder un shader, je suis preneur :D , j'en est pas trouver.

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

Re: [Résolu]Problème shader d'atmosphère

Message par F@B » 04 Juin 2014 17:38

ouaip!

le peu que je sais c'est en suivant ceci :
http://en.wikibooks.org/wiki/Cg_Programming/Unity
ʕ·͡ᴥ·ʔ ==> 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
Shaowkan
Codeur
Codeur
Messages : 319
Inscription : 30 Sep 2012 12:37
Localisation : Marseille
Contact :

Re: [Résolu]Problème shader d'atmosphère

Message par Shaowkan » 04 Juin 2014 19:42

Merci :D

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

Re: [Résolu]Problème shader d'atmosphère

Message par F@B » 04 Juin 2014 23:03

franchement c'est vraiment pas évident, mais super intéressant! ça ressemble a rien de ce que tu as pu programmer mais du coup c'est passionnant! enfin moi je m'y suis régalé... pourtant je suis une brêle en math!

je vais bientôt retourner sur mon shader d'herbe d'ailleur!
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ

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

Répondre

Revenir vers « les Shaders »