|
Indirect Illumination (Ненаправленное овещение).
В реальной жизни свет отражается и переотражается от объектов. Посветив в тёмной комнате фонариком в потолок мы увидим всю комнату в отражёном от потолка свете. Если на светлой поверхности лежит освещённый предмет, то от поверхности на предмет попадают рефлексы, подсвечивая объект снизу. И так далее, и так далее, поэтому для достижения реализма в 3D без расчёта отражённого света не обойтись. В VRay отражённый свет настраивается в закладке Indirect Illumination. В свитке Indirect Illumination ставим галочку On (включили расчёт отражённого света).
Дальше в свитке Irradiance Map ставим галочки Show Calc Phase и Show Direct Light. Эти галочки не влияют на конечный результат, но в процессе расчёта показывается примерная яркость финальной картинки. Кроме того, пока мы настраиваем яркость света, в выпадающем меню Current Preset можно поменять качество с High (высокое) на Very Low (очень низкое). Итак возьмём сцену: за стеной стоит источник света, свет отражается от другой стены и освещает объект в тени.

Обратите внимание, что при низком качестве (Very Low) отражённый свет считается не лучшим образом: под стенкой "пробивается" свет и объект как будто висит в воздухе.

С другой стороны, при высоком качестве (High), считает дольше, тени от объектов улучшаются, и стена не висит в воздухе, но появляется "пятнистость".

Попробуем для начала понять, как же работает расчёт отражённого света. Из камеры строятся лучи к объектам сцены. Итак, луч выходит из камеры и идёт, например, в левый нижний угол картинки, пока не попадёт в объект. Там, где он попал в объект, строится полусфера, из которой во все стороны также строятся лучи, которые "собирают информацию" об окружающих объектах (В свитке Indirect Illumination количество этих лучей задаётся параметром HSph. Subdivs., по умолчанию равен 50, точности ради надо отметить, что 50 - это не количество лучей, количество лучей пропорционально квадрату этого значения и может уменьшаться в зависимости от параметров DMC sampler). Итак, лучи разошлись и "принесли" информацию от окружающих объектов: от света, от цветных рефлексов и т.д. Эта информация привязывается к тому "кусочку" (сэмплу) объекта, от которого разошлись эти вторичные лучи (а параметры High или Very Low отвечают за количество "кусочков"-сэмплов). Например, в некоем "кусочке" на поверхности объекта "записано", что он освещён зелёным светом. А в соседнем "кусочке" "записано", что он освещён красным светом. Значит при расчёте финальной картинки компьютер будет делать в этом месте плавный переход от зелёного к красному (где-то на границе этих "кусочков" цвет смешается и станет жёлтым). Но если брать только непосредственных соседей, велика вероятность появления "пятнистости", поэтому введён ещё один параметр Interp. Samples (прямо под HSph. Subdivs), по умолчанию 20. При расчёте освещения сэмпла учитывается освещение большего количества окружающих "кусочков"-сэмплов (не только непосредственных соседей, но и тех, которые расположены дальше) и освещение "усредняется" для уменьшения "пятнистости". Чем больше параметр Interp. Samples, тем больше "соседей" будет учитываться при расчёте освещения сэмпла. Возвратимся немного назад к чайнику на пятнистой поверхности. В настройках отражённого света в выпадающем меню Current Preset было выбрано Low (низкое качество). Current Preset определяет количество "кусочков"-сэмплов поверхности, к которым привязана информация о свете (при низком качестве их не очень много, хотя нельзя сказать, что и слишком мало). То есть по поверхности "разбросаны" "кусочки"-сэмплы, в которых информация об освещённости сильно различается. В одном написано, что он светлый, в другом, что он тёмный. При попытке рассчитать плавные переходы освещёности мы и получаем пятнистость.

Количество "кусочков" можно посмотреть, включив в свитке Indirect Illumination галочку Show Samples.

Для уменьшения пятнистости можно поднять параметр Interp. Samples, например, до 50. Это количество соседних "кусочков"-сэмплов, которые участвуют в расчёте освещения сэмпла. Повысив их количество, мы как бы "размываем" освещение.


Хотя пятнистость и не убралась полностью, но мы значительно её уменьшили. Это один из возможных вариантов. А теперь посмотрим на количество "кусочков" в сцене со светом и стенами. Включим галочку Show Samples при настройках Very Low и High.


По идее на больших поверхностях нам не надо много сэмплов, а вот при построении теней от отражённого света они нужны. Мы знаем, что при расчёте освещённости сэмпла учитываются соседние сэмплы. При качестве Very Low количество сэмплов слишком маленькое и при попытке посчитать свет на поверхности часть ярких сэмплов "пробивается" с освещённой стороны стены. При качестве High даётся слишком много сэмплов, что вызывает пятнистость на ровных поверхностях (что, конечно, можно решить, повышая параметр Interp. Samples, но он сглаживает всё освещение, включая тени от объектов, плюс скорость рендера замедляется). Поэтому в Current Preset ставим Custom (ручной режим).

Min Rate и Max Rate определяют насколько "густо" распределены сэмплы (точнее, это их максимальный и минимальный размеры). Чем выше значения, тем больше сэмплов. При значении 0 разрешение расчёта отражённого света равно разрешению изображения. -1 означает, что разрешение расчёта отражённого света равно половине разрешения изображения и т.д. Соответственно при значении 1 разрешение расчёта отражённого света в два раза больше разрешения изображения. Если у нас есть большая ровная поверхность, то на ней создаётся один большой "кусок"-сэмпл с информацией об освещении. Min Rate определяет насколько большим будет этот "кусок" (чем меньше значение, тем он больше). А на мелких деталях, или в стыках между стеной и полом будет создаваться больше сэмплов и Max Rate - их размер (чем больше значение, тем мельче сэмплы). Отрендерим сцену с настройками Min и Max Samples -5 и -1 (обратите внимание, что пороговые значения Clr thresh, Nrm.thresh. и Dist.thresh. тоже могут изменяться, но мы пока что не трогаем их, оставив такими же, как при качестве Very Low).


Картинка стала лучше, чем при Very Low, и скорость рендера всё ещё гораздо быстрее, чем на настройке High, но стенка снова "висит" в воздухе. В общем-то, уже понятно, что при значении max samples:-1 сэмплы получаются достаточно небольшого размера, поэтому нам нужно работать не с размерами max samples, а повысить количество сэмплов. При этом повысить их не везде, а только там, где сэмплов не хватает. В свитке Irradiance Map есть группа из трёх параметров: Clr thresh, Nrm.thresh. и Dist.thresh.

Color threshold (Clr thresh) - чем меньше этот параметр, тем больше сэмплов будет создаваться на участках с перепадами яркости (например, на границе света и тени). Normal threshold (Nrm thresh) - чем меньше этот параметр, тем больше сэмплов будет создаваться на участках с изгибами поверхностей и мелкими деталями одного объекта. Distance threshold (Dist thresh) - чем больше этот параметр, тем больше сэмплов добавится в тех местах, где объекты находятся близко друг к другу. Подумаем, что можно сделать с нашей "летающей" стеной. С другой стороны от стены всё гораздо ярче и сэмплы "пролезают" оттуда. Точнее, с той стороны стены сэмплы яркие, и при значении Interp. Samples 20 они "смешиваются" с сэмплами с тёмной стороны. Можно, конечно, уменьшить Interp. Samples, тогда стенка не будет "летать", но при этом появятся пятна из-за того, что соседние сэмплы недостаточно смешиваются. Поэтому мы попробуем путь увеличения количества сэмплов на местах с разной яркостью (Color threshold). Уменьшим значение Clr thresh. с 0.4 до 0.3.


Сравните, насколько повысилось количество сэмплов на границе света и тени по сравнению с предыдущим вариантом (особенно заметно на тени от объекта).
Рассмотрим ещё один пример.