PBR系列-物理材质(上)

作者:游梦

对PBR系列文章感兴趣还可以看前文:

PBR系列 - 物理光源

PBR系列-光之简史

前面两篇文章分别介绍了物理光源与光学研究简史,在对光有了简单认识之后,再认识物理材质会发现其实本质上还是对光的研究,再深入一点其实就是光在经过物体之后根据光线散射、反射以及折射的不同区分的材质,看完本篇文章,相信你会对物理材质有个新的认知。

可能有小伙伴好奇为什么我介绍到这里还没有介绍渲染方程,这里小编做个解释,一开始小编在学习PBR时,由于没能看到比较系统简单明了的文章,所以在初次看到渲染方程时产生了不小的恐惧心理,因此当小编开始写PBR时没有上来就介绍底层晦涩难懂的渲染方程,采取的方式是先简单大致介绍PBR整套理论,由浅入深,最后介绍渲染方程时会与前置的所有知识点进行联动,有助于清晰直观的理解渲染方程。

小编对物理材质的理解?

先来做个小测试,下面有三张纹路相似的图,分别是什么材质?

(图源:百度图片)

(图源:百度图片)

(图源:百度图片)

这里揭晓答案:
1. 玻璃
2. 金属
3. 布料

简单是很简单,但是如果让你不根据纹理判断,你会用什么来判断?

相信大家都会想到依据光照呈现的效果来判断。第一个后方的物体发射的光线可以穿透被看到,第二个反射的高光效果像金属平面,第三个光线经过细小的线状物体呈现毛茸茸的感觉推断是布料。可以发现都是依据光线经过物体时所呈现的光效判断,所以不同的物理材质也就是在光学研究中对同一类光照呈现效果的命名。

以上是小编对物理材质的理解,如有偏差欢迎指正^_^。

核心理论

在对光线经过的物体研究时,提出了以下几点核心理论:

微平面理论(Microfacet Theory):微平面理论是将物体表面建模做成无数微观尺度上有随机朝向的理想镜面反射的小平面(microfacet)的理论。在实际的PBR工作流中,这种物体表面的不规则性用粗糙度贴图或者高光度贴图来表示。

(图源:技术美术知识学习_04:PBR的个人理解_npr流程与pbr流程区别-CSDN博客)

能量守恒(Energy Conservation):出射光线的能量永远不能超过入射光线的能量。随着粗糙度的上升镜面反射区域的面积会增加,作为平衡,镜面反射区域的平均亮度则会下降。

菲涅尔反射(Fresnel Reflectance):光线以不同角度入射会有不同的反射率。相同的入射角度,不同的物质也会有不同的反射率。万物皆有菲涅尔反射。F0是即 0 度角入射的菲涅尔反射值。大多数非金属的F0范围是0.02-0.04,大多数金属的F0范围是0.7-1.0。

(图源:https://blog.csdn.net/qq_17775727/article/details/123284920)

线性空间(Linear Space):光照计算必须在线性空间完成,shader中输入的gamma空间的贴图比如漫反射贴图需要被转成线性空间,在具体操作时需要根据不同引擎和渲染器的不同做不同的操作。而描述物体表面属性的贴图如粗糙度,高光贴图,金属贴图等必须保证是线性空间。

色调映射(Tone Mapping):也称色调复制(tonereproduction),是将宽范围的照明级别拟合到屏幕有限色域内的过程。因为基于HDR渲染出来的亮度值会超过显示器能够显示最大亮度,所以需要使用色调映射,将光照结果从HDR转换为显示器能够正常显示的LDR。

物质的光学特性(Substance Optical Properties):现实世界中有不同类型的物质可分为三大类:绝缘体(Insulators),半导体(semi-conductors)和导体(conductors)。在渲染和游戏领域,我们一般只对其中的两个感兴趣:导体(金属)和绝缘体(电解质,非金属)。其中非金属具有单色/灰色镜面反射颜色。而金属具有彩色的镜面反射颜色。即非金属的F0是一个float。而金属的F0是一个float3,如下图:

(图源:【PBR系列一】PBR知识体系_非金属的f0-CSDN博客)

材质渲染工作流

为了能够在图形学中实时模拟计算出材质效果,当前主流的渲染分两种:金属/粗糙度工作流(Metal/Roughness)和镜面反射/光泽度工作(Specular/Glossiness),各自分别有自己的一套参数定义,这里小编介绍最常见的迪士尼基于金属/粗糙度工作流(Metal/Roughness)提出一套参数定义。

(图源:技术美术知识学习_04:PBR的个人理解_npr流程与pbr流程区别-CSDN博客)

据说是被美术设计师提醒,美术师需要的光照模型是可控制的视觉正确模型,不一定需要物理正确。所以迪士尼专家建立一个有“原则”的模式,而不是严格的物理正确模型。

迪士尼设计原则:

1.应该使用直观而非物理参数。

2.应该尽可能少地使用参数。

3.参数应该在合理控制在0到1之间。

4.参数应该被允许超出他们合理的视觉范围。

5.所有参数组合应该尽可能的健壮和可信。

参数:

baseColor:表面颜色,通常由texture maps提供

subsurface:用次表面控制漫反射颜色

metallic: 金属度(0电介质-1金属)这是两种不同模型之间的线性混合,该金属模型没有漫反射成分,有一个带颜色的高光,等同于其基本颜色。

specular: 入射高光反射量,代替了折射率。

specularTint:给美术设计师让步而设计的朝basecolor的入射高光颜色,平射角的高光色彩仍然是无色的。

roughness:表面粗糙度,控制漫反射和高光效果。

anisotropic: 各项异性,各项异性的程度,控制高光的宽高比(0 =各向同性,1 =最大各向异性。)。

sheen:一种额外的平射角组件,主要用于布料材质。

sheenTint:基本颜色的色彩光泽量。

clearcoat:第二特别专用的高光页(specular lobe)。

clearcoatGloss:控制clearcoat的光泽度,(0 =“光滑”外观,1 =“gloss”的外观)

下面是各参数影响的视觉效果:

(图源:离线渲染|Physically Based Shading at Disney:Disney principled BRDF - 知乎)

下面配图解释光线与物体作用示意图,加深理解光线与不同材质会有哪些效果:

光与非光学平坦表面的交互原理

光在与非光学平坦表面(Non-Optically-Flat Surfaces)的交互时,非光学平坦表面表现得像一个微小的光学平面表面的大集合。表面上的每个点都会以略微不同的方向对入射光反射,而最终的表面外观是许多具有不同表面取向的点的聚合结果。

(图源:【PBR系列一】PBR知识体系_非金属的f0-CSDN博客)

在微观尺度上,表面越粗糙,反射越模糊,因为表面取向与整个宏观表面取向的偏离更强。图片顶部所示的表面,表面相对光滑; 表面取向仅略有变化,导致反射光方向的微小变化,从而产生更清晰的反射。 图片底部所示的的表面较粗糙; 表面上的不同点具有广泛变化的方向取向,导致反射光方向的高度变化,并因此导致模糊的反射。 注意,两个表面在肉眼可见尺度下看起来都是光滑的,粗糙度差异仅在微观尺度上。

出于着色的目的,我们通常会去用统计方法处理这种微观几何现象,并将表面视为在每个点处在多个方向上反射(和折射)光。

(图源:https://blog.csdn.net/qq_35312463/article/details/108055143)

从表面反射出的光的行为很好理解,那么,从表面折射的光会发生什么变化? 这取决于对象本身的特性:

  • 对于金属,折射光会立刻被吸收 - 能量被自由电子立即吸收。
  • 对于非金属(也称为电介质或绝缘体),一旦光在其内部折射,就表现为常规的参与介质,表现出吸收和散射两种行为。

(图源:https://blog.csdn.net/qq_35312463/article/details/108055143)

上图是在金属中,所有折射的光能立即被自由电子吸收。

(图源:https://blog.csdn.net/qq_35312463/article/details/108055143)

上图在非金属中,折射的光会进行散射,直到从表面重新射出,就像光照向塑料材质上,能看到光传进物体一样,如下图,光透进兔子头部位再从表面射出的效果。

本篇文章介绍了物理材质、光线作用以及相关物理现象,下一篇将着重介绍光线与物体表面作用的BxDF之间的关系。

参考链接:

离线渲染|Physically Based Shading at Disney:Disney principled BRDF - 知乎

【PBR系列一】PBR知识体系_非金属的f0-CSDN博客

技术美术知识学习_04:PBR的个人理解_npr流程与pbr流程区别-CSDN博客


  关注Mapmost,持续更新GIS、三维美术、计算机技术干货

Mapmost是一套以三维地图和时空计算为特色的数字孪生底座平台,包含了空间数据管理工具(Studio)、应用开发工具(SDK)、应用创作工具(Alpha)。平台能力已覆盖城市时空数据的集成、多源数据资源的发布管理,以及数字孪生应用开发工具链,满足企业开发者用户快速搭建数字孪生场景的切实需求,助力实现行业领先。

欢迎进入官网体验使用:Mapmost——让人与机器联合创作成为新常态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/337479.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云 通过EIP实现VPC下的SNAT以及DNAT

192.168.0.85 有公网地址192.1680.95无公网地址 在192.168.0.85(有公网地址服务器上操作) #开启端口转发 echo "net.ipv4.ip_forward 1" >> /etc/sysctl.conf sysctl -p#仅允许192.168.0.95 iptables -t nat -I POSTROUTING -s 192.16…

SqliSniper:针对HTTP Header的基于时间SQL盲注模糊测试工具

关于SqliSniper SqliSniper是一款基于Python开发的强大工具,该工具旨在检测HTTP请求Header中潜在的基于时间的SQL盲注问题。 该工具支持通过多线程形式快速扫描和识别目标应用程序中的潜在漏洞,可以大幅增强安全评估过程,同时确保了速度和效…

Pycharm使用时的红色波浪线报错——形如‘break‘ outside loop

背景: 我在一个方法中,写了一个if判断,写了一个break,期望终止这个函数,编辑器出现报错 形如下图 视频版问题教程: Pycharm下出现波浪线报错,形如break outside loop 过程: 很奇…

ROS2在RVIZ2中加载机器人urdf模型

参考ROS2-rviz2显示模型 我这边用的solid works生成的urdf以及meshes,比参考的方法多了meshes 问题一:Error retrieving file [package://rm_dcr_description/meshes/leftarm_link7.STL]: Package [rm_dcr_description] does not exist 这个是urdf模型中…

python-pytorch编写transformer模型实现问答0.5.00--训练和预测

python-pytorch编写transformer模型实现问答0.5.00--训练和预测 背景代码训练预测效果 背景 代码写不了这么长,接上一篇 https://blog.csdn.net/m0_60688978/article/details/139360270 代码 # 定义解码器类 n_layers 6 # 设置 Decoder 的层数 class Decoder(…

向量数据库引领 AI 创新——Zilliz 亮相 2024 亚马逊云科技中国峰会

2024年5月29日,亚马逊云科技中国峰会在上海召开,此次峰会聚集了来自全球各地的科技领袖、行业专家和创新企业,探讨云计算、大数据、人工智能等前沿技术的发展趋势和应用场景。作为领先的向量数据库技术公司,Zilliz 在本次峰会上展…

SpringBoot+layui实现Excel导入操作

excel导入步骤 第三方插件引入插件 效果图 (方法1)代码实现(方法1)Html代码( 公共)下载导入模板 js实现 (方法1)上传文件实现 效果图(方法2)代码实现&#xf…

mimkatz获取windows10明文密码

目录 mimkatz获取windows10明文密码原理 lsass.exe进程的作用 mimikatz的工作机制 Windows 10的特殊情况 实验 实验环境 实验工具 实验步骤 首先根据版本选择相应的mimikatz 使用管理员身份运行cmd 修改注册表 ​编辑 重启 重启电脑后打开mimikatz 在cmd切换到mi…

Matlab|基于粒子群算法优化Kmeans聚类的居民用电行为分析

目录 主要内容 部分代码 结果一览 下载链接 主要内容 在我们研究电力系统优化调度模型的过程中,由于每天负荷和分布式电源出力随机性和不确定性,可能会优化出很多的结果,但是经济调度模型试图做到通用策略,同样的策…

HarmonyOS鸿蒙学习笔记(25)相对布局 RelativeContainer详细说明

RelativeContainer 简介 前言核心概念官方实例官方实例改造蓝色方块改造center 属性说明参考资料 前言 RelativeContainer是鸿蒙的相对布局组件,它的布局很灵活,可以很方便的控制各个子UI 组件的相对位置,其布局理念有点类似于android的约束…

如何看待时间序列与机器学习?

GPT-4o 时间序列与机器学习的关联在于,时间序列数据是一种重要的结构化数据形式,而机器学习则是一种强大的工具,用于从数据中提取有用的模式和信息。在很多实际应用中,时间序列与机器学习可以结合起来,发挥重要作用。…

基于 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案

作者:田向阳,联通西部创新研究院 大数据专家 共创:SelectDB 技术团队 导读: 数据是 5G 全连接工厂的核心要素,为支持全方位的数据收集、存储、分析等工作的高效进行,联通 5G 全连接工厂从典型的 Lambda 架…

利用ArcGIS Python批量拼接遥感影像(arcpy batch processing)

本篇文章将说明如何利用ArcGIS 10.1自带的Python IDLE进行遥感影像的批量拼接与裁剪。 1.运行环境:ArcGIS10.1 (安装传送门)、Python IDLE 2.数据来源:地理空间数据云 GDEMV2 30M分辨率数字高程数据 3.解决问题:制作山西省的DEM影像 如下…

CMake的使用

文章目录 一、CMake概述二、CMake的使用1.注释2.简单编译程序3.定义变量4.指定使用的C标准5.指定输出的路径6.搜索文件7.包含头文件 三、通过CMake 制作库文件1.制作动静态库2.指定动静态库生成的路径3.在程序中链接静态库4.在程序中链接动态库 四、日志五、变量操作1.追加2.字…

521源码网-免费网络教程-Cloudflare使用加速解析-优化大陆访问速度

Cloudfalre 加速解析是由 心有网络 向中国大陆用户提供的公共优化服务 接入服务节点: cf.13d7s.sit 接入使用方式类似于其它CDN的CNAME接入,可以为中国大陆用户访问Cloudflare网络节点大幅度加速,累计节点130 如何接入使用 Cloudflare 加速解析&#…

python-模块-网络编程-多任务

一、模块 1-1 Python 自带模块 Json模块 处理json数据 {"key":"value"} json不是字典 本质是一个有引号的字符串数据 json注意点 {} 中的数据是字符串引号必须是双引号 使用json模块可以实现将json转为字典,使用字典的方法操作数据 。 或者将…

c基础 - 输入输出

目录 一.scanf() 和 printf() 函数 1.printf 2.scanf 二 . getchar() & putchar() 函数 1.int getchar(void) 2.int putchar(int c) 三. gets() & puts() 函数 一.scanf() 和 printf() 函数 #include <stdio.h> 需要引入头文件,stdio.h 1.printf print…

23种软件设计模式——工厂模式

工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一&#xff0c;它提供了一种创建对象的方式&#xff0c;使得创建对象的过程与使用对象的过程分离。 工厂模式提供了一种创建对象的方式&#xff0c;而无需指定要创建的具体类。 通过使…

高级Web Lab2

高级Web Lab2 12 1 按照“Lab 2 基础学习文档”文档完成实验步骤 实验截图&#xff1a; 2 添加了Web3D场景选择按钮&#xff0c;可以选择目标课程或者学习房间。

[数据集][目标检测][数据集][目标检测]智能手机检测数据集VOC格式5447张

数据集格式&#xff1a;Pascal VOC格式(不包含分割的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;5447 标注数量(xml文件个数)&#xff1a;5447 标注类别数&#xff1a;1 标注类别名称:["phone"] 每个类别标注的框数&#xff…