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:

  1. Загрузите Google Filament с официального гитхаба компании Google, выбрав версию для вашей операционной системы.

  2. Создайте папку на диске, например textures и поместите туда HDRI .exr файл

  3. Откройте командную строку и перейдите в эту папку (например cd C:\textures)

  4. Выполните команду <путь до 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.

  5. На выходе будет создано 4 файла: MYENV_ibl.ktx, MYENV_sh.txt, MYENV_skybox.ktx и DFG_LUT.dds файл. Все файлы кроме DFG_LUT.dds (присутствует в скрытых ресурсах) необходимо добавить в ресурсы проекта(также поставьте галочки «Всегда добавлять в пакет на экспорте» и/или «Добавлять в assets на экспорте» для всех ресурсов).

  6. Создайте файл 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 освещения.