#opengl #графика #directx #шейдеры #технологии
Это запеченные карты света? Или Есть какая то технология позволяющая сделать это программно?
Ответы
Ответ 1
Этот эффект затенения на вашей картинке называется Ambient Occlusion или AO Он заключается в затенении поверхностей на основе информации об объектах (поверхностях) рядом. Реализаций AO много, например "пост-эффект" во фрагментном шейдере (Screen Space Ambient Occlusion или SSAO) на основе информации о положении пикселей и нормалях. Относительно прост и дешев, из за чего и популярен, не зависит от сложности сцены. К недостаткам алгоритма можно отнести невозможность обработки полу-прозрачных поверхностей + невозможность аппаратного сглаживания (antialiasing). SSAO можно отнести к технике так называемого отложенного рендеринга или deferred rendering (shading) , это такой фокус, когда вместо кадра на экране формирутся так называемый G-Buffer это несколько рендер текстур (render texture) в которые рисуется кадр, только кроме цвета в каждое значение пикселя записывается информация о: xyz пикселя относительно камеры векторе нормали к поверхности в этой точке любая другая информация (например о типе материала, глубине, и так далее) В последствии поверх всего экрана рисуется один треугольник, таким образом чтобы он закрыл весь экран. Это нужно чтобы вызвать фрагментный шейдер для каждого пикселя. В шейдере происходит вся магия. Там берется информация из сформированного недавно g-buffer и формируется кадр с освещением-затенением. Описанное выше это общая часть для множества алгоритмов освещения, затенения, фильтрации изображений и других странных фокусов вроде screen space reflections, работающих в экранном пространстве. т.е. их сложность растет не со сложностью сцены а с размером кадра. SSAO Если принять за освещенность точки сумму всех векторов фотонов из полусферы: и предположить что если рядом есть поверхность или объект, то фотоны через него не проходят, тогда получается что их можно не учитывать при расчете освещения. Улучшение результата возможно за счет учета нормалей для обработки плоских поверхностей: Так же дает хорошие результаты не простое монте-карло по соседним пикселям, а например, poisson sampling: Вот пример screen space AO на three.js. PS: заглядывайте сюда, попозже сделаю живой пример..
Комментариев нет:
Отправить комментарий