salut, tu bloques ou du coup ? pas besoin de shader, tu fais un nouveau material, et tu met change ta couleurs au start?
si ce n'est qu'un objet t'inspirer du shader ci dessous il remplace les couleurs RGB de la texture par la couleur en param (ne tiens pas compte de UV_head)
ici dans le shader plus bas, si rouge et vert quasi a fond sur la texture je remplace, ça pourrait être que vert :
par script(JS désolé) l'instanciation si j'ai moulte objets:
var red:float = Random.Range(0.0,1);
color_hair= Color(red, Mathf.Clamp(Random.Range(0.0,1),0,red-0.1) ,0); //toujours marron ou blond max
renderer.material.SetColor("_hairColor", color_hair );
//plus simple n'imprtequ'elle couleur RBG
color_short= Color(Random.Range(0.0,1.0),Random.Range(0.0,1.0),Random.Range(0.0,1.0));
le shader complet :
Code : Tout sélectionner
Shader "Custom/ToonBasic" {
Properties {
_Color ("Main Color", Color) = (.5,.5,.5,1)
_MainTex ("Base (RGB)", 2D) = "white" {}
_ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { Texgen CubeNormal }
_UV_head ("UV head", Range(0,4)) = 0
_hairColor ("hair Color", Color) = (1, 1, 1, 1)
_shirtColor ("shirt Color", Color) = (1, 1, 1, 1)
_shortColor ("short Color", Color) = (1, 1, 1, 1)
_OutlineColor ("Outline Color", Color) = (0,0,0,1)
_Outline ("Outline width", Range (.002, 0.03)) = .005
}
SubShader {
Pass {
Name "BASE"
ZWrite On
ColorMask RGB
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 3.0
#include "UnityCG.cginc"
sampler2D _MainTex;
samplerCUBE _ToonShade;
float4 _MainTex_ST;
float4 _Color;
int _UV_head;
float3 _hairColor;
float3 _shirtColor;
float3 _shortColor;
struct appdata {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f {
float4 pos : POSITION;
float2 texcoord : TEXCOORD0;
float3 cubenormal : TEXCOORD1;
};
v2f vert (appdata v)
{
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
o.cubenormal = mul (UNITY_MATRIX_MV, float4(v.normal,0));
return o;
}
float4 frag (v2f i) : COLOR
{
float4 c = _Color * tex2D(_MainTex, i.texcoord);
if (i.texcoord.x >0.5 && i.texcoord.y >0.5 && _UV_head>1 ){
if (_UV_head<=2)
i.texcoord.x +=0.25;
else if(_UV_head<=3)
i.texcoord.y +=0.25;
else if(_UV_head<=4){
i.texcoord.x +=0.25;
i.texcoord.y +=0.25;
}
}
if (c.r >0.98 && c.g >0.98 && c.b < 0.02){
c.rgb=_hairColor;
}else if (c.r < 0.02 && c.g >0.98 && c.b >0.98){
c.rgb=_shirtColor;
}else if (c.r >0.98 && c.g < 0.02 && c.b >0.98){
c.rgb=_shortColor;
}
float4 cube = texCUBE(_ToonShade, i.cubenormal);
return float4(2.0f * cube.rgb * c.rgb, c.a);
}
ENDCG
}
}
Fallback "VertexLit"
}
je sais pas si je suis très clair?