Физически корректный рендеринг (PBR)

PBR описывает материалы через их физические свойства, чтобы они выглядели правдоподобно при любом освещении.

PBR (Physically Based Rendering) — подход к материалам и свету, опирающийся на физику отражения; параметры материала (albedo, metallic, roughness) имеют физический смысл.

Зачем это знать

В старых моделях (как Фонг) художник подбирал блики «на глаз», и материал, настроенный под дневной свет, выглядел фальшиво в помещении. PBR ставит цель: задать материал один раз физически верно — и он будет корректно реагировать на любой свет. Это стандарт современных игр и кино.

Ключевые параметры

ПараметрСмысл
albedo (base color)собственный цвет без бликов и теней
metallicметалл (отражает цветной свет) или диэлектрик
roughnessшероховатость: резкий блик или размытый
normalмикрорельеф поверхности

Закон сохранения энергии

Физический принцип PBR: поверхность не может отразить больше света, чем на неё упало. Что не отразилось зеркально (specular), идёт в рассеянное (diffuse), и наоборот. Шероховатость перераспределяет энергию: гладкая поверхность даёт яркий узкий блик, шероховатая «размазывает» ту же энергию по широкому тусклому пятну.

# Грубая иллюстрация: одна и та же энергия блика
# распределяется на разную площадь в зависимости от roughness
total_energy = 1.0

for roughness in [0.1, 0.5, 0.9]:
    spread = roughness * roughness * 100 + 1   # площадь блика растёт
    peak = round(total_energy / spread, 4)      # яркость в пике падает
    print(f"roughness={roughness}: площадь~{round(spread)}, пик={peak}")

Вывод:

roughness=0.1: площадь~2, пик=0.5
roughness=0.5: площадь~26, пик=0.0385
roughness=0.9: площадь~82, пик=0.0122

Гладкая поверхность концентрирует энергию в яркой точке, шероховатая растягивает её в тусклое пятно — при том что суммарная отражённая энергия сохраняется.

Металл против диэлектрика

Металлы почти не имеют рассеянного цвета — они отражают окружение, тонируя его (золото — жёлтым, медь — рыжим). Диэлектрики (дерево, пластик, кожа) дают и матовый цвет, и слабый бесцветный блик. Параметр metallic переключает поверхность между этими режимами.

Как работает под капотом

PBR-освещение опирается на функцию распределения отражений (BRDF), чаще всего модель Кука–Торренса с микрогранями: поверхность представляют как множество крошечных зеркал, чья статистика задаётся roughness. Для правдоподобия PBR работает в линейном цветовом пространстве и обычно сопровождается image-based lighting (освещением от окружения через HDR-карту).

Частые ошибки

  • Задавать albedo с уже «запечённым» светом или тенью — PBR посчитает свет ещё раз.
  • Промежуточные значения metallic (0.3–0.7) — в реальности материал либо металл, либо нет.
  • Работать в нелинейном (sRGB) пространстве при расчётах света — энергия посчитается неверно.

Итоги

  • PBR описывает материалы физически: albedo, metallic, roughness, normal.
  • Закон сохранения энергии: отражено не больше, чем упало.
  • Roughness перераспределяет энергию блика: резкий и яркий ↔ размытый и тусклый.
  • Металлы отражают цветное окружение; диэлектрики дают матовый цвет и бесцветный блик.
Проверьте себя
1. Какова главная цель PBR?
AУскорить рендер
BЧтобы материал выглядел правдоподобно при любом освещении
CУбрать текстуры
DУвеличить FPS
2. Как roughness влияет на блик при сохранении энергии?
AМеняет цвет
BГладкая даёт яркий узкий блик, шероховатая — размытый тусклый
CУдваивает яркость
DОтключает блик
3. Чем металл отличается от диэлектрика в PBR?
AМеталл прозрачен
BМеталл почти не имеет рассеянного цвета и отражает цветное окружение
CДиэлектрик не отражает свет вовсе
DРазличий нет