© ЮУрГУ, 18.01.2016. Кафедра системного программирования Дата последнего изменения: 18 января 2016 г. Модель вариантов использования программного комплекса трассировки лучей для вычислительных систем на базе процессоров Cell Технический отчет CellRT01 Д.Н. Гордеева В данном документе содержится модель вариантов использования программного комплекса CellRT, предназначенного для получения реалистичных изображений. Приведены диаграммы вариантов использования и сценарии использования каждого варианта. 1. Введение Программный комплекс CellRT предназначен для получения реалистичных изображений при помощи алгоритма трассировки лучей, адаптированного для вычислительных систем на базе процессоров Cell. Прямая трассировка лучей (см. рис. 1) заключается в повторении на компьютере всех геометрических преобразований траектории светового луча на пути «источник – объект – приемник» с учетом таких световых эффектов, как отражение и преломление света. L N S α O L – источник света О – геометрический объект S – приемник (глаз наблюдателя) α – угол между нормалью к поверхности объекта и источником света N – нормаль к поверхности объекта p – преломленный луч P Рис. 1. Схема прямой трассировки лучей В случае обратной трассировки, схема которой представлена на рис. 2, лучи отслеживаются на пути «приемник – объект – источник». При этом количество лучей равно числу пикселей в изображении, что позволяет исключить затраты на обработку лучей, не влияющих на формирующееся изображение [2, 3]. Схема обратной трассировки представлена. © ЮУрГУ, 2009. Кафедра системного программирования Дата последнего изменения: 18 января 2016 г. L – источник света О – геометрический объект S – приемник (глаз наблюдателя) N – нормаль к лучу L P S O Рис. 2. Схема обратной трассировки лучей 2. Математическая модель В реализации комплекса CellRT используется метод обратной трассировки лучей. При вычислении интенсивности значения цвета в точке нами накладываются следующие ограничения. 1. Источник света L рассматривается как материальная точка (его размерами можно пренебречь), поскольку в этом случае для вычисления цвета пикселя достаточно трассировки только одного луча [1]. 2. Из рассмотрения исключаются преломленные лучи (луч P на рис. 2). 3. Не учитывается эффект затухания. 4. Цвет объекта сцены считается суммой диффузной и зеркальной составляющих. Данные ограничения позволяют существенно сократить время обработки изображения без значительных потерь в качестве. В основе предлагаемой модели лежит метод Фонга [4] вычисления интенсивности света в точке. Таким образом, нами получена следующая формула расчета каждой из составляющих цвета в точке: I I k I k cos ,0 a a 1 d 2 (1) где: I i — интенсивность каждой из световых координат источника света L; k d – коэффициент диффузного отражения поверхности геометрического объекта; I a – интенсивность зеркального света источника L; ka – коэффициент зеркального отражения поверхности геометрического объекта; – угол между нормалью N к точке касания луча, испущенного из приемника, и объекта и лучом, идущим к источнику света L. 2 © ЮУрГУ, 2009. Кафедра системного программирования Дата последнего изменения: 18 января 2016 г. 3. Алгоритмы вычисления цветовых координат Вычисление значения интенсивности каждой из цветовых координат пикселя осуществляет функция colorCoord. Типы данных, используемые для вычислений, представлены на рис. 3 // Координаты объекта в трехмерном пространстве typedef struct { int x; int y; int z; } coordinate_t; // Геометрический объект typedef struct { tcoordinate coord; // координаты объекта ttype type; // тип объекта float kdiff;// коэффициент диффузного отражения поверхности float kmirr;// коэффициент зеркального отражения поверхности } object_t; // Источник света typedef struct { coordinate_t coord; // координаты источника света float kdiff;// интенсивность диффузного света float kmirr;// интенсивность зеркального света } light_t; // Камера typedef coordinate_t camera_t; Рис. 3. Типы данных Интерфейс функции colorCoord показан на рис. 4. // Вычисление цветовых координат пиксела // Параметры: // pixel – координаты пиксела // Возвращает – интенсивность световой координаты int colorCoord(coordinate_t pixel); Рис. 4. Интерфейс функции colorCoord Структура функции colorCoord показана на рис. 5. ColorCoord existCross getShadowRay getMirrRay isShadow Рис. 5. Модульная структура функции colorCoord Интерфейсы функций existCross, getShadowRay, getMirrRay и isShadow представлены на рис. 6. 3 © ЮУрГУ, 2009. Кафедра системного программирования Дата последнего изменения: 18 января 2016 г. // Нахождение объекта, имеющего хотя бы одну точку пересечения с заданным лучом // Параметры: // Ray – координаты луча от камеры до пиксела // Возвращает Obj – объект, который пересекает заданный луч, если объекта не существует, то значение равно NULL bool existCross(coordinate_t Ray, object_t Obj); Рис. 6. Интерфейс функции existCross // Получение теневого луча от геометрического объекта Obj до источника света light. // Параметры: // light – источник света // Obj – объект, от которого испускается теневой луч // Возвращает coordinate_t getShadowRay(object_t Obj, light_t light); Рис. 7. Интерфейс функции getShadowRay // Определение, является ли источник света light невидимым // Параметры: // (IN)light_t light – источник света bool isShadow(light_t light); Рис. 8. Интерфейс функции isShadow // Функция возвращает луч, отраженный от геометрического объекта Obj. Отраженный луч строится согласно законам геометрической оптики. // Параметры: // (IN)coordinate_t Ray – падающий луч // (IN)object_t Obj – объект, от которого испускается отраженный луч coordinate_t getShadowRay(object_t Obj,coordinate_t Ray); Рис. 9. Интерфейс функции colorCoord Псевдокод функции colorCoord() представлен на рис. 7. / Функция вычисляет интенсивность одной из световых координат пикселя // Ray - луч от камеры до пикселя // R - множество геометрических объектов сцены // Scene - изображение float colorCoord(Ray) { result = Pixel.background; if (!existCross(Ray, Obj from R)){ return result; } else { for each Light in L{ shadowRay = getShadowRay(Obj); if ((existCross(ShadowRay, Scene)) && (isShadow(Light))){ return result; } else { result = result + Light.Idiff*Obj.diff + Light.Mirr*Obj.Mirr; } 4 © ЮУрГУ, 2009. Кафедра системного программирования Дата последнего изменения: 18 января 2016 г. } } if (Obj.Mirr != 0) { mirrRay = getMirrRay(Obj); result = result + Obj.Mirr * colorCoord(mirrRay); } return result; } Рис. 7. Псевдокод функции colorCoord Псевдокод функции existCross() представлен на рис. 8. // Функция проверяет, пересекает ли луч какой-либо из геометрических объектов сцены // Параметры: // (IN)Ray – луч // (OUT)Obj – геометрический объект из всего множества объектов bool existCross(Ray, Obj) { for each Object in R { switch (Object.type) { case 0: { // сфера float A = Object.X*Object.X + Object.Y*Object.Y + Object.Z*Object.Z; // вычисляется согласно матем.модели float B; // вычисляется согласно матем.модели float С; float D = B * B - 4 * A * C; if (D < 0) continue; else { Obj = Object; return TRUE; } break; } case 1: { // плоскость float COS; if (COS == 0) { Obj = Object; return TRUE; } else continue; break; } } } } Рис. 8. Псевдокод функции existCross 4. Диаграмма вариантов использования На рис. 9 представлена диаграмма вариантов использования программного комплекса. 5 © ЮУрГУ, 2009. Кафедра системного программирования Дата последнего изменения: 18 января 2016 г. Рис. 9. Диаграмма вариантов использования комплекса Далее описаны сценарии вариантов использования. 3.1. Вариант использования «Установить параметры» Позволяет задать входные данные для запуска программы. Вариант использования начинает свою работу при выборе пользователем пункта меню «Установка параметров» (см. Приложение 1). Поток событий состоит из следующих шагов. 1. Пользователь устанавливает необходимые значения входных данных и нажимает кнопку «Сохранить». 2. Система выполняет проверку корректности входных данных. 3. Входные данные сохраняются в файл настроек CellRTconf.cfg (формат файла настроек приведен в Приложении 2). 4. Вариант использования завершается. Возможен альтернативный поток событий, который возникает, если на шаге 1 пользователь указывает некорректные данные. В таком случае на шаге 2 система выдаст сообщение об ошибке с текстом «Входные данные некорректны», и вариант использования завершается. 3.2. Вариант использования «Запустить» Осуществляет запуск программы с ранее установленными параметрами. Вариант ис- пользования начинает работу, когда пользователь активирует функцию «Выполнить». Для успешного выполнения варианта использования необходимо, чтобы был выполнен вариант использования «Установить параметры». 1. Поток событий состоит из следующих шагов. Пользователь выбирает пункт меню «Запуск» (см. Приложение 1). 2. Система загружает входные данные и настройки из файла CellRTconf.cfg. 6 © ЮУрГУ, 2009. Кафедра системного программирования Дата последнего изменения: 18 января 2016 г. 3. Выполняется трассировка. 4. Вариант использования завершается. 3.3. Вариант использования «Просмотреть результат» Осуществляет просмотр изображения, полученного в результате работы программы, и времени получения изображения. При этом необходимо, чтобы был выполнен вариант использования «Запустить». Вариант использования начинает работу после завершения вычислений и сохранения полученного изображения. Поток событий состоит из следующих шагов. 1. Пользователь активирует функцию «Просмотреть результат». 2. Система загружает файл с полученным в результате расчета изображением. 3. Система выводит на экран сообщение, в котором содержится время расчета изображения. 4. Вариант использования завершается. Литература 1. Адинец А. Современные проблемы интерактивной визуализации глобального освещения // Компьютерная графика и мультимедиа. Выпуск №1(5)/2003. URL: http://cgm.computergraphics.ru/content/view/50 (дата обращения 08.11. 09) 2. Badouel D., Bouatouch K., Prio, T. Distributing Data and Control for Ray Tracing in Parallel // IEEE Comput. Graph. Appl. 14, 4 (Jul. 1994), p. 69-77. 3. Cook R.L., Porter T., Carpenter L. Distributed ray tracing // Computer Graphics (Proceedings of SIGGRAPH 1984) 18 (3). 4. Гилой В., Расселер Г. Новые стандарты высокореалистичного рендеринга в реальном времени // Открытые системы, №5(13), 1995, 35-44. 7 © ЮУрГУ, 2009. Кафедра системного программирования Дата последнего изменения: 18 января 2016 г. Приложение 1. Пользовательский интерфейс Рис. 1. Главная страница Рис. 2. Установка параметров 8 © ЮУрГУ, 2009. Кафедра системного программирования Дата последнего изменения: 18 января 2016 г. Приложение 2. Формат файла CellRTconf.cfg Файл CellRTconf.cfg представляет собой текстовый файл, в котором построчно записаны параметры трассировки. Файл Семантика параметров Image.jpg Имя файла с исходным изображением LNUM Число источников света (1..n) camX, camY, camZ Положение камеры light1x, light1y, light1z, R1diff, Данные о каждом из LNUM источников света: координаты, интенсивность световых коордиG1diff, B1diff, R1mirr, G1mirr, нат B1mirr DEPTH Число геометрических объектов Данные о каждом геометрическом объекте: тип фигуры, координаты, оптические свойства поверхности Глубина трассировки (1..5) SPE_THREADS Число задействованных SPE (1..8) OBJNUM obj1type, obj1x, obj1y, obj1z, k1diff, k1mirr 9