Без компьютерной графики не обходится ни одна современная программа. Конструкторы, разрабатывая новые модели автомобилей и самолетов, используют трехмерные графические объекты. Важную роль в достижении реалистичности отображаемой сцены играет освещение. Техника трассировки путей моделирует освещение как можно более реалистично. Теоретическая база для предложенной техники приводится в [1], имеется описание и список применений. Статья [2] описывает попытку применения техники в условиях реального проекта. Также в исследовании использовались материалы [3, 4, 5], посвященные тонкостям реализации техники трассировки путей на практике.
Одной из основных функций рендерера является набор поддерживаемых им физических моделей. Все эти модели являются специализацией базового класса BRDF. Каждая модель, определенная в рендерере, принадлежит к одному из следующих семейств:
– рассеяния;
– отражения;
– пропускания.
Первая реализованная модель диффузного семейства также является самой простой: модель Ламберта. Для моделей Орена-Найяра и Торранса-Кука необходимо использовать другой подход. Их уравнения в значительной степени основаны на использовании направлений света в сферических координатах. Для их вычисления обычно требуется изменение системы координат, преобразование этих направлений в касательное пространство с началом в точке пересечения лучей. Таким образом, расчет сферических координат может быть согласованным для каждой точки пересечения и для каждого направления.
Но когда это возможно, лучше полагаться на тригонометрию и векторные операции, чтобы избежать затрат на вычисление преобразования. Вот почему все эти модели реализованы с использованием операций, которые не используют сферические координаты напрямую.
Для измеренной модели BRDF необходим другой подход. Наборы данных индексируются с использованием сферических координат. Вот почему, прежде всего, необходима генерация касательной пространственной оси. Для оси y будет использоваться нормаль в точке пересечения поверхности. Для касательных и битангентных векторов доступны разные подходы. Обычно система координат может быть создана строго из одного вектора, вырезая один из компонентов и инвертируя оставшиеся два. Это было бы хорошим методом для использования, потому что измеренный BRDF, как и все другие диффузные модели, представленные в этом тезисе, являются изотропными, поэтому им не нужно, чтобы тангенс был ориентирован в определенном направлении. Этот полезный метод используется в другой части рендерера, но для измеренной BRDF был исследован другой способ: возможно вычислить перекрестное произведение между нормалью и направлением для получения кандидата касательного вектора, а затем вычислить перекрестное произведение между ним и нормалью, чтобы получить битангенс. Это предпочтительный метод, используемый рендерером для вычисления тангенциального пространства для измеренной модели BRDF и выполнения изменения преобразования координат для направления, чтобы преобразовать их в сферические координаты. Теперь необходимо сделать еще один шаг: прямое считывание выборки из наборов данных, ближайших к сферической координате, полученной из предыдущего расчета, не подходит для визуализации. По этой причине специфические переназначить в сферической системе координат необходимо использовать. Повторное отображение задается следующей формулой (учитывая, что в рендерере y – это ось вверх):
.
Этот переназначение имеет два важных свойства:
– изотропность BRDF учитывается. Это дается Df. Используя этот термин, пары направлений, которые имеют различные значения, могут быть связаны с тем же набором образцов, потому что они находятся на одинаковом расстоянии Df даже если значения f не совпадают. Таким образом, BRDF не зависит от направления касательной;
– взаимность BRDF учитывается.
Последние модели, реализованные в рендерере – это модели отражения и передачи. Они используются вместе, чтобы создать стеклянный материал.
Ключевая особенность трассировщика пути рендеринга заключается в данных, используемых для оценки цвета: все расчеты выполняются с использованием спектральных распределений мощности для материалов объекта и источников света. Значение, полученное для каждого пикселя, затем преобразуется в трехцветные значения, а затем отображается цвет sRGB. Для регулирования общей мощности света в сцене был использован параметр яркости. Также sRGB Гамма-коррекция применяется, как и для другой модели, содержащейся в рендерере, который использует спектральные данные, чтобы лучше декодировать цвета, полученные из спектральных данных.
Рендерер поддерживает несколько типов рендеринга, основанных на различных видах цветовых данных, стандартных RGB или спектральных. Таким образом, существует требование, чтобы средство визуализации имело возможность изменять технику, используемую для визуализации сцены, удобным способом. Это также причина, по которой рендерер должен придерживаться принципа разделения задач, который требует разбиения программного обеспечения на модули, каждый из которых учитывает определенный набор информации и операций. Рендерер состоит из разных модулей, каждый из которых создан для управления определенной частью механизма рендеринга трассировки лучей.
Основным классом, который запускает процесс рендеринга, является SCLT. Он содержит основной цикл общего алгоритма трассировки лучей. Этот цикл проходит через каждый пиксель плоскости обзора и отслеживает текущий луч камеры с помощью экземпляра класса Tracer (рис. 1), чтобы получить цвет пикселя (или части пикселя, в случае рендеринга с сглаживанием) изображения с помощью метода getColor(Ray ray, int bounce), который имеет два параметра: первый – это трассируемый луч, реализованный в классе Ray и описываемый началом и направлением, второй – максимальное количество отскоков, которое разрешено лучу выполнить. Эти отскоки могли быть получены по разным причинам: происходит переход луча между отражающим/преломляющим материалом в модели трассировки лучей Уиттеда или общее число максимально допустимых отказов при трассировке путей. Очевидно, в классе SCLT также есть общие настройки, необходимые для визуализации сцены: определение плоскости вида (ViewPlane класс) и определение камеры (класс Camera).
Рис. 1. Иерархия классов Tracer
Различные виды трассировщика реализуются в визуализаторе, каждый из учета для различных особенностей. Существует базовый класс Tracer, который реализует метод, общий для всей специализации трассировщиков: closestIntersection(Ray ray). Этот метод используется для расчета ближайшего пересечения луча с объектами в сцене. Будет отображаться ближайший объект. Это стандартный метод, общий для всей модели трассировки лучей, реализованной в рендерере. Поэтому он содержится в этом базовом классе.
Существует две специализации класса Tracer, каждая из которых учитывает различные методы цветопередачи: TracerRGB и TracerSpectrum. Как следует из названия, первый используется для рендеринга сцены с использованием стандартных данных RGB, второй – с использованием спектральных данных. Подклассы Tracer реализуют два метода: описанный ранее GetColor(Ray ray, Int bounce) и метод trace(Ray ray, int bounce). Последний – это метод, который выполняет трассировку луча.
Физически основанные модели реализованы как специализация базового класса BRDF (рис. 2). Что касается компонента трассировки и шейдинга, добавление новой модели BRDF требует только создания нового класса.
По умолчанию рендерер поддерживает следующие физически основанные модели BRDF:
– ламбертианский;
– Орена-Найяра;
– зеркальное отражение;
– зеркальная передача;
– Торранса-Кука.
Поскольку основной задачей визуализатора является отрисовка спектральной сцены, все модели BRDF реализованы с поддержкой только спектральных данных.
Различные BRDF связаны в MaterialBRDF класс для создания разных видов материала. Там также MaterialRGB класс, используемый в сцене RGB. Все они являются специализацией класса Material.
Предыдущие компоненты используют данные, взятые из класса Scene, который содержит определение сцены с информацией о трассировщике и модели затенения, которые будут использоваться во время рендеринга. TracerModelFactory и ShadingModelFactory создают экземпляр модели трассировки и затенения, определенной в описании сцены. В SCLT есть один экземпляр класса Scene, основанный на выборе пользователя, который передается как указатель через все ранее просмотренные классы, которые в этом нуждаются.
Рис. 2. Иерархия классов BRDF
Вся представленная структура была определена с акцентом на то, чтобы визуализатор был «подключаемой и расширяемой системой»: было бы легко добавить новые трассировщики или модели шейдинга в качестве специализации базовых классов, представленных ранее.
Для моделей затенения есть базовая модель ShadingModel. Этот класс расширен двумя специализациями, ShadingRGBModel и ShadingSpectrumModel. Все модели затенения, реализованные в рендерере, должны расширять один из этих классов, чтобы объявить о своей поддержке RGB или спектральных данных.
Рендерер поддерживает следующие модели затенения, каждый из которых реализуется своим классом. Whitted – класс, который реализует трассировку лучей Уиттеда с использованием эмпирических моделей BRDF Фонга/Блинна-Фонга и данных RGB. WhittedBRDF – класс, который реализует трассировку лучей Уиттеда, используя физически корректные BRDF и спектральные данные. PathBRDF – класс, который реализует модель трассировки пути, используя, как и в случае с WhitedBRDF.
Библиографическая ссылка
Перевалов С.С., Данилов Е.А. ИССЛЕДОВАНИЕ ТЕХНИКИ СПЕКТРАЛЬНОЙ ТРАССИРОВКИ ПУТЕЙ // Научное обозрение. Педагогические науки. – 2019. – № 3-2. – С. 66-70;URL: https://science-pedagogy.ru/ru/article/view?id=1958 (дата обращения: 30.12.2024).