Підповерхневе розсіювання

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Тривимірна модель бюста, в освітленні якого використано підповерхневе розсіювання.
Ще один приклад підповерхневого розсіювання. Змодельовано і візуалізовано в Blender.

Підповерхневе розсіювання (англ. Subsurface scattering, SSS) - програмна техніка (методика) в тривимірній комп'ютерній графіці, яка описує поширення світла через напівпрозорі тіла.

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

Фізичний опис

[ред. | ред. код]

Більшість матеріалів, що використовуються в сучасній комп'ютерній графіці, враховують тільки взаємодію світла з поверхнями об'єктів. Насправді безліч матеріалів є дещо напівпрозорим. Світло проходить через поверхню матеріалу, всередині якого частково поглинається, частково відбивається і розсіюється, після чого якась його частина залишає матеріал, але вже під іншим кутом, з іншого інтенсивністю і в іншому місці. Шкіра є гарним прикладом: тільки близько 6% світла, що потрапляє на поверхню шкіри, відбивається безпосередньо; 94% зазнають описаних вище перетворень.[1] Природженою властивістю напівпрозорих матеріалів є поглинання. Що більший шлях проходить світло крізь матеріал, то більшу частину світла він поглинає. Для симуляції цього ефекту слід отримати міру відстані, яку світло пройшло через матеріал.

Методики рендерингу підповерхневого розсіювання

[ред. | ред. код]

Існує кілька методів реалізації підповерхневого розсіювання. Перший метод заснований на використанні карти глибини (англ. depth map) Другий метод використовує текстурний простір. Третій метод - це всілякі фейкові (несправжні) підходи, які імітують використання алгоритму підповерхневого розсіювання, але досягають цього ефекту іншими шляхами.

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

Метод карт глибини

[ред. | ред. код]
Оцінення глибини з використанням карти глибини.

У методі карт глибини шукається відстань, пройдена променем світла всередині об'єкта, і на її основі обчислюється розсіювання. Суть методу полягає у зчитуванні значення з текстури глибини (з позиції джерела світла). Цим метод карт глибини схожий на метод тіньових карт.[2] Сцена рендериться з точки зору джерела світла в карту глибини; таким чином, відстань до найближчої поверхні збережено. Потім карта глибини проєктується на поверхню з використанням стандартного проєктивного текстурного мапінгу[en], і після цього сцена рендериться знову. У цьому проході, коли відтінюється ця точка, відстань від світла в точці, де промінь світла перетнув поверхню, може бути отримана простим текстурним пошуком. Віднімаючи це від значення точки, де промінь залишив об'єкт, можна отримати відстань, пройдену променем усередині об'єкта.

Значення відстані, отримуване цим методом, можна використати декількома способами. Одним з них є використання значення відстані в індексі, який безпосередньо використовує художник при створенні одновимірної текстури, яка буде експоненційно спадати з відстанню. Цей підхід у комбінації з іншими традиційними моделями освітлення дозволяє створювати різні матеріали, такі як жад і віск.

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

Метод розсіювання текстурного простору

[ред. | ред. код]

Одним з найочевидніших ефектів підповерхневого розсіювання є загальна розмитість розсіяного (дифузного) світла. Замість того, щоб довільно змінювати функцію розсіювання, можна точніше змоделювати розсіювання, симулюючи її в текстурному просторі. Цю методику вперше використано для рендерингу облич у фільмі Матриця: Перезавантаження[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 (31 October). — P. 331. — DOI:10.1111/j.1467-8659.2004.00764.x. Архівовано з джерела 14 жовтня 2005. Процитовано 2010-03-09.
  2. Green, Simon. Real-time Approximations to Subsurface Scattering // GPU Gems. — Addison-Wesley Professional, 2004. — 31 жовтня. — С. 263—278.
  3. Nagy, Z; Klein, R. Depth-Peeling for Texture-based Volume Rendering // 11th Pacific Conference on Computer Graphics and Applications. — 2003. — 31 жовтня. — С. 429. Архівовано з джерела 29 липня 2007. Процитовано 20 червня 2021.
  4. Borshukov, G; Lewis, J. P. Realistic human face rendering for "The Matrix Reloaded" // Computer Graphics : journal. — ACM Press, 2005. — 31 October. Архівовано з джерела 16 червня 2016. Процитовано 20 червня 2021.

Посилання

[ред. | ред. код]
  • Simon Green (2004). Chapter 16. Real-Time Approximations to Subsurface Scattering. Addison–Wesley (англ.). GPU Gems 1. Архів оригіналу за 19 квітня 2012. Процитовано 9 березня 2010.
  • James Song (2007). Sub Surface Scattering. Render.ru. Архів оригіналу за 22 червня 2015. Процитовано 9 березня 2010.
  • Chaos Group (4 січня 2005). Суб-поверхностные эффекты в VRay. 3Dcenter. с. 2. Архів оригіналу за 19 квітня 2012. Процитовано 9 березня 2010.
  • SSS: Subsurface scattering (Подповерхностное рассеивание). GameDev.ru. 30 червня 2009. Архів оригіналу за 26 березня 2012. Процитовано 9 березня 2010.
  • Сергей Резник (30 червня 2009). Моделирование подповерхностного рассеивания. GameDev.ru. Архів оригіналу за 15 квітня 2012. Процитовано 9 березня 2010.
  • Striver (Перевод). Subsurface Scattering (SSS) - Подповерхностное Рассеивание. BlenderУкраина. Архів оригіналу за 19 квітня 2012. Процитовано 9 березня 2010.