type
Post
status
Published
date
Mar 28, 2026
slug
pbr02
summary
tags
Unity
图形学
category
知识总结
icon
password
零、前言
上一篇介绍了PBR的理论知识,这篇使用Unity进行实战,先来看下效果:

一、工作流
在PBR中,为了在不同的光照环境下保持材质表现的一致性和真实感,主要分为了两种工作流:
- 金属/粗糙度(Metallic/Roughness)
- 镜面反射/光泽度(Specular/Glossiness)
1. 金属 / 粗糙度工作流 (Metallic/Roughness)
这是目前游戏引擎中最常用的工作流
贴图:
- Base Color(基础色): 包含非金属的漫反射颜色和金属的镜面反射颜色(需要配合metallic将diffuse和spcular分离)
- Metallic(金属度): 一张黑白图(通常建议只用纯黑或纯白)。白色(1.0)表示金属,黑色(0.0)表示非金属(绝缘体)
- Roughness(粗糙度): 描述表面的平整程度。1.0 为完全粗糙(漫反射散射),0.0 为完全平滑(镜面反射)。
2. 镜面反射/光泽度工作流 (Specular/Glossiness)
更传统的 PBR 方案,常见于影视渲染和较早的游戏渲染管线中
贴图:
- Diffuse(漫反射):仅包含非金属的漫反射颜色
- Specular(镜面反射):一张 RGB 彩色贴图。控制材质表面的反射颜色和强 度
- Glossiness(光泽度): 与 Roughness 相反。1.0 表示非常平滑,0.0 表示非常粗糙
本文中使用金属、粗糙度的工作流,来制作
二、项目设置
1. 贴图设置
- Albedo、BaseMap、DiffuseMap、SpecularMap需要勾选sRGB
- Roughness、Metallic、AO等是线性空间计算的,不要勾选sRGB
- Normal在Unity中选择Normal Map
2. 后处理设置
- ToneMapping - ACES
- ColorGrading 调下色(处理ACES后过暗)
Bloom(太闪不好看)
- 暗角
- DoF
3. 摄像机设置
- 调整FOV :20~30
- 剔除
三、代码
不要忘记加上其他的Pass
面板参数
如下
向量、贴图
BRDF参数
在金属粗糙度工作流中,从BaseMap/Albedo中获取DiffuseColor和SpcularColor
直接光
漫反射
镜面反射
D项
F项
V项
V项就是将 公式中的分母和G项放在一起计算
整合
多光源和主光计算逻辑一样,for循环处理每一盏灯
间接光
漫反射
球谐函数,模拟环境光漫反射
镜面反射
a. 预过滤环境贴图
采样CubeMap的MipMap
b. 环境BRDF
流派1:LUT
流派2:解析拟合
整合
完结撒花~
后续可能看情况补一下各个效果图


