2013-10-05 2 views
0

J'ai un shader pour le mapping normal qui prend en compte la direction de la lumière, et j'aimerais intensifier l'effet. Ceci est la ligne utilisée pour calculer la luminosité d'un pixel donné du modèle:Force float3 à migrer vers 0.0 ou 1.0

float3 N = (2.0 * (tex2D(NormalMapSampler, Tex))) - 1.0; 

Il force la valeur de rester entre 0 et 1, qui est ce que je veux. Cependant, je voudrais augmenter les valeurs supérieures à 0,5 et diminuer les valeurs inférieures à 0,5 sans arrondir, afin d'avoir une différence plus dramatique entre le côté du modèle qui fait face à la source lumineuse et le côté du modèle qui ne l'est pas. Que puis-je utiliser pour y parvenir?

+0

N n'est-il pas censé vous donner la normale? pas la quantité de lumière (que vous obtenez en utilisant le produit scalaire en cas d'équation de la lumière de base). Pour augmenter le contraste, vous pouvez simplement utiliser l'échelle pow (lightcontrib, power) * qui vous permettra de modifier (méfiez-vous des valeurs négatives bien sûr). – catflier

Répondre

0

La formule produit des vecteurs avec des valeurs comprises entre -1 et 1. Je ne pense pas que ce que vous voulez fait beaucoup de sens, mais vous pouvez juste augmenter la coordonnée z:

float3 N = (2.0 * (tex2D(NormalMapSampler, Tex))) - 1.0; 
N.z *= 2; //or any other value 
N = normalize(N); 

Plus le facteur , le moins influent la cartographie normale. Il augmente pour les valeurs comprises entre 0 et 1.