Физически корректный рендеринг (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 перераспределяет энергию блика: резкий и яркий ↔ размытый и тусклый.
- Металлы отражают цветное окружение; диэлектрики дают матовый цвет и бесцветный блик.