PBR材质:基本原理和简单制作

article/2025/9/16 14:31:19

概要:介绍PBR材质的基本原理以及制作一个简单的PBR材质
参考资料:BASIC THEORY OF PHYSICALLY-BASED RENDERING
如有问题,多多指正。
侵删。

1.PBR是什么,光线的基本原理。

PBR即Physically-based rendering,基于物理的渲染。基于物理的渲染,即通过计算光线与物体表面的交互状态而实现模拟真实世界画面的一种渲染方式。通常用于影视特效,写实风格的游戏,工业领域。现实中的环境,肯定不止一种光源,而是有很多光源一起发生作用,光线互相交织在一起的。
写实的材质

光的组成包括:光源,颜色,亮度,衰减,强度,形状,以及无数的“线”。当光或者说光线打到物体上,可以发生两种反应,一种是折射,一种是反射。折射的光线会被吸收,或者被离散,而反射的光线则会继续进行反射作用。根据光的折射原理,光不是在物体的表面进行折射的,而是在第二表面,也就是进入物体第二表面之后,发生的折射效应,此时光线会被离散或吸收,吸收使得光的强度变小,而离散使得光的方向发生改变,强度则不会发生改变。而光在各种物体的表面,折射和反射的情况也是非常不同的,比如在粗糙的物体,物体的反射就会增多,光线经过多次漫反射,其光滑度就很低,比如毛衣,墙砖。

2.相关的几种基本概念和PBR材质的构成(以unity标准材质为例)

DIFFUSION & REFLECTION(扩散和反射)

反射:当光线打到物体表面时,一部分光线会被反射,在法线的相对侧根据某个角度进行反弹,就好像一个篮球打在墙上,会被反弹回去,这个概念比较好理解,从法线的一侧,然后碰到表面,在法线另一侧进行反弹。而在光滑的表面,通过反射,就容易得到一种镜像的效果,也就是像镜子一样,比如拖的很干净的地面,因为光滑,反射就容易出现“镜像”的效果。

扩散:当然,光打在物体上,不止会发生反射,还有发生别的反应。比如有一些光线进入了物体内部,被物体吸收或者是转换成了热量。而发生反射的,则通过多次反射进入你的眼睛或者是摄像头,然后被你看到,这就是我们常说的“漫反射”。我们把这种光称之为diffuse light(散射光)。对于不同波长的光,散射光(diffuse light)的吸收和散射通常会大不相同,所以对于一个对象,我们要给它颜色,或者说,每个物体,其实都是有颜色的。而散射光部分光线的反射并不是有规律的反射,而是随机或者说非常混乱的反射,这部分光在进行计算的时候,会给一个反射率,作为计算这个“部分”的多少或者说反射的多少。

TRANSLUCENCY(透明度)

透明度;这个比较好理解,但是因为某些物体的属性,比如蜡烛甚至是人的皮肤,光线的散射会更复杂。如果一个物体表面足够薄,光线可以穿过该物体,这个物体就是“半透明的”,光线会到达里面那一层,要处理这种效果,不能简单使用颜色,而是需要特殊的阴影系统。而另外一种,“全透明”物体,也就是如玻璃,光线可以穿到另一边,在这个物体里面几乎不会发生散射。

Metallic(金属)

金属:顾名思义,就是表现金属属性的一个参数。

Albedo(RGB)(反照率)

Albedo英文原意是反照率,其实就是基础颜色或者贴图,在上文中我讲到,一个物体最基本的是会有颜色的,透明的物体物体,也是有颜色的,所以这个Albedo也就是基本的颜色(或贴图)。

Smoothness(光滑度)

表现物体的光滑度的一个参数,通常会与金属Metallic一起使用。

Normal Map(法线贴图)

法线贴图就是在原物体的凹凸表面的每个点上均作法线,通过RGB颜色通道来标记法线的方向,你可以把它理解成与原凹凸表面平行的另一个不同的表面,但实际上它又只是一个光滑的平面。对于视觉效果而言,它的效率比原有的凹凸表面更高,若在特定位置上应用光源,可以让细节程度较低的表面生成高细节程度的精确光照方向和反射效果。
简而言之,就是使用该帖图,可以使画面更有立体感,同时丰富更多的细节。

Height Map(高度贴图or视差贴图)

高度贴图是使用法线投影进行渲染时存储源对象相对高度的灰度贴图。
可以将高度贴图作为目标对象上置换贴图。这是向低分辨率对象的边缘添加细节的方式,因为边缘本身不受发现凹凸贴图的影响。高度贴图在某些时候可以纠正法线贴图制作凹凸感时的错误,使物体表面的细节更加真实。

Occlusion(遮挡剔除)

参考unity的官方文字:
The occlusion map is used to provide information about which areas of the model should receive high or low indirect lighting. Indirect lighting comes from ambient lighting and reflections, so steep concave parts of your model like a crack or a fold would not realistically receive much indirect light.

Occlusion texture maps are normally calculated by 3D applications directly from the 3D model using the modeller or third party software.

An occlusion map is a greyscale image, with white indicating areas that should receive full indirect lighting, and black indicating no indirect lighting. Sometimes this is as simple as a greyscale heightmap
for simple surfaces.

At other times, generating the correct occlusion texture is slightly more complex. For example, if a character in your scene
is wearing a hood, the inside edges of the hood should be set to very low indirect lighting, or none at all. In these situations occlusion maps will often be produced by artists using 3D applications to automatically generate an occlusion map based on the model.
上面的意思大概是,遮挡贴图是一种计算物体表面光线的强度贴图,通过使用它,可以对物体的每个部分的吸收到的光线进行区分,部分地方会受到较多的光线,而其他部分,则会受到更少的光线,这样可以更好地处理物体的明暗细节。在遮挡贴图中,白色的表示会吸收到更多的光线,而越黑的,则会吸收到更少的光线。

Emission(自发光)

自发光:听字面意思就很清楚,可以使物体自身发光,因为生活中自发光的材质也有不少,如灯管,显示屏等。

3.使用PS快速制作一个PBR材质

以unity里面的standard材质为例,制作一个足球的PBR材质:
在这里插入图片描述

首先,足球肯定是需要一种颜色,或者是贴图的,根据足球的纹理,边缝是凹下去的,而球面的五边形是凸出来的,所以这里我们先找一张铺平的足球贴图,作为Albedo贴图
在这里插入图片描述
在这里插入图片描述
首先,使用PS绘制Noremal Map,也就是法线贴图
在这里插入图片描述
加上的效果如下,可以看到,中间的缝有了一点的凹凸感:
在这里插入图片描述
接下来是金属贴图,因为足球的表面其实是半光滑的,金属感肯定是没有的,但是在贴图上还是要进行设计。金属贴图为黑白图,越黑的部分不显示金属特性,越白的部分会显示金属特性,所以直接将Albedo的贴图作为金属贴图即可,调节光滑度进行调整。
在这里插入图片描述
而高度贴图则很不一样,黑的部分会凹下去,白的部分则会凸出来,所以我们需要把足球的贴图缝隙设计成黑色,其他设计成白色。
在这里插入图片描述

在这里插入图片描述

至于Occlusion Map,按理来说,足球的底下是暗的,上面应该亮一点,所以在ps里面尝试将左右两边的亮度减低
在这里插入图片描述
最后效果:
在这里插入图片描述

可以看到,足球的表面有了一种明显的凹凸感,但是因为贴图处理的不是特别好,所以显得有点模糊,这一点需要再进行细致的调整。

总结:其实PBR材质的渲染与其shader的编写方式有很大的关系,但是很多高深的数学知识,会容易劝退人,本节也只是了解了一些简单的原理,其知识量其实是很大的,一下子无法学完,需要慢慢耕耘。如果是美术人员,只是通过工具实现PBR材质的效果,也是可以的,PBR材质制作的模型效果,算是顶级的了,当然,前提是你愿意打磨。


http://chatgpt.dhexx.cn/article/AaF35Wsg.shtml

相关文章

什么是PBR?pbr入门基础干货

(1)什么是PBR? 基于物理的渲染过程。 PBR是一种着色和渲染技术,用于更精确的描述光如何与物体表面互动。 PBR的优势: (1)方法论和算法基于精确的计算公式,免除创作表面的猜想过程…

PBR——概述、基于物理的材质

PBR概述 PBR,即Physically Based Rendering,主要分为基于物理的材质、基于物理的光照和基于物理的相机三个部分,目前来说对大家最为所熟知的是基于物理的材质部分。本文围绕基于物理的材质进行相关介绍。 什么是PBR 其实最早听说PBR这玩意…

PBR基础理论通俗解释

PBR基础理论通俗解释 今天给大家介绍PBR的基础理论, 不会涉及比较深的具体算法, 算是一篇扫盲的文章, 尽量尝试说人话, 让大家能够对PBR有基本的了解. 什么是PBR? PBR是基于物理的渲染(Physically Based Rendering), 也就是说通过模拟物理世界的方式来渲染. 既然有基于物理…

基于物理的渲染PBR(一):pbr的基础理论和推导

初始PBR 最近刚接触pbr不久,我搜寻了许多文章进行阅读并了解后发现,pbr涉及到的知识点繁琐且不容易理解,所以想在博客上给自己记录并总结一下,方便以后回顾并加深记忆。 这里首先借用知乎上的大佬毛星云关于pbr所涉及到的知识要…

策略路由(PBR)

1、基本概念 PBR (Policy-Based Routing,策略路由): PBR使得网络设备不仅能够基于报文的目的IP地址进行数据转发,更能基于其他元素进行数据转发,例如源IP地址、源MAc地址、目的MAc地址、源端口号、目的端口号、VLAN-ID等等。 用户还可以使用A…

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

一、什么是PBR? PBR(Physically Based Rendering),中文翻译为基于物理的渲染。 PBR是一种渲染方式,是使用基于物理原理和微平面理论的光照模型,以及使用从现实中测量的表面参数来准确表示真实世界材质的渲…

图灵直播|《第一行代码》作者郭霖在线Coding,今晚八点,给你留位!

图源来自Pexels “我们为什么需要 Kotlin?答:消失的 Getter 和 Setter、又见空指针、Smart Cast、打日志、再见Utils、晚安ButterKnife……” 相信很多人初识Kotlin,都是基于谷歌技术大牛 Steve Yegge的一篇文章《为什么说 Kotlin 比你们用的…

撸了郭霖大神写的Framework源码笔记,offer拿到手软

前不久听我一个字节的朋友说了一个神转折的故事。 一名大专生,异常执着地向他们公司投简历,屡战屡败,屡败屡战,前前后后向字节跳动投了九次简历。 你猜后面怎么着?还真让他成功了,第九次居然拿到了offer! 看到这里,不过是一个普普通通的励志故事吧,一个菜鸡凭借自己…

(郭霖)Android图片加载框架最全解析(一),Glide的基本用法

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 现在Android上的图片加载框架非常成熟,从最早…

图灵专访:郭霖的成长之路

各位小伙伴们大家早上好,最近这段时间我真的是快要忙疯了,好多件事情同时在做,实在抽不出时间写原创文章。 正巧想到前段时间和图灵做了一次专访,记录了一些我的成长经历。这篇专访姑且也可以算是一篇原创吧,因为里面的…

第一行代码-第二版(郭霖著)笔记十一(Material Design)

目录 一、什么是Material Design 二、Toolbar 三、滑动菜单 1.DrawerLayout 2.NavigationView 四、悬浮按钮和可交互提示 1.FloatingActionButton:悬浮按钮 2.Snackbar:提示工具 3.CoordinatorLayout:加强版FrameLayout 五、卡片式…

第一行代码-第二版(郭霖著)笔记二(Activity)

目录 一、Activity的用法 1.Activity 2.Toast 3.菜单 4.销毁一个活动 二、Intent 1.使用显示Intent 2.使用隐式Intent 3.更多隐式Intent的用法 4.向下一个活动传递数据 5.返回数据给上一个活动 三、活动的生命周期 1.返回栈 2.活动的四种状态 3.活动的生存期 4…

android动态权限依赖库,动态申请app权限:郭霖大神的PermissionX库带你告别原生

引言 为什么那么多人想要自定义Android的权限申请PermissonX?因为PermissionX默认的权限提醒弹出实在是太丑了!而且,需要在你需要提醒用户弹出Dialog时,显得捉襟见肘,你可能就在想有没有一款能封装进去Dialog提醒用户,具有超棒的用户体验,还能看起来美观大气的Permissio…

跟随郭霖学Volley

volley 下载导入volleyjar 学习地址: https://blog.csdn.net/guolin_blog/article/details/17482095 2013在Google I/O大会提出 github地址: https://github.com/google/volley 下载volley导入到as 具体的操作是: project模式下 具体看图: 之后的操作是打开lib 选择jar 右…

android 6.0权限 郭霖,Permission——郭霖认为最优的运行时权限方案

Android6.0发布这么久,对运行时权限也看了很多资料,对比过几个流行的库。但是个人还是喜欢在项目里用自己动手封装的东西,哪怕照抄也好。。。不知道是什么原因。 前天无意听郭神的直播。讲解的是运行时权限的封装,收益颇多。依样画…

郭霖LitePal

由于项目需要开始学习sqlite 一开始先学习使用的是 android ormlite 操作 从最基本的建表增删改查一路走来 磕磕碰碰很多 都是在内存中操作sqlite 只能通过sqlitestudio工具进行查看 不能导出 并且应用卸载数据表就丢失 最终考虑在sd卡中操作sqlite 但是ormlite 并没有这方面…

android郭霖博客,Runtime Permissions(郭霖CSDN公开课)

运行时权限 Api23开始,Android权限机制更改,有一部分权限不再是简单的在AndroidManifest.xml中声明即可。而是需要在运行时让用户去选择是否允许该项权限的操作。 那么哪些权限需要在运行时申请呢?危险权限需要这么做,而普通权限仍…

看一看Facebook工程师是怎么评价《第一行代码》的

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。 大家好,我是一名Facebook的工程师,同时也是《第一行代码——Android》的忠实读者。 虽然我最近几年是在国外读书和工…

郭霖:手把手教你实现 App 360 度旋转看车效果

这是郭神号前阵子的推送,应该有不少人还没有看过,现在分享给大家,希望对大家的Android工作和学习有所帮助。 / 作者简介 / 本篇文章来自Youth Lee的投稿,分享了他自己结合Glide写的一个控件,希望对大家有所帮助&#…

第一行代码-第二版(郭霖著)笔记(初识Android)

系列文章目录 第一章 第一行代码-第二版(郭霖著)笔记(初识Android) 目录 一、Android简介 1.android系统架构 2.Android应用开发特色 二、工具准备 Tips:新建项目的时候是否勾选use legacy android.support libraries 三、…