Skip to main content

Что такое тень OpenGL®?

Тень Open Graphics Library® (OpenGL®) - это визуальное приближение в трехмерной (3D) сцене OpenGL® того, как тень будет отбрасываться в реальной жизни при аналогичных условиях освещения. Тени - это сложная визуальная функция, которая реализуется в OpenGL®, в основном потому, что нет встроенной поддержки отбрасывания теней в сцене. Вместо этого существует множество методов, которые можно использовать для создания теней от объектов и геометрии в сцене с использованием различных инструментов, таких как различные доступные буферы, шейдеры и, в некоторых случаях, расширения, которые предоставляют доступ к специальным функциям на определенной графике. открытки. В большинстве случаев качество, точность и скорость рендеринга теней OpenGL® напрямую связаны с вычислительной мощностью и памятью графического оборудования, присутствующего в компьютере или устройстве. Некоторые из наиболее популярных методов реализации тени OpenGL® включают теневые объемы, отображение теней и трассировку лучей.

Создание приложения с поддержкой теней OpenGL® требует математических знаний и глубокого понимания работы OpenGL®. OpenGL® в основном используется для создания 3D-сцен, которые динамичны и визуализируются в режиме реального времени, поэтому алгоритмы, используемые для создания теней, должны быть не только оптимизированы по скорости, но также должны быть тщательно измерены с точки зрения их потребления ресурсов и любых сбоев, может быть вызвано в графическом конвейере, используемом для рендеринга. По этим причинам самый основной метод создания тени, называемый трассировкой лучей, часто нецелесообразен для полноценных 3D-сцен, поскольку он может занимать очень много времени.

Трассировка луча в основном следует за воображаемой линией, или лучом, от плоскости наблюдения или положения камеры через сцену к поверхности объекта, а затем вычисляет цвет поверхности на основе положения одного или нескольких источников света и других факторов. В процессе растеризации, когда трехмерная сцена рисуется на двумерной (2D) поверхности, чтобы ее можно было отобразить, процесс трассировки лучей должен выполняться для каждого рисуемого пикселя и, особенно для текстур или других объектов. свойства поверхности, возможно, придется оценивать одни и те же пиксели несколько раз. Это означает, что трассировка лучей в режиме реального времени, хотя она будет точно отображать тени, обычно нецелесообразна.

Другой метод, который можно использовать для создания тени OpenGL®, известен как отображение теней. Этот метод использует буфер глубины или трафарета для рендеринга сцены под углом источника света в виде серии расстояний от источника света до поверхностей различных объектов в пределах сцены. Затем сцена визуализируется второй раз с правильного угла обзора, проверяя, попадает ли каждый пиксель в определенный диапазон расстояний в буфере, указывая, является ли пиксель светлым или затененным. Использование теневого сопоставления может потребовать много памяти, а в сценах с несколькими источниками света может потребоваться создание нескольких карт под разными углами.

Теневые тома - это способ создания тени OpenGL®, который более точен, чем некоторые другие методы, но в нем есть свои проблемы. Объем тени по существу является невидимым фрагментом геометрии в сцене, которая расширяется от освещенной поверхности объекта вдали от источника света. Этот объем можно проверить по отношению к другим объектам, чтобы увидеть, попадают ли они в тень поверхности, с которой возник этот объем. Эта процедура может быть очень сложной и в конечном итоге создавать визуальные артефакты при оптимизации по скорости.