Наша новая игра 8 сентября в раннем доступе на steam



Надеюсь, что эта статья сделает из вас профессионала и работа в Донецке для тридешника (которую, кстати, удобно искать на портале Slando) вас быстренько найдёт. Ну или вы её 😉

Фотореалистичные материалы: металлы, диэлектрики

UPD: Добавил примеры glare, glow, flare, bloom, хроматических аберраций, виньетирования и прочего.

Это последняя часть серии статей о создании реалистичного 3D.

Ссылки на предыдущие части:

  1. Лучшие способы получить худшую 3D-картинку,
  2. Частые ошибки текстурирования,
  3. Засветка изображения. Каустика,
  4. Отражения. BRDF: Lambert, Oren Nayar, Blinn, Phong, Ward, Cook-Torrance,
  5. Преломление света, полупрозрачность.

Проводники (Металлы).

У металлов нет диффузной составляющей, так как они не рассеивают свет под поверхностью (вернее, рассеивают, но такое ничтожное количество фотонов, что его можно запросто игнорировать). У них есть только зеркальные отражения.

Металлы окрашивают отражения, а диэлектрики нет, поскольку у металлов намного больше значение поглощения определенной длины волны во время процесса поверхностного отражения. Именно поэтому у металлов зеркальные отражения цветные, а у диэлектриков без окраса.

Но при этом у металлов коэффициент преломления (IOR) НЕ больше чем у неметаллов. К примеру, у золота IOR всего лишь ~0,47. Все дело в том, что у металлов большОе значение комплексной составляющей IOR, из-за чего значительным образом изменяется форма френелевских кривых.

Но так уж совпало, что если взять огромные значения (20-1000) реальной части френелевского уравнения и при этом обнулить комплексную часть, то это даст такую же форму кривой, как и для правильного комплексного френелевского уравнения.

Именно поэтому, я полагаю, в документации к рендереру Maxwell советуют использовать такие огромные значения IOR для металлов и даже пытаются при этом объяснить это "большОй плотностью" металлов (что является полной ерундой).

В случае с металлами свет либо поглощается, либо отражается поверхностью. Величина отражений фотонов, которые попали под поверхность и, отразившись, вылетели обратно, настолько мала, что её игнорируют.

Идеальных зеркальных отражений не имеет ни один из реально существующих материалов. Полированный металл, стекло и вода очень близки к идеальному отражению, но все равно имеют значения отличные от 100%.

Эффект поглощения определенной длины волны света для диэлектриков (мы видим как цвет диэлектрика) – это в основном заслуга именно подповерхностного эффекта. А для металлов это в основном заслуга поверхностного эффекта.

Френелевские отражения для диэлектриков и металлов.

Правило Френеля также применимо и для металлов, но вы должны быть уверены, что используете полное выражение, а не урезанную (упрощенную) часть, которую используют для убыстрения вычислений в случае с диэлектриками.

Оно описывает отношение между отраженным и поглощенным светом.

Большинство шейдеров не используют комплексную френелевскую функцию.

Для диэлектриков обычно берется упрощенная версия уравнения, в которой используется только одно значение – n (это ваше значение IOR в настройках материала/шейдера) в качестве входного (угол падения берется из рендерера). Для металлов же должно использоваться полное уравнение, где входных значений должно быть как минимум два – n и k (разброс), а также должны использоваться комплексные числа.

В упрощенном уравнении попросту обнуляют переменную k (таким образом, остается только одна переменная и не нужно париться с комплексными числами). Но вся загвоздка в том, что нулевое значение k работает только для диэлектриков и не работает для металлов, которые имеют составляющую k, изменяющуюся в широких пределах.

А теперь прибавьте к этому тот факт, что не только разные материалы, но и разные длины волн (!) падающего света приводят к различным значениям n и k. Таким образом уравнение может быть очень сложным.

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

Однако это может быть очень заметно для металлов. К примеру, именно все эти комплексные значения приводят к тому, что у меди цвет отражений изменяется в зависимости от угла падения света (немножко зеленоватые отражения при скользящем угле).

Таким образом, идеально было бы для металлов иметь таблицу со значениями n и k для всего видимого спектра. Именно это объясняет почему значение n (или IOR), которое мы видим во всех шейдерах/материалах бесполезно, когда дело доходит до настройки материала металла. Всё просто, нам ведь нужно еще значение k, а оптимальный вариант – это когда n и k можно задать для каждой длины волны всего видимого спектра.

Но поскольку большинство тридешников не умеют писать свои шейдеры, то для металлов используют IOR со значением больше 20, что дает такую же кривую отражений френеля, как для комплексного уравнения.

IOR коэффициент преломления для металлов

Вероятно, именно поэтому нельзя в один клик заставить V-Ray окрашивать отражения в определенный цвет (как у золота, меди и других металлов).

Лучше, конечно же, было бы, если такие выражения изначально встроили в рендереры. Возможно, так в будущем и будет.

Диэлектрики

Проходит свет под поверхность материала или отражается, зависит от угла падения фотона на поверхность, а также от коэффициента преломления материала.

Затухание френелевских отражений – это соотношение между поверхностным (зеркальным) и подповерхностным (диффузным) отражением.

Все диэлектрики имеют френелевские отражения, так что вы всегда должны использовать френелевское затухание (Fresnel Fallof) для их отражений.

Френелевский коэффициет преломления контроллирует соотношение между отражениями в направлении камеры и отражениями в противоположную сторону от камеры. Чем выше значение IOR, тем меньшая разница.

Френелевские отражения  это НЕ линейная зависимость и для их описания используется особая кривая: более пологая в начале и очень крутая под конец.

Кривые Френеля для отражений

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

Это очень похоже на город с голубыми крышами и красными улицами. Если вы смотрите на этот город с дороги на некотором удалении, то видите только голубые крыши. Когда вы пролетаете над городом на самолете, то также видите очень много красных улиц. Но при этом величина крыш и улиц всегда одна и та же.

Зеркальные отражения диэлектриков никогда не окрашиваются.

В случае с диэлектриками часть света всегда поглощается - это как основа компьютерной графики.

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

Третья часть света отскакивает/отражается от поверхности материала.

Уравнения Френеля не имеют ничего общего с микрогеометрией поверхности. Это просто статистическое среднее квантового эффекта. Т.е. с помощью уравнения Френеля описываются взаимодействия, которые зависят от атомной структуры материала.

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

Таким образом, именно электромагнитные свойства материала решают (грубо говоря) какой фотон (и с какой длиной волны) отразится, какой пройдет сквозь материал, а какой поглотится. Именно это мы моделируем с помощью уравнений Френеля.

А с другой стороны именно микроструктура поверхности решает в какую сторону будет рассеиваться множество фотонов. И это моделируется с помощью BRDF.

Настройка затухания по Френелю (для mental ray и подобных):

Сначала вы начинаете увеличивать отражения в противоположную сторону от камеры (отражения на 90 градусов) и только когда они достигают максимума, вы начинаете увеличивать отражения в сторону камеры (отражения на 0 градусов).

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

Выводы.

Для трассируемого научно обоснованного шейдера/материала вы должны иметь:

Поверхность:

  • Поглощение (цвет)
  • Шероховатость

Переключатель Френеля между поверхностными и подповерхностными эффектами.

Под поверхностью:

  • Ползунок поглощение-пропускание (цвет)
  • Шероховатость
  • Глубина (как глубоко может проникнуть свет в материал)

Также вы должны быть на "ты" со всеми настройками реальных камер, с физическими эффектами связанными с фотографией, а также понимать как их использовать/реализовать в вашем 3D-редакторе.

Камеры:

  • экспозиция;
  • motion blur (размытие в движении);
  • глубина резкости (эффект боке);
  • баланс белого;
  • glare (засветка), glow (сияние), flare (блик), bloom (ореол). В правильном переводе этих терминов я не уверен, поскольку все они по сути означают одно и то же. Так что жду от вас предложений.
  • хроматические аберрации - цветные следы вокруг контрастных объектов;
  • виньетирование - затемнение кадра в углах изображения;
  • дисторсия объектива.

Анаморфный Flare
Anamorphic Flare - Анаморфный блик

Блюм Bloom Ореол
Bloom (блюм) - ореол

Яркий Glow
Bright Glow - яркое сияние

Мягкий Glow
Soft Glow - мягкое сияние

Выгоревший Glare
Glare Burnout - выгоревшая засветка

Flare от линз
Lens Flare - блик от линз

Отраженный Glare
Reflecting Glare - отраженная засветка

Призрачный Glare
Glare Ghosting - призрачная засветка

Хроматические аберрации
Chromatic Aberration - хроматические аберрации

Виньетирование
Vignette - виньетирование

За картинки к примерам спасибо Andrew Price.

Это основные, но также есть и куча других. Обо всем этом я напишу отдельные статьи.



Подпишитесь на обновление блога (вот 3 причины для этого).
Введите ваш e-mail:


P.S. Женщина на картинке в начале статьи является частью отличного 3D-проекта "Вот только эта последняя работа" чеха Filip Novy. Сделал он её в 3ds max (рендерил с помощью mental ray), текстуры и дорисовка в Photoshop, моделил в ZBrush. Обсуждение работы и сама работа тут.




Вам понравилась статья? Хотите отблагодарить автора? Расскажите о ней друзьям.
Или подпишитесь на обновление блога по E-Mail.

Введите ваш e-mail (используется только для отправления обновлений блога):

комментариев 26 к статье “Наука создания фотореалистичного 3D (часть6). Реалистичные металлы, диэлектрики. Отражения по Френелю”

  1. «Вероятно, именно поэтому нельзя в один клик заставить V-Ray окрашивать отражения в определенный цвет (как у золота, меди и других металлов).»

    — Почему нельзя? Ровно в один клик я это и делаю! Например чтобы сделать золото, цвет материала делаю почти полностью черным, а цвет отражения желто-слегка зеленым-немного серым ))) и естественно отражения … и все аля золото. Подходит для имитации золота например на каких-нибуть заставках логотипов и подобное. Об какойто точной настроки сказать не могу, возможно для фотореализма надо сделать чтото по более.

    Про IOR для металлов и отражения френеля знал, но нигде не читал толкования…интересный подход, щас буду пробовать как этот параметр отразиться на фотореализме…

    • У вас блик все равно при этом будет белый, а не желтый.

      • Может мы имеем ввиду разные вещи?
        http://tridaykl.org.ua/uploads/posts/2011-03/1299172613_blik-jeltiy.jpg

        • Ух. Век живи — век учись 😉 Спасибо
          Оказывается, что блик будет цветным (не белым), если Saturation (насыщенность) цвета в слоте Reflect очень близка к своему предельному значению (255).

          И при этом, если значение Refl. glossiness будет малым (0.66 как у вас на картинке), то Saturation цвета в слоте Reflect может и НЕ быть близка к 255.
          Но если нужна зеркальная металлическая поверхность, а не мутная (как у вас на примере), то увеличение Refl. glossiness должно сопровождаться с увеличением Saturation цвета в слоте Reflect.

          Надеюсь понятно описал…

  2. По моему у Вас слишком заумный подход, либо у вас не max+vray )))
    Настройки почти дефолтные, как и говорил, практически в один клик меняеться цвет блика…
    На сколько мне известно (кажеться вы писали в тексте выше) не бывает идеально зеркальных поврехностей. Соответственно reflect никогда не будет 255! и reflect glosines тоже не будет навен 1! И по этому скорее всего если даже вы поставите в reflect glosines 1 поверхность будет идеально зеркальная, а объекты которые в ней отразяться все равно приобретут желтоватый оттенок(в нашем случае). Я там никогда не ставлю 1, только минимум 0,99 и при этом мы уже сможем наблюдать маленькую засвеченную точку-блик НО ЖЕЛТОГО ЦВЕТА прям как на капельке росы, но желтую )))

    «Но если нужна зеркальная металлическая поверхность, а не мутная (как у вас на примере), то увеличение Refl. glossiness должно сопровождаться с увеличением Saturation цвета в слоте Reflect.»
    — НЕТ просто пятно засвета (блика) будет меньше.

    Это же легко в максе посмотреть. Я чет не догоняю, вы че не в нем работаете? Я почему то думал был почти уверен что в нем, но почему тогда вам не известно это?

  3. Может с картинками станет понятнее.
    Мутные отражения на металле, блик цветной:
    мутные отражения на металле, блик цветной

    Зеркальные отражения на металле, блик бесцветный — белый:
    зеркальные отражения на металле, блик бесцветный - белый

    Зеркальные отражения на металле, блик цветной:
    зеркальные отражения на металле, блик цветной

    • Он (блик) не белый. Он просто очень яркий, поэтому клампится в белый, так как в нем «смешение цветов», что правильно:
      Слитки золота
      На последней картинке он клампится в желтый так как больше не во что, и это не труъ )

      • Это замечание можешь выпилить, просто совет — и тут, и на рендере слишком много неточностей и поверхностного объяснения, так как нет четкого понимания _математической_ модели, не всегдаполностью соотвествующей физике

      • Ёлки-дрова! Как я упустил этот нюанс. Всё верно — блик и должен клампиться (обрезаться по яркостному параметру) в белый цвет.
        Но при этом отражения, которые не клампятся, окрашиваются в цвет металла.

  4. Как я и думал ) возьмите пипеткой и кликните в центр БЕЛОГО блика он не будет идеально белым )
    Но вы и я близки к своей правоте ровно на величину погрешности )
    Чем ближе отражающая поверхность к идеалу, тем точнее блик передает цвет источника света.
    По этому все таки подведу свое резюме: все таки блик можно сделать цветным почти на зекральных поверхностях в vray почти в 2 клика )

    • 🙂
      Я же привел цвет блика. Он именно идеально 100500% белый, пока значение Saturation не достигает 255. Т.е. даже при 253 — блик все еще 100% белый.
      Но то, что теперь можно достичь цветного блика в один клик — это я уж понял 😉

  5. Уже в который раз встречаю подповерхностное отражение в контексте френелевских. Если я еще не съехал с катушек, то диффузное отражение, что ни на есть самое поверхностное и никаким боком не касается подповерхностного отражения. Блин, все ведь просто. Абсолютно диффузная поверхность отражает равномерно во всех направлениях, причина этому шершавая поверхность. Все, никаких ПОДповерхностей рассматривать не имеет смысла. Если я ошибаюсь, поправьте меня. В англ. языке даже различие есть: diffuse reflection и subsurface reflection (чаще обобщается c SSS).

  6. Все, понял в чем дело, дочитав до конца. Либо автор не в теме, либо путает термины. Так как: «Дело в том, что функция Френеля работает только для идеально гладких поверхностей.» есть полный бред. Представь себе идеально гладкую поверхность. Это значит, что все фотоны отражаются, и ни одного не заблуждается в складках шероховатости, а значит отражения будут идти с одинаковой интенсивностью под любым углом и кривая Френеля превращается «ровную» Френеля (на уровне полного отражения). Соответственно использовать ее просто не имеет смысла. Что есть прямо противоположным твоему заявлению. Тоже самое с ламбертовской поверхностью. Она рассеивает отражения одинаково во все стороны и под каким бы углом не смотрел их сила будет одинаковой, как следствие, кривая опять превращается в «ровную» (но на нулевом уровне отражательной способности Glossiness) и смысл использовании эффетка Френеля опять теряется. Так как в природе нет ни того ни другого, то и появилась эта функция. Суть функции в том, чтобы балансировать между отражением и рассеиванием. А рассеивание берется как раз от шероховатости.

    И вообще, я не нашел в статье ничего, что хоть как-то касалось бы подповерхности. Если представить что все материалы статьи имеют толщину слоя в один атом, ничего бы кардинально в ней не изменилось.

    • Вы сами загнали себя в тупик.
      «Дело в том, что функция Френеля работает только для идеально гладких поверхностей.» — это действительно так (почитайте хоть на вики, хоть в любом учебнике по физике). То что поверхность идеально (или почти идеально) гладкая не значит, что она будет отражать для любого угла одинаково. Это лишь значит, что в отражения не будет вмешиваться диффузная составляющая.
      Френелевская кривая именно потому кривая, что при падении электромагнитной волны перпендикулярно поверхности, большой процент волн поглощается. А при падении под скользким углом к поверхности — большой процент волн отражается. Но опять же, это всё зависит от типа материала (коэффициента преломления).

  7. Столько мучений в 3Ds Max чтобы создать реалистичный материал !

  8. люди, используйте максвелл рендер, там все на порядок проще.
    задал материал «золото», повесил лампочку на 60 ватт и рендеришь себе сутками 🙂 когда уже они сделают поддержку ГПУ?….
    зато никаких фотонов! все строго по науке 🙂

    • Фотоны — это как раз и есть по науке 🙂
      А задал «золото» — это конечно хорошо, но а что делать, если нужно сделать материал, хоть немножко отличающийся от стандартных? Человек будет в ступоре, т.к. до этого он пользовался только стандартным «золотом» 😉

  9. Таким образом, идеально было бы для металлов иметь таблицу со значениями n и k для всего видимого спектра. Именно это объясняет почему значение n (или IOR), которое мы видим во всех шейдерах/материалах бесполезно, когда дело доходит до настройки материала металла. Всё просто, нам ведь нужно еще значение k, а оптимальный вариант – это когда n и k можно задать для каждой длины волны всего видимого спектра.

    Что за значение k? Смотрела формулы здесь: http://ru.wikipedia.org/wiki/Формулы_Френеля
    Не совсем понятно о какой формуле речь.

    • Грубо говоря вот так: IOR = n + ik (где k — мнимая компонента). Кажись так.

      • А разве n не есть тот самый IOR тогда?

        Для диэлектриков обычно берется упрощенная версия уравнения, в которой используется только одно значение – n (это ваше значение IOR в настройках материала/шейдера) в качестве входного (угол падения берется из рендерера).

        • Да, он и есть, только в полной формуле есть две составляющие: n и k.
          k — это тоже IOR, только мнимый.

  10. «Металлы окрашивают отражения, а диэлектрики нет, поскольку у металлов намного больше значение поглощения определенной длины волны во время процесса поверхностного отражения. Именно поэтому у металлов зеркальные отражения цветные, а у диэлектриков без окраса.»

    Можно это хоть как-нибудь пояснить. Что значит «без окраса»? ЧБ они чтоли? И во что окрашивают отражения металлы? Я смотрю на отражение от своей пластиковой кружки, она диэлектрик, очевидно, она отражает цветную карточку и книгу, я различаю цвета!

    • Если смотреть в золотой слиток (посреди большого магазина, чтобы было много ярких источников света (ИС) вокруг), то все ИС будут в нём жёлтыми. Если в том же магазине посмотреть на пластиковый ярко красный шарик, то все отражения ИС будут такого же цвета, как они есть в реальности — белые.

  11. Я вот что-то не пойму, почему это у металлов нет диффузного отражения? Ещё как есть. Диффузное отражение — это такое отражение луча света, исходящего от источника, при котором падающий луч отражается под несколькими углами, а не под одним, как в случае с зеркальным отражением. А теперь посмотрите на поверхность металла под микроскопом, там огромное количество микроповерхностей, которые отражают во все стороны. А так как поверхности эти больше длинны волны, то имеет место диффузное отражение.

Извините, в данный момент комметарии закрыты.

© 2008 - 2018 3dyuriki.com
Для связи со мной 3dyuriki@gmail.com