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"
}
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 ^^.