Нормалы, рассчитанные по карте высот, не являются гладкими - PullRequest
0 голосов
/ 12 октября 2019

У меня есть 2D-карта высот, и я хочу сгенерировать карту нормалей из нее.

Я использовал Vec3 normal = Vec3(2*(R-L), 2*(B-T), -4).Normalize();, и я попытался использовать перекрестное произведение соседних пикселей, но я все еще не получаю гладкий результат.

Освещение рассчитывается по модели blinn-phong:

vec3 norm = texture(NORMAL_TEXTURE, UV).xyz;
norm = norm * 2.0 -1.0;

vec3 diff = max(dot(norm, normalize(lightDir)) ,0.0) * lightColor * lightPower / (length(lightDir) * length(lightDir));
vec3 ambient = 0.2 * vec3(1,1,1);

vec3 h = normalize(lightDir +  viewDir);
float NdotH = dot(norm, h);

float intensity = clamp(pow(NdotH, 200), 0, 1.0);
vec3 specular = lightColor * intensity * lightPower / (length(lightDir) * length(lightDir));

Это результат, когда я использую зеркальную подсветку.

enter image description here

...