Подповерхностное рассеивание
Подповерхностное рассеивание (англ. Subsurface scattering, SSS) — программная техника (методика) в трёхмерной компьютерной графике, описывающая распространение света через полупрозрачные тела. Суть подповерхностного рассеивания состоит в симуляции распространения света в полупрозрачных сплошных телах (объектах, материалах). Подповерхностное рассеивание описывает механизм распространения света, при котором свет, проникая внутрь полупрозрачного тела через его поверхность, рассеивается внутри самого тела, многократно отражаясь от частиц тела в случайном направлении и на нерегулярные углы. В итоге свет выходит из объекта в выходной точке, отличной от точки вхождения в объект. Подповерхностное рассеивание играет важную роль в трёхмерной компьютерной графике как реального времени, так и в офлайновых вычислениях. Подповерхностное рассеивание необходимо для корректного рендеринга таких материалов, как мрамор, кожа, молоко, нефрит, воск (парафин) и многие другие.
Физическое описание
Большинство материалов, использующихся в современной компьютерной графике, принимают в учёт только взаимодействие света с поверхностями объектов. В реальности многие материалы являются слегка полупрозрачными. Свет проходит через поверхность материала, внутри которого частично поглощается, частично отражается и рассеивается, и в результате некая его часть покидает материал, но уже под другим углом, с другой интенсивностью и в другом месте. Кожа является отличным примером: только около 6 % света, попадающего на поверхность кожи, непосредственно отражается; 94 % претерпевают трансформации, описанные выше[1]. Прирождённым свойством полупрозрачных материалов является поглощение. Чем больший путь проходит свет сквозь материал, тем большая часть света поглощается этим материалом. Для симуляции этого эффекта должна быть получена мера расстояния, которое свет прошел через материал.
Методики рендеринга подповерхностного рассеивания
Существует несколько методов реализации подповерхностного рассеивания. Первый метод основан на использовании карты глубины (англ. depth maps). Второй метод использует текстурное пространство. Третий метод — это всевозможные фейковые (ложные) подходы, которые создают видимость использования алгоритма подповерхностного рассеивания, но добиваются этого эффекта другими путями.
Метод карт глубины
Метод карт глубины находит расстояние, которое прошел луч света внутри объекта, и на основе этого вычисляет рассеивание. Суть метода заключается в считывании значения из текстуры глубины (из позиции источника света). Этим метод карт глубины очень похож на метод теневых карт.[2] Сцена рендерится с точки зрения источника света в карту глубины; таким образом, расстояние до самой дальней поверхности сохранено. Потом карта глубины проецируется на поверхность с использованием стандартного проективного текстурного маппинга (англ. Projective texture mapping) и после этого сцена рендерится по-новому. В этом проходе, когда затеняется данная точка, расстояние от света в точке, где луч света пересёк поверхность, может быть получена путём простого текстурного поиска. Вычитая это значение точки, где луч покинул объект, мы можем получить расстояние, которое прошел луч внутри объекта.
Значение расстояния, получаемое этим методом, может использоваться несколькими способами. Одним из таких путей является использование величины расстояния в индексе, который непосредственно использует художник при создании одномерной текстуры, которая будет экспоненциально убывать с расстоянием. Этот подход в комбинации с другими более традиционными моделями освещения позволяет создавать различные материалы, такие как жад и воск.
Если модели, к которым применяется подповерхностное рассеивание, не выпуклые, то могут возникнуть проблемы. Однако данная проблема решается с помощью методики «depth peeling» (дословно рус. отслаивание глубины)[3]. Аналогичным образом «depth peeling» можно использовать для учёта материалов различной плотности под поверхностью, таких как кости или мышцы, чтобы затем дать более точные модели рассеивания.
Метод диффузии текстурного пространства
Одним из наиболее очевидных эффектов подповерхностного рассеивания является общая размытость рассеянного (диффузного) света. Вместо того, чтобы произвольно изменять функцию диффузии, можно более точно смоделировать диффузию, симулируя её в текстурном пространстве. Эта методика впервые использовалась для рендеринга лиц в фильме Матрица: Перезагрузка[4], а потом стала использоваться и в интерактивной трёхмерной графике.
Примечания
- 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 года.
- Green, Simon. Real-time Approximations to Subsurface Scattering // GPU Gems. — Addison-Wesley Professional, 2004. — С. 263—278.
- Nagy, Z; Klein, R. Depth-Peeling for Texture-based Volume Rendering // 11th Pacific Conference on Computer Graphics and Applications. — 2003. — С. 429.
- Borshukov, G; Lewis, J. P. Realistic human face rendering for "The Matrix Reloaded" (англ.) // Computer Graphics : journal. — ACM Press, 2005.
Ссылки
- Simon Green. Chapter 16. Real-Time Approximations to Subsurface Scattering (англ.) (недоступная ссылка). Addison–Wesley. GPU Gems 1 (2004). Дата обращения: 9 марта 2010. Архивировано 19 апреля 2012 года.
- James Song. Sub Surface Scattering . Render.ru (2007). Дата обращения: 9 марта 2010.
- Chaos Group. Суб-поверхностные эффекты в VRay 2. 3Dcenter (4 января 2005). Дата обращения: 9 марта 2010.
- SSS: Subsurface scattering (Подповерхностное рассеивание) . GameDev.ru (30 июня 2009). Дата обращения: 9 марта 2010.
- Сергей Резник. Моделирование подповерхностного рассеивания . GameDev.ru (30 июня 2009). Дата обращения: 9 марта 2010.
- Striver (Перевод). Subsurface Scattering (SSS) - Подповерхностное Рассеивание . BlenderУкраина. Дата обращения: 9 марта 2010. Архивировано 19 апреля 2012 года.