3D Engineering

...Лучшее из общего.

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Наверное вы все уже слышали про это подповерхностное рассеивание...

Наверное вы все уже слышали про это под-поверхностное рассеивание и задаетесь вопросом что это, черт возьми, такое? Хорошо, здесь я расскажу вам всё так, что вы сможете обсуждать такие вещи как 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, мягкие тени и прочее, но результат всё равно будет неверным.


BRDF против BSSRDF

Так что же такое "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

 

Архив статей

 апр   Май 2020   июн

ВПВСЧПС
   1  2
  3  4  5  6  7  8  9
10111213141516
17181920212223
24252627282930
31 
Julianna Walker Willis Technology

Случайная новость

Jenya Rvachov
От автора.
Здравствуйте.
Меня зовут Евгений.
Работаю в области 3d более трех лет. Начинал изучение трьохмерной графики с пакета 3ds max.
Сейчас работаю исключительно в пакете Maya.
Идеей написания урока послужила цель создать проект с использованием первого, как для многих тридешников так и для меня, пакета трехмерной графики 3ds max.

Финальная картинка: cocktail

В этом уроке я хочу рассказать, как создать реалистичную динамику жидкости по средствам программы RealFlow с последующей визуализацией в 3 ds max . Данный урок рассчитан для тех кто уже имеет представления о динамики жидкостей и знаком с программой RealFlow .

 

Работа состоит из следующих этапов:

 

  1. требуется отмоделить емкость, которая будет содержать наш коктейль.
  2. В программе RealFlow создать источники частиц и настроить их симуляцию.
  3. Созданную симуляцию преобразуем в анимированный меш.
  4. В среде 3 ds max загружаем секвенцию анимированного меша.
  5. Настраиваем освещение и материалы сцены.

 

Начнем.

 

1. Для моделирования емкости, я отмоделил стакан элементарной формы.

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

 

2. Запускаем RealFlow , создаем проект.

Трек анимации увеличим до 200 кадров. Импортируем нашу емкость. Для экспорта в 3 ds max я использовал формат obj .

Но если вы захотите в 3 ds max создать анимацию стакана, то для экспорта используйте формат sd . Данный формат доступен после установки плагина для 3 ds max , который можно скачать с официального сайта http://www.nextlimit.com

После того как емкость импортирована в RealFlow , следует создать источники частиц. Я использовал спрей для частиц типа Circle . Для создания силы тяжести был использован Daemon --> Gravity.

Для того чтобы наш коктейль содержал разные жидкости, было создано три источника частиц Circle и угол для спрея выбран таким образом чтобы все источники были направлены в центр стакана.

Настройки параметров симуляции частиц можно увидеть на рисунке ниже. Хочу заметить что параметр плотность ( Density ) влияет на плотность жидкой среды (в Кг/м^3). Для воды значение по умолчанию = 1000. Чем выше плотность, тем медленнее и тяжелее жидкая среда. Разрешающая способность ( Resolution ) влияет на количество частиц представляющих жидкую среду. Чем больше разрешение, тем больше количество частиц, причем более легких. Высокое разрешение дает более разнообразное и гладкое поведение жидкой среды. Но не советуется выбирать большое разрешение (требует высоких ресурсных затрат)

Настройте параметры симуляции для всех трех источников. Но для того чтобы жидкости испускаемые из трех источников отличались, параметр плотность ( Density ) настроим для каждого из спреев разным. Я взял для первого источника плотность равную 1000, для второго 1200, и для третьего 800. Поварьируйте с данным параметром.

Далее требуется настроить параметры столкновения частиц с объектом, в нашем случаи это стакан. Данная вкладка доступна только после создания источников частиц и гравитации. Все параметры оставьте по умолчанию, только измените параметр прилипание ( Sticky ). Коэффициент прилипания представляет собой силу, которая пытается удержать частицы на гранях объекта. Этот параметр имеет широкий диапазон значений, поскольку степень прилипания зависит от силы притяжения и вида жидкости. Советую взять значения силы тяжести , а затем изменяйте его до получения желаемого результата. Я использовал значение Sticky равное 50.

После того как свойства объекта настроены, переходим к симуляции частиц. Ниже на рисунке изображена симуляция частиц из трех источников.

Остановите симуляцию тогда, когда жидкость заполнит емкость на 30%. Я остановил симуляцию на 50 кадре. Поставьте по два ключа анимации для параметра speed , для 50 кадра поставьте ключ равный параметру speed = 2, на 51 кадре измените speed до 0 и поставьте ключ. Проделайте данную операцию для всех источников. Таким образом после 51 кадра частицы испускаться не будут. Смело нажимайте на кнопку Simulate , просчитайте симуляцию до конца трека.

3. Симуляция частиц закончена. Теперь следует создать и настроить три меша для каждого из источников.

Применяем для меша по одному флюиду. Жмем ОК. Для остальных двух мешов проделаем такую же операцию. В результате у вас должно получится следующее:

Настройки меша представлены ниже на рисунке. Поварьируйте с такими параметрами как Relaxation во вкладке Filters так и с параметром Radius во вкладке Field . Для остальных двух мешов создайте такие же настройки.

После того как меш настроен, просчитаем создание сетки для каждого из кадров анимации. На рисунке ниже изображен просчет меша для 47 кадра.

4. Загружаем 3 ds max . Подгружаем нашу секвенцию меша, сохраненную в вашем флововском пректе в папке meshes. Так как мы создавали меш для каждого из источников частиц, то папка meshes должна содержать 600 файлов с расширением bin , 200 файлов на каждый источник. В 3ds max создадим три сетки.

5. Создайте окружение, источники света, настройте материалы по вкусу.

Для жидкости я использовал разные материалы, что бы создать эффект смешивания.

Надеюсь, вы нашли для себя хоть что-то полезное в этом уроке.

Поварьировав с некоторыми параметрами вы сможете добиться отличных результатов.

Спасибо за внимание.

далее