Что такое параллакс маппинг

Тотальное 3D. Технологии рельефного текстурирования

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингЧто такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Компьютерная графика непрерывно развивается. Еще десять лет назад люди с замиранием сердца произносили магическое «3Dfx Voodoo», «затенение по Гуро», «сглаживание текстур». Тогда это были сверхсовременные технологии. Сегодня мы с тем же восторгом говорим «DirectX 10», «HDR», «шейдерная модель». Именно эти понятия ассоциируются с технологиями завтрашнего дня.

Быстрее всего среди современных 3D-технологий развивается направление, обеспечивающее максимальный объем картинки на экране, — это так называемое рельефное текстурирование. К сожалению, большинство геймеров либо вообще не представляют, что это такое, либо представляют, но очень-очень условно. Сегодня мы детально рассмотрим такие понятия, как Bump Mapping, Normal Mapping и Parallax Mapping, а также поговорим о технологии Displacement Mapping, про которую зачастую не знают даже разработчики компьютерных игр.

Предыстория

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

Разработчики, может, и рады были бы состряпать из полигонов трехмерные гайки, картины на стены, люстры и факелы, но вот только куда до таких излишеств, когда процессор и с проработкой основной геометрии не справляется? А ведь глубина пространства, его объем, во многом зависят именно от мелочей. Поступали просто: все мелкие элементы — тени, блики, шероховатости, износ и повреждения — рисовали кисточкой на текстурах. Получалось, конечно, плоско, но хоть как-то. Как говорится, не до жиру — быть бы хоть чуть-чуть объемным.

Но железная индустрия развивалась, мощности процессоров росли, компьютерные игры на месте тоже не стояли. Как только заветные мегагерцы выросли до приемлемых величин, а в системных блоках большинства геймеров поселились трехмерные ускорители, разработчики начали задумываться: с чего это вдруг особенности поверхности намертво зашиты в текстуру? Ведь металл, камень, пластик, да и любая другая поверхность в зависимости от освещения выглядят по-разному. Грязь, например, плохо отражает падающий свет, а потертости, наоборот, лучше. А ведь есть еще и тени, которые пока просчитываются самым примитивным образом.

И были придуманы шейдеры — процедуры, определяющие способ визуализации поверхности объекта в зависимости от различных входных данных. Свет, маски прозрачности (задающие области применения шейдеров), карты отражения и карты рельефа — подо все были созданы свои шейдеры. Особое внимание разработчики стали уделять именно картам рельефа. Ведь раньше тень на текстуре зачастую рисовали кисточкой. А что это за тень, если она не меняет своего положения в зависимости от источника света? Карта рельефа сразу позволила рассчитывать тени в реальном времени. Да и детализация объектов заметно возросла: вроде бы полигонов столько же, а объемность пространства увеличилась на порядок.

Bump Mapping

Первым методом создания рельефности объекта стал Bump Mapping, в просторечии просто «бамп». Смысл технологии в том, что неровности объекта задаются одной-единственной картинкой (она называется бамп-картой), состоящей из градаций серого цвета (от 0 до 255). Чем белее пиксель (ближе к коду 255), тем больше он «приподнят» над поверхностью, более темному пикселю (ближе к 0) соответствует более «углубленное» положение.

Для своего времени бамп был очень хорош, но требования геймеров к изображению неумолимо росли. И вот уже технология, которая учитывает только направление света и степень приподнятости/углубленности пикселей, не может обеспечить нужного качества картинки. Да еще и «пластиковость», присущая бампу, давала о себе знать. Как, скажите, делать игру про Вторую мировую, если все помещения выглядят словно их отлили из цельного куска пластмассы?

Отчасти поэтому, а отчасти и потому, что карты Bump Mapping почти всегда приходится создавать вручную (качественного алгоритма автоматизации данной работы как не было, так и нет), разработчики все реже используют его в своих разработках.

Normal Mapping

В Crysis объемность достигается за счет сочетания бампа, нормалей и параллакса.

На смену бампу пришло второе поколение алгоритмов рельефного текстурирования. Оно получило название Normal Mapping (иногда, хотя и довольно редко, его называют «нормалом» или «нормалями»). Главное отличие Normal Mapping от бампа — более высокая точность вычисления, которая достигается за счет добавления в карту данных об ориентации нормалей (перпендикуляров) поверхности. Еще одна важная особенность: Normal Mapping карты можно генерировать в автоматическом режиме, а не рисовать длинными зимними вечерами в Photoshop.

Смысл нормаля довольно прост: на основе текстуры высокополигональной модели строится так называемая карта разности, которая, будучи наложенной на низкополигональный объект, делает его необычайно похожей на многополигональный. Вроде бы треугольников мало, а картинка выглядит так, словно их многие миллионы. В карте нормалей цвет каждого пикселя задает ориентацию нормали в данной точке поверхности. Пространственным координатам (X, Y, Z) соответствует тройка цветов (R, G, B).

Значения R, G, B варьируются в пределах от 0 до 255, причем 127 соответствует нулю. То есть голубой цвет (127, 127, 255) описывает просто гладкую поверхность, а они на низкополигональной и высокополигональной модельке одинаковы. Это объясняет, почему карты нормалей имеют в основном голубой цвет, а детали выделяются другими цветами. Обратите внимание, в карте нормалей альфа-канал изображения содержит стандартную карту Bump Mapping. В компьютерных играх карты нормалей совершили настоящий переворот.

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

И хотя преимущество Normal Mapping очевидно, приходит время, когда и он перестает устраивать девелоперов. И им на помощь готовы придти технологии завтрашнего дня.

На нашем DVD в разделе «Игрострой» находится большое число пояснительных скриншотов, видео и примеров, которые позволят вам составить полное представление о современных технологиях рельефного текстурирования.

Parallax Mapping

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

С пришествием новых шейдерных моделей и графических ускорителей стало возможным усложнить сами шейдеры и улучшить графическое представление рельефных поверхностей. Одна из новых технологий называется Parallax MappingUnreal Engine 3.0 он именуется Virtual Displacement Mapping). Ее главное новшество — она заставляет мелкие детали выглядеть по-настоящему объемными. Параллакс имитирует объемность за счет пространственного искажения рельефа относительно камеры (то есть главной оси взгляда).

Relief Mapping

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

Проблему сумел решить бразильский аспирант Мануэль Оливейр и его коллеги (www.inf.ufrgs.br/

oliveira). Новую разработку назвали Relief Mapping или Per-Pixel Displacement Mapping, она включает в себя целых три алгоритма визуализации поверхности.

Простой Relief Mapping. Это самый простой из новых алгоритмов Relief Mapping. Он разработан как оптимальная замена Normal / Parallax Mapping. Как и предшественники, Relief Mapping не меняет очертаний самого объекта, зато делает детали на 100% объемными, способными отбрасывать тень друг на друга. Наиболее эффективное применение данного шейдера (а Relief Mapping, по сути своей, именно шейдер) — поверхности, которые не позволяют напрямую увидеть их контуры. Например, стены зданий и коридоров, поверхности скал и открытых площадок: вы же не можете погрузиться в трещину скалы, чтобы понять, что она на самом деле плоская, а не объемная. Это стало очевидно и для коллеги Оливейра по имени Фабио Поликарпо — именно он создал графические модификации для DOOM 3 и Quake 4, заменяющие там Normal Mapping на Relief Mapping.

Relief Mapping, меняющий очертания объекта. Второй алгоритм Relief Mapping рванул как атомная бомба: это самый реалистичный эффект рельефной поверхности, рассчитанный в реальном времени. Причем полностью меняющий очертания самого объекта, поэтому его еще называют True Per-Pixel Displacement Mapping. Абсолютно недостижимый ранее фокус, реализованный теперь с помощью высокоуровневого языка шейдеров DirectX 9.0c.

Уже сейчас ясно, что Displacement Mapping выведет графику компьютерных игр на новый уровень всего через два-три года. Главная проблема всех игр — пресловутая угловатость, которая всегда бросается в глаза, будет полностью побеждена.

Многослойный Relief Mapping. Третий, самый невероятный алгоритм — Quad Depth Relief Mapping (также называемый Multilayer Relief Mapping) — делает то, что кажется вообще невозможным. Представьте себе простой прямоугольный полигон, на него накладывается несколько особых текстур рельефа, обрабатываемых специальным шейдером. При этом почти со всех сторон (кроме вида, когда полигон проецируется в линию) вместо полигона вы видите совершенно правильный объемный объект!

Вот только системные требования новой технологии пока еще довольно высоки. У нас в редакции на Pentium 4 3,2 ГГц с 1 Гб DDR-2 и GeForce 6600GT PCI-E простенькие демки выдавали около 75 кадров в секунду, но вот если речь идет о полноценной игре. Современные компьютеры пока не готовы к пришествию Relief Mapping, однако через один-два года ситуация должна измениться.

Ведь для разработчиков игр карты рельефа — это не какое-то туманное будущее, а суровая реальность. Уже сейчас весь арсенал Relief Mapping доступен в виде плагинов для 3DS Max 6—9 (за исключением плагина многослойной рельефности, который создан пока только для Max 6—8).

Будущее однозначно принадлежит новым технологиям рельефного текстурирования. Увеличивать в разы число полигонов, чтобы добиться должного уровня реалистичности, слишком ресурсоемко, а вот добавить несколько новых шейдеров могут практически все разработчики, была бы программная база. С теми технологиями, которые есть в загашнике у геймдева, мы будем очень скоро со снисходительной улыбкой смотреть на графику современных игр: «Десять баллов? Полно те, это же примитив».

На этом наш экскурс в мир полного 3D не заканчивается. В самом ближайшем будущем мы вместе с вами изучим и другие, не менее новаторские разработки.

Источник

Learn OpenGL. Урок 5.6 – Parallax Mapping

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Parallax Mapping

Parallax Mapping относится к семейству техник Displacement Mapping или рельефного текстурирования, которые смещают вершины геометрии на основе значений, хранящихся в специальных текстурных картах. Для примера представьте плоскость, составленную из порядка тысячи вершин. Каждую из них можно сместить согласно величине, считанной из текстуры, представляющую собой высоту плоскости в данной точки. Такая текстура, содержащая значения высоты в каждом текселе, называется картой высот. Примером такой карты, полученной на основе геометрических характеристик поверхности кирпичной кладки, может служить следующее изображение:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

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

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Описанный подход прост и легок в реализации, но требует большой плотности вершин в обрабатываемом объекте, иначе результат смещения будет слишком грубым. И если на каждую плоскую поверхность начать отпускать по тысяче с лишком вершин, то очень скоро мы просто не будем успевать рендерить все, что нам требуется. Может быть найдется алгоритм, позволяющий качественно сымитировать качество наивного алгоритма Displacement Mapping, но при этом не требуя таких затрат на геометрию? Если стоите – сядьте, поскольку на изображении выше на самом деле присутствует всего шесть вершин (два треугольника)! Рельеф кирпичной кладки отлично сымитирован благодаря использованию Parallax Mapping, техники рельефного текстурирования, не требующей множества вершин для правдоподобной передачи рельефа поверхности, а, как и Normal Mapping, использующей оригинальный подход для обмана глаз наблюдателя.

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

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Здесь грубая красная линия представляет собой значения из карты высот, отражающие геометрические характеристики имитируемой поверхности кирпичной кладки. Вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингпредставляет собой направление от поверхности на наблюдателя (viewDir). Если бы плоскость действительно была рельефной, то наблюдатель увидел бы точку поверхности Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. Однако, по факту мы имеем идеальную плоскость и луч по направлению взгляда пересекает плоскость в точке Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, что очевидно. Задача Parallax Mapping сместить текстурные координаты в точке Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингтак, чтобы они стали идентичны координатам, соответствующим точке Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. Далее для текущего фрагмента (соответствует точке Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг) мы используем полученные координаты точки Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингдля всех необходимы текстурных выборок, что и создает иллюзию, будто наблюдатель видит точку Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг.

Основная сложность заключена в том, как вычислить текстурные координаты точки Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингнаходясь в точке Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. Parallax Mapping предлагает приближенное решение, применяя простое масштабирование вектора направления от поверхности Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингк наблюдателю на величину высоты для фрагмента Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. Т.е. просто меняем длину Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингтак, чтобы она соответствовала величине выборки из карты высот Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, соответствующей фрагменту Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. На схеме ниже показан результат масштабирования – вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

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

Этот простой прием дает неплохие результаты в ряде случаев, но все же является очень грубой оценкой положения точки Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. Если карта высот содержит участки с резко меняющимися значениями, то результат смещения становится некорректным: скорее всего вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингдаже близко не будет попадать в окрестность точки Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Исходя из вышеописанного, остается еще один вопрос: каким же образом определить, как корректно спроецировать вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингна произвольно сориентированную поверхность, чтобы получить компоненты для смещения текстурных координат? Было бы неплохо вести расчеты в некой системе координат, где разложение вектора Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингна компоненты x и y всегда бы соответствовало базису текстурной системы координат. Если вы внимательно проработали урок по Normal Mapping, то уже догадались, что речь идет о расчетах в касательном пространстве.

Переведя вектор от поверхности к наблюдателю Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингв касательное пространство мы получим измененный вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, покомпонентное разложение которого всегда будет вестись в соответствии с векторами касательной и бикасательной для данной поверхности. Поскольку касательная и бикасательная всегда сонаправлены с осями текстурной системы координат поверхности, то, независимо от ориентации поверхности, можно спокойно использовать компоненты x и y вектора Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингкак смещения для текстурных координат.

Однако, довольно теории и, закатав рукава, перейдем к непосредственной реализации.

Parallax Mapping

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

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

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Снова мы видим знакомые точки Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинги Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, однако, в этот раз вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингполучается вычитанием вектора Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингиз текстурных координат в точке Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. Значения глубины вместо высоты можно получить просто вычитая выборку глубины из единицы или инвертировав цвета текстуры в любом редакторе изображений.

Parallax Mapping реализуется в фрагментном шейдере, поскольку данные о рельефе отличаются для каждого фрагмента внутри треугольника. Код фрагментного шейдера потребует расчета вектора от фрагмента к наблюдателю Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, так что понадобится передать ему положение фрагмента и наблюдателя в касательном пространстве. По результатам урока о Normal Mapping у нас на руках остался вершинный шейдер, который передает все эти вектора уже приведенными к касательному пространству, воспользуемся им:

Из важного отмечу только то, что конкретно под нужды Parallax Mapping необходимо передать во фрагментный шейдер aPos и положение наблюдателя viewPos в касательном пространстве.

Внутри шейдера реализуем алгоритм Parallax Mapping, что выглядит примерно так:

Мы объявили функцию ParallaxMapping, которая принимает текстурные координаты фрагмента и вектор от фрагмента на наблюдателя Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингв касательном пространстве. Результатом функции становятся смещенные текстурные координаты, которые уже и используются для выборок из диффузной текстуры и карты нормалей. В результате диффузный цвет пикселя и его нормаль корректно соответствуют измененной «геометрии» плоскости.

Что же скрывается внутри функции ParallaxMapping?

Данная относительно простая функция является буквальной реализацией метода, основные моменты которого мы обсудили выше. Берутся исходные текстурные координаты texCoords, с помощью них делается выборка высоты (или глубины) Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингиз depthMap для текущего фрагмента. Для расчета вектора Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингберется вектор viewDir в касательном пространстве и пара его компонент x и y делится на компоненту z, а результат масштабируется считанным значением смещения height. Также введен юниформ height_scale для дополнительной возможности управления степенью выраженности эффекта Parallax Mapping, поскольку обычно эффект смещения выходит слишком сильным. Для получения результата мы вычитаем полученный вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингиз исходных текстурных координат.

Разберемся с моментом деления viewDir.xy на viewDir.z. Поскольку вектор viewDir нормализован, то его компонента z лежит в интервале [0, 1]. Когда вектор практически параллелен поверхности компонента z близка к нулю, а операция деления возвращает вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинггораздо большей длины, чем в случае если viewDir близок к перпендикуляру к поверхности. Другими словами, мы масштабируем вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингтак, чтобы он увеличивался при взгляде на поверхность под углом – это позволяет получить более реалистичный результат в таких случаях.

Некоторые разработчики предпочитают убирать масштабирование делением на viewDir.z, поскольку, в определенных случаях, такой подход дает некорректные результаты при взгляде под углом. Эта модификация техники называется Parallax Mapping with Offset Limiting. Выбор варианта подхода, по большей части, остается делом личных предпочтений – я, например, более лоялен к результатам работы обычного алгоритма Parallax Mapping.

Результирующие измененные текстурные координаты в итоге используются для выборки из диффузной карты и карты нормалей, что дает нам довольно неплохой эффект искажения поверхности (параметр height_scale здесь выбран близким к 0.1):

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

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

Также видны и странные артефакты вдоль границ оттекстурированной плоскости. Появляются они вследствие того, что смещенные алгоритмом Parallax Mapping текстурные координаты могут выпасть за пределы единичного интервала и, в зависимости от режима повторения текстуры (wrapping mode), вызвать появление нежелательных результатов. Простой способ избавления от таких артефактов – просто отбросить все фрагменты, для которых текстурные координаты оказались вне единичного интервала:

В итоге все фрагменты, имеющие смещенные текстурные координаты, выпадающие из интервала [0, 1], будут отброшены и визуально результат действия Parallax Mapping станет приемлемым. Очевидно, что этот метод отбраковки не универсален и может быть неприменим для некоторых поверхностей или случаев текстурирования. Но на примере плоскости он работает идеально и помогает усилить эффект изменения рельефа плоскости:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Исходники примера находятся здесь.

Выглядит неплохо, да и производительность метода отличная – всего то потребовалась одна дополнительная выборка из текстуры! Но простота метода имеет и значительные недостатки: эффект рельефности легко разрушается при взгляде на плоскость под углом (что верно и для Normal Mapping) или при наличии в карте высот участков с резкими перепадами значений:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Причина разрушения иллюзии кроется в том, что алгоритм является весьма грубым приближением реального Displacement Mapping. Однако, нас могут выручить несколько дополнительных приемов, которые позволяют получить практически идеальные результаты даже при взгляде под углом или при использовании карт высот с резкими перепадами. Например, мы можем использовать несколько выборок из карты высот, дабы найти точку, ближайшую к точке Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг.

Steep Parallax Mapping

Техника Steep Parallax Mapping является логическим развитием классического Parallax Mapping: используется такой же подход в алгоритме, но вместо единственной выборки берется несколько – для лучшей аппроксимации вектора Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, использующегося для расчета точки Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. За счет этих дополнительных выборок результат работы алгоритма визуально гораздо более правдоподобен, даже в условиях взгляда под острыми углами к поверхности.

Основа подхода Steep PM заключается в том, чтобы взять некоторый диапазон глубин и разбить его на равные по размеру слои. Далее мы итеративно проходим по слоям одновременно смещая исходные текстурные координаты в направлении вектора Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинги делая выборки из карты глубин, останавливаясь в тот момент, когда глубина из выборки оказывается меньше, чем глубина текущего слоя. Ознакомьтесь со схемой:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Как видно, мы движемся по слоям сверху вниз и для каждого слоя сравниваем его глубину со значением из карты глубин. Если глубина слоя оказывается меньше значения из карты глубин, это значит, что вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, соответствующий этому слою, лежит выше поверхности. Этот процесс повторяется до тех пор, пока глубина слоя не оказывается больше выборки из карты глубин: в этот момент вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингуказывает на точку, лежащую под имитируемым рельефом поверхности.
В примере видно, что выборка из карты глубин на втором слое (Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг) все еще лежит «глубже» по отношению к величине глубины второго слоя равной 0.4, а значит процесс поиска продолжается. В следующем проходе глубина слоя равная 0.6 наконец оказывается лежащей «выше» значения выборки из карты глубин (Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг). Отсюда мы делаем вывод, что вектор Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингполученный для третьего слоя является наиболее достоверным положением для искаженной геометрии поверхности. Можно использовать текстурные координаты Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, полученные из вектора Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, для смещения текстурных координат текущего фрагмента. Очевидно, что точность метода растет с количеством слоев.

Изменения в реализации затронут только функцию ParallaxMapping, поскольку в ней уже собраны все необходимые для работы алгоритма переменные:

Сперва осуществим инициализацию: установим количество слоев, рассчитаем глубину каждого из них и, в итоге, найдем размер смещения текстурных координат вдоль направления вектора Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, на которое необходимо будет смещаться на каждом слое.

Далее идет проход по слоям, начиная с верхнего, до тех пор, пока не будет найдена выборка из карты глубин, лежащая «выше» значения глубины текущего слоя:

В данном коде мы осуществляем проход по всем слоям глубины и смещаем исходные текстурные координаты, до тех пор, пока выборка из карты глубин не станет меньше глубины текущего слоя. Смещение осуществляется вычитанием из исходных текстурных координат дельты, основанной на векторе Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. Результатом работы алгоритма становится смещенный вектор текстурных координат, определенный с гораздо большей точностью, нежели классический Parallax Mapping.

Используя порядка 10 сэмплов пример с кирпичной кладкой становится гораздо более реалистично выглядящим, даже при взгляде под углом. Но лучше всего достоинства Steep PM видны на поверхностях с картой глубин, имеющей резкие перепады значений. Например, как на этой, уже демонстрировавшейся ранее, деревянной игрушке:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Можно улучшить алгоритм еще немного, если немного проанализировать особенности техники Parallax Mapping. Если смотреть на поверхность примерно по нормали, то необходимость сильно смещать текстурные координаты нет, в то время как при взгляде под углом смещение стремится к максимуму (мысленно представьте направление взгляда в обоих случаях). Если параметризировать число выборок в зависимости от направления взгляда, то можно неплохо сэкономить там, где лишние выборки не нужны:

Результат скалярного произведения вектора viewDir и положительной полуоси Z используется для определения числа слоев в интервале [minSamples, maxSamples], т.е. направление взгляда определяет необходимое число итераций эффекта (в касательном пространстве положительная полуось Z направлена по нормали к поверхности). Если мы бы мы взглянули параллельно поверхности, то эффект бы использовал все 32 слоя.

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

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

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

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

Из этих методов чаще всего используются два: Relief Parallax Mapping и Parallax Occlusion Mapping, причем Relief PM дает наиболее достоверные результаты, но и является немного более требовательным к производительности, по сравнению с Parallax Occlusion Mapping. Поскольку Parallax Occlusion Mapping все же довольно близок по качеству к Relief PM и при этом работает быстрее, то его предпочитают использовать чаще всего. Далее будет рассмотрена реализация именно Parallax Occlusion Mapping.

Parallax Occlusion Mapping

Метод Parallax Occlusion Mapping работает все на тех же базовых принципах, что и Steep PM, но вместо использования текстурных координат первого же слоя, где было обнаружено пересечение с мнимым рельефом, метод использует линейную интерполяцию между двумя слоями: слоем после и до пересечения. Весовой коэффициент для линейной интерполяции основывается на величине отношения текущей глубины рельефа к глубинам обоих рассматриваемых слоев. Посмотрите на схему, чтобы понять получше, как все работает:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

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

Код, отвечающий за дополнительные действия Parallax Occlusion Mapping является дополнением к коду Steep PM и не слишком сложен:

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

Parallax Occlusion Mapping дает на удивление визуально достоверные результаты, пусть и с небольшими огрехами и артефактами алиасинга. Но для компромиссного по скорости и качеству варианта они незначительны и проявляются лишь при пристальном наблюдении поверхности вблизи от камеры или при очень острых углах взгляда.

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Код примера находится здесь.

Parallax Mapping воистину великолепная техника, позволяющая резко повысить визуальную детализацию вашей сцены, но, безусловно, имеет свои недостатки в виде артефактов, о чем стоит помнить при реализации техники в проекте. По большей части Parallax Mapping используется на плоских поверхностях типа стен или полов – там, где не так то просто определить очертания объекта целиком, а угол взгляда на поверхность часто близок к перпендикуляру. В таком случае огрехи Parallax Mapping практически незаметны, на фоне возросшей детальности поверхности.

Бонусы от переводчика:

Relief Parallax Mapping

Раз уж автор упомянул два метода уточнения результата Steep PM, то для полноты картины опишу и второй из подходов.

Как и Parallax Occlusion Mapping здесь используется результат выполнения Steep PM, т.е. нам известны глубины двух слоев между которыми лежит реальная точка пересечения вектора Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингс рельефом, а также соответствующие им текстурные координаты Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинги Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. Уточнение оценки точки пересечения в данном методе идет за счет применения бинарного поиска.

Шаги алгоритма уточнения:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

На изображении видно, что после нахождения точек Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинги Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингмы уполовиниваем размер слоя и размер смещения текстурных координат, что дает нам первую точку итерации бинарного поиска (1). Так как величина выборки в ней оказалась больше, чем текущая глубины слоя, то мы еще раз уполовиниваем параметры и смещаемся вдоль Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, получая точку (2) с текстурными координатами Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг, что и будет результатом Steep PM для двух итераций бинарного поиска.

Самозатенение

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

По сути применяется тот же Steep PM, но с поиск идет не вглубь имитируемой поверхности вдоль линии взгляда, а из поверхности, вдоль вектора на источник света Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг. Этот вектор также переносится в касательное пространство и используется для определения величины смещения текстурных координат. На выходе метода получится вещественный коэффициент освещенности в интервале [0, 1], который используется для модуляции диффузной и зеркальной компонент в расчетах освещения.
Для определения затенения с резкими краями достаточно пройтись вдоль вектора Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппингдо тех пор, пока не найдется точка, лежащая под поверхностью. Как только такая точка найдена – принимаем коэффициент освещенности 0. Если же мы достигли нулевой глубины, не встретив точки, лежащей под поверхностью, то коэффициент освещенности берем равным 1.

Для определения затенения с мягкими краями необходимо проверить несколько точек, лежащих на векторе Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинги находящиеся под поверхностью. Коэффициент затенения при этом берется равным разности глубины текущего слоя и глубины из карты глубин. Также учитывается удаление очередной точки от рассматриваемого фрагмента в виде весового коэффициента равного (1.0 – stepIndex/numberOfSteps). На каждом шаге определяется частичный коэффициент освещенности как:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Конечным же результатом является максимальный коэффициент освещенности из всех частичных:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Схема работы метода:

Что такое параллакс маппинг. Смотреть фото Что такое параллакс маппинг. Смотреть картинку Что такое параллакс маппинг. Картинка про Что такое параллакс маппинг. Фото Что такое параллакс маппинг

Ход работы метода для трех итераций в данном примере:

Полученный коэффициент используется для модуляции результата работы используемой в примерах модели освещения Блинна-Фонга:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *