Что такое bloom эффект
Bloom
Bloom (рус. «свечение» ; произн. «блюм», «блум») — постэффект в трёхмерной графике, который используется в компьютерных играх и других 3D-приложениях. Эффект используется разработчиками игр для создания эффекта размытости света на ярких гранях сцены, передержку камерой при съёмке, а также для добавления большей кинематографичности изображению.
Одной из наиболее известных игр, где был использован этот эффект является аркадный автосимулятор Need for Speed: Most Wanted. В этой игре с помощью эффекта блюм реализовано свечение от солнечных лучей на асфальте, а также размытость на ярких гранях сцены, таких как дневное небо.
Действие эффекта во многом схоже по действию с другим эффектом, «glow», однако эти эффекты имеют различные способы реализации, и как следствие, отличия в изображении. Bloom используется в играх вместе с High Dynamic Range, однако иногда простое включение bloom-фильтра в настройках игры обозначается как «включение HDR».
Ссылки
Полезное
Смотреть что такое «Bloom» в других словарях:
bloom — bloom … Dictionnaire des rimes
Bloom — ist der Name mehrerer Personen: Allan Bloom (1930–1992), US amerikanischer Philosoph Arthur Bloom (1942–2006), US amerikanischer Fernsehregisseur Barbara Bloom (* 1951), US amerikanische Künstlerin Barry R. Bloom (* 1937), US amerikanischer… … Deutsch Wikipedia
BLOOM (A.) — Allan BLOOM 1930 1992 Né le 14 septembre 1930 à Indianapolis, dans une famille juive du Middle West, le jeune Allan Bloom a très tôt affirmé sa vocation de philosophe. Ce lecteur précoce de Platon entreprit de faire ses études de philosophie à la … Encyclopédie Universelle
Bloom — Bloom, n. [OE. blome, fr. Icel. bl?m, bl?mi; akin to Sw. blom, Goth. bl?ma, OS. bl?mo, D. bloem, OHG. bluomo, bluoma, G. blume; fr. the same root as AS. bl?wan to blow, blossom. See
Bloom 06 — Saltar a navegación, búsqueda Bloom 06 Información personal Origen Italia … Wikipedia Español
bloom — bloom, blossom Cherry trees are said to be in blossom, roses in bloom. The difference corresponds largely to that between trees whose blossom is a sign of fruit to come and plants whose flowers are a culmination in themselves. In figurative uses… … Modern English usage
Bloom — Bloom, v. t. 1. To cause to blossom; to make flourish. [R.] [1913 Webster] Charitable affection bloomed them. Hooker. [1913 Webster] 2. To bestow a bloom upon; to make blooming or radiant. [R.] Milton. [1913 Webster] While barred clouds bloom the … The Collaborative International Dictionary of English
bloom|y — «BLOO mee», adjective, bloom|i|er, bloom|i|est. having the surface covered with bloom, as a plum … Useful english dictionary
Bloom — Bloom, v. i. [imp. & p. p.
Bloom 06 — Bloom 06 … Deutsch Wikipedia
Learn OpenGL. Урок 5.8 – Bloom
Bloom
В связи с ограниченным диапазоном яркости, доступным обычным мониторам, задача убедительного отображения ярких источников света и ярко освещенных поверхностей является сложной по определению. Одним из распространенных методов, позволяющих подчеркнуть яркие области на мониторе, является техника, добавляющая ореол свечения вокруг ярких объектов, создающая впечатление «растекания» света за пределы источника света. В итоге у наблюдателя создается впечатление о высокой яркости таких освещенных участков или источников света.
Описанный эффект ореола и выхода света за пределы источника достигается техникой пост-обработки, именуемой блумом (bloom). Применение эффекта добавляет всем ярким участкам отображаемой сцены характерный ореол свечения, что можно увидеть на примере ниже:
Блум добавляет в изображение хорошо различимую визуальную подсказку об значительной яркости объектов, охваченных ореолом от примененного эффекта. Будучи примененным избирательно и в выверенном объеме (с чем многие игры, увы, не справляются), эффект позволяет значительно улучшить визуальную выразительность примененного в сцене освещения, а также добавить драматичности в определенных ситуациях.
Данная техника работает в связке с HDR-рендерингом практически как само-собой разумеющееся дополнение. Видимо, из-за этого многие люди ошибочно смешивают эти два термина до полной взаимозаменяемости. Однако, техники эти совершенно независимы и используются для разных целей. Вполне возможно реализовать блум, используя буфер кадра по умолчанию с глубиной цвета 8бит, ровно как и применить HDR-рендеринг не прибегая к использованию блума. Дело только в том, что HDR-рендер позволяет реализовать эффект более эффективным образом (далее мы в этом убедимся).
Для реализации блума сначала обычным образом рендерится освещенная сцена. Далее извлекаются HDR буфера цвета и буфер цвета, содержащий только яркие участки сцены. Это извлеченное изображение ярких участков затем размывается и накладывается поверх исходного HDR изображения сцены.
Чтобы было яснее разберем процесс по шагам. Рендерим сцену, содержащую 4 ярких источника света, отображенных как цветные кубики. Все они имеют величину яркости в интервале от 1.5 до 15.0. Если осуществить вывод в HDR буфер цвета, то результат выглядит следующим образом:
Из этого HDR буфера цвета мы извлекаем все фрагменты, яркость которых превышает заданный предел. Получается образ, содержащий лишь ярко освещенные участки:
Далее это изображение ярких участков размывается. Выраженность эффекта по сути определяется силой и радиусом примененного фильтра размытия:
Полученное размытое изображение ярких участков и есть основа итогового эффекта ореолов вокруг ярких объектов. Данная текстура просто смешивается с исходным HDR образом сцены. Поскольку яркие области были размыты, их размеры увеличились, что в итоге дает визуальный эффект светимости, выходящей за границы источников света:
Как видно, блум – не самая изощренная техника, однако достичь высокого визуального её качества и достоверности не всегда просто. По большей части эффект зависит от качества и типа примененного фильтра размытия. Даже небольшие изменения в параметрах фильтра могут разительно изменить итоговое качество техники.
Итак, вышеописанные действия дают нам пошаговый алгоритм эффекта пост-обработки для блум-эффекта. Изображение ниже кратко подытоживает необходимые действия:
Первым делом нам потребуется информация о ярких участках сцены на основе заданного порогового значения. Этим и займемся.
Извлечение ярких участков
Итак, для начала нам потребуется получить два изображения на основе нашей сцены. Можно было бы наивно выполнить рендер дважды, но используем более продвинутый метод множественных целей рендера (Multiple Render Targets, MRT): мы задаем в завершающем фрагментном шейдере более одного выхода и благодаря этому извлечение двух изображений можно выполнить в один проход! Чтобы указать в какой буфер цвета будет осуществлен вывод шейдера используется спецификатор layout:
Безусловно, метод будет работать только если мы подготовили несколько буферов для записи. Иными словами, для осуществления множественного вывода из фрагментного шейдера использующийся в этот момент кадровый буфер должен содержать достаточное количество подключенных буферов цвета. Если обратиться к уроку о кадровом буфере, то вспоминается, что при привязке текстуры как буфера цвета мы могли указать номер прикрепления цвета (color attachment). До сего момента нам не было нужды использовать прикрепление отличное от GL_COLOR_ATTACHMENT0, но в этот раз пригодится и GL_COLOR_ATTACHMENT1 – ведь нам нужны сразу две цели для записи:
Также, посредством вызова glDrawBuffers, потребуется явно указать OpenGL, что мы собираемся совершать вывод в несколько буферов. В противном случае библиотека все равно будет осуществлять вывод только в первое прикрепление, игнорируя операции записи в другие прикрепления. Как аргумент функции передается массив идентификаторов используемых прикреплений из соответствующего перечисления:
Для данного кадрового буфера любой фрагментный шейдер, указавший для своих выходов спецификатор location, будет осуществлять запись в соответствующий буфер цвета. И это отличные новости, ведь так мы избегаем лишнего прохода отрисовки для извлечения данных о ярких участках сцены – можно сделать все за один раз в единственном шейдере:
В данном фрагменте опущена часть, содержащая типичный код расчета освещения. Результат его записывается в первый выход шейдера – переменную FragColor. Далее результирующий цвет фрагмента используется для вычисления величины яркости. Для этого осуществляется взвешенный перевод в градации серого (путем скалярного умножения мы перемножаем соответствующие компоненты векторов и складываем их вместе, приводя к единственной величине). Затем, при превышении яркости фрагмента некого порога, мы записываем его цвет во второй выход шейдера. Для кубиков, замещающих источники света также выполняется этот шейдер.
Разобравшись с алгоритмом мы можем понять, почему данная техника так хорошо сочетается с HDR рендерингом. Рендеринг в HDR формате позволяет компонентам цвета выходить за верхнюю границу величиной в 1.0, что позволяет более гибко настраивать порог яркости за пределами стандартного интервала [0., 1.], обеспечивая возможностью тонко настроить какие участки сцены считать яркими. Без использования HDR придется довольствоваться порогом яркости в интервале [0., 1.], что вполне допустимо, но приводит к более «резкой» отсечке по яркости, что зачастую делает блум слишком навязчивым и кричащим (представьте себя на снежном поле высоко в горах).
После исполнения шейдера два целевых буфера будут содержать нормальное изображение сцены, а также образ, содержащий только яркие участки.
Изображение ярких участков теперь следует обработать с помощью размытия. Можно выполнить это простым прямоугольным (box) фильтром, что был использован в секции постпроцессинга урока по кадровому буферу. Но гораздо более качественный результат дает фильтрация Гаусса.
Размытие по Гауссу
Урок постпроцессинга дал нам представление о размытии с использованием простого усреднения цвета соседствующих фрагментов изображения. Такой метод размытия прост, но результирующее изображение может выглядеть и привлекательней. Размытие по Гауссу основывается на одноименной кривой распределения, имеющей форму колокола: высокие значения функции располагаются ближе к центру кривой и спадают в обе стороны от него. Математически кривая Гаусса может быть выражена с разными параметрами, но общий вид кривой остается следующим:
Размытие с весовыми коэффициентами, основанными на значениях кривой Гаусса, выглядит гораздо лучше прямоугольного фильтра: за счет того, что кривая имеет бОльшую площадь в окрестности своего центра, что соответствует бОльшим весовым коэффициентам для фрагментов вблизи центра ядра фильтра. Взяв, для примера, ядро 32х32 мы будем использовать весовые коэффициенты тем меньше, чем дальше фрагмент отстоит от центрального. Именно эта характеристика фильтра и дает визуально более удовлетворяющий результат размытия по Гауссу.
Реализация фильтра потребует двумерного массива весовых коэффициентов, который можно было бы заполнить на основе двумерного же выражения, описывающего кривую Гаусса. Однако, мы тут же столкнемся с проблемой производительности: даже относительно небольшое ядро размытия в 32х32 фрагмента потребует 1024 выборок из текстуры для каждого фрагмента обрабатываемого изображения!
На наше счастье выражение Гауссовой кривой обладает весьма удобной математической характеристикой – сепарабельностью, которая позволит сделать из одного двумерного выражения два одномерных, описывающих горизонтальную и вертикальную составляющие. Это позволить выполнить размытие по очереди в два подхода: по горизонтали, а затем по вертикали с наборами весовых коэффициентов, соответствующими каждому из направлений. Результирующее изображение будет таким же, что и при обработке двумерным алгоритмом, но при этом потребует куда меньше вычислительной мощности видеопроцессора: вместо 1024 выборок из текстуры нам понадобятся всего лишь 32 + 32 = 64! В этом и заключается суть двупроходной фильтрации по Гауссу.
Для нас все это означает одно: размытие одного изображения придется сделать дважды и здесь как нельзя кстати придется использование объектов кадрового буфера. Применим так называемую технику пинг-понга: имеется пара объектов кадрового буфера и содержимое буфера цвета одного фреймбуфера рендерится с некоторой обработкой в буфер цвета текущего фреймбуфера, затем фреймбуфер-источник и фреймбуфер-приемник меняются местами и данный процесс повторяется заданное число раз. По сути просто переключается текущий кадровый буфер для вывода изображения и с ним – текущая текстура из которой осуществляется выборка для отрисовки. Подход позволяет размыть исходное изображение, поместив его в первый буфер кадра, затем размыть содержимое первого буфера кадра, поместив его во второй, затем размыть второй, поместив в первый и так далее.
Прежде чем перейти к коду настройки буферов кадра, давайте взглянем на код шейдера гауссова размытия:
Как видно, мы используем довольно небольшую выборку коэффициентов гауссовой кривой, которые используются как веса для выборок по горизонтали или вертикали относительно текущего фрагмента. Код имеет две основные ветки, разделяющие алгоритм на вертикальный и горизонтальный проход на основе значения юниформа horizontal. Смещение для каждой выборки задано равным размеру текселя, который определен как величина обратная размеру текстуры (значение типа vec2, возвращённое функцией textureSize()).
Создадим два буфера кадра, содержащие по одному буферу цвета на основе текстуры:
После того, как мы получим HDR текстуру сцены и извлечем текстуру ярких областей, мы заполняем буфер цвета одного из пары подготовленных фреймбуферов текстурой яркости и запускаем процесс пинг-понга десять раз (пять раз по вертикали, пять по горизонтали):
На каждой итерации мы выбираем и привязываем один из буферов кадра на основе того, будет ли эта итерация совершать размытие по горизонтали или вертикали, а буфер цвета другого фреймбуфера тогда используется как входная текстура для шейдера размытия. На первый итерации нам приходится явно использовать образ, содержащий яркие области (brightnessTexture)– иначе оба пинг-понг фреймбуфера так и останутся пустыми. После десяти проходов исходное изображение приобретает вид пятикратно размытого полным фильтром Гаусса. Использованный подход позволяет нам легко менять степень размытия: чем больше пинг-понг итераций – тем сильнее размытие.
В нашем случае итог размытия выглядит как-то так:
Для завершения эффекта остается только скомбинировать размытое изображение с исходным HDR образом сцены.
Смешение текстур
Имея под рукой HDR текстуру отрендереной сцены и размытую текстуру пересвеченных участков все что нужно для реализации знаменитого блум- эффекта или свечения – объединить эти два изображения. Итоговый фрагментный шейдер (весьма похож на присутствовавший в уроке о формате HDR) именно это и делает – аддитивно смешивает две текстуры:
На что обратить внимание: смешение осуществляется до применения тональной компрессии (tone mapping). Это позволит корректно перевести дополнительную яркость от эффекта в LDR (Low Dynamic Range) диапазон, сохранив относительное распределение яркости в сцене.
Итог обработки – все яркие участки получили заметный эффект свечения:
Кубики, замещающие источники света, теперь выглядят гораздо более яркими и лучше передают впечатление об источнике света. Данная сцена довольно примитивна, потому реализация эффекта особых восторгов не вызовет, но в сложных сценах с продуманным освещением качественно реализованный блум может оказаться решающим визуальным элементом, добавляющим драматичности.
Исходный код примера – здесь.
Отмечу, что в уроке использовался довольно простой фильтр с всего пятью выборками в каждом направлении. Делая больше выборок в большем радиусе или проводя несколько итераций работы фильтра, можно визуально улучшить эффект. Также, стоит сказать, что визуально качество всего эффекта напрямую зависит от качества использованного алгоритма размытия. Улучшив фильтр можно добиться значительного улучшения и всего эффекта. Например, более впечатляющие результаты показывает сочетание нескольких фильтров с разными размерами ядра или разными кривыми Гаусса. Ниже представлены дополнительные ресурсы от Kalogirou и EpicGames, затрагивающие вопросы повышения качества блума за счет модификации размытия по Гауссу.
Руководство. Тестирование производительности.Часть 2
Ambient Occlusion
Под названием «Преграждение окружающего света» в меню скрывается Ambient Occlusion. Игра поддерживает HBAO+, более простой режим SSAO и режим без AO.
Сразу отметим значительную разницу в картинке без AO и при простом SSAO. Второй вариант добавляет тени от мелких объектов и дополнительно усиливает тени в месте стыка предметов, например, между камнями. HBAO+ усиливает комплексное затенение в результате влияния объектов друг на друга. Усиливаются оттенение кустов и темные зоны между камнями. На древнем храме четче просматриваются колонны и детали архитектуры благодаря лучшей градации светлых и темных зон. При обычном SSAO затенение того же храма более равномерное.
Rise of the Tomb Raider
Между обычным AO и HBAO+ разница в производительности 5–6%. Между AO и самым простым режимом разница менее 3%. На слабых видеоадаптерах можно отказаться от HBAO+, но рекомендуется сохранить хотя бы простой режим AO.
PureHair
Технология PureHair позволяет реализовать пышные волосы из раздельных прядей с достоверной физической моделью поведения. Такие волосы рассыпаются по плечам, реагируют на движения.
PureHair Very High
Между простыми волосами и PureHair разница колоссальная. Это сильно влияет на образ Лары и ее восприятие. При этом между двумя уровнями качества PureHair особых различий нет, при максимальном качестве рендерится до 30000 отдельных волосков.
Rise of the Tomb Raider
Между разными уровнями качества PureHair минимальная разница в производительности. Хотя при крупных планах эта разница может быть более высокой. Отключение технологии придает ускорение около 5% в тестовой сцене.
Дополнительные визуальные эффекты
Различные визуальные эффекты, которые не предполагают разные уровни градации, рассмотрим вместе. Вначале изучим их влияние на картинку, а потом проведем единое сравнение производительности, где на одной диаграмме будут отображены изменения в случае отключения каждого из этих эффектов.
Размытие по краям экрана
Этот эффект (Vignette Blur) реализует некоторое размытие по краям в определенных ситуациях. Лучше всего это проявляется, когда Лара передвигается в скрытном режиме. Пример ниже.
Размытие при движении
Привычное размытие Motion Blur, которые смазывает контуры объектов при быстрых движениях, усиливая ощущение скорости и создавая определенный киношный эффект. Яркий пример ниже.
Тесселяция
Тесселяция используется для усложнения геометрии поверхности земли, поверхности грязи и талого снега. Тесселяция улучшает деформацию снега при ходьбе по сугробам, хотя при ее отключении следы в снегу не исчезают.
Ниже пример влияния тесселяции на поверхность земли. Эта технология делает ее более бугристой и выделяет некоторые камни.
Еще один пример влияния тесселяции на поверхность снега.
С тесселяцией поверхность снега сложнее, больше бугров. Общее применение тесселяции практически повсеместное, поэтому ее влияние на производительность должно быть весомым. Результаты тестов будут ниже.
Bloom-эффект
Эффекты Bloom усиливают яркость света, добавляют ощущение объемного освещения и лучей, пробивающихся сквозь щели. В качестве примера два скриншота.
Без Bloom пропадает ощущение мягкого плотного света, пробивающего сквозь щель, нет бликов на камнях в нижней части кадра. Конечно, некоторые не любят такие эффекты. Впрочем, некоторые не видят разницу и в картинке с тенями и без — лишь бы четко было. Но наша статья не про них, а про тех, кто умеет получать эстетическое удовольствие от красивой картинки.
Блики объектива
Добавляет эффекты бликов и цветовые разводы, как при наблюдении через объектив камеры. Этот эффект Lens Flares связан с эффектом Bloom. Давайте взглянем на прошлую сцену.
Bloom, no Lens Flares
Без эффекта исчезают все блики в виртуальном объективе. А если в дополнение к этому отключить еще и Bloom, то получим совсем печальный эффект и изображение, лишенное какого-либо ощущения объемного освещения.
No Bloom, no Lens Flares
По итогам видно, что отключение обоих эффектов крайне негативно для итоговой картинки. Но если нужно чем-то жертвовать, то можно отключить блики объектива, Bloom рекомендуем сохранят в любых условиях.
Отражения пространства экрана
Этот параметр (в оригинале называется Screen Space Reflections) добавляет отражения на соответствующих поверхностях. Хорошо видно по воде и лужам, коих в игре много.
Screen Space Reflections ON
Screen Space Reflections OFF
Еще один пример ниже.
Screen Space Reflections ON
Screen Space Reflections OFF
Изменения явные, сильно влияют на восприятие. При достаточной мощности вашего видеоадаптера эффект лучше оставить включенным.
Эффекты экрана
Эффекты экрана (Screen Effects) добавляют пятна крови, грязи и дополнительные световые пятна в каких-то сюжетных сценах или при ранении. То есть проявляются только в определенные моменты. Влияние ясно, обойдемся без примеров.
Дополнительные эффекты. Тестирование
Перейдем к результатам тестирования. Напомним, что за основу бралась конфигурация очень высокого качества графики без сглаживания. Далее поочередно отключался один из параметров, остальные оставались неизменными.
Rise of the Tomb Raider
Наиболее серьезное влияние оказывает отключение тесселяции, что на GeForce GTX 960 позволяет выиграть более 6% производительности. Неплохой эффект оказывает отключение размытия по краям и размытия в движении, даже немного возрастает минимальный fps. Слабо влияет Bloom, но в тестовой сцене нет яркого солнца, при иных условиях влияние эффекта на производительность может быть серьезнее. При заметном влиянии на картинку отражения минимально сказались на уровне быстродействия. Блики объекта и эффекты экрана ожидаемо дают одинаковый результат с ними и без них, но это, опять же, связано с тем, что в тестовой сцене нет условий для проявления таких эффектов.
В качестве небольшого дополнения давайте сравним производительность при разных настройках. Не зря же предварительно изучалось влияние каждого отдельного параметра. Посмотрим, что предлагает игра при высоких предустановках, протестируем, и подберем режим максимального качества без потерь четкости и детализации, но с отключением некоторых эффектов.
Для режима ручных настроек было снижено качество мягких теней, глубина резкости, динамической листвы, эффекты размытия, блики и вместо HBAO+ выбран простой режим AO.
Rise of the Tomb Raider
Стандартные предустановки высокого качества не предусматривают отключение эффектов, но при этом снижается качество текстур, детализация и даже анизотропная фильтрация.
Rise of the Tomb Raider
Результаты сравнения очень высокого качества, ручных настроек и высоких предустановок ниже.
Rise of the Tomb Raider
Отключение некоторых эффектов в сочетании с понижением мягкости теней и небольшого изменения плотности растительности дает ускорение в 14–15%. Между очень высоким и высоким уровнем качества разница 23–29%.
Качество отражения света
На днях игра обновилась. Патч добавил два новых пункта в меню настроек. Это качество отражения света, которое по умолчанию всегда стоит в обычном режиме, и фильтр Grain.
Rise of the Tomb Raider
Изучим влияние качества отражения света.
Reflection Quality Very High
Reflection Quality High
Reflection Quality Normal
Правильнее было бы данный параметр назвать качеством отражений, ведь именно в их четкости проявляется его влияние. Повышение качества улучшает детализацию отражений. Это хорошо заметно по лужам на земле. При этом блики на мокрой земле никак не меняются.
По итогам тестирования в новой версии наблюдался небольшой рост fps относительно первой версии игры, поэтому мы и вынесли это сравнение в конец нашей статьи. Вместо привычного сочетания 31/36,5 fps вышло 31/37 fps.
Rise of the Tomb Raider
Дополнительное повышение качества отражений на один пункт минимально сказывается на общем быстродействии. Максимальное качество бьет по производительности заметнее, снижая результаты на 3–5% относительно начального режима.
Film Grain
Добавляет фильтр зернистости. Некоторое подобие этого эффекта заметно в постановочных сценах, влияние минимальное. Из того что было нами замечено — слабое влияние на интенсивность свечения солнца в определенных сценах.
Фильтр немного усиливает слепящий эффект солнца, и на фоне темных скал действительно проявляется некоторая зернистость. На общей производительности в нашей тестовой сцене не сказывается вообще.