В современных графических системах важную роль играет высокая скорость отображения. Для увеличения скорости работы системы следует оптимальным образом выбирать размер отображаемых данных. Особенно актуальна данная проблема при моделировании таких оптических явлений, как преломление или отражение света в реальном времени. В этих случаях, в основном, применяется технология, использующая кубические карты. На динамически-изменяющихся сценах отражающие объекты, на которые накладываются кубические карты, могут менять свой размер в кадре, а потому сложно заранее выбрать необходимое разрешение карты для отображения и приходится изменять его во время работы.
Содержание работы
Кубическая карта — это текстура определённого разрешения, в которую производится рендеринг сцены. Затем эта текстура накладывается на поверхность некоторого объекта, имитируя тем самым отражение окружающей обстановки. Время подготовки кубической карты прямо пропорционально её разрешению [3]. При этом большое разрешение требуется только в том случае, если велик размер отражающего объекта в кадре (в этом случае отражение в его поверхности будет должно казаться пользователю более детализированным). Если же объект занимает в кадре немного места, кубическая карта для него может иметь меньшее разрешение без потери общего визуального качества картинки.
Для адекватного измерения размера объекта на экране необходимо знать размер модели в координатах трёхмерного пространства и преобразования, которые совершаются над моделью.
Для определения фактического размера модели в трёхмерном пространстве вводится специальный объект, называемый ограничивающим параллелепипедом [2]. Этот параллелепипед описывается около модели и заменяет её во всех дальнейших расчётах. Использование объекта простой формы, аппроксимирующего исходную модель, позволяет снизить сложность дальнейших вычислений занимаемого пространства. Параллелепипед позволяет с достаточной точностью аппроксимировать широкий класс трёхмерных объектов. Для поиска ограничивающего параллелепипеда при загрузке модели выделяются максимальные и минимальные координаты её вершин, а затем параллелепипед строится таким образом, чтобы его грани содержали в себе найденные координаты.
Над найденным объектом следует провести такую последовательность преобразований, которая была бы эквивалентна стандартным преобразованиям конвейера OpenGL [4], сводящихся к последовательному применению матриц.
Каждая вершина параллелепипеда преобразуется в тот вид, который соответствует сцене и положению камеры. Преобразование описывается формулой, , (1)где обозначение obj показывает исходные координаты объекта, а обозначение eye показывает преобразованные с учетом видовых трансформаций.
Далее производится преобразование проекции, которое происходит по формуле , (2)где clip обозначает координаты объекта с учетом используемой проекции.
Необходимо перейти от однородных координат к трехмерным. Для этого каждая компонента полученного вектора делиться на его последнюю компоненту, , (3)где обозначение nds обозначает нормализованные координаты объекта.
И, наконец, необходимо спроецировать полученный объект в окно просмотра, для этого используется следующее преобразование:, (4)где x, y, w, h, n, f это параметры вызовов процедур glViewport(x, y, w, h), glDepthRange(n, f), то есть размер порта просмотра и диапазон глубин сцены [1].
Спроецировав на экран все вершины ограничивающего параллелепипеда, можно найти минимальную прямоугольную область, включающую в себя полученные точки. Она с некоторой погрешностью (в большинстве случаев – достаточно малой) будет соответствовать области, занимаемой на экране исходным объектом. Следовательно, будет определено, сколько пикселей он способен отобразить. На основе этого делается вывод о размере кубической карты.
При каждой отрисовке объекта менять размер кубической карты не оптимально, так как само по себе выделение видеопамяти под карту нового размера имеет ощутимые накладные расходы, поэтому для повышения эффективности введена шкала (диапазон значений), которая описывает возможные значения размера карты. Если размер объекта вышел за допустимые границы, необходимо изменить размер карты, иначе оставить старым. В данной работе для генерации шкалы используется заданный максимальный размер кубической карты. Каждый отрезок шкалы соответствует 10% максимального размера. Т. е. первый отрезок 10-20%, второй 20-30%, третий 30-40% и т. д.
Необходимо убедиться, что адаптивная карта увеличивает производительность системы. Для этого было проведено тестирование на эквивалентных сценах, но, в первом случае, с фиксированным размером карты, а во втором с адаптируемым. Изменяемая величина – количество кадров в секунду.
Для этого был произведен ряд тестов, результаты которого сведены в таблицу 1.
Таблица 1. Тестирование |
||
Тип сцены |
Количество кадров в секунду |
|
Фиксированный размер карты |
Адаптивный размер карты |
|
Сцена без отражения |
1116 |
1132 |
Сцена с преломлением |
1101 |
1116 |
Сцена с простым отражением |
1061 |
1064 |
Сцена с физически точным отражением |
986 |
1014 |
Сцена с отражением с использованием модели Кука-Торренса |
771 |
779 |
Сцена с совмещением отражения и преломления |
974 |
995 |
Сцена с совмещением отражения и преломления при использовании модели Кука-Торренса |
709 |
713 |
Тестирование производилось с использованием максимально простой сцены, поэтом результаты отличаются не сильно. На сложный сценах разница будет увеличиваться за счет увеличения числа вершин, а следовательно, суммарного времени работы шейдеров.
Технические характеристики компьютера, на котором производилось тестирование: Intel Core i7-3770 3.4GHz / PCI-E Sapphire AMD Radeon HD7770 1024MB 128bit / DIMM DDR3 4096MB PC10666 1333Mhz / Microsoft Windows 7.
Библиографический список
Рост Р. Дж. OpenGL. Трехмерная графика и язык программирования шейдеров. Для профессионалов. СПб.: Питер, 2005. – 428 с.: ил.
Боресков А. В. Графика трёхмерной компьютерной игры на основе OpenGL. М.: Диалог-Мифи, 2004. 383 с.
Горнаков С.Г. Инструментальные средства программирования и отладки шейдеров в DirectX и OpenGL. СПб.: БХВ-Петербург, 2005. 266 с.: ил.
Райт, Ричард С.-мл., Липчак, Бенжамин. OpenGL. Суперкнига, 3-е издание. : Пер. с англ – Издательский дом «Вильямс», 2006. – 1040с.: ил.
Научный руководитель: аспирант кафедры МОВС ПГНИУ, К.В. Рябинин.