Краткое описание упрощенного алгоритма

Освещение создаётся при помощи точечного источника. При рендеринге в режиме "без освещения" все объекты считаются освещёнными и теней не отбрасывают.

В случае рендеринга с освещением для каждой прорисовываемой точки выполняется процедура расчета освещения её источником света. Сначала проверяется наличие, пересечения луча из точки в источник света с любым другим объектом из сцены. Если такое пересечение было найдено, то точка не освещена данным источником. Иначе, точка получает прирост освещённости по цвету и интенсивности, зависящий от источника и угла между отрезком и нормалью к треугольнику, которому принадлежит рассматриваемая точка (см. рис.1). Таким образом, создаются тени - области без дополнительного освещения. Для усиления теней рекомендуется выбирать в качестве базовых цветов модели тёмные оттенки, а для источников освещения - более яркие.

 

Рис. 3. Освещенность точки.

P - рассматриваемая точка

N - нормаль к поверхности

Z - вектор, ведущий от рассматриваемой точки к источнику освещения.

Обоснование выбора алгоритма.

Алгоритм трассировки лучей позволяет получить наиболее реалистичные изображения объектов сцены. Одним из свойств алгоритмов трассировки лучей заключается в большой зависимости скорости работы от разрешения экрана. Одним из главных последствий существования этой зависимости стала невозможность осуществления трассировки лучей в реальном времени на старых персональных компьютерах, оснащённых процессорами PentiumII и ниже. Эта константа даже на маленьких разрешениях - 400х300 - полностью съедала всю мощность процессора. Но сейчас этот барьер пройден. [3] Для обеспечения резкого ускорения скорости работы алгоритма необходимо использовать специальные библиотеки арифметических вычислений, оптимизированные под команды SSE. Например, уже достаточно давно доступна библиотека Small Matrix Library от компании Intel. В ней реализован класс матрица и класс вектор. По данным iXBT [3] время выполнения вычислений с учетом использования данной библиотеки на PIII 800EB выглядит следующим образом:

 

Операция SSE/FPU Время выполнения (в тактах процессора)
3x3 * 3x1 FPU 31
3x3 * 3x1 SSE 29
Transpose (3x3) * 3x1 SSE 23
4x4 * 4x1 FPU 53
4x4 * 4x1 SSE 31
Transpose (4x4) * 4x1 SSE 27
3x3 * 3x3 FPU 79
3x3 * 3x3 SSE 59
4x4 * 4x4 FPU 172
4x4 * 4x4 SSE 90
6x6 * 6x1 FPU 113
6x6 * 6x1 SSE 60
6x6 * 6x6 FPU 652
6x6 * 6x6 SSE 307
4x4 * 4x4 (general case) SSE 529
Inverse 4x4 FPU 392
Inverse 4x4 SSE 209
Inverse 6x6 FPU 1118
Inverse 6x6 SSE 600

 

Ускорение получается до двух раз и даже больше. Результаты реализации без применения оптимизированных библиотек так же подчеркивают архитектурные особенности современных компонентов компьютеров, о чем будет сказано позднее. Таким образом, алгоритм трассировки лучей на текущий момент позволяет получить наиболее качественный расчет освещения в сочетании с достаточной скоростью при использовании оптимизированных под SSE библиотек, что и должно явиться следующим этапом развития программного продукта.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: