User guide
×
Menu
Index

7.1. Nested Dielectrics

 
Вложенные диэлектрики - это система, облегчающая моделирование сложных переходов между двумя и более типами диэлектриков. Например, граница стекла и воды в бокале. Если граница стекла сложная, то повторение этой границы для воды может быть затруднительным.
 
Допустим, нам надо смоделировать вот такой стакан с водой и пузырьками воздуха:
 
Луч идет слева направо и входит из воздуха в стекло в точке 1. Затем, в точке 2 начинается вода. В точке 3 луч встречает пузырек воздуха, в точке 4 выходит из него обратно в воду. В точке 5 выходит из воды в стекло и затем в точке 6 покидает стакан.
Каким образом можно организовать переход из одного объемного материала в другой?
 
Во-первых, нельзя просто взять два замкнутых объема и совместить их границы - треугольники окажутся наложенными и это приведет к артефактам. Граница должна моделироваться одним треугольником с двусторонним материалом. Тогда рендерер может проанализировать эти материалы и предположить, что один диэлектрик сменяется другим. Обычно рендереры это не делают. Dali Renderer это умеет, но такой вариант моделирования не рекомендуется, так как есть способ лучше.
 
Во-вторых, возникает идея взять два замкнутых объема с разными диэлектриками и чуть-чуть разнести их границу. Так делать нельзя категорически! Дело в том, что в физике есть понятие "полного внутреннего отражения". Если угол между лучом и поверхностью слишком мал, то для перехода из одного диэлектрика в другой может возникнуть ситуация, при которой луч вообще не может перейти границу, он полностью отражается обратно в исходный диэлектрик. Этот угол зависит от соотношения коэффициентов преломления первого и второго диэлектрика. Если мы разносим диэлектрики на ничтожно малое расстояние, то мы этим привносим третий диэлектрик - вакуум (или воздух). В такой схеме полное внутреннее отражение наступает при других углах, что в итоге искажает картину.
 
Если мы не используем границу, для которой явно указаны два диэлектрика, то выход один - луч при прохождении по сцене должен "запоминать", какие диэлектрики он встретил и для каждого пересечения с новым материалом вычислять соотношения коэффициентов преломления.
Nested Dielectrics - это именно такой механизм. Во время трейсинга луча поддерживается список активных материалов. Новые материалы попадают в него на первом пересечении и удаляются на втором. Для работы этого метода строго необходимо, чтобы геометрия диэлектрика была замкнутой и принадлежала одной модели или одной GeoID. Вы не можете разбить сферу на две половинки - в этом случае второе пересечение будет принадлежать другой модели и материал не будет удален из списка. Если необходимо разнести диэлектрик по нескольким материалам или по нескольким моделям (например, разные материалы для рук, ног и тела персонажа), в рамках одной логической модели, то можно использовать свойство GeoID, которое настраивается на вкладке Object Properties
Nested Dielectrics также добавляют свойство материалу иметь приоритет. Это число, задаваемое в GUI материала. Чем оно больше, тем больше приоритет материала. Если в какой-то области пространства присутствуют материалы с разными приоритетами, то будут рассматриваться только те, что имеют максимальный приоритет. Это позволяет делать грубое моделирование, при котором граница между диэлектриками - это не один треугольник и не двусторонний материал. При таком моделировании каждый диэлектрик задается своей собственной поверхностью, но объемы немного перекрываются:
 
 
В новой схеме ограничивающая поверхность для воды проникает в стекло. В точке 2 луч встречает воду, в новой точке 7 удаляет стекло из списка, в точке 5 опять встречает стекло и в новой точке 8 удаляет воду из списка.
Приоритет стекла выше, чем у воды и воздуха - это означает, что везде, где есть стекло, будет использоваться этот материал.
Приоритет воздуха выше, чем у воды. Таким образом, вода будет везде, где нет стекла и пузырьков воздуха.
Обратите внимание, что изначально луч не имеет ни какого назначенного материала, т.е. идет из вакуума. Если же камеру поместить в стакан с водой, то начальные значения будут автоматически корректно вычислены.
 
Примеры работы с приоритетами:
 
Пример вычитания объема с воздухом из диэлектрика:
 
И в завершение, более сложная картина. Оба бокала имеют одинаковую геометрию и второй бокал - это instance первого, но дополнительно отрезан объемом с воздухом: