PBR-материалы¶
PBR (Physically Based Rendering) — это метод рендеринга в 3D-графике, который стремится максимально точно имитировать поведение света в реальном мире. Он основан на физических законах оптики, благодаря чему объекты выглядят реалистично при любых условиях освещения. PBR-материалы описываются параметрами, которыми связаны с их физическими свойствами, а освещение и отражения вычисляются по физическим формулам - например, модели BRDF. PBR дает реалистичные и стабильные при разных источниках света материалы, единый стандарт текстурирования, совместимость между разными движками, качественные отражения и тени. Для освещения используется IBL (Image Based Lighting) - окружающее освещение берется из HDRI-карты, что делает материалы реалистичными.
EV Toolbox с версии 3.6 поддерживает PBR-материалы. В версиях EV Toolbox 3.7 и выше данный функционал работает в выпуске Standard со стандартным набором кубических текстур и коэффициентов сферических гармоник освещенности. Карта обружения, а также скайбокс настраиваются в объекте Сцена (SceneReactor).
Для создания параметров IBL используется утилита cmgen из движка Google Filament:
Загрузите Google Filament с официального гитхаба компании Google, выбрав версию для вашей операционной системы.
Создайте папку на диске, например
texturesи поместите туда HDRI .exr файлОткройте командную строку и перейдите в эту папку (например
cd C:\textures)Выполните команду
<путь до filament>\bin\cmgen.exe --ibl-dfg="DFG_LUT.dds" -x MYENV -f ktx ./<hdrifilename>.exr, например команда(на платформе Windows)C:\filament-windows\bin\cmgen.exe --ibl-dfg="DFG_LUT.dds" -x NAME -f ktx ./hdrmap.exrиспользует утилитуcmgen.exeиз папкиfilament-windowsна дискеC:\, необходимые файлы будут созданы в папкеtextures\MYENVна дискеC:\, HDR карта, из которой будет создано IBL-освещение, -C:\textures\hdrmap.exr.На выходе будет создано 4 файла: MYENV_ibl.ktx, MYENV_sh.txt, MYENV_skybox.ktx и DFG_LUT.dds файл. Все файлы кроме DFG_LUT.dds (присутствует в скрытых ресурсах) необходимо добавить в ресурсы проекта(также поставьте галочки «Всегда добавлять в пакет на экспорте» и/или «Добавлять в assets на экспорте» для всех ресурсов).
Создайте файл main.lua, добавьте его в ресурсы проекта. Пропишите следующие строки кода:
local scene = reactorController:getReactorByName("Scene")
scene.displaySkybox = true -- отображать скайбокс
scene.environmentMap = "MYENV" -- загрузить кубические текстуры и т.д.
-- local sceneStateSet = model.node:getOrCreateStateSet()
-- local iblLuminanceUniform = osg.Uniform.Float("ev_IblLuminance", 1.35)
-- sceneStateSet:addUniform(iblLuminanceUniform)
Параметром iblLuminanceUniform (1.35, можно указать любое число) регулируется интенсивность IBL освещения.