PBR渲染

2022-09-14 11 three.js

介绍

PBR渲染的相关记录

# PBR渲染

  • PBR是一个基于物理渲染 模仿光的实际行为 让图形看起来更真实的一种渲染

# PBR组成部分

  • 灯光属性:直接照明、间接照明、直接高光、间接高光、阴影、环境光闭塞
  • 表面属性:基础色、法线、高光、粗糙度、金属度

# PBR灯光部分

# 光线类型

image-20220914142636718

入射光

  • 直接照明:直接从光源发射阴影物体表面的光
  • 间接照明:环境光和直接光经过反弹第二次进入的光

反射光

  • 镜面光:在经过表面反射聚焦在同一方向上进入人眼的高亮光
  • 漫发射:光被散射并沿着各个方向离开表面

# 光与表面相互作用类型

image-20220914142930045

  • 直接漫反射:从源头到四面八方散发出来的直接高光

image-20220914143822112

  • 直接高光:直接来自光源并被集中反射的光

image-20220914143337592

  • 间接漫反射:来自环境的光被表面散射的光

image-20220914143707138

  • 间接高光:来自环境光并被集中反射的光

image-20220914143540042

# 表面属性

# 基础色

image-20220914144038113

  • 定义表面的漫反射颜色
  • 真实世界的材料不会比20暗或比240 sRGB亮
  • 粗糙表面具有更高的最低~ 50srgb
  • 超出范围的值不能正确发光,所以保持在范围内是至关重要的

image-20220914144024621

基础色贴图制作注意点:

  • 不包括任何照明或阴影
  • 基本颜色纹理看起来应该非常平坦
  • 使用真实世界的度量或获取最佳结果的数据

# 法线

image-20220914144122919

  • 定义曲面的形状每个像素代表一个矢量
  • 该矢量指示表面所面对的方向即使网格是完全平坦的
  • 法线贴图会使表面显得凹凸不平
  • 用于添加表面形状的细节,这里三角形是实现不了的
  • 因为它们表示矢量数据,所以法线贴图是无法手工绘制的

# 镜面

image-20220914144151983

  • 用于直接和间接镜面照明的叠加
  • 当直视表面时,定义反射率
  • 非金属表面反射约4%的光
  • 0.5代表4%的反射
  • 1.0代表8%的反射但对于大多数物体来说太高了
  • 在掠射角下,所有表面都是100%反射的,内置于引擎中的菲涅耳项

image-20220914144251037

镜面贴图制作注意点:

  • 高光贴图应该大多在0.5
  • 使用深色的阴影来遮盖不应该反光的裂缝
  • 一个裂缝贴图乘以0.5就是一个很好的高光贴图

# 粗糙度

image-20220914144337828

  • 表面在微观尺度上的粗糙度
  • 白色是粗糙的
  • 黑色是光滑的
  • 控制反射的“焦点”
  • 平滑=强烈的反射
  • 粗糙=模糊的,漫反射

image-20220914144351564

粗糙度贴图制作注意点

  • 没有技术限制-完全艺术的选择
  • 艺术家可以使用这张地图来定义表面的“特征”,并展示它的历史
  • 考虑一下被打磨光滑、磨损或老化的表面

# 金属度

image-20220914144418227

  • 两个不同的着色器通过金属度混合他们
  • 基本色变成高光色而不是漫反射颜色
  • 金属漫反射是黑色的
  • 在底色下,镜面范围可达100%
  • 大多数金属的反光性在60%到100%之间
  • 确保对金属颜色值使用真实世界的测量值,并保持它们明亮
  • 当金属为1时,镜面输入将被忽略

image-20220914144443034

粗糙度贴图制作注意点:

  • 将着色器切换到金属模式
  • 灰度值会很奇怪,最好使用纯白色或黑色
  • 当金属色为白色时,请确保使用正确的金属底色值
  • 没有黑暗金属这回事
  • 所有金属均为180srgb或更亮

# 非金属和金属对比

image-20220914144512483

非金属

  • 基础颜色=漫反射
  • 镜面反射=0-8%

金属

  • 基础颜色=0-100%的镜面反射
  • 镜面=0%
  • 漫反射总是黑色的

# 总结

MeshStandardMaterial (opens new window)标准网格材质 是three.js中基于物理的渲染(PBR)的材质 性能消耗较大 并且需要灯光才能显示

  1. PBR是基于物理渲染的着色模型,PBR着色模型分为材质灯光两个属性。
  2. 材质部分由:***基础色、法线、高光、粗糙度、金属度来定义***材质表面属性的。
  3. 灯光部分是由:***直接照明、间接照明、直接高光、间接高光、阴影、环境光闭塞***来定义照明属性的。
  4. 通常我们写材质的时候只需要关注材质部分的属性即可,灯光属性都是引擎定义好的直接使用即可。
  5. PBR渲染模型不但指的是PBR材质,还有灯光,两者缺一不可。

# 参考文献

PBR资料 (opens new window)

Last Updated: 2023/2/24 12:22:01
来发评论吧~
Powered By Valine
v1.4.14
未加载音频 - (ಗ ‸ ಗ )
00:00 / 00:00