Как подключить hdri в blender
Создание HDR изображения в Blender / Create HDR image in Blender
В данном примере, хочу показать, как можно создать, свою собственную карту освещения для ваших 3D сцен. Делать мы ее будем в программе Blender, используя движок Cycles Render, пример такого изображения и его использования, вы можете видеть на рисунке ниже:
Создание HDR изображения в Blender
Создание HDR изображения в Blender
2. Следующим шагом будет создание источников света, добавьте в сцену плоскости, как показано на изображении, объедините их в один объект и задайте материал Emission:
Создание HDR изображения в Blender
3. Добавьте еще две плоскости, объединив их в один объект, они будут верхом и низом нашего изображения, установите обычный материла рассеивания:
Создание HDR изображения в Blender
Создание HDR изображения в Blender
5. Установить следующие параметры камеры, в блоке «Lens», «Panoramic» и тип «Equirectangular» (равноугольная):
Создание HDR изображения в Blender
6. Нажимаем F12 и ждем построения изображения, должно получится следующее:
Создание HDR изображения в Blender
7. Готовое изображение сохраняем в формате «Radiance HDR»:
Создание HDR изображения в Blender
Теперь вы можете сами создавать, какие вам нужно HDR изображения, получившееся карту освещения вы можете использовать в своих проектах, следующим образом:
Собственные HDRi в Blender
HDR-карты используются повсеместно при настройке окружения в сцене. Но все мы знаем, как бывает трудно найти подходящую и, самое главное, качественную HDR-карту даже за деньги (я молчу о том, что доступно бесплатно). В сегодняшнем уроке вы узнаете, как можно создавать собственные карты любого разрешения и качества непосредственно в Blender.
Видеоурок
Текстовый урок
Чтобы отрендерить собственную HDR-карту нам нужно создать окружение и выполнить рендер с помощью панорамной камеры. В качестве окружения будет выступать куб. Добавьте его в сцену и на вкладке объекта укажите ему всегда отображаться в режиме Wireframe, чтобы мы могли видеть объекты внутри него. Также, не лишним будет вывернуть нормали куба, чтобы они смотрели внутрь, так как рендерить мы будем его внутреннюю часть.
Добавьте в центр куба камеру, сбросьте ее вращение (Alt + R) и поверните на 90°, чтобы она смотрела на одну из его сторон. На вкладке камеры укажите ее тип и настройте размер.
Теперь необходимо создать студию внутри куба. Верхним плоскостям назначен шейдер Emission с силой 10, боковым с силой 5, а внизу расположена диффузная плоскость. Самому же кубу назначен материал состоящий из смеси черного шейдера Diffuse с шейдером Glossy. Смешаны они с помощью нода Layer Wieght (0.05).
Карта окружения должна иметь соотношение сторон 2:1 и, как следует из ее названия, содержать расширенный динамический диапазон (high dynamic range, он же HDR). Для этих целей отлично подойдет формат изображений OpenEXR. В зависимости от окружения следует выбирать глубину цвета (Color Depth). Для такой простой карты как в нашем случае будет достаточно 16 бит (Float (Halfl)). Но если вы будете создавать что-то по сложнее, с большим количеством цветов и переходов между ними, стоит переключиться на 32 бита (Float (Full)). Тоже самое касается и количества сэмплов. Для данной карты 128 достаточно, а для чего-то по сложнее стоит подбирать такое значение, когда карта не содержит видимого шума.
Если удастся создать что-то интересное, поделитесь в комментариях. Вам не трудно, а кому-то, возможно, пригодиться.
Захват ближайшего света от HDRi-карты
Учимся любить близость
На основании многих уроков, извлеченных из недавнего проекта. Использование HDRi-карты не всегда является лучшим и единственным результатом достижения реализма.
Существует большое количество обучающих уроков, в которых сцена освещается HDRi-картой, и также, большое количество рендеров использующих для освещения ту же карту, что и на фоне. Несколько кликов и все — идеальное освещение.
Оказывается, во многих случаях это всего лишь половина истории. Что может быть хорошо и полезно для статического рендеринга, может оказаться не очень удачным, если речь идет об анимации или интеграции CG с реальным миром. Наши глаза улавливают тончайшие различия в свете и при наблюдении за трехмерным объектом, который перемещается по сцене без каких-либо изменений освещенности, мы сразу же видим, что что-то не так. А не так то, что вы используете лишь одну HDRi-карту для освещения вашей сцены.
Если мы хотим извлечь максимальную пользу из нашей HDRi, то трюк заключается в том, чтобы использовать HDRi для «реконструкции сцены». Нужно охватить нашу сцену текстурированной геометрией, содержащей все 32-битное освещение. Элементы CG должны проходить через, вокруг и возле нашей геометрии и при этом должны изменяться условия освещения.
Иными словами: проблема с использованием одной HDRi заключается в том, что информация об освещении исходит с бесконечного расстояния, как при настройке солнечной лампы. Поэтому, запекая эту информацию с HDRi в геометрию в непосредственной близости от наших CG элементов, мы создаем что-то, что будет отражать как общее освещение, так и позиционное освещение.
Подготовка вашей сцены
Мы собираемся построить простую геометрию вокруг нашего CG элемента, чтобы удерживать позиционное освещение. Это не должно быть чем-то большим, чем серия плоскостей и кубов. Но то, что ему нужно — это позиционная реконструкция архитектурного пространства, захваченного вашей HDRi-картой. Мне нравится думать об этом, как о старых западных фильмах, где существует только передняя часть зданий, что-то на подобии гигантского рекламного щита. Я называю это комплектом освещения.
Но прежде чем мы доберемся до создания геометрии, первым делом добейтесь того, чтобы ваша HDRi работала так, как вы этого хотите. Установите ей соответствующую силу света и, что особенно важно, вращение относительно вашей сцены. Как это делается рассказано во множестве других уроков, поэтому я не буду повторять это здесь. В случае с моим проектом я был уже удовлетворен положением и силой света своей карты, прежде чем начал реконструировать освещение, делая его позиционным.
Зачем ждать? Ну, если вы повернете вашу HDRi позже, вам придется вращать всю геометрию, которую вы создали, чтобы она соответствовала новому положению карты. Если вы полностью замените HDRi-карту, вам, скорее всего, придется заново моделировать всю геометрию.
Дрон созданный в Blender (рендер Cycles). Пост-обработка ролика выполнена в Nuke.
В моем проекте у меня есть беспилотный летательный аппарат, который опускается перед камерой между двумя зданиями в переулке. Несмотря на то, что стены соседних зданий, образующих этот переулок, находятся на HDRi-карте, на самом деле они расположены бесконечно далеко от дрона и не освещают его соответствующим образом. Кроме того, в этом конкретном случае я не мог создать HDRi именно там, где мне это было нужно (за проволочной оградой над автомобилями), а вместо этого создал снимок на тротуаре, перед проволочной оградой (тротуар перед забором без каких-либо зданий с обеих сторон.) Мы можем исправить обе эти проблемы, реконструировав освещение в нашей сцене.
Настройка камеры
Выполнять все это мы, конечно же, будем в Blender, но принципы показанные в данном уроке применимы для любого другого ПО.
Во-первых, убедитесь, что ваша HDRi видна на виде из камеры в режиме отображения Solid. Для этого откройте панель свойств с помощью клавиши N, и в меню Display отметьте пункт World Background. В зависимости от размера HDRi может пройти несколько секунд, прежде чем карта появится в окне просмотра.
Расположите вашу камеру в том месте, где была создана HDRi-карта (в ее центре). После этого перейдите на вид из камеры.
Нажатие сочетания клавиш Shift + F позволит нам оглядеть нашу сцену с помощью мышки на виде из камеры. С этой точки мы будем видеть объекты в такой перспективе, в которой они будут на финальном рендере, что пригодится нам при реконструкции сцены.
Добавление мешей для освещения сцены
Можно приступать к созданию геометрии. Лучше всего начать с простой плоскости и с ее помощью определить землю в нашем кадре. Если вы знаете точную высоту положения камеры относительно пола на вашей карте, это даст вам хорошую отправную точку (вы точно будете знать, на сколько ниже необходимо расположить плоскость, относительно вашей камеры). Если же нет, то методом проб и ошибок вы быстро подберете нужное значение.
Во время реконструкции всегда смотрите на меш через вашу камеру, вращая ее с помощью Shift + F.
Если плоскость совпадает с окружающим миром во время вращения камеры, вы можете быть уверенными, что все делаете правильно. В моем случае хорошим ориентиром был тротуар позади камеры.
После этого я экструдировал края плоскости вверх для создания стен переулка. Можете производить моделирование в режиме Wireframe, чтобы лучше видеть все, что происходит вокруг.
Как уже упоминалось ранее, геометрия не должна быть сложной. Достаточно базовых примитивов.
Обратите внимание на позицию Сюзанны и плоскости для проверки цвета. Они находятся между воссозданными стенами переулка.
Добавление информации об освещении на меш-объект
Настало время сохранить информацию об освещении на нашей модели. Ключевым фактором является то, что текстура на которую мы будем производить запекание будет 32-х битной, чтобы сохранить всю информацию об освещении сцены.
Примените масштаб объекта (Ctrl + A > Scale), чтобы исключить возможные проблемы в будущем при работе с разверткой. Затем выполните развертку. Smart UV будет более чем достаточно для данного случая.
Создайте новую текстуру настолько больших размеров, насколько можете себе позволить, но не менее 4К. Это нужно для того, чтобы захватить все мельчайшие детали нашего окружения. Убедитесь также, что вы не забыли отметить пункт 32-bit, что позволит сохранить весь динамический диапазон.
Для запекание в Cycles вам необходимо в редакторе нодов загрузить только что созданную текстуру в нод Image Texture и оставить данный нод выделенным. На вкладке рендера в меню Bake установите тип запекания Environment, выделите ваш меш-объект и нажмите кнопку Bake.
Запекание может потребовать немного времени, поэтому наберитесь терпения. По его завершению не забудьте сохранить получившуюся текстуру в формате EXR (32 бита).
Да будет свет
Подключите получившуюся текстуру к шейдеру Emission и установите силу света в половину меньшую, нежели установлена для вашей HDRi-карты. Это будет неплохой отправной точкой. В моем случае для карты сила была равна 2, а для текстуры я установил 1.
Перейдите на вид из камеры и включите режим отображения материалов в окне 3D-вида. Если ваш меш сливается с окружающей средой без явных недостатков, значит вы все сделали правильно. Если же текстура светлее, либо темнее окружающей карты, отрегулируйте силу света, чтобы переход на краях меша был максимально незаметным.
Поздравляю, теперь у вас есть свой комплект освещения. Используйте его в сочетании с картой окружения, чтобы придать вашим 3D-объектам не только окружающее освещение, но и позиционное.
В зависимости от потребностей вашей сцены, вам может потребоваться переместить меш на другой слой, чтобы он излучал свет, но не отражался на 3D-объектах в вашей сцене. Если это так, то сделайте это и не забудьте активировать оба слоя на вкладке слоев рендеринга.
Результаты
Результаты могут быть довольно драматичными, демонстрируя то, насколько неточной может быть ваша HDRi-карта.
НЕПРАВИЛЬНО: Сюзанна находится в переулке, но освещена так, будто находится на тротуаре (в том месте, где была сделана HDRi-карта).
ПРАВИЛЬНО: использование меша в сочетании с HDRi затемняет Сюзанну соответствующим образом для переулка, а установленная геометрия закрывает некоторые здания в ее отражении. Она также получает больше желтого цвета от земли.
Хорошо, это был тонкий сдвиг. Плюс это просто статическое изображение, но изменение по-прежнему имеет решающее значение для более реалистичной интеграции CG и реального мира. Вот в чем разница в моем снимке, где эффект более выражен:
НЕПРАВИЛЬНО: при использовании только HDRi дрон получается ярче, а световые отражения слева и справа представляют собой улицу, на которой была расположена камера. Освещение остается неизменным во время анимации.
ПРАВИЛЬНО: при установке меша с текстурой в сочетании с HDRi, дрон становится более темным, а дневной свет можно видеть только с неба сверху. Условия освещения тонко изменяются по мере того, как анимированный дрон попадает в поле зрения камеры.
Это все хорошо и вы можете видеть результат изменений, к которым приводит вся наша проделанная работа. Но вот вам еще один более явный пример. Я создал HDRi прихожей с красными, синими и зелеными источниками света. Панорамная камера, которая использовалась для визуализации HDRi, находилась строго по середине коридора под синим светом.
Итоговая HDRi-карта. Обратите внимание, что синий свет находится вверху, в то время как красный и зеленый находятся в стороне.
Теперь я создал 8-битное изображение того же коридора для фона. Для простоты эксперимента в сцене не будет никаких дополнительных объектов, чтобы не было теней и прочих эффектов. Вот настройка нодов композиции.
И вот получившийся анимированный результат:
Обратите внимание, что условия освещения на Сюзанне не меняются. Теперь проблема становится более очевидной.
Теперь давайте сделаем комплект освещения, как в случае с дроном. После запекания текстура выглядит так (и обратите внимание на исходный HDRi на фоне мира):
Сюзанна находится внутри прямоугольника.
Теперь, если я создам анимацию освещения Сюзанны с HDRi (возможно, в этом случае это не обязательно, потому как она полностью закрыта) и набором освещения, я получаю это:
Намного лучше. Конечно, в таком простом случае я, вообще, мог бы просто воссоздать всю сцену в CG, чтобы динамически освещать анимацию с помощью источников света, но, надеюсь, вы уловили основную суть. Комплект освещения (меш с запеченной текстурой) может обеспечить близость освещения к элементу CG, а не только к далекому источнику освещения, как это происходит в случае с одной лишь HDRi.
Заключительные мысли
То, что я продемонстрировал здесь, на самом деле рассчитано на небольшое количество движений в относительно ограниченной области, но оно намного точнее отражает фактическое освещение «на съемочной площадке» и допускает некоторую тонкость в способе изменения света с помощью любых анимированных элементов.
Если вы планируете перемещать CG элемент из одного освещения в другое — скажем, из здания на улицу, вам понадобится создать дополнительные HDRi как для помещения, так и для улицы. Еще лучше создать несколько наборов освещения, как описано, и даже потенциально объединить их в один более крупный комплект освещения, который предоставляет несколько условий освещения.
В наши дни при создании большинства крупных фильмов используется LIDAR для захвата всего этого набора физической геометрии, но этот тип оборудования выходит за рамки бюджета большинства любителей или фрилансеров. То, что мы сделали, это своего рода версия для бедного человека.
Если взять что-то среднее между тем, что я продемонстрировал и съемке с помощью LIDAR, у Xuan Prada есть отличное углубленное руководство по захвату ближайшего освещения в рамках более глобального сбора данных. В его случае он сочетает фотограмметрию с брекетингом экспозиции HDRi, чтобы не только полностью восстановить фактическое освещение так, как оно существовало в реальной жизни (альтернатива LIDAR), но также запекает его с использованием 32-битной текстуры из любого возможного угла, что дает ему очень точный комплект освещения. Это очень тяжелая работа, но она решает две потребности. Во-первых, изменение местоположения улавливает значительные различия в освещенности от экстремальной освещенности до кромешной темноты (то, что невозможно получить с помощью одной HDRi). И во-вторых, фотограмметрия дает вам 66% результата на пути к восстановлению реального мира, измерениям, и отслеживанию движения.
Благодарность
Наконец, огромное спасибо Трою Соботка, ветерану индустрии и создателю Filmic Blender, за огромное количество знаний по всем вопросам освещения, которые у меня возникали на пути создания моего проекта с дроном. Обязательно подпишитесь на него в Twitter.
Что понадобится?
0.0. Зеркальная камера
0.1. объектив типа «Рыбий глаз» — не обязателен, но сэкономит кучу времени;
0.3. панорамная головка для штатива
1.0. Blender (бесплатно скачивается с http://blender.org)
1.1. Hugin (http://hugin.sourceforge.net).
Если нужного оборудования нет — его можно взять на Aliexpress, где стоимость ниже. Вот, например, вполне приличный «Рыбий глаз»:
Нищебродский вариант — линза, накручиваемая на объектив и увеличивающая угол обзора. Например:
Панорамная головка. Здесь важно не ошибиться и выбрать именно такую, которая подойдёт для нашей цели. Выглядит она примерно так:
(ссылка на товар на тот случай, если в момент прочтения сего он ещё будет в наличии).
Камера. Нужна опция брекетинга экспозиции aka вилка экспозиции, если у вас есть не зеркальная камера, которая это умеет — пойдёт и не зеркальная.
Штатив — тут особо рассказывать не о чем, подойдёт любой или почти любой.
Подготовка
Камеру устанавливаем на панорамную головку. Наша задача — сделать так, чтоб нодальная точка объектива не перемещалась при вращении камеры. Нодальная точка – место пересечения лучей света, проходящих через оптическую ось объектива.
(изображение отсюда, там же чуть подробнее про нодальную точку)
Камеру надо установить так, чтоб ось вращения штатива совпала с нодальной точкой. Как её найти — отдельный разговор, посмотрите документацию к объективу, если оной не имеется — подбирайте вручную, способы находятся в интернетах.
Панорамную головку с камерой ставьте на штатив.
Съёмка
Задача — сфотографировать всё вокруг себя, со всех сторон. Алгоритм следующий:
1. сдвигаем камеру в сторону так, чтоб на первом и втором кадре область процентов в 20-30 была общей, делаем ещё снимок;
2. повторяем процедуру, пока не сделаем полный круг;
3. Наклоняем камеру, чтоб она смотрела вверх — опять же, 20-30% верхних и нижних кадров должны быть общими.
4. Делаем ещё один круг, но уже уровнем выше.
5. Снова наклоняем камеру вверх, делаем круг — и так до тех пор, пока не снимите все вплоть до потолка.
6. Теперь возвращаем камеру в горизонтальное положение, наклоняем уже вниз, повторяем процедуру.
7. В итоге должны получить серию снимков, которые все вместе охватывают всё пространство вокруг. Практика показывает, что это 60-70 снимков на обычный фотоаппарат («мыльница» или «зеркалка» с обычным объективом) и 16-20 снимков на «рыбий глаз» (в связи с гораздо большим углом обзора). Если включен брекетинг и камера каждый раз делает по 3 снимка — соответственно, эти числа тоже умножаются на 3 (или по скольку там у вас за одно нажатие делает снимков камера).
Сшивка панорамы
Для сшивки панорамы будем использовать предназначенный специально для этого Hugin. Запускаем, сразу переводим в «экспертный» режим:
Жмём «Добавить снимки. » и добавляем все отснятые файлы.
Hugin может попросить заполнить данные об объективе (особенно если объектив китайский):
Заполняем в зависимости от характеристик используемого объектива. В моём случае (ссылка на объектив выше) тип объектива == полнокадровый рыбий глаз, ГорПЗ (v) == 162 (угол обзора, был указан в описании товара на Aliexpress), остальное Hugin подберёт сам.
Жмём «ОК». Если снимали с включенным брекетингом экспозиции, видим следующее:
Жмём «Link position».
0. нажимаем «Создать контрольные точки»;
3. включаем просмотр панорамы:
4. Убеждаемся, что эти рычаги находятся в крайней правой/нижней позиции, если это не так — сдвигаем:
5. Теперь предпросмотр можно закрыть.
Переходим к сшивке.
Размер холста можно изменить, но больший размер будет сшиваться дольше.
По окончании сшивки (а она может идти долго) получаем результат:
Корректировка яркости
Для сабжа будем использовать программу Blender. Объяснять буду на примере уже другой панорамы, с ярким солнцем:
Слабо соответствует погоде и освещённости, не так ли? Исправим.
Открываем редактор материалов, переключаемся на материалы «мира» и приводим всё к следующему виду:
Экспериментируем со значением Value узла Power и Strength узла Background (которые в данном примере 5.000 и 3.000 соответственно). Первый влияет на резкость теней, второй на яркость окружения в целом. Результат получается куда лучше:
Поскольку возиться с нодами материала каждый раз не хочется, сделаем следующее.
0. Из сцены удаляем всё кроме камеры.
1. Камеру располагаем в центре.
2. Повёрнута камера должна быть прямо перед собой.
3. В настройках камеры включаем режим Panoramic, Type == Equirectangular, остальное не трогаем.
Теперь сохранённый файл можно загрузить в качестве Environment Texture и освещение будет таким, каким должно быть (с ярким солнцем и резкими тенями).
А если у меня нет HDR, только JPG?
Допустим, съёмка кадров для будущей панорамы производилась без брекетинга экспозиции или помешало всё правильно сделать что-то иное, но у нас в распоряжении имеется панорама в формате типа JPG. Как уже было сказано ранее — такие форматы не имеют представления о яркости, то есть на этой панораме, если она в формате JPG, солнце и корпус корабля одной яркости (белый цвет, RGB==255,255,255). Но можно попытаться выкрутиться.
Создаём новую сцену в Blender. Камера, как и прежде, по центру и смотрит прямо, остальные объекты удалить. Создаём сферу (она должна окружать камеру со всех сторон), даём ей материал Emission, натягиваем в качестве текстуры панораму:
Делаем дубликат и сферы, и материала. На этом дубликате с помощью ColorRamp «изолируем» наиболее яркие области:
В результате солнце становится белым, всё остальное — прозрачным:
Теперь изменяя силу у нода Emission, мы можем регулировать яркость солнца:
И да, чтоб это яркое белое пятно излучало свет, но не было видно на самой панораме — отключаем его видимость при виде из камеры:
Нам нужно только объединить две сферы — сфера, на которой имеется полная картинка, и внутри неё чуть (совсем немного!) уменьшенная сфера, где есть только очень яркое солнце…
И, как уже делалось ранее, настроить камеру на 360-градусный обзор (Panoramic, тип Equirectangular). Рендерим, сохраняем в формате RadianceHDR или OpenEXR.
Стоит заметить, что в случае с ярким солнцем в безоблачную погоду этот приём вряд ли даст нужный результат (яркие и резкие тени). Здесь я бы попробовал добавить источник света типа Sun и правильно его спозиционировать. А вот усилить таким образом яркость окон на лестнице из примера выше — вполне можно.
Автор: Денис Скиба aka Mapper720