Затухание и фактор spotlight (Direct3D 9)
Компоненты рассеянного и зеркального света глобального уравнения света содержат термины, описывающие затухание света и конус вспышки. Эти термины описаны ниже.
Затухание
Затухание света зависит от типа света и расстояния между светом и положением вершины. Чтобы вычислить затухание, используйте одну из следующих формул.
Atten = 1/( att0i + att1i * d + att2i * d²)
Где:
Параметр | Значение по умолчанию | Тип | Description | Диапазон |
---|---|---|---|---|
att0i | 0,0 | FLOAT | Константный коэффициент затухания | от 0 до +∞ |
att1i | 0,0 | FLOAT | Линейный коэффициент затухания | от 0 до +∞ |
att2i | 0,0 | FLOAT | Квадратический коэффициент затухания | от 0 до +∞ |
d | Н/Д | FLOAT | Расстояние от положения вершины до положения света | Н/Д |
- Atten = 1, если свет является направленным светом.
- Atten = 0, если расстояние между светом и вершиной превышает диапазон света.
Значения att0, att1, att2 задаются элементами Attenuation0, Attenuation1 и Attenuation2 элемента D3DLIGHT9.
Расстояние между светом и положением вершины всегда положительное.
d = | Ldir |
Где:
Параметр | Значение по умолчанию | Тип | Описание |
---|---|---|---|
Ldir | Н/Д | D3DVECTOR | Вектор направления от положения вершины до положения света |
Если значение d больше диапазона света, то есть элемент Range структуры D3DLIGHT9 , Direct3D не выполняет дальнейших вычислений затухания и не применяет никаких эффектов от света к вершине.
Константы затухания функционируют в качестве коэффициентов в формуле: можно создать несколько кривых затухания, внеся в них простые коррективы. Можно настроить значение Attenuation1 равным 1,0, чтобы создать свет, который не затухает, но все равно ограничен диапазоном. Либо можно экспериментировать с разными значениями для достижения разных эффектов затухания.
Затухание в максимальном диапазоне света не равно 0,0. Чтобы не допустить случайного отображения света при нахождении в диапазоне света, приложение может увеличить диапазон света. Либо приложение может настроить константы затухания так, чтобы коэффициент затухания был близок к 0,0 в диапазоне света. Значение затухания умножается на компоненты красного, зеленого и синего цветов света, чтобы регулировать интенсивность света как коэффициент расстояния, которое свет проходит до вершины.
Коэффициент вспышки
Следующее уравнение задает коэффициент вспышки.
Параметр | Значение по умолчанию | Тип | Description | Диапазон |
---|---|---|---|---|
rhoi | Н/Д | FLOAT | cosine(угол) для i света | Н/Д |
phii | 0,0 | FLOAT | Угол мягкого затенения вспышки i в радиусе | [thetai, pi) |
thetai | 0,0 | FLOAT | Угол полной тени вспышки i в радиусе | [0, пи) |
снижение | 0,0 | FLOAT | Коэффициент снижения | (-∞ + ∞) |
Где:
rho = norm(Ldcs).norm(Ldir)
and:
Параметр | Значение по умолчанию | Тип | Описание |
---|---|---|---|
Ldcs | Н/Д | D3DVECTOR | Отрицательное значение направления света в пространстве камеры |
Ldir | Н/Д | D3DVECTOR | Вектор направления от положения вершины до положения света |
После вычисления затухания света Direct3D также учитывает эффекты прожектора, если это применимо, угол, который свет отражает от поверхности, и отражание текущего материала для вычисления диффузных и зеркальных компонентов для этой вершины. Дополнительные сведения см. в разделе SpotLight.
Связанные темы