Attenuation and Spotlight Factor (Direct3D 9)
Диффузные и спекулярные компоненты освещения в уравнении глобального освещения содержат термины, описывающие освещение и конус в центре внимания. Эти термины описаны ниже.
Аттенуация света зависит от типа света и расстояния между светом и положением вершины. Чтобы вычислить аттенуацию, используйте одно из следующих уравнений.
Atten = 1/( att0i + att1i * d + att2i * d|
Где:
Параметр | Значение по умолчанию | Тип | Описание | Диапазон |
---|---|---|---|---|
att0i | 0.0 | ПЛАВАТЬ | Коэффициент аттенуации констант | От 0 до +бесконечности |
Att1i | 0.0 | ПЛАВАТЬ | Коэффициент линейного аттенуации | От 0 до +бесконечности |
Att2i | 0.0 | ПЛАВАТЬ | Коэффициент аттенуации в квадратичном | От 0 до +бесконечности |
d | N/A | ПЛАВАТЬ | Расстояние от положения вершины до светлой позиции | N/A |
- Atten = 1, если свет является направление света.
- Atten = 0, если расстояние между светом и вершиной превышает диапазон света.
Значения att0, att1, att2 задаются элементами Attenuation0, Attenuation1 и Attenuation2 D3DLIGHT9.
Расстояние между светом и вершиной всегда положительно.
d = | Ldir |
Где:
Параметр | Значение по умолчанию | Тип | Описание |
---|---|---|---|
Ldir | N/A | D3DVECTOR | Вектор направления от позиции вершины до позиции света |
Если d больше диапазона света, то есть член диапазона D3DLIGHT9 структуры, Direct3D не делает дальнейших вычислений аттенуации и не применяет никаких эффектов от света к вершине.
Константы аттенуации действуют как коэффициенты в формуле - вы можете создавать различные кривые аттенуации, делая простые корректировки к ним. Вы можете задать для attenuation1 значение 1.0, чтобы создать свет, который не затеняет, но по-прежнему ограничен диапазоном, или можно поэкспериментировать с различными значениями для достижения различных эффектов аттенуации.
Затенение в максимальном диапазоне света не равно 0,0. Чтобы предотвратить внезапное появление света, когда они находятся в светлом диапазоне, приложение может увеличить диапазон света. Кроме того, приложение может настроить константы аттенуации, чтобы коэффициент аттенуации был близок к 0,0 в диапазоне света. Значение аттенуации умножается на красные, зеленые и синие компоненты цвета света, чтобы масштабировать интенсивность света в качестве фактора расстояния свет перемещается в вершину.
Следующее уравнение указывает фактор внимания.
Параметр | Значение по умолчанию | Тип | Описание | Диапазон |
---|---|---|---|---|
rhoi | N/A | ПЛАВАТЬ | cosine(angle) для внимания i | N/A |
phii | 0.0 | ПЛАВАТЬ | Угол пенумбра в центре внимания i в радианах | [thetai, pi) |
thetai | 0.0 | ПЛАВАТЬ | Угол Umbra в центре внимания i в радианах | [0, pi) |
Спад | 0.0 | ПЛАВАТЬ | Коэффициент падения | (-бесконечность, +бесконечность) |
Где:
rho = норм(Ldcs).норм(Ldir)
и:
Параметр | Значение по умолчанию | Тип | Описание |
---|---|---|---|
контроллеров домена L | N/A | D3DVECTOR | Отрицательное направление света в пространстве камеры |
Ldir | N/A | D3DVECTOR | Вектор направления от позиции вершины до позиции света |
После вычисления затенения света Direct3D также рассматривает эффекты в центре внимания, если это применимо, угол, который свет отражается от поверхности, и отражение текущего материала для вычисления диффузных и спекулярных компонентов для этой вершины. Дополнительные сведения см. в SpotLight.