Карты окружающей среды

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

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

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

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

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

Карты окружающей среды в Blender'е представляют собой кубическое изображение сцены, отренднренное с шести сторон из любой точки. Когда шесть кусочков изображения наложены на объект, который использует опцию Refl, они создают визуальный эффект, который глаз ожидает видеть от солнечных отражений.

Note

Полезно запомнить, что истинная цель этой методики - правдоподобность, а не точность. Глаз не нуждается в физически точном моделировании перемещения света; требуется только убедить глаз, что сцена является реальной, видя сложность, которую он ожидает...

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

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

Мы создадим зеркальную сферу, расположеную над зеркальной плоскостью, установите объекты в сцене так как на Рис 47.

Рис 47. Пример использования карт окружающей среды

Обратите внимание, что ' env ' Empty, помещен точно ниже камеры, на расстоянии от плоскости отражения, в 3 единицы Blender'а , которое является равным высоте камеры над той же самой плоскостью.

Теперь, добавим в сцену несколько ламп, сферу оставим без заданного материала, а плоскость переместим в другой слой. Например, все объекты у нас будут в слое 1, кроме плоскости, которая будет в слое 2.

Дайте плоскости низкие параметры Ref и Spec для материала и добавьте текстуру в канал два с параметрами как на Рис 48.

Рис 48. Отражающий материал для плоскости.

Обратите внимание на Refl и Cmir эффекты. Мы используем канал 2, а не 1, потому что канал 1 нам понадобится позже.

Рис 49. Настройки EnvMap для плоскости.

Теперь определите недавно назначенную текстуру как EnvMap в кнопках текстуры (F6) Рис 49. В панели Envmap, братите внимание на поле Ob: содержащее имя Empty относительно которого мы вычисляем EnvMap. Обратите внимание также на разрешающую способность куба, на котором EnvMap будет вычислен и, наиболее важный параметр - кнопки Don't render layer:.

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

Нажмите F12 для начала процесса. Сначала будут просчитаны шесть кртинок EnvMap, а затем финальная картинка, где сфера отражается на плоскости.

Рис 50. Сфера отражается на плоскости.

Чтобы добавить больше визуальной привлекательности сцене, добавьте большую сферу, которая окутает всю сцену и добавьте к ней текстуру неба, чтобы фальсифицировать реальный, облачный мир. Затем добавьте новый объект Empty в центр сферы, и переместите сферу в слой 3. Затем, дайте сфере параметры EnvMap также как вы делали это для плоскости (но на сей раз слой 3 не должен быть отрендерен!)

Теперь добавьте несколько цилиндров, чтобы сделать окружающую среду более разнообразной, и перед тем как нажать F12, вернитесь к текстуре для плоскости и нажмите кнопку Free Data. Это заставит Blender пересчитать EnvMap заново, с другим окружением.

На этот раз будет просчитано 12 картинок, по 6 для каждой карты EnvMap. Результат на Рис 51. Сфера больше отражает чем плоскость, из-за слегка различных параметров настройки материалов.

Рис 51. Отражающая сфера над отражающей плоскостью.

Но подождите, есть проблема! Сфера отражает плоскость, но плоскость отражает унылую серую сферу! Это потому что EnvMap для плоскости вычислена перед EnvMap для сферы.

Чтобы исправить это найдите цифровую кнопку Depth на панели Envmap, в кнопках текстуры и установите ее значение на 1 для обоих EnvMap текстур сферы и плоскости. Это заставит вычисляться EnvMaps рекурсивно. Каждая карта EnvMap просчитывается, затем пересчитывается заново столько раз, сколько указано в значении 'Depth', один за другим. Вот результа исправления Рис 52.

Рис 52. Отражение сферы на отражающей поверхности с многократными отражениями.

Теперь, если вы все еще задаетесь вопросом, почему первый канал текстуры для лоскости оставался пустым... Добавьте новую текстуру к первому каналу материала для плоскости. Добавьте ей параметр Glob, и Nor с интенсивностью 0.25 (Рис 53).

Рис 53. Дополнительная текстура для BumpMapping (рельефное текстурирование).

Эта новая текстура должна иметь тип Stucci; настройте параметр Noise Size до 0.15 или что-то вроде этого. Если вы снова отрендерите сцену, то увидите, что плоскость напоминает водяную рябь (Рис 54).

Рис 54. Отражение сферы на воде с многократными отражениями.

Вы должны вставлять текстуру BumpMap в канал перед картой EnvMap потому что текстуры накладываются последовательно. Если вы поступите по-другому, то отражение будет искажено волнами.

Вы можете сохранить карту EnvMaps для дальнейшего использования и загружать ее через соответствующую кнопку, в окне кнопок тектуры. Вы таже можете создать свою карту окружающей среды. Обычно это делается расположение 6 картинок на куб, в два ряда по три картинки в каждом, как на Рис 55.

Рис 55. Сохраненная карта EnvMap.

Blender предоставляет три типа карт окружающей среды(EnvMaps), как показано на Рис 49:

Note

Вы можете анимировать воду из предыдущего примера, устанавливая IPO для параметров ofsX и ofsY размещения текстуры, в кнопках материала. Рендеринг анимации тогда показал бы перемещающейся ряби на поверхности, с отражениями, изменяющимися соответственно!

Note

Карта EnvMap для плоскости должна быть вычислена только один раз, вначале, если ничто другое не перемещается! Следовательно, она должна иметь тип Static. Другое дело, Envmap для сферы, так как она не будет отражать изменения в отражениях на воде, если она не вычислена в каждом кадре анимации. Следовательно она должна иметь тип Anim

Если камера это единственный объект который перемещается, и у вас есть отражающая плоскость, объект Empty должен также перемещаться и вы должны установить тип EnvMaps как Anim. Если объект маленький, и Empty в его центре, то карта EnvMap должна быть Static, даже если сам объект вращается, Empty не двигается. С другой стороны, если объект перемещается, Empty должен следовать за ним и карта EnvMap должна иметь тип Anim.

Другие опции:

Note

Вычисление EnvMap может быть блокирован на глобальном уровне кнопкой EnvMap на панели Render, в кнопках рендеринга .