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

article/2025/9/17 7:59:02

一、什么是PBR?

PBR(Physically Based Rendering),中文翻译为基于物理的渲染。

PBR是一种渲染方式,是使用基于物理原理和微平面理论的光照模型,以及使用从现实中测量的表面参数来准确表示真实世界材质的渲染理念!

PRB是一系列技术的集合,它包含GI、PBS

二、PBR的核心理论

1、物理的光学特性(Substance Optical Properties)

2、微平面理论(Microfacet Theory)

3、能量守恒(Energy Conservation)

4、菲涅尔反射(Fresnel Reflection)

5、线性空间光照(Linear Space Lighting)

一、物质的光学特性

现实世界中的物质根据导电性可以分为三大类:绝缘体、半导体、导体

而在渲染领域中大多数是分为两类:导体(金属)和绝缘体(非金属)

金属材质

1、金属具有很高的反射率(>0.5)

2、金属会立即吸收任何的折射光,因此金属不会出现任何次表面散射和透明的效果

3、金属的所有可见的颜色都来自反射

4、金属的反射颜有:金sRGB(255,226,155)银sRGB(252,250,245)

铝sRGB(245,246,246)铁sRGB(196,199,199)铜sRGB(250,208,192)

可以看出金属的高光反射颜色可以是不一样的,RGB通道也可以是不一样的值。

非金属材质

1、非金属具有很低的反射率(<0.06)

2、非金属会产生高光反射和漫反射现象

3、非金属的高光反射为单色/灰色

4、非金属的高光反射有:玻璃sRGB(57,57,57)水sRGB(43,43,43)

生锈金属sRGB(52,52,52)

二、微平面理论

现实世界中大多数表面都不是光学光滑的,这种微观几何上的变化会导致每个表面点对光有所不同的反射和折射。

所以基于物理渲染的PRB技术都是基于微平面理论的,它假想任何平面都是由微平面组成的,根据这些微平面粗糙度的不同,采用粗糙度贴图或者高光度贴图来进行表示。

如下图所示:即使看起来非常光滑的表面,用放大镜去看,它还是有许多凹凸不平的表面!

 一个平面越是粗糙,这个平面上的微平面排列就是越混乱,显示出来的高光反射越模糊。

反之,一个平面越是越光滑,这个平面上的微平面排列越整齐,显示出来的高光反射越清晰。

 

三、能量守恒

1、出射光线的能量永远不能超过入射光线的能量(自发光物体除外)

2、随着粗糙度的上升,镜面/高光反射的区域面积会增加,基于能量守恒,故镜面/高光反射区域的亮度则会降低!

3、镜面反射 + 漫反射 <=入射光     解释:因为入射光发射到平面的时候,有些光束被平面内部给吸收了,这部分被吸收的光束不参与物理计算,固然镜面反射与漫反射相加得到的结果必然小于入射光,否则就是没有遵循能量守恒!

四、菲涅尔反射

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

五、线性空间光照

1、为了保证光照渲染的正确性,所以最好是在线性空间中进行操作与计算,这样才能尽最大的还原现实世界中光与物质的交互。

2、下图给出了在线性空间(Linear)与伽马空间(Gamma)中的计算对比!可以看出相同的数值,在两个空间中呈现的效果完全不一样,当强度值调到1.5时,伽马(Gamma)空间的亮部已经曝光了,细节几乎完全丢失,而在线性(Linear)空间中,没有曝光,细节依旧还在,且过渡自然。所以为了正确计算PRB我们在Shader中都应该在线性空间中计算!

六、金属流与高光流

1、PBR的两种工作流程,一种是金属工作流,另外一种是高光工作流。他们两种流程的优缺点都罗列在了下方!该图来源于哔哩哔哩技术美术百人计划_霜狼_may,有需要详细了解的可以进入下方链接:【技术美术百人计划】美术 2.7 Metallic与Speculer流程_哔哩哔哩_bilibili


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

相关文章

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

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

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

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

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

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

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

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

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

目录 一、什么是Material Design 二、Toolbar 三、滑动菜单 1.DrawerLayout 2.NavigationView 四、悬浮按钮和可交互提示 1.FloatingActionButton&#xff1a;悬浮按钮 2.Snackbar&#xff1a;提示工具 3.CoordinatorLayout&#xff1a;加强版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发布这么久&#xff0c;对运行时权限也看了很多资料&#xff0c;对比过几个流行的库。但是个人还是喜欢在项目里用自己动手封装的东西&#xff0c;哪怕照抄也好。。。不知道是什么原因。 前天无意听郭神的直播。讲解的是运行时权限的封装&#xff0c;收益颇多。依样画…

郭霖LitePal

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

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

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

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

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

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

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

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

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

专访郭霖:成长无止境

留意文末赠书活动 嘉宾 | 郭霖 文 | 张霞 郭霖&#xff0c;Android开发工程师&#xff0c;Android GDE&#xff08;Google认证开发者专家&#xff09;。从事Android开发工作9年&#xff0c;有着丰富的项目实战经验&#xff0c;负责及参与开发过多款移动应用与游戏&#xff0c;开…

解决http响应状态为canceled

最近写登录的页面&#xff0c;发现通过ajax请求后台的时候&#xff0c;监控台返回该请求的状态是canceled。 原因 仅仅是由于之前为了在输入账号时让浏览器进行自动补全&#xff0c;而将原先的div更换为了form,而不巧的是之前的登录事件源使用的是button。 而至于为什么stat…

ajax请求导致status为canceled的原因

在使用layui的form表单提交以后&#xff0c;请求状态总是canceled。后来在form表单的后面添加了一行代码&#xff1a; return false; 就可以了。 文档&#xff1a;https://www.layui.com/doc/modules/form.html#onsubmit 错误&#xff1a; 解决方法&#xff1a; 总结一下&…

ajax请求文件状态为 canceled 的解决办法

ajax请求文件状态为 canceled 的解决办法 场景还原原因分析解决 场景还原 最近做一个表单提交的需求时&#xff0c;遇到了这种情况&#xff0c;输完账号密码后回车提交&#xff0c;报错&#xff0c;f12打开看到是请求的status为canceled了&#xff0c;震惊一秒钟。。。如下图&…

chrome同步或登录报错:Request Canceled

原因 因为某个接口连接失败造成&#xff0c;可以摁快捷键F12或者点击开发者工具。 然后选择network&#xff0c;这里面是该页面所有的收发请求 开始登录&#xff0c;登录的时候要注意network中pending或者报错的接口&#xff0c;然后把域名记录下来 解决方式 安装chrome插…

http发送请求,status显示canceled的原因

原因&#xff1a;onSubmit和submit属性比较陈旧&#xff0c;在提交了数据以后会自动刷新页面&#xff0c;导致信息丢失以及请求中止 解决&#xff1a;在 handler里面写入e.preventDefault();阻止onsubmit执行默认的刷新页面行为。