虚幻UE 材质-PBR基于物理的渲染

注意:本篇不会深入讲解PBR各个模块的核心理论,以较为通顺的方式讲解,如需核心理论可以前往链接: 重新理解PBR(1)处学习。

文章目录


一、PBR简述

PBR(Physically Based Rendering):一种基于物理的渲染方式,根据现实生活中对事物材质随光的变化规律得到的理念和原则,基于这个规则理念去渲染的方式就叫PBR。(个人理解)

这么做很容易套用现实生活中的客观规律,渲染的画面也更接近现实。

做好PBR的方式很简单

就是要做好三件事
1、观察表面材质(材质参数)
2、分析表面材质随光的变化规律(核心理论)
3、按规律总结复刻(复制粘贴)


二、材质参数

观察表面参数,主要需要去观察以下几个方面:
1、基础颜色?(BaseColor)
2、粗糙度(Roughness)
3、金属度(Metallic)
4、法线(Normal)
5、高光(Specular)

1、基础颜色

• 即物体本身的颜色。(影响整体观感)

• 约等于渲染器的Diffuse | 漫反射、固有色

• Bridge中叫 Albedo | 反照率、反射率

• *BaseColor贴图本身应无光照信息

2、粗糙度

• 即物体表面的粗糙程度。(影响光的反射)

0(黑色)表示绝对光滑,1(白色)表示绝对粗糙

• *其它渲染器一般使用Glossiness(光滑度)来描述表面粗糙度,其逻辑和Roughness是反向的。

3、法线

• 描述物体表面的细微起伏(材质都是2D,然后还原3D,得靠法线)

• "光照魔法",不改变几何体本身

• *改变几何体本身的技术是Displacement | 置换

4、金属度

• 描述物体表面的金属特征(金属和非金属反光的规律差别很大)

• 金属特征:反射(高光)颜色是否跟随基础色

• 换句话说,反射内容是否被"染色"

非金属车漆反射的颜色是环境的颜色,而金属车漆反射的是本身颜色。
材质参数关注的都是表面特性,和你是否是什么材质无关,和你想表现的材质有关。

但是有一部分金属可能就不是很符合"反射(高光)颜色是否跟随基础色"这个特性。

如:银,因为它的基础色就是白色。

反射并没有发生"染色",是因为染色结果为"白色",也就是原色。

5、高光

虚幻无法直接为材质设定反射IOR,而是用Specular参数替代(后面会详细讲解IOR)

• 默认值0.5,符合IOR 1.5左右的反射曲线

增加Specular值可以增加0°反射强度,模拟更光亮的非金属表面
• 金属无需设置Specular

Material Specular
Glass 0.5
Plastic 0.5
Quartz 0.570
Ice 0.224
Water 0.255
Milk 0.277
Skin 0.35

三、核心理论

1、微平面理论-反射

反射:当能量碰到表面时,一部分能量会被反弹走。

• 物体表面越粗糙,能量集中度越低
• 漫反射(Diffuse):被反弹走的能量飞往各个方向
• 光泽反射(Glossy):被反弹走的能量主要飞往一个方向
• 镜面反射(Mirror):被反弹走的能量全都飞往一个方向

• *现实中几乎不存在完全的漫反射或镜面反射

物体越粗糙则发生的漫反射越严重。

物体越光滑则发生的光泽反射越强,甚至于镜面反射。

现实中几乎不存在完全的漫反射或镜面反射 ,现实生活中的物体表面多多少少有点灰尘啥的东西导致表面不可能光滑。

而一般在渲染领域中大多数是分为两类:导体(金属)和绝缘体(非金属)
金属表面更光滑,所以反光率更强(>0.5)。
非金属表面更粗糙,所以反光率更弱(<0.06)。

2、能量守恒-反射能量小于入射能量

反射也必须遵守能量守恒定律,即:反弹+穿过+吸收 = 入射能量
漫反射和清晰反射是反射的两种形态,此消彼长

场景是纸上的一滴水,亮度对比如下:

水中亮部处 > 纸上无水处 > 水中暗部处

出现这样的情况是因为:
反射发生的方式不一样,纸上发生漫反射,光线不集中。
水上发生光泽反射,光线集中,越亮的光线集中越亮,越暗的光线集中越暗。(说法不太正确,理解即可)

3、菲涅尔特性

菲涅尔效应是一种表示看到光线的反射率与视角相关的现象,也就是光源入射方向与平面法线方向夹角的对应关系,夹角越大,反射越大,亮度也就越大,反之夹角越小,反射就越小,亮度也就越小。而这种效应中的反射率就被称为菲涅尔反射!

即观察的角度不一样,反射也就不一样,亮度也就不一样了,这就是菲涅尔特性。
弱反射则高折射。

反射率:不同角度的反射率不同,0度垂直一般0.04,90度一般0.09。
因为0度反射强,所以不符合典型菲涅尔特征

IOR | 折射率, Index of Refraction
描述折射效果的变形程度,或反射强度随视角的变化程度

如果需要查看物体的折射率和反射率可以通过下方链接进入:
refractiveindex.info

反射率

非金属反射遵循菲涅尔特性
• 金属反射具有强反射特性:0°反射远强于非金属
• 白色陶瓷 = 白色基础色 + 反射染色为零 + 典型菲涅尔
• 银色金属 = 白色基础色 + 反射染色白色 + 金属强反射

4、BRDF双向反射分布函数

描述入射光和观察方向(反射光)关系的数学公式(一个计算入射光和反射光的函数,个人感觉知道就行)

• Bidirectional | 双向:入射方向+观察方向(反射方向)

• Reflectance Distribution | 反射率分布:反弹后的光如何发散

• Function | 函数:功能---这是一个功能,给入参数,输出结果

• 比IOR方式更直观统一

• 函数结果 = BRDF(观察方向,入射光)

5、线性空间光照

明白提供给计算机的贴图是给人看的还是给电脑看的。

**人眼观察到的是非线性的所有屏幕需要呈现非线性的,所以是CRT Gamma

而电脑处理的是线性的,所以需要Linner

而这之间需要转化:则需要Gamma Correction

输出 = 输入^Gamma
0.218 = 0.52.2
0.5 = 0.2180.45

由于只影响灰度,不影响0和1(纯黑和纯白),所以也叫灰度系数,是sRGB的一部分。

• 给人看的:需要最终显示在屏幕上的贴图,典型如基础颜色(BaseColor)。
由于需要在显示器上进行最终显示,因而需要符合sRGB(Gamma)规范。
• 给电脑看的:最终不会直接显示在屏幕上的贴图,仅在电脑内部执行计算用
途。典型如金属度(Metallic),粗糙度(Roughness),法线(Normal)
贴图

来自Bridge的贴图通常无需手动设置sRGB规范


四、参考

链接: 技术美术知识学习_04:PBR的个人理解

相关推荐
Leoysq10 分钟前
【Unity保龄球项目】的实现逻辑以及代码解释
java·unity·游戏引擎
Bartender_Jill2 小时前
[PICO VR]Unity如何往PICO VR眼镜里写持久化数据txt/json文本
unity·json·游戏引擎·图形渲染·vr
阿汪队3 小时前
【游戏引擎】C++自制游戏引擎 Lunar Game Engine
游戏引擎
ue星空4 小时前
虚幻引擎游戏保存/加载存档功能
游戏·ue5·游戏引擎·虚幻·虚幻引擎
ue星空4 小时前
虚幻蓝图Ai随机点移动
游戏·ue5·游戏引擎·虚幻·虚幻引擎
雪 狼7 小时前
Unity 热更新(HybridCLR+Addressable)-创建Addressable资源
unity·游戏引擎
四代水门7 小时前
UE5——在线子系统
ue5
暮志未晚Webgl1 天前
96. UE5 GAS RPG 实现闪电链技能(一)
ue5
留待舞人归1 天前
【Unity杂谈】iOS 18中文字体显示问题的调查
游戏·unity·ios·游戏引擎·unity3d
axin7c81 天前
UnLua实现继承
ue5