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

Матеріал з Вікіпедії — вільної енциклопедії.
Версія від 15:11, 20 червня 2021, створена Lxlalexlxl (обговорення | внесок) (Створено шляхом перекладу сторінки «Подповерхностное рассеивание»)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку
Тривимірна модель бюста, в освітленні якого використано підповерхневе розсіювання.
Ще один приклад підповерхневого розсіювання. Змодельовано і візуалізовано в 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 (23 May). — 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. — 23 травня. — С. 263—278.
  3. Nagy, Z; Klein, R. Depth-Peeling for Texture-based Volume Rendering // 11th Pacific Conference on Computer Graphics and Applications. — 2003. — 23 травня. — С. 429.
  4. Borshukov, G; Lewis, J. P. Realistic human face rendering for "The Matrix Reloaded" // Computer Graphics : journal. — ACM Press, 2005. — 23 May.

Посилання

  • 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. Процитовано 9 березня 2010.
  • Chaos Group (4 січня 2005). Суб-поверхностные эффекты в VRay. 3Dcenter. с. 2. Процитовано 9 березня 2010.{{cite web}}: Обслуговування CS1: Сторінки з параметром url-status, але без параметра archive-url (посилання)
  • SSS: Subsurface scattering (Подповерхностное рассеивание). GameDev.ru. 30 червня 2009. Процитовано 9 березня 2010.{{cite web}}: Обслуговування CS1: Сторінки з параметром url-status, але без параметра archive-url (посилання)
  • Сергей Резник (30 червня 2009). Моделирование подповерхностного рассеивания. GameDev.ru. Процитовано 9 березня 2010.{{cite web}}: Обслуговування CS1: Сторінки з параметром url-status, але без параметра archive-url (посилання)
  • Striver (Перевод). Subsurface Scattering (SSS) - Подповерхностное Рассеивание. BlenderУкраина. Архів оригіналу за 19 квітня 2012. Процитовано 9 березня 2010.