Чтобы правильно использовать occlusion, очень желательно понимать принцип его работы. В каждой точке шейдер проверяет дальность других объектов. Если объект расположен близко, то шейдер окрашивается в цвет, указанный в параметре Dark (обычно черный), если вблизи нет никаких объектов, то в результате точка примет цвет параметра Bright. Шейдер испускает определенное количество лучей по полусфере, каждый из которых возвращает либо Bright, полученный цвет усредняется. В результате получаем затенения во всех углах и между близко расположенными объектами, создавая эффект рассеянного освещения.
В зависимости от параметра output_mode шейдер будет выдавать разный результат. В значении 0 это будет обычный классический черно-белый occlusion (как показано на картинке выше).
Значение 1 будет давать такой же результат за исключением того, что если луч не попал ни в один объект, то будет вызван Environment Shader или цвет фона и умножен на Bright. Причем если цвет фона или Environment Shader’a белый, то результат будет полностью идентичен значению output_mode 0. Если цвет фона черный, то все будет черное. В зависимости от текстуры на Environment Shader’e этим способом можно даже имитировать освещение, в некоторых случаях похожее на Final Gather.
Если установить output_mode в значение 2, то результатом шейдера будут так называемы Bent нормали (в мировых координатах). Bent Normal - это нормаль, полученная усреднение направления всех лучей, не попавших ни в один объект, то есть те лучи, которые попал в Environment.
Значение output_mode 3 так же выдает Bent Normal, но в координатах камеры.
Применение: Существует множество различных способов использования occlusion шейдера:
1. Первый способ - положить mib_amb_occlusion на ambient параметр любого из шейдеров. Именно от этого метода использования шейдер и получил название Ambient Occlusion, то есть затенение амбиента (рассеянный свет). В этом случае амбиент цвет будет только на наиболее очевидных и нужных местах.
2. Второй способ заключается в использовании mib_amb_occlusion в качестве основного шейдера. То есть его можно положить на слот Material Shader любой шейдинг группы. А на параметр Bright подсоединить уже сам шейдер поверхности, например mib_illum_ phong. В этом случае результат будет отличаться от первого метода, темные места, полученные от оклюжена, останутся темными даже на свету. Иногда данный способ называют Dirt или Diffuse Occlusion.
3. Mib_amb_occlusion можно использовать в слоеном шейдере, например, в качестве умножения на результат другого шейдера или текстуры.
4. Достаточно необычный способ состоит в использовании mib_amb_occlusion в качестве Light Shader’a. Для этого создаем источник света, и ему на слот Light Shader кидаем mib_amb_occtusion.
В итоге на стороне объекта, повернутого к источнику света, вместо света просчитывается оклюжен, другая же сторона (за терминатором) остается черной. Большим плюсом этого метода является то, что не нужно переназначать шейдера на всех объектах и переделывать шейдинг, особенно когда объектов и шейдеров в сцене очень много. Однако этот метод дает меньшую гибкость в настройке.