- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF136:LuxRender
Материал из Linuxformat.
- LuxRender Создавайте изображения фотографического качества без фотоаппарата
Содержание |
LuxRender: Ваш фоторобот
POV-Ray |
---|
|
- Физика – величайшая из наук. А тех, кто в этом еще сомневается, Вячеслав Ястребцев попробует убедить, следуя принципу «лучше один раз увидеть, чем сто раз услышать».
Впрошлом номере мы закончили знакомство с рендером POV-Ray, типичным представителем программ визуализации «старой школы», называемых scanline-рендерерами. Дело совсем не в архачном способе взаимодействия пользователя с программой (встроенный в Blender движок рендеринга тоже scanline), а в самом подходе к визуализации сцен: упрощённом, не вполне адекватном происходящему в реальности. Для получения правдоподобного изображения от художника, кроме вполне очевидных действий вроде раскраски объектов и расположения светильников, требуется немалое мастерство в настройке множества тонких, неинтуитивных параметров, и любая ошибка добавит в изображение немало сюрреализма. В нашем беглом обзоре POV-Ray мы почти не затронули приёмы создания подлинно фотореалистичного изображения, но им отведены львиные доли в руководствах к любому scanline-рендереру, имеющему претензии на фотореализм.
Сегодня мы познакомимся с представителем другого семейства программ визуализации – «physically based» (физически корректными), использующими не приближённые алгоритмы, родственные применяемым в компьютерных играх, а максимально точные формулы волновой оптики. Как ни странно, более точный и сложный процесс работы требует значительно меньшего внимания от пользователя. Всё, что требуется – корректно задать свойства материалов и светильников; остальное сделают за вас – так, как надо, и никак иначе!
Материалы
На диске находится файл со сценой (scene_start.blend), подготовленной к визуализации. Это обычная сцена, созданная штатными средствами Blender. Открываем ее в Blender и приступаем! Всем объектам в сцене нужно заранее назначить материалы Blender (в прилагаемом файле они уже созданы, но вообще это необходимый этап подготовки сцены к экспорту) – экспортер использует их названия как метки для назначения своих материалов. Не отвлекайтесь на настройку Blender, цвет поверхностей сейчас не важен, главное – дать материалам понятные названия. Также необходимо правильно соблюсти масштаб: одному метру в сцене должен соответствовать размер в одну единицу Blender. Переходим к экспорту: переключаемся на окно скриптов выбираем Scripts > Render > LuxBlend и запускаем скрипт настройки и экспорта сцены.
В появившемся окне выбираем вкладку Material, попадая в секцию управления материалами. В поле, обозначенном Material:, выбираем назначенный ранее материал Blender, которому будет соответствовать создаваемый материал LuxRender. Под этим полем находится другое, Material type,определяющее тип создаваемого материала. Еще ниже, на окрашенной в бежевый цвет зоне, расположены кнопки управления предпросмотром. Update Preview – обновит превью материала, кнопка Zoom увеличит тестовый объект, Area – превращает светильник в превью из точечного в площадной, Large – увеличивает размер самого превью. Счётчик Width регулирует физический размер тестового объекта; по умолчанию этот размер равен одному метру. Поле рядом с кнопкой Area регулирует качество предпросмотра, за лучшее качество приходится платить большой задержкой при обновлении.
Выберите в поле Material: Main light. Материал «основной свет» – парадоксальное для знакомых со scanline-рендерерами, но точно соответствующее реальности понятие: источники света вокруг нас – это имеющие конкретные размеры предметы из светящегося вещества, а не абстрактные точки. В поле Material type: указываем light, в поле texture меняем blackbody на lampspectrum, изменяя способ определения спектрального состава света с цветовой температуры на табличные значения спектров ламп, соглашаемся с используемой по умолчанию (Incandencent > PHILIPS [Argenta] 200W Lamp), в поле Power(W), задающем мощность лампы в ваттах, указываем 200. Осталось определить ещё два светильника, оживляющих общую композицию: подсветки терминала и кристалла. Начнём с первого; плоскости подсветки назначен материал под названием Console backlight, экспортируем его как источник света, назначаем текстуру lampspectrum, выберем лампу backlight Silvania [BlakcLite 350], мощность 1 ватт. Подсветка кристалла Cristall backlight настраивается аналогично, использует лампу Silvania [F6T5/BLB], мощность 10 ватт.
Теперь создадим материал стен помещения. Допустим, что это старая сталь, покрывшаяся окислами, потерявшая свой блеск и ставшая тёмным матовым материалом. Выбираем материал Constr steel и связываем его с материалом matte. Далее указываем цвет в поле diffuse, простой серый с интенсивностью 0.16. Настройка цвета имеет одну тонкость: интенсивность цвета (величина V в селекторе цветов) обозначает величину альбедо – долю света, отражаемого поверхностью. Это табличная величина, и для подавляющего большинства бытовых материалов она не превышает 0.65 (это примерное альбедо побелки). Даже если на финальном изображении материал должен выглядеть абсолютно белым, не используйте экстремально яркий цвет: превышение этого порога приводит к неправдоподобному результату. Помните, что сейчас мы задаём физические свойства материалов, а не занимаемся композицией сцены.
Создадим материал для стойки в центре сцены и резервуаров у пола. Выберите назначенный им материал – Coated aluminium, и укажите экспортировать его как shinymetal (блестящий металл). Задайте параметр reflection (доля отражённого света) как серый с интенсивностью 0.04, specular (блик) – 0.5, exponent – 1.
Последний параметр размывает блик, имитируя мелкие неровности на поверхности: чем меньше величина, тем сильнее шероховатость. Завершим работу с металлами, создав материал заклёпок (им назначен материал Clear aluminium – чистый алюминий), экспортируем его как shinymetal с параметрами reflection – серый 0.1, specular – серый 0.25, exponent – 12 000. Обратите внимание, как с увеличением параметра exponent изменился материал, став почти зеркально блестящим.
Плиты, прижатые к стенам заклёпками – это пластик. В Blender oн называется Plastic; экспортируем его как glossy, блестящий материал, созданный для имитации разнообразных диэлектриков (пластика, лака, глазури). Представим, что пластик серый и несколько шероховатый. Diffuse установим как серый 0.2, следующий параметер IOR – коэффициент преломления, для непрозрачных материалов он обозначает нарастание зеркального отражения света при уменьшении угла падения (в Blender этот эффект имитируется настройкой параметра Fresnel, а вообще говоря, это отношение скоростей света в данной среде и в вакууме, но к нашей с вами задаче это отношения не имеет). Скрипт экспорта имеет готовый набор точных значений IOR для множества веществ; нажмите кнопку Preset и выберите подходящий вариант (в нашем случае, Transparent > Plastic). Наконец, сымитируем микронеровности, установив exponent в 50.
Материалы таблички на двери и шрифта надписи, Label и Font соответственно, оба экспортируются как matte, отличаясь лишь значением diffuse: у Label это красный 0.44, 0.15, 0.07, у Font – серый 0.38.
Осталось настроить материалы консоли и вмонтированного в стойку кристалла. Первый материал обозначен Console glass; выбираем его в поле Material:, экспортируем как материал roughglass, имитирующий дымчатое стекло. Устанавливаем reflection (долю рассеиваемого света) как серый 0.27, transmission (свет, проходящий сквозь стекло) – серый 0.47, exponent (как обычно, гладкость поверхности) 50, IOR выбираем пресет Glass (Transparent > Glass, Fused Silica).
Над последним материалом придётся поработать. Материал кристалла должен быть прозрачен и одновременно рассеивать свет подсветки. Прозрачные среды имитируются при помощи материала glass, а рассеивающие полупрозрачные – roughglass, для создания нужного эффекта необходимо объединить свойства этих материалов. Подобные задачи решаются с помощью материала mix.
Кристаллу назначен материал Cristall. Выбираем материал mix, скрипт предлагает поля для определения двух материалов, эффекты которых совместятся в пропорции, указанной в поле amount. LuxRender допускает вложение в слоты другого материала mix, в слоты которого снова допустимо вложить материал-смеситель и т. д., число смешиваемых материалов практически бесконечно. В первый слот помещаем материал glass, назначим reflection – серый 0.1, transmission – чистый белый, IOR – 1.6, во второй – roughglass, reflection – чёрный, transmission – серый 0.62, exponent – 1, IOR – 1.6. Amount оставим как есть (0.5).
Напоследок настроим камеру: перейдите во вкладку Cam/Env, активируйте кнопку Near & Far Clipping, величину start – 0.7, end – 10, enviroment – none. Вверху окна рендерера расположено поле Render presets, хранящее типовые настройки движка рендеринга; выберите вариант 1 Final MLT/Bidir Patch tracing. Всё, запускайте рендерер, нажав на кнопку Run.
Статистика, статистика
Скрипт некоторое время «подумает», переписывая сцену в формат LuxRender, после чего сам запустит графическую оболочку рендерера, уже приступившего к расчёту сцены. LuxRender проводит визуализацию сцены в два этапа: вначале происходит вычисление возможных путей хода света сквозь сцену (интегрирование) и строится карта проб (сэмплов), сохраняемая в виде .flm-файлов (File > Save FLM). Этот файл хранит не изображение, а рассчитанные на определённый момент пробы интенсивности и спектра света, пришедшего от источников к камере по некоторым из бесчисленных траекторий. На втором этапе происходит конвертация FLM, называемая tone mapping, в обычный файл изображения, доступный для просмотра.
LuxRender' автоматически проводит пересчёт изображения на основе актуальных данных через определённые промежутки времени; впервые он попытается это сделать уже через несколько секунд после запуска. Увидев результат первой попытки, многие неопытные пользователи просят родить их обратно и бегут искать, что сломалось в программе – настолько ужасно изображение. В чём причина?
Интегратор LuxRender, вычисляющий сэмплы, обсчитывает случайные траектории световых лучей. Каждый отдельный сэмпл хранит величину, отражающую всё, кроме корректной освещённости: например, луч испущенный светильником, отразился в зеркале и случайно угодил сквозь щель между полом и кроватью в самое тёмное место на сцене. Проводя тон-маппинг, LuxRender проецирует доступные сэмплы на пиксели графического файла, вычисляя освещённость; в нашем случае в его распоряжении будет один сэмпл, говорящий «этот участок освещён светом, отражённым зеркалом, и должен быть ярким» – и на выходе будет «жареный» пиксель там, где положено быть темноте. Только собрав достаточно большую выборку сэмплов, можно получить хорошее изображение.
Строчка Statistics внизу окна сообщает текущее состояние FLM и процесса сбора сэмплов, слева направо: время работы рендерера (часы, минуты, секунды), число сэмплов, собранных за последнюю секунду, среднее число сэмплов за секунду в ходе отрисовки, среднее число сэмплов на пиксель, эффективность интегратора и число экспозиции.
Первые две величины, после времени рендеринга, зависят от мощности компьютера и сложности сцены, выполняя роль «попугаев» для занесения в книгу рекордов (или на доску позора). Число сэмплов на пиксель – ключевой параметр, определяющий качество изображения: чем сложнее сцена, тем больше S/px необходимо для сглаживания шума, и предела для совершенства нет (обычно требуется не менее тысячи S/px). LuxRender способен работать вечно, постепенно улучшая качество картинки. В отличие от scanline-рендереров, автоматически прекращающих работу после обсчёта последнего пикселя, LuxRender оставляет решение о сворачивании работы за пользователем. Эффективность интегратора, упавшая ниже отметки 100 %, говорит о грубых ошибках в построении сцены (например, обзор камеры или светильники полностью закрыты преградами и света в сцене нет), это сигнал для останова рендерера и устранения дефекта.
Экспозиция, последняя величина – фотографический термин, определяющий степень засветки светочувствительного материала. При чём тут рендерер? А при том, что один из режимов тонмаппинга позволяет имитировать съёмку на реальную фотокамеру, снимающую реальное воплощение виртуальной сцены! Для включения этого режима перейдите на вкладку Imaging на панели Tone Mapping и в поле Kernel выберите Linear. Появится набор параметров: Sensitivity – моделируемая чувствительность плёнки, Exposure – выдержка, Fstop – диафрагма, Gamma – коррекция гаммы. Любой знакомый с фотографией сразу поймёт, что нужно делать: если изображение темно – поднять выдержку, открыть диафрагму (открытая диафрагма соответствует меньшим Fstop); пересвечено – наоборот, сократить выдержку и диафрагму. Остаётся только играть освещённостью, посматривая на плавно ползущую вверх S/px.
Вот финал нашего многосуточного марафона.
Сохранение плёнок
Поскольку для получения качественного изображения LuxRender требует много времени, чтобы облегчить жизнь пользователям, не имеющим возможности завершить рендеринг за один сеанс (который может занять несколько суток), предусмотрено сохранение промежуточных результатов рендеринга в FLM-файлы.
Если приходится проводить рендеринг в несколько сеансов, лучше слегка изменить процедуру экспорта: вначале отключить автозапуск рендерера, убрав флажок run, затем перейти на вкладку System, где в поле default out dir: указать каталог, в котором будут размещены файлы сцены. Это позволит сохранить файлы сцены вне временной папки, защитив их от случайной модификации или удаления. Экспортируйте сцену и запускайте рендерер как самостоятельное приложение (если вы установили LuxRender из репозитория, в меню приложений должна появиться иконка для его запуска).
Запустив LuxRender впервые, нужно загрузить в него экспортированную сцену: меню File > Open, сцена загрузится и автоматически начнётся рендеринг. Когда вы решите сделать остановку, сохраните FLM (регулярное сохранение FLM – хорошая привычка даже при непрерывном рендеринге, это залог спасения работы в случае краха системы) и остановите рендерер. При последующих запусках рендерера выбирайте пункт File > Resume FLM и указывайте сохранённые FLM и сцену.