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

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

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

Физическое описание[править | править код]

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

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

Существует несколько методов реализации подповерхностного рассеивания. Первый метод основан на использовании карты глубины (англ. depth maps). Второй метод использует текстурное пространство. Третий метод — это всевозможные фейковые (ложные) подходы, которые создают видимость использования алгоритма подповерхностного рассеивания, но добиваются этого эффекта другими путями.

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

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

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

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

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

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

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

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

Примечания[править | править код]

  1. Krishnaswamy, A; Baronoski, GVG (2004). «A Biophysically-based Spectral Model of Light Interaction with Human Skin» (PDF). Computer Graphics Forum. Blackwell Publishing. 23 (3): 331. DOI:10.1111/j.1467-8659.2004.00764.x. Проверено 2010-03-09.
  2. Green, Simon (2004). «Real-time Approximations to Subsurface Scattering». GPU Gems. Addison-Wesley Professional: 263—278.
  3. Nagy, Z; Klein, R (2003). «Depth-Peeling for Texture-based Volume Rendering» (PDF). 11th Pacific Conference on Computer Graphics and Applications: 429.
  4. Borshukov, G; Lewis, J. P. (2005). «Realistic human face rendering for "The Matrix Reloaded"» (PDF). Computer Graphics. ACM Press.

Ссылки[править | править код]