Shadow sans Light ?

Questions à propos du scripting Shader.
Avatar de l’utilisateur
spedy
Messages : 290
Inscription : 16 Nov 2010 16:32
Localisation : Aix en Provence

Shadow sans Light ?

Message par spedy » 30 Déc 2015 11:28

Hello,

Bon je ne sais pas si il s'agit plus d'une question de shader ou d'utilisation de unity mais je me heurte à un petit souci.
J'ai un shader de "Custom lightning", en gros une couleur par face d'un cube.

Ce shader ne réagi pas avec les Lights, ça c'est ce que je veux.
Cependant j'aimerais que l'objet projette une ombre, et la c'est le drame.

Voici mon très simple shader:

Code : Tout sélectionner

Shader "Composite/TriColor" {
    Properties {
        _ColorX ("ColorX", Color) = (1,0,0,1)
        _ColorY ("ColorY", Color) = (0,1,0.1310346,1)
        _ColorZ ("ColorZ", Color) = (0.07586192,0,1,1)
    }
    SubShader {
        Tags {
            "RenderType"="Opaque"
        }
        Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }
            
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_FORWARDBASE
            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase_fullshadows
            #pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2 
            #pragma target 3.0
            uniform float4 _ColorZ;
            uniform float4 _ColorY;
            uniform float4 _ColorX;
            struct VertexInput {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float3 normalDir : TEXCOORD0;
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.normalDir = UnityObjectToWorldNormal(v.normal);
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex );
                return o;
            }
            float4 frag(VertexOutput i) : COLOR {
                i.normalDir = normalize(i.normalDir);
                float3 normalDirection = i.normalDir;
////// Lighting:
                float3 node_7743 = (i.normalDir*i.normalDir);
                float3 finalColor = (node_7743.r*_ColorX.rgb + node_7743.g*_ColorY.rgb + node_7743.b*_ColorZ.rgb);
                return fixed4(finalColor,1);
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}
Les Projectors ne correspondent pas a ce que je cherche, il me faudrait 1 projector par object .....
Existe il un moyen d'utiliser un Directionnal Light juste pour ces ombres ?
Une autres technique que je ne connais pas ?
Utiliser un autre type de shader ?

Si quelqu'un à une idée ^^.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5404
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Shadow sans Light ?

Message par boubouk50 » 30 Déc 2015 12:24

Je ne pense pas que les ombres projetées par le mesh soit lié au shader, les recevoir oui, c'est sur, mais la projection est surement liée au mesh. Regarde plutôt du côté des propriétés de ton objet et de ta lumière -> cast shadow, culling mask, etc.
Pour recevoir des ombres sans light, check ce post
"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
spedy
Messages : 290
Inscription : 16 Nov 2010 16:32
Localisation : Aix en Provence

Re: Shadow sans Light ?

Message par spedy » 30 Déc 2015 12:56

Il s'agissait dans une premier temps de mon shader qui ne calculait pas les ombres.
J'ai trouver la solution a ce problème avec ceci:

Code : Tout sélectionner

// struct
LIGHTING_COORDS(1,2)

//vert
TRANSFER_VERTEX_TO_FRAGMENT(o);
 
// frag
float  atten = LIGHT_ATTENUATION(i);
return fixed4(finalColor,1) * atten;
Cependant j’obtiens ceci (Les deux cubes ont le même shader):
Image

Mais je voudrais obtenir cela :
Image

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5404
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Shadow sans Light ?

Message par boubouk50 » 04 Jan 2016 10:36

En gros, tu veux que l'objet ne reçoive pas ses ombres mais celles des autres uniquement? Ça semble compliqué... Je ne sais pas si on peut séparer tout ça... Ou alors il faut savoir si une face non éclairée est dans l'ombre ou pas. Théoriquement oui et d'après ton image, ça le confirme.
"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
ZJP
Messages : 5718
Inscription : 15 Déc 2009 06:00

Re: Shadow sans Light ?

Message par ZJP » 04 Jan 2016 18:23

boubouk50 a écrit :En gros, tu veux que l'objet ne reçoive pas ses ombres mais celles des autres uniquement? Ça semble compliqué...
Et avec ceci

Code : Tout sélectionner

Tags { "RenderType" = "Opaque" "ForceNoShadowCasting"="True"}
dans le shader?.
Pour triompher, le mal n’a besoin que de l’inaction des gens de bien.Edmund Burke (1729-1797)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 5404
Inscription : 28 Avr 2014 11:57
Localisation : Toulouse

Re: Shadow sans Light ?

Message par boubouk50 » 05 Jan 2016 10:33

J'ai un peu cherché avec disable self shadowing shader sur Gogole, mais je n'ai pas trouvé de réponse ni même une ébauche de réponse...
"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
spedy
Messages : 290
Inscription : 16 Nov 2010 16:32
Localisation : Aix en Provence

Re: Shadow sans Light ?

Message par spedy » 05 Jan 2016 10:46

@boubouk50
Oui j'ai aussi du mal a trouver un début de piste du coup je me dit de plus en plus que je ne choisi pas la bonne solution.
Peut-être qu'il existe des solutions hors shader pour générer des ombres faut que je regard un peu.

@ZJP
Merci de ta contribution a mon problème.
J'ai essayé le

Code : Tout sélectionner

"ForceNoShadowCasting"="True"
Mais cela désactive complètement les ombres, les self-shadow mais aussi celle caster sur les autres objets.

Répondre

Revenir vers « les Shaders »