Сферическая панорама == фотография с углом обзора в 360°.
HDRI-карта == сферическая панорама, в которой хранятся данные не только о цвете, но и о яркости каждого пикселя. Её можно использовать для освещения сцены, тем самым создавая реалистичное освещение в пару кликов.
0. Хард:
0.0. Зеркальная камера
0.1. объектив типа «Рыбий глаз» — не обязателен, но сэкономит кучу времени;
0.2. штатив
0.3. панорамная головка для штатива
1. Софт
1.0. Blender (бесплатно скачивается с http://blender.org)
1.1. Hugin (http://hugin.sourceforge.net).
Если нужного оборудования нет — его можно взять на Aliexpress, где стоимость ниже. Вот, например, вполне приличный «Рыбий глаз»:
Нищебродский вариант — линза, накручиваемая на объектив и увеличивающая угол обзора. Например:
Панорамная головка. Здесь важно не ошибиться и выбрать именно такую, которая подойдёт для нашей цели. Выглядит она примерно так:
(ссылка на товар на тот случай, если в момент прочтения сего он ещё будет в наличии).
Камера. Нужна опция брекетинга экспозиции aka вилка экспозиции, если у вас есть не зеркальная камера, которая это умеет — пойдёт и не зеркальная.
Штатив — тут особо рассказывать не о чем, подойдёт любой или почти любой.
Камеру устанавливаем на панорамную головку. Наша задача — сделать так, чтоб нодальная точка объектива не перемещалась при вращении камеры. Нодальная точка – место пересечения лучей света, проходящих через оптическую ось объектива.
(изображение отсюда, там же чуть подробнее про нодальную точку)
Камеру надо установить так, чтоб ось вращения штатива совпала с нодальной точкой. Как её найти — отдельный разговор, посмотрите документацию к объективу, если оной не имеется — подбирайте вручную, способы находятся в интернетах.
Панорамную головку с камерой ставьте на штатив.
Также нужно включить брекетинг экспозиции, как включить — зависит от модели камеры, читайте мануал. В этом режиме при одном нажатии на кнопку камера делает по 3 (и более) снимков с разной экспозицией (читай — разной яркостью). Это позволит создать не просто сферическую картинку, а именно HDRI, сохраняющую информацию о свете и понимающую, что белое солнце ярче белой футболки (в то время как для JPEG и там, и там - одинаковый белый пиксель).
Задача — сфотографировать всё вокруг себя, со всех сторон. Алгоритм следующий:
0. делаем снимок;
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. нажимаем "Создать контрольные точки";
1. когда Hugin закончит (выдаст сообщение типа "Добавлено 1456 контрольных точек") - находим пункт "Оптимизация Геометрическая", убеждаемся, что там стоит стандартное "Позиции (с приращением, начиная с фиксированного снимка" и жмём кнопку "Вычислить" справа;
2. когда закончит - соглашаемся с принятием изменений, переключаем геометрическую оптимизацию на "Всё без переноса" и снова жмём "Вычислить";
3. включаем просмотр панорамы:
4. Убеждаемся, что эти рычаги находятся в крайней правой/нижней позиции, если это не так — сдвигаем:
5. Теперь предпросмотр можно закрыть.
Переходим к сшивке.
Размер холста можно изменить, но больший размер будет сшиваться дольше.
По окончании сшивки (а она может идти долго) получаем результат:
Для сабжа будем использовать программу Blender. Объяснять буду на примере уже другой панорамы, с ярким солнцем:
Открываем Blender. Для примера наглядности добавим плоскость и куб в сцену, рендер переключаем на Cycles, в качестве карты окружения устанавливаем нашу панораму (в формате .hdr или .exr), выбираем режим просмотра «Rendered».
Слабо соответствует погоде и освещённости, не так ли? Исправим.
Открываем редактор материалов, переключаемся на материалы «мира» и приводим всё к следующему виду:
Экспериментируем со значением Value узла Power и Strength узла Background (которые в данном примере 5.000 и 3.000 соответственно). Первый влияет на резкость теней, второй на яркость окружения в целом. Результат получается куда лучше:
Поскольку возиться с нодами материала каждый раз не хочется, сделаем следующее.
0. Из сцены удаляем всё кроме камеры.
1. Камеру располагаем в центре.
2. Повёрнута камера должна быть прямо перед собой.
3. В настройках камеры включаем режим Panoramic, Type == Equirectangular, остальное не трогаем.
Жмём F12 чтобы отрендерить изображение — получаем результат. Результат сохраняем. В меню сохранения нужно выбрать формат RadianceHDR или OpenEXR (но не png, как предложено по умолчанию). Наиболее компактный файл получается, если формат выбрать OpenEXR, а Codec - DWAA (lossy). Кстати, тех 50-100%, что мы видим в Resolution, для сферической панорамы недостаточно, лучше поставить там 300-400%.
Теперь сохранённый файл можно загрузить в качестве Environment Texture и освещение будет таким, каким должно быть (с ярким солнцем и резкими тенями).
Допустим, съёмка кадров для будущей панорамы производилась без брекетинга экспозиции или помешало всё правильно сделать что-то иное, но у нас в распоряжении имеется панорама в формате типа JPG. Как уже было сказано ранее — такие форматы не имеют представления о яркости, то есть на этой панораме, если она в формате JPG, солнце и корпус корабля одной яркости (белый цвет, RGB==255,255,255). Но можно попытаться выкрутиться.
Создаём новую сцену в Blender. Камера, как и прежде, по центру и смотрит прямо, остальные объекты удалить. Создаём сферу (она должна окружать камеру со всех сторон), даём ей материал Emission, натягиваем в качестве текстуры панораму:
Делаем дубликат и сферы, и материала. На этом дубликате с помощью ColorRamp «изолируем» наиболее яркие области:
В результате солнце становится белым, всё остальное — прозрачным:
Теперь изменяя силу у нода Emission, мы можем регулировать яркость солнца:
И да, чтоб это яркое белое пятно излучало свет, но не было видно на самой панораме — отключаем его видимость при виде из камеры:
Нам нужно только объединить две сферы — сфера, на которой имеется полная картинка, и внутри неё чуть (совсем немного!) уменьшенная сфера, где есть только очень яркое солнце…
И, как уже делалось ранее, настроить камеру на 360-градусный обзор (Panoramic, тип Equirectangular). Рендерим, сохраняем в формате RadianceHDR или OpenEXR.
Стоит заметить, что в случае с ярким солнцем в безоблачную погоду этот приём вряд ли даст нужный результат (яркие и резкие тени). Здесь я бы попробовал добавить источник света типа Sun и правильно его спозиционировать. А вот усилить таким образом яркость окон на лестнице из примера выше — вполне можно.
Автор: Денис Скиба aka Mapper720
13.01.2018