10,5. Полиномное отображение текстуры с BRDF-данными

:.□ Du - косинус угла между направлением освещения и тангенциальным вектором (число с плавающей запятой);

□ Ov, - косинус угла между направлением освещения и вектором бинормали (число с плавающей запятой);

LdotN - косинус угла между нормалью поверхности и направлением освещения (число с плавающей запятой).

Предполагается, что наблюдатель бесконечно удален, а источник освещения точечный и единственный.

Листинг 10.7. Вершинный шейдер для рендеринга с помощью полиномных текстур

//

// Вершинный шейдер РТМ от Брэда Риттера, Hewlett-Packard. // и Рэнди Роста. 3Dlabs.

//

// 0 3Dlabs. Inc. и Hewlett-Packard. L.P.. 2003,

// опубликовано с разрешения компаний

//
uniform vec3 LightPos; uniform vec3 EyeDir;
attribute vec3 Tangent: attribute vec3 Binormal:
varying float Du;
varying float Dv: t varying float LdotN: varying vec2 TexCoord:
void main(void) {
vec3 lightTemp: vec3 halfAngleTemp: vec3 tPrime: vec3 bPrime:

// Преобразование вершины

gl_Position = ftransformQ:
lightTemp = normalizetLightPos - gl_Vertex.xyz):

// Вычисление вектора половины угла halfAngleTemp = normalize(EyeDir + lightTemp):

// Вычисление Г и В' // Г - |Т - СТ.Н)Н|

tPrime = Tangent - (halfAngleTemp * dot(Tangent, halfAngleTemp)): tPrime = normalize(tPrime):

//В' - H x T'

bPrime = crossChalfAngleTemp, tPrime):
Du = dot(lightTemp. tPrime): Dv = dot(lightTemp, bPrime):

II Умножение половинного угла на N0ISE_FACT0R. // чтобы избешать помех а BRDF-данных

продолжение &

Шейдеры с сохранением данных в текстурах

Листинг 10.7 (продолжение)

halfAngleTemp = halfAngleTemp * 0.9:

// Ни = DotCHalfAngle. Т)

// Hv = DotCHalfAngle. В)

// Remap [-1.0..1.0] to [0.0..1.0]
TexCoord.s = dotCTangent. halfAngleTemp) * 0.5 + 0.5;
TexCoord.t = doUBinormal. halfAngleTemp) * 0.5 + 0.5:
// "S" Text Coord3; Dot(Light. Normal); LdotN = dotdightTemp. gljtorraal) * 0.5 + 0.5:
}

Координаты источника освещения и направление обзора передаются 15 шейдер приложением как uniform-переменные. В дополнение к стандартным атрибутам вершины - координатам и нормали - приложение передает тангенс и бинормаль для каждой вершины, как описано в предыдущем разделе. Эти два дополнительных атрибута определены с соответствующими именами в данном вершинном шейдере.


⇐ Предыдущая| |Следующая ⇒