2013-10-05 1 views
0

У меня есть шейдер для нормального отображения, который учитывает направление света, и я хотел бы усилить эффект. Это линия используется для расчета яркости любого данного пикселя модели:Force float3 для перехода к 0.0 или 1.0

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

Это заставляет значение находиться между 0 и 1, что то, что я хочу. Тем не менее, я хотел бы увеличить значения выше 0,5 и уменьшить значения ниже 0,5, не используя округление, чтобы иметь более существенное различие между стороной модели, которая обращена к источнику света, а сторона модели - нет. Что я могу использовать для достижения этого?

+0

Разве N не должен давать вам нормальный? а не количество света (которое вы получаете с помощью точечного продукта в случае базового уравнения света). Чтобы увеличить контраст, вы можете просто использовать масштаб pow (lightcontrib, power) *, который позволит вам настроить (будьте осторожны с отрицательными значениями курса). – catflier

ответ

0

формула производит векторы со значениями между -1 и 1. Я не думаю, что то, что вы хотите, имеет много смысла, но вы можете просто увеличить г-координаты:

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

Чем выше коэффициент , тем менее значимым является нормальное отображение. Он увеличивается для значений от 0 до 1.