Создание и использование HDRI
Автор о себе:
Здравствуйте. Меня зовут Пидвирный Андрей, живу я в городе Львове, работаю визуализатором в одной фирме. Идея написать какую-нибудь статью посещала меня давно и довольно часто, но нехватка времени плюс банальная лень не давали мне этого сделать, и вот, когда я увидел сообщение о конкурсе уроков, я наконец собрался силами и мозгами :), и решил действовать, тем более, что тема, на мой взгляд, должна заинтересовать многих, как начинающих, так и уже бывалых 3D-шников.
В этом уроке я хочу рассказать вам как можно сделать собственные HDRI карты, и основные принципы их использования, и начнём мы, пожалуй, с теории.
High Dynamic Range Image (HDRI) – Изображения с высоким динамическим диапазоном. Суть этой технологии заключается в том, что окружающий нас мир содержит значительно больший диапазон яркостей и оттенков, чем может показать нам монитор или запечатлеть фотоаппарат. Человеческий глаз в состоянии видеть очень большой диапазон, но даже он не может видеть всё это в один момент времени, ему требуется некоторое время для адаптации. Это происходит, например, когда вы выключаете в комнате свет и сначала ничего не видите, но через некоторое время глаз привыкает, и вы начинаете различать предметы, и комната уже не кажется вам такой тёмной. Наша задача сделать несколько снимков неподвижной камерой с разными выдержками, чтобы получить максимум видимых деталей, как в самых тёмных, так и в самых светлых частях нашего кадра. После чего наши фотографии мы должны соединить при помощи бесплатной программы HDRShop в одно HDR изображение. HDRI могут быть как панорамными (180 или 360 гр.) так и простыми, но нас будут интересовать именно панорамные 360.
Пора, наверное, переходить к практическим занятиям. Нам понадобятся:
Вариант первый. Идеальный.
- Цифровой фотоаппарат.
- Два штатива.
- Максимально зеркальный шар.
Вариант второй.
- Цифровой фотоаппарат.
- Новогодняя игрушка.
- Прямые руки и немного смекалки.
Начнём с первого, самого простого варианта.
Наша задача сфотографировать наш шар, что даст нам почти полную панораму окружающей местности. Как вы уже наверное догадались, мы должны сотворить конструкцию, напоминающую ту, которая показана на рисунке. Когда все комплектующие заняли своё место, пора приступать непосредственно к самому процессу съёмки. Делаем от трёх до десяти фотографий, как кому нравится, с разной выдержкой. Теперь, если вы хотите получить полную панораму и убрать из кадра фотографа, :) вы должны сделать такое же количество фотографий и с теми же выдержками, перейдя на 90 относительно шара.
Теперь вариант второй. Если вы не нашли зеркальный шар, могу посоветовать вам новогоднюю игрушку, которую не составит труда найти в магазине. Если на ней имеется рисунок, его можно удалить жидкостью для снятия лака (мне помогло :) ). Вместо штатива используем любые подручные средства (вот тут вам и пригодится ваша смекалка). Дальнейший ход работы ничем не отличается от первого варианта.
Очень хорошо, если ваш фотоаппарат умеет снимать с автобрекингом, это избавит вас от рутинной работы с переключением выдержки. Мой OLYMPUS оказался способным делать пять снимков с шагом в единицу, чего в принципе хватает на карты с не очень большим диапазоном, но вполне пригодных к дальнейшей роботе. Теперь пора переходить в HDRShop и продолжать работу там.
Качаем программу с http://www.debevec.org и запускаем.
Заходим в Create > Assemble HDR from Image Sequence
В появившемся окне нажимаем Load Images и выбираем, в моём случае, пять первых фотографий.
HDRShop автоматически выстроит их в нужном порядке, и мы увидим их в списке ниже. Теперь нам нужно подобрать значение гаммы. Я советую делать это индивидуально для каждого нового HDRI, в зависимости от желаемого результата. HDRShop по умолчанию загружает HDR изображения с гаммой 2.2, а Vray в 3DS MAX устанавливает значение в 1.
Нажимаем кнопку Change в Camera Response Curve и в закладке Gamma Curve устанавливаем 0.60, далее жмём Calculate и Generate Image. В главном окне программы мы должны увидеть наше сгенерированное изображение. Если оно слишком большое нажимаем Ctrl- (или Ctrl+ - в обратном случае) и 5, чтобы выровнять его по центру. Появление на изображении цветных артефактов свидетельствует о том, что камера двигалась во время съёмки, и вам придётся сначала выровнять ваши фотографии в Фотошопе и повторить попытку сначала. Теперь нашу картинку надо подрезать, для чего выбираем Select->Draw Options->Cirkle выделяем наш шарик и дальше Image->Crop.
После этого выбираем Image->Size->Arbitrary Resize. Здесь мы должны установить размер нашей HDRI в пикселях, желательно выбирать значения типа 512*512 или 768*768, хотя никто не запрещает вам установить там и свои цифры. Нам осталось нажать один или два раза + и потом Image->Pixels->Scale to Current Exposure.
Вот вы и создали свою первую HDRI, вам осталось только сохранить её через File->Save As, где выбираем Radiance format и придумываем ей какое-нибудь имя.
В принципе на этом можно и закончить, мы получили готовую к использованию Mirrored Ball HDRI, но, если вы помните, мы должны избавиться от фотографа, который закрывает собой довольно большую часть нашей фотографии. Для этого мы повторяем все описанные выше действия для второй последовательности снятых нами снимков и обязательно устанавливаем тот же размер, что и на первом изображении. Теперь, когда у нас есть два изображения, мы можем продолжить нашу работу. Суть описанного далее в том, что мы должны соединить два наших изображения воедино при помощи установки контрольных точек и заменить недостающие части одной фотографии аналогичными участками другой.
Загружаем оба наших изображения в HDRShop. Я изменил гамму у обоих изображений на 1, так как мне они так больше нравятся. Чтобы установить контрольные точки выбираем нашу первую HDRку и Window->Point Editor. Здесь мы видим небольшое окошко, в котором будут отображаться координаты наших точек. Для того, чтобы установить точку мы должны зажать Ctrl и щёлкнуть мышкой в нужное нам место. Точки нужно выбирать таким образом, чтоб их было видно на обоих изображениях, и находились они на достаточном расстоянии друг от друга. На иллюстрации вы можете увидеть точки, которые выбрал я.
Вам придется вручную переписать координаты точек для обоих снимков, так как они будут нам нужны в дальнейшем. Вот мои координаты:
Img_1.hdr |
X
|
Y
|
98.7500
|
130.2500
|
|
332.7500
|
169.2500
|
Img_2.hdr |
X
|
Y
|
206.2500
|
251.7500
|
|
291.7500
|
79.2500
|
После того, как вы переписали полученные вами координаты, пришло время для дальнейших трансформаций. Выбираем Les_1.hdr Image->Panorama->Panoramic Transformations. В Source Image оставляем всё как есть, а в поле Format в Destination Image устанавливаем Light Probe (Angular Map), также мы можем изменить размер нашей будущей HDRI и нажимаем ОК.
У нас теперь появилось третье изображение, которое представляет собой пока ещё не совсем правильную, но уже Light Probe. :) Настало время второй картинки. Щёлкаем на ней и тоже выбираем Panoramic Transformations и изменяем Mirrored Ball на Light Probe (Angular Map) в Destination Image. В поле 3D Rotation нажимаем Match Points и Settings. Перед нами предстаёт небольшое, но довольно насыщенное разными параметрами окошко, которое мы должны привести к виду близкому тому, какой вы видите на скриншоте, но, конечно, с вашими координатами точек.
Этим мы говорим программе, каким образом она должна развернуть данное изображение при трансформации. Нажимаем ОК и ОК, и получаем четвёртое изображение, почти идентично третьему, за исключением положения фотографа и штатива в кадре. Также у него есть ещё одно, не сразу заметное отличие, это большая, чем в третьем, детализация по краям нашего шара. Я бы посоветовал сохранить полученные на данный момент изображения, но как копии, и не заменять оригиналы, так как они могут пригодится вам в будущем. После чего можно продолжить нашу работу. Опять сохраняем наши картинки, но уже в .JPG или .BMP и открываем их в Фотошопе. Здесь мы должны нарисовать черно-белую маску, которой мы укажем программе, какие области мы хотим оставить, а какие заменить. Если у вас изображения не сходятся, то, возможно, вы неправильно или не точно указали ключевые точки, также это может произойти при не идеально ровном шаре, который вы снимали. В первом случае это легко исправить проделав вышеописанные операции заново, во втором всё зависит от степени искажений, если они слишком сильны и изображения никак не получается привести к относительно одинаковому виду, постарайтесь подыскать другой шар. Наша маска должна походить на то, что вы можете видеть на иллюстрации. Но в каждом конкретном случае она конечно будет отличаться.
Возвращаемся в HDRShop. Открываем оба изображения и созданную нами маску. Нажимаем Image->Calkulate и приводим явившееся перед нами окно к такому виду, в данном случае.
Нажимаем ОК и получаем уже полностью готовую Light Probe HDRI, которую теперь с гордостью можно использовать в вашем любимом 3D редакторе. Я же приведу небольшой пример по использованию HDRI в 3DS MAX с Vray рендером.
Открываем 3DS MAX и создаём простенькую сцену: плоскость Plane, которая будет служить нам землёй и шар Sphere или GeoSphere лежащий на данной плоскости. Теперь установим в качестве активного рендера Vray и назначим им материалы. Для шара я взял почти чёрный цвет на Diffuse и установил значения R:20 G:20 B:20 на Reflect. Плоскости я назначил материал с текстурой. Пришла пора воспользоваться нашей многострадальной HDRI. Выбираем новый слот и нажимаем GetMaterial , где выбираем Output, в которой нажимаем кнопку с надписью None и теперь, VRayHDRI. Тут щёлкаем на Browse и находим ваше изображение. Параметр Multiplier здесь отвечает за экспозицию или яркость, а в Map type мы должны указать её формат. У нас это Angular map. Теперь нам надо настроить сам рендер. В свитке Global switches уберём галочку с Default lights, поставим On в Indirect illumination и установим Irradiance map, и Light cashe в Primary bounces и Secondary bounces соответственно. Откроем свиток Environment и перетянем нашу Output в GI Environment (skylight) и Reflection/refraction etc environment. Первая отвечает за глобальное освещение, а вторая за отражения и преломления. Также можно снять галочку с Show window в System, чтоб нам не мешало назойливое окошко.Нажимаем рендер и смотрим что у нас получилось. Если на полученом изображении слишком много синего цвета, что произошло у меня, то это легко исправить изменив немного кривые в свитке Output, установив предварительно галочку на Enable Color Map и переключив Mono на RGB. Здесь мы можем провести цветокорекцию по каждому из трёх базовых цветов, установить экспозицию или инвертировать цвета.
После того, как мы подстроили цвета и установили силу освещения, можно снова нажать рендер и оценить полученный результат. После небольшой доработки моя сцена стала выглядеть вот так:
И напоследок я хотел бы дать ещё несколько советов.
Если вам дорог ваш фотоаппарат, и вы хотите пользоваться им долго, не стоит делать кадры с прямым солнечным освещением, так как матрица может не выдержать такого испытания и оставить вам солнечные пятна на всех последующих снимках.
Если вам нужны более отчётливые тени, воспользуйтесь дополнительным источником света, имитирующим солнце.
При использовании цветокорекции свитка Output, можно добиться очень интересных и совершенно разных результатов с одной и той же HDRI картой.
Вот мы и закончили, надеюсь вам понравился этот урок, и вы нашли здесь что-нибудь полезное для себя. Если у вас возникнут какие-либо вопросы, прошу задавать их на frees_les@mail.ru
Красивых вам HDRI и быстрых рендеров.
Файлы урока:
1.jpg
2.jpg
Les_1.hdr
Les_2.hdr
Les_3.hdr
Les_4.hdr
mask.bmp
OK.hdr