Sub Surface Scattering
Наверное вы все уже слышали про это под-поверхностное рассеивание и задаетесь вопросом что это, черт возьми, такое? Хорошо, здесь я расскажу вам всё так, что вы сможете обсуждать такие вещи как BRDF и BSSRDF с Вашими коллегами . И так, начнем.
Первое что вам необходимо знать так это свет. После всего, конечным результатом всего этого под-поверхностного рассеивания и BRDF хлама является реалистичный и аккуратный рендеринг, правильно? Правильно. Мы все знаем что свет (идет ли речь о электрической лампочке или солнце или любом другом источнике света) состоит из лучей. Световых лучей, если хотите. Теперь, что делает рендерер (такой как Final Gathering, mental ray, Lightwave и т.д.) когда визуализирует - вычисляет цвет, интенсивность и направление световых лучей льющихся из отдельного источника. Вы всё ещё со мной? Хорошо.
Теперь с введением radiosity (диффузного отражения) в множество популярных 3D пакетов, у нас появилась возможность получать более реалистичные изображения не тратя десятки тысяч долларов на программы (MAYA? хм... Простите). Так что такое radiosity? Это вычисление "отскоков" световых лучей испускаемых источниками света и самосветящимися моделями. Так вы говорите у вас есть стол на кухне и только один источник света над столом? Без radiosity, всё что что будет освещено этим источником света так это верх стола и пол. С radiosity свет отражается от пола и освещает (частично) низ стола также как и его ножки и всё вокруг. Посмотрите на рисунок 1 для примера.
Пример Radiosity
Sub surface scattering (под-поверхностное рассеивание) это ответвление radiosity, но в отличии от него учитывает информацию о материале из которого "сделана" 3D модель (например, из мрамора, древесины, кожи и т.д). Различные материалы отражают свет по разному. Если вы смотрите на лист в солнечный день и поставите под него руку то увидите сквозь лист её очертания. Этот эффект называется полупрозрачностью, в отличии от прозрачности при которой вещи видны насквозь полностью. Полупрозрачность иллюстрируется на таких материалах как кожа, молоко, листья, кусочек бумаги, на тонкой занавеске и др.
Теперь, с типичным рендерером свет влияет материалы в общем то тем же самым способом. У Вас, вероятно, есть средство управления зеркальностью и диффузией, но это не то. Это означает, что прожектор на 3D руку будет влиять так же как и, например, на деревянную 3D доску (так как значения зеркального и диффузного отражения одинаковы). Sub surface scattering принимает во внимание полупрозрачность материала и (используя radiosity) отражает назад нужные световые лучи в правильном направлении.
Но различные материалы поглощаю свет по разному (вздох, другое осложнение). И что, черт возьми, свет делает, когда попадает, скажем, на кожу? Хорошо, в зависимости от материала, он отражается и рассеивается, а затем покидает материал. Это - то, как мы получаем солнечный загар (или в моем случае, загар рубашки). Не взирая ни на что, в попытке описать это поведение света, было сформулировано огромное множество уравнений с ужасно выглядящими переменными и греческими символами.
Это то место где появляются BRDF и BSSRDF. BRDF расшифровывается как Bidirectional Reflectance Distribution Function (Двунаправленная Функция Отражения и Распределения). Звучит интригующе, нет? Тогда вернитесь к заглавию и попробуйте определить, можем ли мы понимать, что это такое только по имеющимся у нас сведениям. Двунаправленная - значит 2 пути. Мы можем предположить что это означает направления (входящее и выходящее) частного светового луча при попадании в материал и при его покидании. Отражательная способность - хмм: я вижу здесь "отражение" и из описанного выше radiosity, можно сделать вывод, что здесь говорится о качестве отражения световых лучей (отражение значит отскок света назад). Функция Распределения - это только претенциозно звучащие слова что бы сказать "уравнение". BRDF это, в основном, стандартная реализация в большинстве сегодняшних движков рендеринга. Он нерасточительный (касательно циклов CPU) и выдает довольно реалистичные результаты.
Так, а что же такое BSSRDF? Расшифровывается как Bidirectional Surface Scattering Distribution Function (Двунаправленная Функция Поверхностного Рассеивания и Распределения). Эта функция это намного более аккуратный способ описания путей входа и выхода света из материала. BSSRDF может описать перемещение света между любыми двумя лучами которые попадают на поверхность, тогда как BRDF предполагает что свет входит и выходит из материала в одной и той же точке. Подумайте вот об этом: Сделаем вид что мы сходим в дом BSSRDF и поплаваем его фантастическом, размером с Олимпийский, бассейне. Так как мы находимся в сфере влияния BSSRDF, мы можем нырнуть поглубже, затем поплавать вокруг и в конце концов вылезти на мелководье. С другой стороны, если мы находимся в бассейне BRDF, то, если мы прыгнули в воду с вышки, то и выходить из воды должны тоже через вышку. Звучит глупо, да? Хорошо, в этом приложении это так. Но в компьютерном графическом рендеринге различия между BSSRDF и BRDF могут быть как большими так и малыми. Если мы, например, рендерим машину, то различия могут быть незначительны. Но когда мы рендерим что-то содержащее полупрозрачность (например кожу, молоко, листья, ткань и др.) то результат будет совершенно неверным. Конечно, вы можете включить radiosity, мягкие тени и прочее, но результат всё равно будет неверным.
Так что же такое "sub surface scattering"? Это эффект когда свет входит в материал под определенным углом, а покидает в совершенно ином месте и под иным углом. Всё просто, неправда ли? Но принимая во внимание все то, что мы узнали к этому времени, легко заметить почему настолько желательно достигнуть точности в выражении. Уже проделана огромная работа (Паулем Дебевеком, Университетами Cornell, Brown и Stanford и другими) для восстановления точного уравнения.
Преимущества под-поверхностного рассеивания
Теперь некоторые из Вас могут подумать: "Эй, да эта штука "под-поверхностное рассеивание" не такая уж и сложная!", а другие "Когда этот парень перестанет слоняться?". И тем не менее другие могли бы задаваться вопросом: "Эй, да это "под-поверхностное рассеивание" выглядит подобно преломлению". И эти люди будут в чем-то правы. "Sub surface scattering" это когда свет отскакивает внутри материала и выходит из другой точки. Преломление не имеет никакого отношения к световым лучам, которые оставляют поверхность. Скорее, этот эффект относится к свету, который проходит через материал. Это - свет, который "согнут" и заставляет карандаши казаться согнутым в стакане воды или заставляет вашу ногу казаться согнутой в водоеме. Так что это - то, чем под-поверхностное рассеивание отличается от преломления.
Хорошо, ели вы добрались так далеко, то, надеюсь, вы уже лучше понимаете что такое под-поверхностное рассеивание и как оно влияет на рендеринг. Я ни в коем случае не эксперт по этому предмету. Я только думал, что смогу помочь другим понять это явление, как его понимаю я.. Пожалуйста не стесняйтесь посылать мне электронную почту с исправлениями или вопросами.
Ссылки по теме:
A plethora of technical links about everything from lighting to water simulations.
A Practical Model for Subsurface Light Transport by folks at Stanford University.
Monte Carlo Evaluation of Non-Linear Scattering Equations for Subsurface Reflection by the good folks at Stanford.
FinalRender - the first render engine to feature sub surface scattering.
Источник: CG Focus