Создание и использование HDRI

Автор о себе:

Здравствуйте. Меня зовут Пидвирный Андрей, живу я в городе Львове, работаю визуализатором в одной фирме. Идея написать какую-нибудь статью посещала меня давно и довольно часто, но нехватка времени плюс банальная лень не давали мне этого сделать, и вот, когда я увидел сообщение о конкурсе уроков, я наконец собрался силами и мозгами :), и решил действовать, тем более, что тема, на мой взгляд, должна заинтересовать многих, как начинающих, так и уже бывалых 3D-шников.


В этом уроке я хочу рассказать вам как можно сделать собственные HDRI карты, и основные принципы их использования, и начнём мы, пожалуй, с теории.

High Dynamic Range Image (HDRI) – Изображения с высоким динамическим диапазоном. Суть этой технологии заключается в том, что окружающий нас мир содержит значительно больший диапазон яркостей и оттенков, чем может показать нам монитор или запечатлеть фотоаппарат. Человеческий глаз в состоянии видеть очень большой диапазон, но даже он не может видеть всё это в один момент времени, ему требуется некоторое время для адаптации. Это происходит, например, когда вы выключаете в комнате свет и сначала ничего не видите, но через некоторое время глаз привыкает, и вы начинаете различать предметы, и комната уже не кажется вам такой тёмной. Наша задача сделать несколько снимков неподвижной камерой с разными выдержками, чтобы получить максимум видимых деталей, как в самых тёмных, так и в самых светлых частях нашего кадра. После чего наши фотографии мы должны соединить при помощи бесплатной программы HDRShop в одно HDR изображение. HDRI могут быть как панорамными (180 или 360 гр.) так и простыми, но нас будут интересовать именно панорамные 360.

Пора, наверное, переходить к практическим занятиям. Нам понадобятся:

Вариант первый. Идеальный.

  1. Цифровой фотоаппарат.
  2. Два штатива.
  3. Максимально зеркальный шар.

Вариант второй.

  1. Цифровой фотоаппарат.
  2. Новогодняя игрушка.
  3. Прямые руки и немного смекалки.

Начнём с первого, самого простого варианта.

Наша задача сфотографировать наш шар, что даст нам почти полную панораму окружающей местности. Как вы уже наверное догадались, мы должны сотворить конструкцию, напоминающую ту, которая показана на рисунке. Когда все комплектующие заняли своё место, пора приступать непосредственно к самому процессу съёмки. Делаем от трёх до десяти фотографий, как кому нравится, с разной выдержкой. Теперь, если вы хотите получить полную панораму и убрать из кадра фотографа, :) вы должны сделать такое же количество фотографий и с теми же выдержками, перейдя на 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

717 0 850 58
47
2006-02-20
расскажи поподробней как прогу скачать, а то я чё-то не это.....
2006-02-20
Спасибо за урок а то я давно ищу инфу про hdri
2006-02-20
первый реально полезный урок в этом месяце
2006-02-20
Молодец хороший урок!
2006-02-21
Офигительный урок, но к сожалению все мои попытки натянуть hdri на плоский предмет (ну например стекла кусок) заканчиваются провалом...... Это вообще реально сделать? Может подскажешь как? Мне какойнибудь охота поиметь блик, никак не выходит.....
2006-02-21
Наконец-то первый продвинутый урок. К тому же нацеленый на практику. Есть такая тенденция что трехмерщики частенько мир воспринимают только с монитора, вот вам конкретный пример того что побегать надо, самому что-то сделать ручками :-)) P.s. HDRI может оказаться довольно перспективной штукой http://www.fcenter.ru/forprint.shtml?online/articles/hardware/videos/8515#8
2006-02-22
Да, очень качественно, Андрей молодца!
2006-02-22
Качественный, полезный урок! -- имхо: примечание - урок может относится и к другим программам не только к максу. Он ведь общий.
2006-02-24
...Качаем программу с http://www.debevec.org и запускаем... --------------------------------------------------------------------- Спасибо за урок
2006-02-25
Спасибо всем за хорошие отзывы, я старался. :) 2 CrazyDigger Я что-то не совсем понял твою проблему, можна подробней ?
2006-02-25
Да, напряжонная ситуация. Народ если вам понравился урок, проголосуйте плиз, поддержите! Так-же пршу всех посетить мой сайт http://www.frees-st.narod.ru и обращайтесь в ICQ 304646685
2006-02-25
хорошо поработал, толковая вещь получается. спасибо тебе.
2006-02-27
ну что за народ посещает рендер?! и за что здесь 47 баллов ? hdri конечно полезно, но... тут есть статьи и поинтереснее...
2006-02-27
Клевая штука..., но оставлю ее себе на десерт я еще только учусь более простым вещам. Привет и благодарность львовянину. Я тоже с Львова.
2006-02-27
2 cmykcat : Привет и спасибо за хороший отзыв. Приятно земляка "встретить" :) 2 ALL: Люди, время на исходе, не оставайтесь равнодушными, голосуйте!
2006-02-28
земляк-то земляк а голосовать за тебя он не стал))
2006-02-28
отличный урок.
2006-02-28
Что-то я не могу найти где, какую галочку поставить, чтобы проголосовать. Подскажите, если не затруднит. Я здесь второй раз. (for slayer_x) - логин у тебя злобный, и отзывы тоже. В твоих ехидных замечаниях ни кто не нуждается. Люди здесь не для этого.
2006-02-28
занятно... рендер сделал рекламу даже на нашем "противостоянии"... -- ну чтож посмотрим, хотя не думаю что несколько часов что-то сильно изменят....
2006-02-28
Я за тебя, я не щитаю урок про "якобы создание игр" конкурентным твоему
2006-02-28
-это конечно мусор в твоих комментах Андрей, но мимо пройти не могу, извини.. -- to serjant: - [якобы] отличная критика! никаких аргуметов и только выхваченные слова из названия урока)) ну хоть кто-то сегодня меня рассмешил. Спасибо! - тебе ли рассуждать конкурентен или нет?) - проголосуй и все, зачем писать бессмысленные комменты? ... -- - продолжим ждать конца это нервозного дня ...
2006-02-28
2 crol: Что человек думает, то и пишет. Для того "Отзывы посетителей" тут и зделали. 2All: Спасибо за поддержку!
2006-03-01
Андрей, не расстраивайся, твой урок все равно лучше:)))
2006-03-01
Урок конечно пока лучший из всех представленных.Но кол-во баллов настораживает.
2006-03-01
Я уверен что ты Андрюха в марте на 100% выйграешь. Так что не надо расстраиваться... -- кстати если все станут писать что думают, то тут и нецензурная ругань и бредовые мысли нулей , все будет глаза резать.
2006-03-02
2Dmitriy3D: Беспочвенные обвинения, особенно в столь грубой форме, не годятся. Пожалуйста, предъявите доказательства или не пишите ничего подобного.
2006-03-02
очень интересный урок, но прголосвать пока не могу ретинг 0, хотя уже больше двух месяцев на сайте
2006-03-03
хорошоий урок
2006-03-06
Не так много нового, но всё так классно по полочкам разложено. Я - за!
2006-03-10
Чёто балы больше не растут :(
2006-03-12
А куда тебе больше:) тебя ведь и не догоняет никто пока...
2006-03-13
Здорово, очень полезный урок. Но (имхо), в шопе есть возможность делать из "плоских" фоток, переводом их в полярные координаты, "сферические", в общем и с шаром возится не надо. У меня так получается делать текстуры для сфер и корректно наносить надписи. Возможно я не совсем прав и HDRI, совсем другое и требует более сложного подхода. Узнал, благодаря вам много полезного. Спасибо.
2006-03-15
Откройте глаза ламеру: а нафига эти HDRI карты. В уроке создается карта - путем фотканья зеркального шара, а потом рисуется практически такой же зеркальный шар - не проще ли взять сфотанный шар и поставить куда нужно?
2006-03-15
Мы не шар создаём, а карту для отражений и освещения. Если ты про финальную картинку, то это так для примера, на его месте может быть любой другой объект. Вообще поищи в сети инфу по HDRI, там много всего есть.
2006-03-17
2 SmartTeapot: Чтобы тебе лучше понять что такое HDRI и для чего оно, пройдись по ссылке указанную кем-то здесь же - там всё абсолютно детально и предельно понятно изложено. Если лень, то в двух словах изложу так - обычные текстуры (bmp, pcx, jpg, tga и тд) относится к классу LDRI и имеют только 4 канала - RGBA, а у текстур HDRI каналов значительно больше (если не ошибаюсь есть канал светопередачи пикселем, или я что-то недопонял?). И сейчас уже в реальных спецэффектах используются только текстуры HDRI - они значительно реалистичнее стандартных bmp-шек со товарищи. Я всё.
2006-03-18
Я занимаюсь фотографией в новом Фотошопе встречал такую штуку как HDRI. Т.е. здесь то же самое. А автор изголяется с зеркальным шариком, потому что у него нет фотика с объективом циркулар фишай. Я правильно понял суть проблемы? Тогда у меня еще один вопрос - а насколько востребованы эти HDRI, их можно так сказать снимать прозапас? И почему эта HDRI охватывает только половину сферы? Ведь для анимации может понадобиться объехать объект вокруг.
2006-03-30
Повторить все по порядочку еще не попробовал. Новый год давно был, игрушки перебились:) Урок реальный, последовательный, воды мало, было интересно. Присоединяюсь к похвалам, мне показался самым на сей день.
2006-04-23
Отличный урок. После его изучения у меня возникла такая идея --- чтобы не использовать Point Editor, можно назначать координаты точек следующим образом: для первой ХДРки точка Х1 = к / 8,343 У1 = к / 2 точка Х2 = к / 2 У2 = к / 2 для второй ХДРки, когда фотограф смещается ВЛЕВО на 90 град. по горизонтали точка Х1 = к / 2 У1 = к / 2 точка Х2 = к - (к / 8,343) У2 = к / 2 где к - сторона квадрата, т.е. ширина (она же высота) изображения в пикселях. Пример. Картинка 1024х1024. Координаты для 1-ой ХДРки: Х1 = 1024 / 8,343 = 122,738 У1 = 1024 / 2 = 512 Х2 = 1024 / 2 = 512 У2 = 1024 / 2 = 512 Координаты для 2-ой ХДРки: Х1 = 1024 / 2 = 512 У1 = 1024 / 2 = 512 Х2 = 1024 - (1024 / 8,343) = 901,262 У2 = 1024 / 2 = 512 Ну здесь наверно уже понятно, что все точки располагаются на линии горизонта, причём не важно, можно ли на самой картинке различить этот горизонт. Число 8,343 было получено опытным путём на панорамной ХДРке. Вобщем у меня этот финт сработал :)
2006-05-23
Урок хороший..... Правда я видел что то похожее на английском языке...:) http://gl.ict.usc.edu/HDRShop/tutorial/tutorial5.html
2006-09-11
Вопрос автору: сам придумал способ или описал чужую идею?
2006-09-11
Вот это да!! Неужели можно вот так сделать HDRI?
2006-09-12
Сразу видна рука мастера. Придумал и сделал.
2006-10-25
Классно!!!!!
2007-10-07
всё прекрасно.. но я ету уже дагадывалась... для меня очень важный вопрос... - я хочу делать HDR map смешиванием картинок в photoshopе... всё делаю нормально с деформациями и тд. НО!!! очен важный "но"... - не могу его сахранить как Hdr.. что мне делать???? (почти всё пробовал)... спосибо..
2007-11-26
Хороший урок, спасибо! Единственное, что смущает, так это определение. Световая адоптация человеческого зрения (глаза) не относится к данной теме, как мне кажется
2008-03-20
хорош урок!
2012-03-22
Пантурал скорее всего ты файл не перевел на 32-ух битную и потом появляется возможность сохранения файла в хдр
RENDER.RU