Salut les gars,
Je dois faire un shader spécifique avec un random color spécifique, par exemple 5 couleurs : Bleu, turquoise, rouge, jaune, violet. Lorsque j'applique ce shader à un group d'assets (exemple : sphères) je voudrais que cela distribue les couleurs de manière random.
Un peu a la manière de cette image (faite rapidos sous Blender) :
Merci !
Random color
- corentin3D
- Messages : 331
- Inscription : 26 Juin 2012 18:38
- Contact :
Random color
------------------------------
CB3D STUDIO | Créateur de pixels.
Agence de 3D et formation 3D agréée.
CB3D STUDIO | Créateur de pixels.
Agence de 3D et formation 3D agréée.
Re: Random color
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:
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 :
Code : Tout sélectionner
if (c.r >0.98 && c.g >0.98 && c.b < 0.02){
c.rgb=_hairColor;
le shader complet :
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));
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?
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
- corentin3D
- Messages : 331
- Inscription : 26 Juin 2012 18:38
- Contact :
Re: Random color
Salut !
Ben écoute pour commencer déjà merci pour ta réponse. J'en suis toujours au même point.
J'ai trouvé un lien sympa : http://waynelee3d.com/blog/2014/05/22/u ... om-colours
Mais d'après mon dev, il y aurait un souci avec le lien ci-dessus. Pour l'instant il a pas le temps de se pencher dessus (pas tout de suite en tout cas) donc je m'y colle, je fais juste de l'intégration pure dans Unity, pas de prog etc. Bon, je connais le fonctionnement des scripts etc, mais je suis pas codeur quoi.
J'ai ce résultat :
Y a 3 systèmes de particules fait en amont dans Blender, puis baké et exporter, donc chaque sphère (ou molécules reliées) sont indépendant.
Le bût est d'arriver a ce résultat, un bukkake de couleur :
Validé suivant un gradient
D'ailleurs je me demande si on peut utilisé le gradient pour distribuer en random les couleurs ? Ou si il faut uniquement des colors type (ex) :
Thx
++
Ben écoute pour commencer déjà merci pour ta réponse. J'en suis toujours au même point.
J'ai trouvé un lien sympa : http://waynelee3d.com/blog/2014/05/22/u ... om-colours
Mais d'après mon dev, il y aurait un souci avec le lien ci-dessus. Pour l'instant il a pas le temps de se pencher dessus (pas tout de suite en tout cas) donc je m'y colle, je fais juste de l'intégration pure dans Unity, pas de prog etc. Bon, je connais le fonctionnement des scripts etc, mais je suis pas codeur quoi.
J'ai ce résultat :
Y a 3 systèmes de particules fait en amont dans Blender, puis baké et exporter, donc chaque sphère (ou molécules reliées) sont indépendant.
Le bût est d'arriver a ce résultat, un bukkake de couleur :
Validé suivant un gradient
D'ailleurs je me demande si on peut utilisé le gradient pour distribuer en random les couleurs ? Ou si il faut uniquement des colors type (ex) :
Thx
++
------------------------------
CB3D STUDIO | Créateur de pixels.
Agence de 3D et formation 3D agréée.
CB3D STUDIO | Créateur de pixels.
Agence de 3D et formation 3D agréée.
Re: Random color
Je ne vois pas ou ton dev a un soucis, c'est en gros la première solution que je te donne!? ou alors comme tu me dis c'est que tes particules sont un seul et meme object baké avec des couleurs différentes chaque fois??
je pense qu'il te faut donc un shader comme je t'ai donné, qui remplace à la volée les couleurs X par une au pif du gradient.
je sais pas si c'est clair!
je pense qu'il te faut donc un shader comme je t'ai donné, qui remplace à la volée les couleurs X par une au pif du gradient.
je sais pas si c'est clair!
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Re: Random color
Et en bidouillant les vertex color ?
Actuellement, tu affiches quoi dans unity ? des sphères "réelles" composées de plein de triangles ou des billboards ?
Actuellement, tu affiches quoi dans unity ? des sphères "réelles" composées de plein de triangles ou des billboards ?
- boubouk50
- ModoGenereux
- Messages : 6224
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Random color
Tu peux utiliser un random entre 0.0 et 1.0 pour venir piquer dans ton image de gradient. Cette valeur sera celle de ton UV.
Pour utiliser un tableau de couleur, il te faut simplement définir les zones de couleurs. Ex: valeur entière aléatoire entre 0 et 7, la diviser par 7 pour obtenir un float entre 0 et 1 que tu utiliseras comme abscisse u d'UV, et de la même manière pour la coordonnée v avec d'autres limites (ici 0 et 3 pour ton tableau). EDIT : (attention à décaler un peu l'UV pour pas être sur l’arête ou bien le faire dans la texture)
De manière plus simple, la solution de définir à l'avance des couleurs et de les appliquer au départ comme le dit F@b, semble être la plus efficace. (Il te faudra définir ces valeurs à la main cependant)
Pour utiliser un tableau de couleur, il te faut simplement définir les zones de couleurs. Ex: valeur entière aléatoire entre 0 et 7, la diviser par 7 pour obtenir un float entre 0 et 1 que tu utiliseras comme abscisse u d'UV, et de la même manière pour la coordonnée v avec d'autres limites (ici 0 et 3 pour ton tableau). EDIT : (attention à décaler un peu l'UV pour pas être sur l’arête ou bien le faire dans la texture)
De manière plus simple, la solution de définir à l'avance des couleurs et de les appliquer au départ comme le dit F@b, semble être la plus efficace. (Il te faudra définir ces valeurs à la main cependant)
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation