Subsurface scattering что это

Моделирование подповерхностного рассеивания

В этой статье речь пойдёт о быстром fake-методе реализации подповерхностного рассеивания (subsurface scattering) полупрозрачных материалов.

Подповерхностное рассеивание (subsurface scattering, SSS) — это механизм переноса энергии (света), при котором свет, проникая через поверхность полупрозрачного материала, рассеивается внутри самого материала и выходит из материала в другой точке. Рассеивание происходит путем многократного отражения в случайном направлении от частиц материала.

Подповерхностное рассеивание необходимо использовать для правильной отрисовки таких материалов как мрамор, нефрит, воск (парафин), кожа, и пр.

Существует несколько методов реализации подповерхностного рассеивания, но мы остановимся на так называемом fake-методе, который позволит быстро и без существенных затрат смоделировать подповерхностное рассеивание. Итак, начнем!

Для моделирования подповерхностного рассеивания нам придется совсем на немного изменить обычную отрисовку объектов.

Итак, допустим, что у нас уже есть некоторый алгоритм отрисовки объектов. Пусть он использует стандартную модель освещения (модель Ламберта) и некоторую модель вычисления отраженного света (Фонг, Блинн, Кук-Торренс – роли практически не играет). Также может быть алгоритм затенения объектов (карты теней, ambient occlusion). Пускай параметры источника света задаются у нас через колонки некоторой матрицы. В первой колонке – фоновое освещение (ambient), во второй – рассеянное (diffuse), в третьей отраженное (specular). Допустим также, что мы уже вычислили затенение объекта и модель освещения. В общем и целом результирующий цвет будет вычисляться так:

Значит, стандартная отрисовка у нас есть. Выглядеть это будет примерно так:

Subsurface scattering что это. 43318 1246311047 image 01. Subsurface scattering что это фото. Subsurface scattering что это-43318 1246311047 image 01. картинка Subsurface scattering что это. картинка 43318 1246311047 image 01

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

1) введем новый параметр для осветленной тени на поверхности (старое значение нам все еще нужно для затенения отраженного света):

2) если есть ambient occlusion – то осветлим и его:

3) теперь главное. У нас в vLighting.x храниться угол между источником света и нормалью в данной точке. Сделаем освещение менее зависимым от угла падения света:

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

Результатом проделанной операции будет вот такое изображение:

Subsurface scattering что это. 43319 1246311098 image 02. Subsurface scattering что это фото. Subsurface scattering что это-43319 1246311098 image 02. картинка Subsurface scattering что это. картинка 43319 1246311098 image 02

Уже ближе? Наверно…, но продолжим.

Теперь будем моделировать зависимость освещенности от расстояния до источника. Чем ближе к источнику света – тем сильнее освещена поверхность и сам материал («подповерхность» :)).

Для начала вычислим расстояние от источника света до текущей точки:

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

Коэффициенты, наверно, придется подбирать каждому свои, чтобы добиться примерно вот такой картинки:

Subsurface scattering что это. 43320 1246311218 image 03. Subsurface scattering что это фото. Subsurface scattering что это-43320 1246311218 image 03. картинка Subsurface scattering что это. картинка 43320 1246311218 image 03

Добавим учет рассеивания в финальную часть шейдера вот таким образом:

И получим вот такую картинку:

Subsurface scattering что это. 43321 1246311314 image 04. Subsurface scattering что это фото. Subsurface scattering что это-43321 1246311314 image 04. картинка Subsurface scattering что это. картинка 43321 1246311314 image 04

В общем и целом, наш нефритовый заяц готов. Но есть еще один момент.

Если смотреть через полупрозрачные материалы непосредственно на источник света – то материал становиться светлее. Давайте промоделируем и этот эффект. При взгляде сквозь нашего зайца на источник света без этого эффекта мы будем наблюдать такую картину:

Subsurface scattering что это. 43322 1246311380 image 05. Subsurface scattering что это фото. Subsurface scattering что это-43322 1246311380 image 05. картинка Subsurface scattering что это. картинка 43322 1246311380 image 05

Наш заяц совсем не пропускает свет. Давайте пропустим 🙂

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

Мы получим примрно вот такую картинку:

Subsurface scattering что это. 43323 1246311439 image 06. Subsurface scattering что это фото. Subsurface scattering что это-43323 1246311439 image 06. картинка Subsurface scattering что это. картинка 43323 1246311439 image 06

Давайте теперь просто добавим вычисленное значение к уже имеющемуся у нас параметру:

Финальное вычисление мы не изменяем, но теперь наш заяц пропускает свет:

Subsurface scattering что это. image 07. Subsurface scattering что это фото. Subsurface scattering что это-image 07. картинка Subsurface scattering что это. картинка image 07

Таким образом финальный шейдер (вернее его дополнение) будет таким:

Теперь у нас получился довольно симпатичный нефритовый заяц.

Напомню вам, что приведенный выше алгоритм – это fake. Если вам необходимо делать честное подповерхностное рассеивание – читайте дополнительную литературу 🙂

Спасибо тем, кто дочитал статью до конца. Удачи вам!

Источник

Быстрый шейдер для Subsurface Scattering в Unity

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

Большинство (если не все) оптических явлений, демонстрируемых материалами, можно воссоздать симуляцией распространения и взаимодействия отдельных лучей света. Такой подход называется в научной литературе «трассировкой лучей» (ray tracing), и часто он слишком вычислительно затратен для применения в реальном времени. В большинстве современных движков используются сильные упрощения, которые, несмотря на невозможность создания фотореализма, могут обеспечить достаточно убедительные приближенные результаты. В этом туториале я расскажу о быстром, дешёвом и убедительном решении, которое можно использовать для симуляции просвечивающих материалов, имеющих подповерхностное рассеивание.

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader
До.

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader
… и после.

Введение

У стандартного материала Unity есть режим прозрачности (Transparency mode), позволяющий рендерить прозрачные материалы. В этом контексте прозрачность реализуется с помощью альфа-смешивания. Прозрачный объект рендерится поверх готовой геометрии, частично показывая то, что находится за ним. Это работает для многих материалов, но прозначность — это особый случай более общего свойства, называемого просвечиваемостью (translucency) (иногда также translucidity). Прозрачные материалы влияют только на количество пропускаемого через них света (на рисунке ниже слева), просвечиваемые же изменяют путь его прохождения (справа).

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

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

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

Просвечиваемость в реальном времени

Затратными вычисления просвечиваемости делают два основных препятствия. Первое — требуется симуляция рассеивания лучей света внутри материала. Каждый луч может разделиться на несколько, отражаясь сотни или даже тысячи раз внутри материала. Второе препятствие — луч, поглощённый в одной точке, испускается в какой-то другой. Это кажется небольшой проблемой, но на самом деле это серьёзное препятствие.

Чтобы понять, почему так происходит, нам нужно сначала разобраться, как работает большинство шейдеров. В сфере рендеринга в реальном времени видеопроцессор ожидает от шейдера, что тот сможет вычислить конечный цвет материала, используя только локальные свойства. Шейдеры реализованы таким образом, что эффективно могут получать доступ только к свойствам, локальным для каждой вершины. Можно очень легко считать направление нормали и albedo вершины, получить же эти значения от соседних вершин — непростая задача. В большинстве систем реального времени приходится как-то обходить эти ограничения и находить способ имитировать распространение света в материале без использования нелокальной информации.

Подход, описанный в этом туториале, основан на решении, представленном на GDC 2011 Колином Баррэ-Бризебуа и Марком Бушаром в докладе Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look. Их решение интегрировано в движок Frostbite 2, который использовался в игре Battlefield 3 компании DICE. Хотя подход, представленный Колином и Марком, физически неточен, он обеспечивает правдоподобные результаты очень малой ценой.

Идея в основе этого решения очень проста. На непрозрачные материалы свет воздействует непосредственно от источника света. Вершины, наклонённые больше чем на 90 градусов от направления света Subsurface scattering что это. ffe7fbad9e8131a5d99bf8feffe52f62. Subsurface scattering что это фото. Subsurface scattering что это-ffe7fbad9e8131a5d99bf8feffe52f62. картинка Subsurface scattering что это. картинка ffe7fbad9e8131a5d99bf8feffe52f62, вообще не получают освещения (на рисунке внизу слева). В соответствии с моделью, представленной в докладе, на просвечиваемые материалы существует дополнительное воздействие света, которое связано с Subsurface scattering что это. 1581ea67ca5b587f694dfcb75de13c19. Subsurface scattering что это фото. Subsurface scattering что это-1581ea67ca5b587f694dfcb75de13c19. картинка Subsurface scattering что это. картинка 1581ea67ca5b587f694dfcb75de13c19. Геометрически Subsurface scattering что это. 1581ea67ca5b587f694dfcb75de13c19. Subsurface scattering что это фото. Subsurface scattering что это-1581ea67ca5b587f694dfcb75de13c19. картинка Subsurface scattering что это. картинка 1581ea67ca5b587f694dfcb75de13c19можно воспринимать так, как будто часть освещения на самом деле проходит сквозь материал и добирается до его обратной стороны (на рисунке внизу справа).

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

То есть каждый источник света считается как два отдельных влияния на отражение: освещение передней и задней части. Мы хотим, чтобы наши материалы были как можно более реалистичными, поэтому для переднего освещения используем стандартные PBR-модели освещения Unity. Нам требуется найти способ описать воздействие Subsurface scattering что это. 1581ea67ca5b587f694dfcb75de13c19. Subsurface scattering что это фото. Subsurface scattering что это-1581ea67ca5b587f694dfcb75de13c19. картинка Subsurface scattering что это. картинка 1581ea67ca5b587f694dfcb75de13c19и отрендерить его таким образом, чтобы он как-то симулировал процесс рассеивания, который бы мог происходит внутри материала.

Обратная просвечиваемость

Как сказано выше, конечный цвет пикселей зависит от суммы двух компонентов. Первый из них — это «традиционное» освещение. Второй — влияние света от виртуального источника, освещающего обратную сторону модели. Это даст нам ощущение, что свет от исходного источника на самом деле прошёл сквозь материал.

Чтобы понять, как смоделировать это математически, давайте создадим схему двух следующих случаев (схемы ниже). В текущий момент мы отрисовываем красную точку. Поскольку она находится на «тёмной» стороне материала, её должен освещать Subsurface scattering что это. 1581ea67ca5b587f694dfcb75de13c19. Subsurface scattering что это фото. Subsurface scattering что это-1581ea67ca5b587f694dfcb75de13c19. картинка Subsurface scattering что это. картинка 1581ea67ca5b587f694dfcb75de13c19. Давайте проанализируем два предельных случая с точки зрения стороннего наблюдателя. Мы видим, что Subsurface scattering что это. 87c51a69403b9bdeeb4fbae3c37377bb. Subsurface scattering что это фото. Subsurface scattering что это-87c51a69403b9bdeeb4fbae3c37377bb. картинка Subsurface scattering что это. картинка 87c51a69403b9bdeeb4fbae3c37377bbнаходится на одной линии с Subsurface scattering что это. 1581ea67ca5b587f694dfcb75de13c19. Subsurface scattering что это фото. Subsurface scattering что это-1581ea67ca5b587f694dfcb75de13c19. картинка Subsurface scattering что это. картинка 1581ea67ca5b587f694dfcb75de13c19и параллелен ему, и это значит, что наблюдатель Subsurface scattering что это. 3da70700ecb803cfa36f4c3fca1c0b6f. Subsurface scattering что это фото. Subsurface scattering что это-3da70700ecb803cfa36f4c3fca1c0b6f. картинка Subsurface scattering что это. картинка 3da70700ecb803cfa36f4c3fca1c0b6fдолжен полностью увидеть обратную просвечиваемость. С другой стороны, наблюдатель Subsurface scattering что это. f6b9aa2bb612b936cf731b846ed495d6. Subsurface scattering что это фото. Subsurface scattering что это-f6b9aa2bb612b936cf731b846ed495d6. картинка Subsurface scattering что это. картинка f6b9aa2bb612b936cf731b846ed495d6должен увидеть наименьшее количество обратного освещения, потому что он перпендикулярен к Subsurface scattering что это. 1581ea67ca5b587f694dfcb75de13c19. Subsurface scattering что это фото. Subsurface scattering что это-1581ea67ca5b587f694dfcb75de13c19. картинка Subsurface scattering что это. картинка 1581ea67ca5b587f694dfcb75de13c19.

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

Если вы знакомы с написанием шейдеров, то такие рассуждения должны быть вам привычны. Мы уже встречались с чем-то подобным в туториале «Physically Based Rendering and Lighting Models in Unity 5», где показали, что такое поведение можно реализовать с помощью математического оператора, называемого скалярным произведением.

В качестве первого приближения мы можем сказать, что количество обратного освещения, возникающего из-за просвечиваемости, Subsurface scattering что это. e2832edfa48059218a5fbdcf62d699f7. Subsurface scattering что это фото. Subsurface scattering что это-e2832edfa48059218a5fbdcf62d699f7. картинка Subsurface scattering что это. картинка e2832edfa48059218a5fbdcf62d699f7пропорционально Subsurface scattering что это. 7cc5af8182b283a5b977ae915a35f93c. Subsurface scattering что это фото. Subsurface scattering что это-7cc5af8182b283a5b977ae915a35f93c. картинка Subsurface scattering что это. картинка 7cc5af8182b283a5b977ae915a35f93c. В традиционном диффузном шейдере это записывается как Subsurface scattering что это. d5ef8ca4f2c3982886262e937744bbb6. Subsurface scattering что это фото. Subsurface scattering что это-d5ef8ca4f2c3982886262e937744bbb6. картинка Subsurface scattering что это. картинка d5ef8ca4f2c3982886262e937744bbb6. Мы видим, что не включили в вычисления нормаль к поверхности, потому что свет просто исходит из материала, а не отражается от него.

Подповерхностное искажение

Однако нормаль к поверхности должна иметь какое-то влияние, хотя бы небольшое, на угол, под которым свет исходит из материала. Авторы этой техники ввели параметр под названием подповерхностное искажение Subsurface scattering что это. 838b5f70cdb112be61be395c47fd1420. Subsurface scattering что это фото. Subsurface scattering что это-838b5f70cdb112be61be395c47fd1420. картинка Subsurface scattering что это. картинка 838b5f70cdb112be61be395c47fd1420, вынуждающий вектор Subsurface scattering что это. 1581ea67ca5b587f694dfcb75de13c19. Subsurface scattering что это фото. Subsurface scattering что это-1581ea67ca5b587f694dfcb75de13c19. картинка Subsurface scattering что это. картинка 1581ea67ca5b587f694dfcb75de13c19указывать в направлении Subsurface scattering что это. 9aae087046a60218262bab4a00522adc. Subsurface scattering что это фото. Subsurface scattering что это-9aae087046a60218262bab4a00522adc. картинка Subsurface scattering что это. картинка 9aae087046a60218262bab4a00522adc. С точки зрения физики это подподверхностное искажение управляет степенью отклонения нормалью к поверхности исходящего обратного освещения. В соответствии с предложенной системой, интенсивность компонента обратной просвечиваемости превращается в:

Subsurface scattering что это. da1b793f6e7a51079b3794874c7f9c85. Subsurface scattering что это фото. Subsurface scattering что это-da1b793f6e7a51079b3794874c7f9c85. картинка Subsurface scattering что это. картинка da1b793f6e7a51079b3794874c7f9c85

При Subsurface scattering что это. ed7bbed44ec4f0ac17313f00038367c3. Subsurface scattering что это фото. Subsurface scattering что это-ed7bbed44ec4f0ac17313f00038367c3. картинка Subsurface scattering что это. картинка ed7bbed44ec4f0ac17313f00038367c3мы возвращаемся к Subsurface scattering что это. 7cc5af8182b283a5b977ae915a35f93c. Subsurface scattering что это фото. Subsurface scattering что это-7cc5af8182b283a5b977ae915a35f93c. картинка Subsurface scattering что это. картинка 7cc5af8182b283a5b977ae915a35f93c, полученному в предыдущем разделе. Однако при Subsurface scattering что это. 634b179dbc50c270df71ebe94082f326. Subsurface scattering что это фото. Subsurface scattering что это-634b179dbc50c270df71ebe94082f326. картинка Subsurface scattering что это. картинка 634b179dbc50c270df71ebe94082f326мы вычисляем скалярное произведение между направлением взгляда и Subsurface scattering что это. 853dbc30dc216361b72f127f06f5b645. Subsurface scattering что это фото. Subsurface scattering что это-853dbc30dc216361b72f127f06f5b645. картинка Subsurface scattering что это. картинка 853dbc30dc216361b72f127f06f5b645. Если вам известен расчёт отражения по Блинну-Фонгу, то вы должны знать, что Subsurface scattering что это. e6fbdbd71f0b0dbfa87d32a927948ead. Subsurface scattering что это фото. Subsurface scattering что это-e6fbdbd71f0b0dbfa87d32a927948ead. картинка Subsurface scattering что это. картинка e6fbdbd71f0b0dbfa87d32a927948ead— это вектор «между» Subsurface scattering что это. ffe7fbad9e8131a5d99bf8feffe52f62. Subsurface scattering что это фото. Subsurface scattering что это-ffe7fbad9e8131a5d99bf8feffe52f62. картинка Subsurface scattering что это. картинка ffe7fbad9e8131a5d99bf8feffe52f62и Subsurface scattering что это. 9aae087046a60218262bab4a00522adc. Subsurface scattering что это фото. Subsurface scattering что это-9aae087046a60218262bab4a00522adc. картинка Subsurface scattering что это. картинка 9aae087046a60218262bab4a00522adc. Поэтому мы будем называть его половинным направлением Subsurface scattering что это. 26d1436f51b75e0df6df1d8f1eb322ec. Subsurface scattering что это фото. Subsurface scattering что это-26d1436f51b75e0df6df1d8f1eb322ec. картинка Subsurface scattering что это. картинка 26d1436f51b75e0df6df1d8f1eb322ec.

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

На схеме выше показаны все направления, которые мы пока использовали. Subsurface scattering что это. 26d1436f51b75e0df6df1d8f1eb322ec. Subsurface scattering что это фото. Subsurface scattering что это-26d1436f51b75e0df6df1d8f1eb322ec. картинка Subsurface scattering что это. картинка 26d1436f51b75e0df6df1d8f1eb322ecотмечена фиолетовым, и вы видите, что она находится между Subsurface scattering что это. ffe7fbad9e8131a5d99bf8feffe52f62. Subsurface scattering что это фото. Subsurface scattering что это-ffe7fbad9e8131a5d99bf8feffe52f62. картинка Subsurface scattering что это. картинка ffe7fbad9e8131a5d99bf8feffe52f62и Subsurface scattering что это. 9aae087046a60218262bab4a00522adc. Subsurface scattering что это фото. Subsurface scattering что это-9aae087046a60218262bab4a00522adc. картинка Subsurface scattering что это. картинка 9aae087046a60218262bab4a00522adc. С точки зрения геометрии, изменение Subsurface scattering что это. 838b5f70cdb112be61be395c47fd1420. Subsurface scattering что это фото. Subsurface scattering что это-838b5f70cdb112be61be395c47fd1420. картинка Subsurface scattering что это. картинка 838b5f70cdb112be61be395c47fd1420от Subsurface scattering что это. 502f960ea92bcba31646e66cccd41554. Subsurface scattering что это фото. Subsurface scattering что это-502f960ea92bcba31646e66cccd41554. картинка Subsurface scattering что это. картинка 502f960ea92bcba31646e66cccd41554до Subsurface scattering что это. d4ac7f4b6821aecb794f61695d169e22. Subsurface scattering что это фото. Subsurface scattering что это-d4ac7f4b6821aecb794f61695d169e22. картинка Subsurface scattering что это. картинка d4ac7f4b6821aecb794f61695d169e22приводит к сдвигу воспринимаемого направления света Subsurface scattering что это. ffe7fbad9e8131a5d99bf8feffe52f62. Subsurface scattering что это фото. Subsurface scattering что это-ffe7fbad9e8131a5d99bf8feffe52f62. картинка Subsurface scattering что это. картинка ffe7fbad9e8131a5d99bf8feffe52f62. Затенённая область показывает интервал направлений, из которых будет поступать обратное освещение. На рисунке ниже видно, что при Subsurface scattering что это. ed7bbed44ec4f0ac17313f00038367c3. Subsurface scattering что это фото. Subsurface scattering что это-ed7bbed44ec4f0ac17313f00038367c3. картинка Subsurface scattering что это. картинка ed7bbed44ec4f0ac17313f00038367c3объект кажется освещённым от фиолетового источника света. При изменении Subsurface scattering что это. 838b5f70cdb112be61be395c47fd1420. Subsurface scattering что это фото. Subsurface scattering что это-838b5f70cdb112be61be395c47fd1420. картинка Subsurface scattering что это. картинка 838b5f70cdb112be61be395c47fd1420к 1 воспринимаемое направление источника света сдвигается к фиолетовому.

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

Предназначение Subsurface scattering что это. 838b5f70cdb112be61be395c47fd1420. Subsurface scattering что это фото. Subsurface scattering что это-838b5f70cdb112be61be395c47fd1420. картинка Subsurface scattering что это. картинка 838b5f70cdb112be61be395c47fd1420— симуляция склонности некоторых просвечиваемых материалов рассеивать обратное освещение с разной интенсивностью. Чем выше значения Subsurface scattering что это. 838b5f70cdb112be61be395c47fd1420. Subsurface scattering что это фото. Subsurface scattering что это-838b5f70cdb112be61be395c47fd1420. картинка Subsurface scattering что это. картинка 838b5f70cdb112be61be395c47fd1420, тем больше рассеивается обратное освещение.

Да. Значения Subsurface scattering что это. 838b5f70cdb112be61be395c47fd1420. Subsurface scattering что это фото. Subsurface scattering что это-838b5f70cdb112be61be395c47fd1420. картинка Subsurface scattering что это. картинка 838b5f70cdb112be61be395c47fd1420от Subsurface scattering что это. 502f960ea92bcba31646e66cccd41554. Subsurface scattering что это фото. Subsurface scattering что это-502f960ea92bcba31646e66cccd41554. картинка Subsurface scattering что это. картинка 502f960ea92bcba31646e66cccd41554до Subsurface scattering что это. d4ac7f4b6821aecb794f61695d169e22. Subsurface scattering что это фото. Subsurface scattering что это-d4ac7f4b6821aecb794f61695d169e22. картинка Subsurface scattering что это. картинка d4ac7f4b6821aecb794f61695d169e22линейно интерполируются между Subsurface scattering что это. ffe7fbad9e8131a5d99bf8feffe52f62. Subsurface scattering что это фото. Subsurface scattering что это-ffe7fbad9e8131a5d99bf8feffe52f62. картинка Subsurface scattering что это. картинка ffe7fbad9e8131a5d99bf8feffe52f62и Subsurface scattering что это. 0e9c5ae235034e378418ff1ae6391849. Subsurface scattering что это фото. Subsurface scattering что это-0e9c5ae235034e378418ff1ae6391849. картинка Subsurface scattering что это. картинка 0e9c5ae235034e378418ff1ae6391849. Это можно увидеть, развернув традиционное определение линейной интерполяции от Subsurface scattering что это. ffe7fbad9e8131a5d99bf8feffe52f62. Subsurface scattering что это фото. Subsurface scattering что это-ffe7fbad9e8131a5d99bf8feffe52f62. картинка Subsurface scattering что это. картинка ffe7fbad9e8131a5d99bf8feffe52f62и Subsurface scattering что это. 0e9c5ae235034e378418ff1ae6391849. Subsurface scattering что это фото. Subsurface scattering что это-0e9c5ae235034e378418ff1ae6391849. картинка Subsurface scattering что это. картинка 0e9c5ae235034e378418ff1ae6391849с Subsurface scattering что это. 838b5f70cdb112be61be395c47fd1420. Subsurface scattering что это фото. Subsurface scattering что это-838b5f70cdb112be61be395c47fd1420. картинка Subsurface scattering что это. картинка 838b5f70cdb112be61be395c47fd1420:

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

С геометрической точки зрения, величина Subsurface scattering что это. 0e9c5ae235034e378418ff1ae6391849. Subsurface scattering что это фото. Subsurface scattering что это-0e9c5ae235034e378418ff1ae6391849. картинка Subsurface scattering что это. картинка 0e9c5ae235034e378418ff1ae6391849не имеет единичной длины, то есть должна быть нормализована. В своей конечной системе авторы не выполняют нормализацию.

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

Рассеивание обратного освещения

На этом этапе туториала у нас уже есть уравнение, которое можно использовать для симуляции просвечивающих материалов. Величину Subsurface scattering что это. e2832edfa48059218a5fbdcf62d699f7. Subsurface scattering что это фото. Subsurface scattering что это-e2832edfa48059218a5fbdcf62d699f7. картинка Subsurface scattering что это. картинка e2832edfa48059218a5fbdcf62d699f7невозможно использовать для вычисления окончательного влияния освещения.

Здесь можно использовать два основных подхода. Первый — применить текстуру. Если вам нужен полный художественный контроль над тем, как свет рассеивается в материале, то нужно ограничить Subsurface scattering что это. e2832edfa48059218a5fbdcf62d699f7. Subsurface scattering что это фото. Subsurface scattering что это-e2832edfa48059218a5fbdcf62d699f7. картинка Subsurface scattering что это. картинка e2832edfa48059218a5fbdcf62d699f7в интервале от Subsurface scattering что это. 502f960ea92bcba31646e66cccd41554. Subsurface scattering что это фото. Subsurface scattering что это-502f960ea92bcba31646e66cccd41554. картинка Subsurface scattering что это. картинка 502f960ea92bcba31646e66cccd41554до Subsurface scattering что это. d4ac7f4b6821aecb794f61695d169e22. Subsurface scattering что это фото. Subsurface scattering что это-d4ac7f4b6821aecb794f61695d169e22. картинка Subsurface scattering что это. картинка d4ac7f4b6821aecb794f61695d169e22и использовать её для сэмплирования конечной интенсивности обратного освещения. Текстуры с различным линейным изменением будут симулировать распространение света в разных материалах. Ниже мы рассмотрим, как это можно использовать для значительного изменения результатов работы этого шейдера.

Однако в подходе, использованном автором этой техники, не применяется текстура. В нём кривая создаётся только кодом Cg:

Subsurface scattering что это. 8a31ec93a3db184a69d0ccff515780e4. Subsurface scattering что это фото. Subsurface scattering что это-8a31ec93a3db184a69d0ccff515780e4. картинка Subsurface scattering что это. картинка 8a31ec93a3db184a69d0ccff515780e4

Два новых параметра, Subsurface scattering что это. a7df0b0cf52583a7326d63832fe3d4ed. Subsurface scattering что это фото. Subsurface scattering что это-a7df0b0cf52583a7326d63832fe3d4ed. картинка Subsurface scattering что это. картинка a7df0b0cf52583a7326d63832fe3d4ed(степень) и Subsurface scattering что это. 8bc8375dc6b8abeff08d6da9da469b5d. Subsurface scattering что это фото. Subsurface scattering что это-8bc8375dc6b8abeff08d6da9da469b5d. картинка Subsurface scattering что это. картинка 8bc8375dc6b8abeff08d6da9da469b5d(масштаб) используются для изменения свойств кривой.

Заключение

В этой части статьи мы рассказали о технических трудностях рендеринга просвечиваемых материалов. Предложено аппроксимирующее решение и подход, представленный в докладе Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look. В следующей части туториала мы сосредоточимся на самой реализации этого эффекта в шейдере Unity.

Если вам интересны более изощрённые подходы к симулированию подпространственного рассеивания в приложениях реального времени, то можете изучить один из лучших туториалов GPU Gems.

Часть вторая

Введение

В предыдущей части туториала объяснён механизм, позволяющий аппроксимировать внешний вид просвечивающих материалов. Затенение традиционных поверхностей выполняется на основании освещения, получаемого со стороны Subsurface scattering что это. ffe7fbad9e8131a5d99bf8feffe52f62. Subsurface scattering что это фото. Subsurface scattering что это-ffe7fbad9e8131a5d99bf8feffe52f62. картинка Subsurface scattering что это. картинка ffe7fbad9e8131a5d99bf8feffe52f62. Шейдер, который мы напишем, добавит ещё один компонент Subsurface scattering что это. 1581ea67ca5b587f694dfcb75de13c19. Subsurface scattering что это фото. Subsurface scattering что это-1581ea67ca5b587f694dfcb75de13c19. картинка Subsurface scattering что это. картинка 1581ea67ca5b587f694dfcb75de13c19, который де-факто будет использоваться так, как будто материал освещается источником света с обратной стороны. При этом он будет выглядет так, как будто свет из Subsurface scattering что это. ffe7fbad9e8131a5d99bf8feffe52f62. Subsurface scattering что это фото. Subsurface scattering что это-ffe7fbad9e8131a5d99bf8feffe52f62. картинка Subsurface scattering что это. картинка ffe7fbad9e8131a5d99bf8feffe52f62проходит сквозь материал.

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

Наконец, мы вывели зависящее от направления взгляда уравнение для моделирования отражения от обратного освещения:

Subsurface scattering что это. 8a31ec93a3db184a69d0ccff515780e4. Subsurface scattering что это фото. Subsurface scattering что это-8a31ec93a3db184a69d0ccff515780e4. картинка Subsurface scattering что это. картинка 8a31ec93a3db184a69d0ccff515780e4

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

И, наконец, Subsurface scattering что это. a7df0b0cf52583a7326d63832fe3d4ed. Subsurface scattering что это фото. Subsurface scattering что это-a7df0b0cf52583a7326d63832fe3d4ed. картинка Subsurface scattering что это. картинка a7df0b0cf52583a7326d63832fe3d4edи Subsurface scattering что это. 8bc8375dc6b8abeff08d6da9da469b5d. Subsurface scattering что это фото. Subsurface scattering что это-8bc8375dc6b8abeff08d6da9da469b5d. картинка Subsurface scattering что это. картинка 8bc8375dc6b8abeff08d6da9da469b5d(степень и масштаб) определяют распространение обратного освещения и работают образом, схожим с одноимёнными параметрами в расчёте отражения по Блинну-Фонгу.

Теперь нам только осталось реализовать шейдер.

Расширяем возможности стандартного шейдера

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

Если вам незнакома эта процедура, тема расширения функциональности стандартного шейдера подробно рассмотрена в моём блоге. Два неплохих туториала для начала: 3D Printer Shader Effect (перевод на Хабре) и CD-ROM Shader: Diffraction Grating.

Если коротко, то основная идея заключается в создании нового поверхностного шейдера и замене его функции освещения на собственную. Здесь мы будем вызывать исходную стандартную функцию освещения, чтобы материал рендерился с помощью PBR-шейдера Unity.

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

Можно начать со следующего:

Если в используемой вами камере используется поддержка HDR (high-dynamic range, расширенного динамического диапазона), то значения выше Subsurface scattering что это. d4ac7f4b6821aecb794f61695d169e22. Subsurface scattering что это фото. Subsurface scattering что это-d4ac7f4b6821aecb794f61695d169e22. картинка Subsurface scattering что это. картинка d4ac7f4b6821aecb794f61695d169e22применяются для таких эффектов постобработки, как bloom. В этом шейдере мы не выполняем насыщение (saturate) конечного цвета, потому что фильтр bloom будет применён при окончательном рендеринге.

Обратное освещение

В соответствии с уравнениями, описанными в первой части туториала, мы можем написать следующий код:

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

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

Локальная толщина

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

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

С точки зрения шейдера, мы не имеем доступа ни к локальной геометрии, ни к истории лучей света. К сожалению, нет никакой возможности решить эту проблему локально. Лучше всего будет использовать внешнюю карту локальных толщин. Это текстура, связанная с поверхностью, определяющая «толщину» соответствующей части материала. Понятие «толщины» используется произвольно, потому что настоящая толщина зависит от угла, под которым падает свет.

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

На схеме выше показано, что нет уникального понятия «толщины», связанной с красной точкой круга. Количество материала, сквозь которое проходит свет, на самом деле зависит от угла падения света Subsurface scattering что это. ffe7fbad9e8131a5d99bf8feffe52f62. Subsurface scattering что это фото. Subsurface scattering что это-ffe7fbad9e8131a5d99bf8feffe52f62. картинка Subsurface scattering что это. картинка ffe7fbad9e8131a5d99bf8feffe52f62. То есть нам нужно помнить, что весь этот подход к реализации просвечиваемости стремится не к физической точности, а к тому, чтобы обмануть глаз игрока. Ниже (источник) показана хорошая карта локальных толщин, визуализированная на модели статуи. Оттенки белого соответствуют частям, в которых эффект просвечиваемости будет сильнее, аппроксимируя понятие толщины.

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

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

Вместо текстуры толщину можно хранить непосредственно в вершинах.

Окончательная версия

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

В этой реализации локальная толщина хранится в красном канале дополнительной текстуры, сэмплируемой в функции surf:

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

Вот каким получается конечный результат:

Subsurface scattering что это. image loader. Subsurface scattering что это фото. Subsurface scattering что это-image loader. картинка Subsurface scattering что это. картинка image loader

Заключение

Описанный в статье подход основан на решении, представленном на GDC 2011 Колином Баррэ-Бризебуа и Марком Бушаром в докладе Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look.

Все необходимые для запуска проекта файлы (шейдер, текстуры, модели, сцены) можно скачать с моей страницы на Patreon [прим. пер.: за 10 долларов].

Источник

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

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