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

Подповерхностное рассеивание (англ. Subsurface scattering, SSS) — программная техника (методика) в трёхмерной компьютерной графике, описывающая распространение света через полупрозрачные тела. Суть подповерхностного рассеивания состоит в симуляции распространения света в полупрозрачных сплошных телах (объектах, материалах). Подповерхностное рассеивание описывает механизм распространения света, при котором свет, проникая внутрь полупрозрачного тела через его поверхность, рассеивается внутри самого тела, многократно отражаясь от частиц тела в случайном направлении и на нерегулярные углы. В итоге свет выходит из объекта в выходной точке, отличной от точки вхождения в объект. Подповерхностное рассеивание играет важную роль в трёхмерной компьютерной графике как реального времени, так и в офлайновых вычислениях. Подповерхностное рассеивание необходимо для корректного рендеринга таких материалов, как мрамор, кожа, молоко, нефрит, воск (парафин) и многие другие.

Трёхмерная модель бюста, в освещении которого задействовано подповерхностное рассеивание.
Ещё один пример подповерхностного рассеивания. Модель смоделирована и отрендерена в Blender.

Физическое описание править

Большинство материалов, использующихся в современной компьютерной графике, принимают в учёт только взаимодействие света с поверхностями объектов. В реальности многие материалы являются слегка полупрозрачными. Свет проходит через поверхность материала, внутри которого частично поглощается, частично отражается и рассеивается, и в результате некая его часть покидает материал, но уже под другим углом, с другой интенсивностью и в другом месте. Кожа является отличным примером: только около 6 % света, попадающего на поверхность кожи, непосредственно отражается; 94 % претерпевают трансформации, описанные выше[1]. Прирождённым свойством полупрозрачных материалов является поглощение. Чем больший путь проходит свет сквозь материал, тем большая часть света поглощается этим материалом. Для симуляции этого эффекта должна быть получена мера расстояния, которое свет прошел через материал.

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

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

 
Прямое поверхностное рассеивание (слева) + подповерхностное рассеивание (в центре) = финальный результат (справа)

Метод карт глубины править

 
Оценка глубины с использованием карты глубины.

Метод карт глубины находит расстояние, которое прошел луч света внутри объекта, и на основе этого вычисляет рассеивание. Суть метода заключается в считывании значения из текстуры глубины (из позиции источника света). Этим метод карт глубины очень похож на метод теневых карт.[2] Сцена рендерится с точки зрения источника света в карту глубины; таким образом, расстояние до самой дальней поверхности сохранено. Потом карта глубины проецируется на поверхность с использованием стандартного проективного текстурного маппинга (англ. Projective texture mapping) и после этого сцена рендерится по-новому. В этом проходе, когда затеняется данная точка, расстояние от света в точке, где луч света пересёк поверхность, может быть получена путём простого текстурного поиска. Вычитая это значение точки, где луч покинул объект, мы можем получить расстояние, которое прошел луч внутри объекта.

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

Если модели, к которым применяется подповерхностное рассеивание, не выпуклые, то могут возникнуть проблемы. Однако данная проблема решается с помощью методики «depth peeling[англ.]» (дословно рус. отслаивание глубины)[3]. Аналогичным образом «depth peeling» можно использовать для учёта материалов различной плотности под поверхностью, таких как кости или мышцы, чтобы затем дать более точные модели рассеивания.

Метод диффузии текстурного пространства править

Одним из наиболее очевидных эффектов подповерхностного рассеивания является общая размытость рассеянного (диффузного) света. Вместо того, чтобы произвольно изменять функцию диффузии, можно более точно смоделировать диффузию, симулируя её в текстурном пространстве. Эта методика впервые использовалась для рендеринга лиц в фильме Матрица: Перезагрузка[4], а потом стала использоваться и в интерактивной трёхмерной графике.

Примечания править

  1. Krishnaswamy, A; Baronoski, GVG. A Biophysically-based Spectral Model of Light Interaction with Human Skin (англ.) // Computer Graphics Forum : journal. — Blackwell Publishing, 2004. — Vol. 23, no. 3. — P. 331. — doi:10.1111/j.1467-8659.2004.00764.x. Архивировано 14 октября 2005 года.
  2. Green, Simon. Real-time Approximations to Subsurface Scattering // GPU Gems. — Addison-Wesley Professional, 2004. — С. 263—278.
  3. Nagy, Z; Klein, R. Depth-Peeling for Texture-based Volume Rendering // 11th Pacific Conference on Computer Graphics and Applications. — 2003. — С. 429. Архивировано 29 июля 2007 года.
  4. Borshukov, G; Lewis, J. P. Realistic human face rendering for "The Matrix Reloaded" (англ.) // Computer Graphics : journal. — ACM Press, 2005. Архивировано 16 июня 2016 года.

Ссылки править