Капли дождя

advertisement
«Кажется, дождь
начинается!...»
или
Изображение дождя в реальном
времени в городской обстановке
Наталья Татарчук
Исследовательская группа разработок
приложений на 3D:
3D Application Research Group
ATI Research
April 19, 2006
КРИ 2006, Москва
1
Зачем вам это нужно?
•Получить опыт программирования суперреалистичных миров для игр следующего
поколения
• Новые разработки
• Опыт ошибок
•Получить опыт изображения дождя в городской
среде
• Новейшие алгоритмы
• Освещение и система для вспышек молний
• Капли дождя и лужи
•И, конечно же, замечательные демки!
April 19, 2006
КРИ 2006, Москва
2
Имитация реальности: Изучение и
подготовка
• Цель: Создать образ дождливой ночи в центре города
• К счастью, было от чего плясать
• Начали работать над концепцией в середине октября в Бостоне
• И после множества гигабайтов видеоклипов с дождем,
каплями, лужами... получилось вот что:
Снимок Бостона в
дождливую ночь
April 19, 2006
Дождь ночью в городе
«ToyShop»’а
КРИ 2006, Москва
3
Дзен и Искусство
программирования шейдеров
•Не стреляйте из пушки по воробьям!
• Выбор оптимальных алгоритмов
• Комбинация «дешевых», но эффективных шейдеров со
сложными вычислениями
•Одновременное изображение множества
эффектов:
• SM 3.0 параллакс окклюжен маппинг (parallax
occlusion mapping) для изображения детальных
поверхностей
• Эффекты для моделирования поверхности воды и
движения капель
• Постобработочные эффекты для изображения свечения,
размытых отражений объектов и дождя
• Система HDR освещения с поддержкой вспышек молний
и теней
April 19, 2006
КРИ 2006, Москва
4
Изображение реалистичного дождя
• Зачатую, в играх дождь изображается простыми полосками
• Привязанные к камере
• Не создает реалистичного ощущения
• Не реагирует корректно на освещение в среде
• Для сильного дождя необходимо большое количество частиц
• Просто полоски дождя не создают живого ощущения дождя
• В дожде есть много дополнительных визуальных эффектов
• Отсутствие правильных эффектов разрушают иллюзию
погружения
• Мы разработали множество новых технологий, чтобы создать
естественное ощущение дождя ночью в городе
• Наша технология изображения дождя использует единую
систему освещения, включая вспышки молнии
• Все шейдеры правильно и динамично реагируют на изменения
освещения в среде
April 19, 2006
КРИ 2006, Москва
5
Цена рисования дождя
Композитный слой
дождя
Брызги капель
Туманные объекты с
каплями
Капли дождя на окнах
Лужи и рябь
April 19, 2006
Водные потоки
Туман и
свечение
Падающие каплиОтражения в
мокрых
поверхностях
КРИ 2006, Москва
6
Демо: ToyShop
April 19, 2006
КРИ 2006, Москва
7
Система освещения
April 19, 2006
КРИ 2006, Москва
8
Нет дыма без огня: Вспышки Молний
• Молнии и гром помогают создать ощущение ночного дождя
• Освещение от
вспышек молний
должно влиять
на каждый объект
в среде
• Важность
единообразного
поведения теней
• Мы используем
карту теней
(shadow mapping)
• Подсчет теней для
каждого
дополнительного
источника
света влияет на
производительность
April 19, 2006
КРИ 2006, Москва
9
Сложности освещения от вспышек молний
•Молния – сильный
направленный источник
света
• Желательно, чтобы молнии не
вспыхивали в одном и том же
месте повторно
•Наблюдатель может
оказаться близко к теням,
созданными вспышками
молний
• Если разрешение
недостаточно высоко, будут
видны искажения
(артефакты)
April 19, 2006
КРИ 2006, Москва
10
Решение: Карты Вспышек Молний
• Реализация вспышек
через 2 карты вспышек
молний
• Кодирование
информации освещения
от вспышки в карты
• Художники могут
комбинировать эти карты
при помощи параметра
интенсивности
• Подготовленное
изображение из Майи
освещения среды
при помощи молнии
(pre-rendered)
сохраняется как
8-ми битное
изображение для
каждой карты
April 19, 2006
КРИ 2006, Москва
11
Интеграция освещения от молний
• Каждый пиксель использует информацию об освещении от
молний
• Наш скрипт передает эти параметры всем шейдерам
объектов
• Параметр яркости вспышки
• Значение карты вспышек молний добавляется к значению
карты освещения перед просчетом тональности (tone
mapping)
• Стоимость: 1 операция считывания текстуры и несколько
математических операций на ГПУ
• Дешево и сердито
• Прозрачность воды зависит от яркости вспышки
• Мы использовали параметр яркости вспышек, чтобы изменить
значение прозрачности каждого пикселя
April 19, 2006
КРИ 2006, Москва
12
Отражения на мокрых
поверхностях
April 19, 2006
КРИ 2006, Москва
13
Отражения в дождливой сцене
•Реалистичные удлиненные отражения улучшают
ощущение дождя на мокрых
поверхностях
• Очень заметны при дожде
• Удлиняются по направлению к
наблюдателю
• Более насыщенны для ярких источников
света
April 19, 2006
КРИ 2006, Москва
14
Детали реализации отражений
• Рисуем вспомогательные объекты (proxy geometry) в отдельный буфер
отражений
• Удлиняем объекты в вершинных шейдерах по направлению к наблюдателю
Четырехугольники
обьектов изображений
Обьекты отражений
April 19, 2006
КРИ 2006, Москва
15
HDR и наблюдателе-зависимое
искажение отражений
• Сохраняем самые яркие
источники света через
расширенный диапазон
• Буфер отражений - HDR
(1010102 ) и в пол-размера
back buffer
• Позволяет сохранять яркость
и контраст
• Сделать отражения размытыми
и туманными
• Используйте постобработку для
удлинения в вертикальном
направлении
• Отражения искажаются используя
нормали поверхностей
• Отражения преграждаются простыми обЪектами
блокировки
April 19, 2006
КРИ 2006, Москва
16
Рисование дождя
April 19, 2006
КРИ 2006, Москва
17
Монтажирование дождя через
постобработку
• Изображаем дополнительный слой падающего дождя как
полноэкранный четырехугольник (full-screen quad)
• Дождь моделируется 8ми битной текстурой
• Рисуем до остальной постобработки
• Размываем слой дождя для создания ощущения туманности
капель
• Художники задают направление и скорость дождя в worldspace, чтобы моделировать дождь разной интенсивности
• Сложность заключается в минимизации повторности
дождевых шаблонов
• Без использования сложного шейдера
• Все-таки это полноэкранный пасс!
April 19, 2006
КРИ 2006, Москва
18
Алгоритм рисования дождевого
слоя
•Направление дождя переводится в clip space
•Просчитываем позицию капли дождя используя
текущую позицию в clip space, скорость дождя и
значение времени
•Проматываем текстуру дождя используя
направление дождя и скорость
• Все бы хорошо, но даже выборка текстуры в разных
направлениях не избавляет от ощущения повтора
April 19, 2006
КРИ 2006, Москва
19
Моделирование нескольких
дождевых слоев
• Моделирование нескольких дождевых слоев с различными
скоростями на отдельных уровнях глубины
• Но тем не менее, мы рисуем это как один геометрический
слой
• Как так?!
• Задаем параметр параллакса дождя
• Определяет диапазон глубины для слоев дождя
• Позволяет моделировать капли дождя, падающие с различной
скоростью на отдельных слоях дождя
• Читаем текстуру дождя, используя параметр параллакса
• Модулируем параметр параллакса случайным значением,
временем и скоростью дождя и ветра
• Используем параметр для выборки проективной текстуры
дождя
• Это создает отличное изображение случайных капель
April 19, 2006
КРИ 2006, Москва
20
Освещение слоев дождя
•Используем карту нормалей для падающих
капель
• Позволяет моделировать освещение отдельных капель в
разных слоях
•Подсвечиваем капли, используя источники света
в сцене
• Подсчитываем полное отражение и преломление света для
воздуха и воды
• Используя эффект Френнеля (Fresnel)
• Дождь должен корректно реагировать на освещение сцены
• Используем параметр яркости молнии, чтобы сместить
коэффициент отражения и преломления для воды
• Параметр яркости молнии также поднастраивает прозрачность
и уровень свечения
April 19, 2006
КРИ 2006, Москва
21
Создаем сильный дождь
•Натуральный дождь слабо заметен в ярких
регионах сцены и усиливается на темном фоне
• Если бы мы моделировали это аккуратно, то дождя не было
бы видно
• Используем старый голливудский трюк
• Молоко добавляется к воде, чтобы дождь было видно лучше
при съемке
• Мы делаем тоже самое: смещаем цвет дождя и его
прозрачность, чтобы он выглядел белее
• Это создает ощущение сильного дождя
April 19, 2006
КРИ 2006, Москва
22
Капли дождя
• Мы использовали билбоардные системы частиц для
моделирования падающих капель дождя в нашей демо
• Художники разместили и анимировали их, используя
базовую систему (template)
• При рисовании каждой капли:
• Удлинить билбоард в зависимости от
скорости движения
• Используем карту нормалей для капли
• Для освещения подсчитываем
эффекты отражения и
преломления
• Капли должны выглядеть более
отражающими и преломляющими
при вспышке молний
• Смещенный параметр яркости молнии
модулирует цвет отражения /
преломления
April 19, 2006
КРИ 2006, Москва
Падающие капли
23
Брызги капель
• Брызги создаются при ударе о поверхности объектов
• Мы создали этот эффект, сталкивая
индивидуальные капли с объектами
в сцене
• При помощи отдельных объектов
столкновения
• В игре можно просто сталкивать
капли с любыми объектами в сцене
• Использовали высоко-качественную
съемку брызг капли молока
• Но это всего лишь один ряд кинокадров для тысяч частиц!
• Повторность может быть слишком очевидной
• Мы меняем размер и прозрачность частиц при помощи
случайного параметра, чтобы уменьшить повторность
• Случайным образом переворачиваем текстурную координату
u, используя заданный цвет каждой частицы
April 19, 2006
КРИ 2006, Москва
24
Освещение брызг
• Брызги должны быть правильно освещены источниками
света в сцене
• Если источники света расположены позади брызг капель, мы
изображаем их как ярко освещенные объекты, освещенные
сзади
• В других обстоятельствах, мы просто используем простое
окружающее (ambient) освещение
• Спекулярное освещение подсчитывается
в вершинном шейдере
• Также мы использовали карту
света сверху (overhead lightmap)
Лайтмап для
освещения сверху
• Для изображения освещения с неба и
фонарей
• Используем позицию брызг в мировом
пространстве, как текстурную координату
для выборки из карты света сверху
• Результат позволяет модулировать
освещение брызг
April 19, 2006
КРИ 2006, Москва
25
Динамическое моделирование
поверхности воды для луж
April 19, 2006
КРИ 2006, Москва
26
Волны на лужах
• Цель: Моделирование динамичного реалистичного
движения волн на поверхности воды
• Рябь на поверхности воды создается в результате капель
дождя
• Падающих на объекты в сцене
• Может быть общим эффектом для любых объектов
• В нашей системе, мы рисуем капли дождя в специальную
текстуру
• Рисуем капли как точечные объекты в текстуру для
моделирования движения воды
• Можно таким же образом проектировать силуэты различных
объектов на поверхность воды (и, таким образом, на
текстуру)
• Поверхность воды будет правильно реагировать на объекты
• Создает след на волнах
April 19, 2006
КРИ 2006, Москва
27
Моделируем взаимодействие воды
и капель
•Обычные капли дождя создают несколько
концентрических волн
• Которые взаимодействуют на соседствующие волны
•Мы реализовали идентичную систему
• Капля создает затухающие волны в течение «жизни»
частицы брызг
• Это легко делается при помощи затухающего синусоида
при рисовании каждой капли в водяную текстуру
April 19, 2006
КРИ 2006, Москва
28
Аппроксимация поверхности воды
• Моделируем поверхность воды как решетку ячеек
• Мы используем решетку размером 256х256 (текстурное
разрешение)
• Каждая ячейка решетки содержит информацию о
свойствах поверхности воды в
этой точке
• Текущая позиция (высота)
• Позиция при предыдущем кадре
• Мы симулируем полностью на
ГПУ
• Данные решетки можно загнать в
текстуру
• Похоже на метод, описанный в
статье М. Гомеза «Interactive
Simulation of Water Surfaces»
(Game Programming Gems)
• Их система работала
только на ЦПУ
April 19, 2006
КРИ 2006, Москва
Текстура позиций ячеек воды:
Текущее значение позиции
закодированно в канал R, а
позиция в предыдущем кадре – в
канал G
29
Реакция поверхности воды
•Представляем, что поверхность воды – это тонкая,
эластичная мембрана
• Это позволяет нам не обращать внимания на силу
тяжести и другие действующие силы
• Все, что необходимо – это сила натяжения поверхности
воды
•При каждом промежутке времени, малейшие
частицы поверхности воды смещаются
• Из-за натяжения соседских частиц
• Можно представить этот процесс, как пружины,
пытающиеся сократить расстояние между
частицами
April 19, 2006
КРИ 2006, Москва
30
Расчет высоты волн
•Высота каждой точки на поверхности воды может
быть подсчитана вот этой формулой:
⎛ 2
∂2 z ⎞
∂2 z
2 ∂ z
=v ⎜ 2 + 2⎟
2
∂y ⎠
∂t
⎝ ∂x
где v это скорость передвижения волн по поверхности
воды
•Мы просчитываем решение этого частичного
дифференциального уравнения в реальном
времени на ГПУ
• Позволяет просчитать высоту волны для каждой точки
на «решетке» воды
• При помощи интеграции Эйлера в пиксельных
шейдерах
April 19, 2006
КРИ 2006, Москва
31
Интеграция луж
• В нашей демо мы рисуем одну-единственную симуляцию
поверхности воды
• Все объекты используют эту текстуру для рисования луж
• Таким образом нет необходимости для отдельных геометрических
объектов для
луж
• Считываем значение с текстуры
водной поверхности, используя
текущую позицию пикселя для
каждого объекта с лужами:
• Можно просто брать значение (xz), как
текстурные координаты
• Координаты масштабируются параметром,
задаваемым художниками для изменения
размера волн в лужах
• Чтобы лужи не выглядели слишком
одинаково, мы «поворачиваем»
координаты на определенный
угол (Допустим: 15 °)
• Угол задается отдельно для каждого объекта
April 19, 2006
КРИ 2006, Москва
32
Расположение и регулировка глубины
луж
•Чтобы рисовать глубокие лужи, просто используем
нормаль водной поверхности, вместе с цветом объекта
•Но ведь в жизни глубина луж разная от лужи к лужи!
•Мы используем карту глубины и
расположения луж, как «маскировочное средство»
•Тогда «задавать» лужи в среде легко:
• Используем параметр масштаба и
считываем нормаль волн
• Читаем значение глубины луж с карты
• Интерполируем между нормалью
объекта и нормалью волны,
используя значение глубины лужи
April 19, 2006
КРИ 2006, Москва
33
Создание лужи-водоворота
• Мы хотели создать впечатление воды, кружащейся в
водовороте, с рябью от капель дождя
• Мы уже знаем, как создавать волны от капель дождя
• А вот водоворот рисуем при помощи
нескольких дополнительных карт
нормалей (wake)
• Одна для воды, кружащейся вокруг
водостока
• Концентрические круги на водосток
April 19, 2006
КРИ 2006, Москва
34
Глубина лужи на крыше
• Для лужи на крыше, наши художники нарисовали глубину
при помощи вершинного цвета
• Таким образом материал на крыше плавно переходит в
поверхность лужи
• Очень важно было проследить, чтобы края лужи и крыша
рисовались абсолютно одинаково
April 19, 2006
КРИ 2006, Москва
35
Движение дождевых капель на
стеклах
April 19, 2006
КРИ 2006, Москва
36
Движение капель на стекле
April 19, 2006
КРИ 2006, Москва
37
Моделирование движения капель
дождя
• Алгоритм на базе статьи “Animation of water droplets
moving down a surface” [Kaneda99] (оффлайн)
• Поверхность стекла моделируется решеткой ячеек с
информацией
• Каждая ячейка содержит:
• Массу воды в этой ячейке
• Скорость движения воды по х и
у
• Значение передвижения капли
по ячейке
• Все это очень легко
запаковывается в текстуру.rgba
с 16тью-битами на канал
April 19, 2006
КРИ 2006, Москва
38
Моделирование движения капель: Силы
Fdown = M * G
Fup = fstatic or
fdynamic
• Сила тяжести и масса позволяют
подсчитать силу, двигающую каплю
вниз
• Статическая сила трения для
стационарных капель и
динамическая сила трения для
остальных капель позволяет
подсчитывать противоположную
силу, направленную вверх
• Варьируем статическую и
динамическую силы трения по
поверхности стекла при помощи
карты трения
Vnew = Vi +F/M * t
April 19, 2006
• Результирующая сила и начальная
скорость используются для расчета
нового значения скорости капли
КРИ 2006, Москва
39
Моделирование движения капель
•Капли могут течь в одну из
трех ячеек снизу
•Случайным образом
выбираем новую ячейку, при
этом учитывая скорость, силу
трения и количество воды в
ячейке
•Капли более «склонны» течь
в ячейки с водой
•Просчитываем новую
скорость по свежевыбранной ячейке
April 19, 2006
КРИ 2006, Москва
40
Рисование капель
• После моделирования, каждая
ячейка содержит новое значение
массы
• Просчитываем карту нормалей,
используя массу капель
• Для просчета векторов
отражения и преломления
• Кроме этого, рисуем тени на
окружающих объектах,
используя массу капель
• Если капля очень «тяжелая», то
можно «симулировать»
фокусировку света (caustic) и
рисовать свет в центре тени от
этой капли
April 19, 2006
КРИ 2006, Москва
41
Секреты ТойШопа раскрыты!
• Представили новейшие технологии, разработанные для
этого проекта
• Чтобы создать комплексный, богатый виртуальный мир не
забывайте, что нужно много убедительных деталей
• Много специализированных
шейдеров позволили нам создать иллюзию темной,
дождливой ночи в городе
• Новые алгоритмы для изображения
отражений
• Множество эффектов для дождя
• Моделирование поверхности
воды и движения капель дождя
• Теперь мы надеемся увидеть еще
более прекрасные миры в играх
следующего поколения!
• Все наши секреты – ваши!
• Используйте наши технологии для ваших целей!
April 19, 2006
КРИ 2006, Москва
42
Команда «ToyShop»
Главный художник
Главный инженер
Дэн Гёгер
Наталья Татарчук
Дэвид Госселин
Художники
Даниель Щеккет, Илай Тёрнер и Эйб Вайлей
Программирование шейдеров / движка
Джон Изидоро, Дэн Гинзбург, Торстен Шёйерманн, и
Крис Оат
Продюсер
Руководитель
Лиза Клоуз
Кэллан МакИналли
April 19, 2006
КРИ 2006, Москва
43
Ссылки
• www.ati.com/developer
• Все наши презентации и дополнительные материалы
April 19, 2006
КРИ 2006, Москва
44
Вопросы?
• devrel@ati.com
• natasha@ati.com
April 19, 2006
КРИ 2006, Москва
45
Спасибо!
April 19, 2006
КРИ 2006, Москва
46
Download