Затухание и фактор 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.

Математика освещения