Вопрос

Затенение Blinn-Phong ...?

Нормалы Blinn-phong

Так что проблема, имеющая, как приведенное выше изображение, надеюсь, иллюстрирует, в том, что я не могу по-видимому, чтобы мои спекулярные основные моменты гладко плавно. Проблема - это резкая среза вдоль краев лица, которое не должно происходить. Диффузное освещение, кажется, работает довольно хорошо, и он использует те же интерполированные значения. Вот код для зеркальных ярких моментов Blinn-Phong:

vec3 halfAngle = normalize(lightDirection.xyz + viewRay);

float blinnTerm = dot(normal.xyz, halfAngle);
blinnTerm = clamp(blinnTerm, 0.0f, 1.0f);
blinnTerm = pow(blinnTerm, 300.0f);

float specIntensity = intensity * blinnTerm;

vec4 specColour = specIntensity * specColour;
.

lightDirection является постоянным, он бесконечно далеко (то есть. Солнце). Что касается ViewRay, он рассчитывается в вершине Header, используя матрицу проекции:

viewRay = vec3(-(UV.x * 2.0f - 1.0f) / projection[0].x,
               -(UV.y * 2.0f - 1.0f) / projection[1].y,
                     1.0f);
.

Я использую отсроченные рендеринга, где происходят значения ультрафиолета (рендеринг к полноэкранной текстуры).

Единственное, о чем я могу думать, так это то, что нормальная интерполяция просто не достаточно гладко. Но если это так, как бы я пошел по исправлению? (Я храним нормы как 16-битные поплавки, но поднятие его до 32 бит не было никакой разницы).

Это было полезно?

Решение

Введите описание изображения здесь

и чайник сейчас исправлен!Там был этот вопрос с интерполяцией нормалей, но, к счастью, это было простое исправление;Я нормализую нормальные нормы в моем вершине шейдера, затем интерполизируя, а не сначала интерполировать, а затем нормализую.Это все еще не идеально, но это, безусловно, улучшение!

Урок здесь: Если ваше изображение выглядит плоским, вы, вероятно, делаете что-то, что вы не должны делать в шейдере вершины.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top