Понятие каустика пришло в графику из физики. На основании закона Снелла, лучи света преломляются света при переходе из одной среды в другую (например из воздуха в воду). Часть лучей при этом отклоняются от первоначальной траектории и рассеиваются, часть же из них фокусируются на малых участках. Благодаря этому эффекту в зоне максимальной концентрации преломленных лучей на поверхности проявляются красочные узоры. Именно эти узоры и являются каустикой. Это явление наблюдается практически везде, например радуга, отражение на дне посуды и др.
Каустика позволяет значительно улучшить визуализацию полупрозрачных и прозрачных объектов. К сожалению, реализация этого эффекта для игр чрезвычайно сложная (с точки зрения вычислений), но вполне применима для создания заставок типа скринсейверов и различных демонстраций.
Создание эффекта происходит в четыре этапа, включая финальную прорисовку. На первом этапе необходимо получить площадки геометрии объекта, на которые будет проецироваться каустика, т.е. прорисовка, с положения источника света, принимающей площадки (без фиксации в цвете). Второй этап заключается в записи положения объектов светопреломления и их нормали. На третьем этапе происходит расчет карты каустики, при котором в основном используется вершинный шейдер, т.е. определяются площадки пересечения луча с геометрией объекта. Финальная стадия прорисовки заключается в проективном наложении полученной расчетной каустической текстуры на геометрию объекта.
Данный метод можно сравнить частично с техникой фотонных карт и техникой теневых карт. Все эти методы основаны на эмиссии светового потока – луча, и дальнейшем вычислении его траектории преломлений на границе прозрачной структуры. Далее определяется пересечение луча с геометрией объекта и сохраняем его положение в текстуру. Таким образом рассчитывается положение необходимого числа лучей и получается текстура, в которой содержится каустический узор. Затем полученная текстура накладывается на геометрию объекта.
Стоит заметить, что в сети существует множество демок, в которых изложен программный код в.у. процедур, а также дополнительные модули к ним. Также обращаем Ваше внимание, что не все видеокарты поддерживают геометрические шейдеры. Вследствие чего на некоторых видеокартах возникают некорректности, например стекло рисуется исключительно черным с бликами.
|
|
||||||||
|
|
||||||||