77218

Создание физически-корректного дождя и сопутствующих эффектов

Курсовая

Информатика, кибернетика и программирование

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

Русский

2015-02-02

5.78 MB

4 чел.

Санкт-Петербургский государственный университет

математико-механический факультет

кафедра системного программирования

Создание физически-корректного дождя и сопутствующих эффектов

Курсовая работа студента 445 группы

Шевченко Андрей Игоревича

Научный руководитель

Пименов Александр Александрович

 

Оценка

Санкт-Петербург

2009

Введение

В современной компьютерной графике реального времени, часто возникает потребность в визуализации открытых пространств. В отличие от закрытых помещений, при визуализации пространств под открытым небом необходимо учитывать множество разных природных факторов и явлений. Например, это может быть освещение от неба, солнечный свет, эффект, получивший название, воздушная перспектива, и прочие.  Существует также ряд явлений, таких как снег, дождь и т.п. Основная проблема, которая возникает при визуализации этих явлений – это необходимость создания некоторых сопутствующих эффектов, без которых ваш 3D-мир не будет выглядеть реалистичным. Так, например, для визуализации дождя необходимо не только, собственно, рисовать сами струи, но также и брызги капель, glow и множество других различных эффектов.

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

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

Реализация дождя в реальном времени

Прежде чем приступить к описанию различных подходов к визуализации дождя, следует описать, какие различные физические эффекты сопровождают дождь и как нам следует их учитывать.

  1.  Персистенция зрения. Этот эффект напрямую не связан с дождем, но, тем не менее, оказывает сильнейшее воздействие на то, каким мы его видим.  Широко распространенно мнение, что капля дождя имеет форму слезы или форму полоски. Оба этих мнения ошибочны. На самом деле капля дождя выглядит больше похожей на эллипсоид. Маленькие капли почти сферические, в то время как большие приплюснуты снизу. Такая форма капель вызвана двумя противодействующими силами. С одной стороны, поверхность стремится минимизировать контакт с воздухом и в результате появляется сферическая форма, с другой, аэродинамическое давление стремится вытянуть каплю в горизонтальной плоскости, результатом чего и является эллиптическая форма. В тоже время, если сделать фотографию дождя, то капли будут выглядеть как полоски. Это связано со скоростью затвора камеры. Когда затвор открыт, капля падает на несколько сантиметров ниже.  Этот эффект получил название motion blur в кинематографе и фотографии.  Человеческий глаз работает иначе, но итоговый результат получается такой же. В тот момент, когда изображение формируется на сетчатке, требуется от 60 до 90 миллисекунд, чтобы оно полностью исчезло. За это время капля продолжает падать, и все ее различные позиции комбинируются в непрерывную полоску на сетчатке. Это и есть персистенция зрения.
  2.  Преломление и отражение. Как и любая водная поверхность, поверхность капель дождя преломляет и отражает свет. Для достижения большей реалистичности это следует учитывать.

Существует множество различных подходов к визуализации дождя. Условно их можно разделить на две категории. Абсолютно физически-корректная модель дождя с использование известных формул. Этот подход хорош, с точки зрения результата, но, к сожалению, в компьютерной графике реального времени пока не применим из-за высокой стоимости вычислений. Большинство же интерактивных приложений используют другой подход. Дождь – обычная система частиц, где каждая частица полупрозрачная белая полоска. Следует сказать, что, несмотря на то, что этот метод не является реалистичным с точки зрения физических законов, он создает ощущение дождя для пользователя приложения.

В курсовой был реализован принципиально другой подход. Идеи этого подхода взяты из [1].  Подход заключается в следующем. Художники рисуют специальную текстуру дождя, которая может выглядеть примерно так:

Рисунок  - текстура дождя

Эта текстура, обычно, достаточно большого размера, например 512*512 пикселей. Как видно из примера текстуры, персистенция зрения в ней уже учтена, и в дальнейшем нам не требуется никаких вычислений с ней связанных. Также по этой текстуре генерируется карта нормалей.

Рисунок  - карта нормалей дождя

Эта карта нам потребуется в дальнейшем для вычислений преломления и отражения. Для визуализации дождя рисуется полноэкранный прямоугольник, на который накладывается, собственно, текстура дождя с соответствующими вычислениями. Во-первых, происходит скроллинг текстуры с течением времени. Тем самым создается иллюзия движения дождя. Когда была реализована эта идея, обнаружилось, что повторность слишком очевидна. И одного слоя дождя недостаточно. Это связано с эффектом параллакса: дальние объекты визуально двигаются медленнее, чем объекты, находящиеся в непосредственной близости.  Результатом стал переработанный алгоритм. Рисуется четыре полноэкранных прямоугольника, находящихся на разном расстоянии от наблюдателя. У первого z-координата равна 0, у второго 0.985, у третьего 0.995 и у последнего 0.999. Эти прямоугольники рисуются от дальнего к ближнему. Важно то, что параметры визуализации, а именно параллакс, различны для разных прямоугольников. Итоговая позиция текселя рассчитывается следующим образом

 

Здесь rain_bias – параметр, корректирующий позицию дождя относительно предыдущего кадра. Таким образом, я добился того, что дальние слои движутся с меньшей скоростью, чем ближние. А также визуального объема дождя. Тем самым, существенно увеличив реалистичность движения дождя.  Также следует сказать, что точно такие же текстурные координаты используются для карты нормалей дождя.

Вычисление отражения и преломления для каждого слоя

Для вычисления отражения и преломления применена техника визуализации сцены в кубмап. Кубмап – особый вид текстуры, функция цвета относительно направления. Сцена рисуется 6 раз (в каждую из граней кубмапа), используется ортографическая проекция с углом раствора камеры 90 градусов. Для реализации отражения необходимы нормаль к капле, вектор вида камеры.

 

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

Также вычисляется бликовая составляющая, контролируемая извне параметром, задающим силу спекуляра.

 

Для вычисления преломления используются свойства сред. Капля считается плоской. А значит, мы считаем, что луч преломляется только один раз. Для вычисления направления этого преломления

 

Аналогично, цвет вычисляется при помощи кубмапа.

Также вычисляется коэффициент Френеля. Этот коэффициент показывает, какую долю составляет отраженная часть, и какую преломленная.

 

Результирующий цвет получается как

 

Следует отметить, что результирующий цвет, также, контролируется извне при помощи параметров bias и contrast. Задающих, соответственно, насколько прозрачен дождь и контраст между дождем и окружающей средой. Все эти параметры выставляются отдельно для каждого слоя. Вычисления происходят в пиксельном шейдере.

Собираем слои вместе

Сначала визуализируется вся сцена кроме дождя. Затем начинаем рисовать дождь. Визуализируем слои от самого дальнего к самому ближнему. Для каждого вычисляем все описанное выше. Полученный результат блендится с тем, что уже есть в заднем буфере.

Рисунок  - пример визуализации сцены

Реализация сопутствующих эффектов

Glow

Этот эффект заключается в свечении вокруг ярких объектов на сцене. Его можно наблюдать практически всегда на улице вечером, когда включают уличное освещение. Добавление glow существенно улучшает реалистичность сцены. Для сравнения отрендеренная сцена с glow и без него.

Рисунок  – слева glow выключен, справа - включен

Рисунок  - влияние glow на объекты в сцене

Алгоритм реализующий этот эффект является многоступенчатым. Исходно мы рисуем всю сцену, включая дождь, как было описано в предыдущих пунктах, в текстуру. Эта текстура передается в шейдер, усредняющий значение цвета в блоке 2*2, и результатом этой процедуры является новая текстура в два раза меньше исходной по каждой стороне. Делаем несколько таких проходов. В итоге, получаем текстуру в 8 раз меньше исходной по каждой стороне. Цвет каждого пикселя уменьшаем на некоторую пороговую величину. Порог контролируется извне. Применяем фильтр Гаусса 7*7 для размытия текстуры.

Этот фильтр применяется дважды. Сначала происходит горизонтальный проход, потом вертикальный.

 

Где с1 это пиксель, обрабатываемый в данный момент в пиксельном шейдере, а остальные распределяются так

С6

С3

С2

С1

С4

С5

С7

Для горизонтального прохода.

И транспонированная таблица для вертикального прохода.

Полученная текстура смешивается с текстурой сцены по формуле

 

Где glare_power – параметр, переданный из приложения.

Все вычисления производятся на видеокарте.

Это пример работы алгоритма.

Рисунок  - поэтапный пример того, как glow применяется к сцене

    

Рисунок  - итоговый результат

Мокрые поверхности

Существуют две основные причины, по которым поверхности выглядят иначе, когда они мокрые.

  1.  Вода на поверхности. Примером таких поверхностей может служить асфальт.

Рисунок  - преломление и отражение лучей света при соударении с водой на поверхности

Для визуализации таких поверхностей можно использовать систему похожую на ту, которая уже была использована при расчете отражений и преломлений для дождя. Единственное отличие, необходимо учитывать как переход воздух-вода, так и вода-воздух.

  1.  Вода внутри поверхности. Пример: дерево, песок. Для реализации таких поверхностей используется фазовая функция Хенея-Гринштейна[5]

Где θ – это угол между текущим направлением и направлением рассеивания, g1, g2  константы контролирующие свойства поверхности. Подбираются эмпирически.

В данной работе реализация мокрых поверхностей осуществлена на уровне текстур. То есть, не в реальном времени. Это связано с тем, что изначально не подразумевалось намокание поверхностей. Результат.

Рисунок  - влияние мокрых поверхностей на объекты в сцене

Брызги

Для реализации брызг капель используется текстура – фотография брызг капель молока

Рисунок  - текстура брызг

Конечно, эта текстура может быть перерисована в соответствии с задачей. На сцене случайным образом генерируется 2000 брызг, в радиусе 20 от наблюдателя. Исходно каждой присваивается произвольный кадр, для того чтобы избежать повторов. Каждая представляет собой билбоард – то есть прямоугольник, всегда повернутый лицевой стороной к камере.  Все 2000 брызг рисуются за один вызов процедуры DrawIndexedPrimitive.  Для этого все брызги хранятся в одном вершинном и индексном буферах. Индексный буфер генерируется при загрузке приложения. Вершинный обновляется каждый кадр на CPU. Непосредственно визуализация – пиксельный шейдер.

Рисунок  - брызги на сцене

Заключение

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

Полученное приложение работает как под DirectX 9, так и под DirectX 10. Используются 3 и 4 модели пиксельных и вершинных шейдеров. Практически все алгоритмы, описанные выше, эффективно используют аппаратное ускорение. В результате достигается производительность до 250 кадров в секунду даже на средних допустимых конфигурациях. Пользователю предоставляется возможность изменять большое число параметров, как глобальных, таких как разрешение экрана, так и локальных параметров отдельно взятого слоя. Таким образом, учитывая возможность заменить уже имеющиеся текстуры, можно полностью настроить внешний вид дождя и эффектов под свои нужды не меняя логики работы приложения.  

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

Список литературы

  1.  Ati Research, “Artist-Directable Real-Time Rain Rendering in City Environments” -  http://portal.acm.org/citation.cfm?id=1185828
  2.  L.Wang et al, “Real Time Rendering of Realistic Rain” - http://portal.acm.org/citation.cfm?id=1180044
  3.  P.Rousseau et al, “Realistic real-time rain rendering” -http://www.msi.unilim.fr/~rousseau/rain.html
  4.  K.Garg et al, “Photorealistic Rendering of Rain Streaks” - http://portal.acm.org/citation.cfm?id=1141911.1141985
  5.  H.Jensen et al, “Rendering of Wet Materials” - http://graphics.ucsd.edu/~henrik/papers/rendering_wet_materials/
  6.  T.Souza, “Adaptive Glare” – In ShaderX 3 pp. 349 - 355
  7.  L.Latta, “Everything about Particle Effects” - http://www.nature.com/nphys/journal/v4/n4/full/nphys922.html
  8.  Reinhard, “Photographic tone reproduction for digital images” - http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf


 

А также другие работы, которые могут Вас заинтересовать

27612. Назначение наказания за неоконченное преступление, за преступление, совершенное в соучастии и при рецидиве преступлений 30 KB
  Назначение наказания за неоконченное преступление ст. 66 УК Назначение наказания различается в зависимости от стадии на которой было прервано общественно опасное деяние. За приготовление к преступлению срок или размер наказания не может превышать половины максимального срока или размера наиболее строгого вида наказания предусмотренного соответствующей статьей Особенной части Уголовного кодекса за неоконченное преступление.
27614. Назначение наказания по совокупности преступлений и совокупности приговоров. Порядок определения сроков наказания при сложении наказаний 37.5 KB
  Порядок определения сроков наказания при сложении наказаний. Назначение наказания по совокупности преступлений При совокупности преступлений наказание назначается отдельно за каждое совершенное преступление. Два этапа назначения наказания: 1назначение наказания за каждое преступление отдельно; 2 определение окончательного наказания по одному из принципов: – поглощение менее строгого более строгим; – полного сложения; – частичного сложения.
27616. Нарушение неприкосновенности частной жизни (ст. 137 УК). Нарушение неприкосновенности жилища (ст. 139 УК) 29.5 KB
  Нарушение неприкосновенности жилища ст. Нарушение неприкосновенности частной жизни 1. Нарушение этого права влечет ответственность в частности уголовную. Нарушение неприкосновенности жилища 1.
27618. Преступления против безопасности движения и эксплуатации транспортных средств 96.5 KB
  Объективная сторона преступления состоит в одном из двух деяний: нарушение правил дорожного движения и нарушении правил эксплуатации транспортных средств. Квалифицирующий признак: деяние повлекшее по неосторожности смерть человека в соответствии с Правилами учета ДТП к числу погибших относятся и те кто скончался от полученных травм в течение 7 суток со дня ДТП. Нарушение правил обеспечивающих безопасную работу транспорта ст. Общественная опасность нарушения правил обеспечивающих безопасную работу транспорта...