【GAMES101】Lecture 17 材质
目录
材质
漫反射
镜面反射
折射-Snell’s Law
Fresnel Reflection / Term(菲涅耳项)
微表面模型
各向同性与各向异性
BRDF的性质
测量BRDF
材质
渲染方程中的BRDF描述了物体是如何与光线作用的,而物体的材质决定了它看起来是怎么样的,也就是它的材质决定了光线是如何反射的,即BRDF就表示了物体的材质这个属性
漫反射
Diffuse / Lambertian Material,即漫反射,如果是漫反射,那么物体接收到的光和物体漫反射出去的光应该是一样的,那BRDF和漫反射光就应该是一个常数,假设物体本身不发光,那么渲染方程可以写成下面的式子,并且假设物体不吸收光,那么Lo和Li应该相等,这样就可以算出BRDF,也就是漫反射系数等于1/,那实际上物体是会吸收光的,所以还需要乘上一个系数ρ,这个系数ρ的范围在[0,1]之间

镜面反射
那镜面反射我们怎么确定这个反射的方向呢?

我们说三维中的一个角,叫这个空间角,实际上可以表示为和竖直方向n的一个夹角w和与水平方向的一个夹角,这个w好算,因为镜面反射那入射角等于发射角,也就是wo+wi等于2倍的红色部分,而这个红色部分方向和n一样,大小是这个w在n的投影,所以是w和n做一个点乘的结果,因为方向向量都是单位向量,点乘的结果就等于余弦值,所以这个w可以算出来,而这个与水平方向的夹角
就是从上往下俯视看,入射方向和反射方向是相反的,所以这个
o就等于
i+
再和2
取余的结果

折射-Snell’s Law
对于折射的方向(,
),唉这个折射的水平夹角
还是和刚刚镜面反射一样在同一平面方向相反,入射和折射的
就差一个
,那这个
怎么算,有这么一个Snell’s Law,叫斯涅尔定律,就是说
i
i=
t
t,就是介质的折射率
和
的正弦值的乘积是不变的

由这个等式可以算出这个折射角t的余弦值,这个要求有意义的话那么根号里面的项就得非负,也就是这个乘积部分必须得小于等于1,那后面减法部分不可能大于1,只有
i比
t大,那这个式子才会没有意义,此时折射就不会发生了,即入射介质的折射率大于折射介质的折射率

BRDF不是双向发射分布函数吗,这个折射就叫BTDF,T是transmit,折射和反射统称散射scattering,即BSDF=BRDF+BTDF
Fresnel Reflection / Term(菲涅耳项)
菲涅耳项是用来描述光在不同折射率的介质之间的行为的,说的是有多少能量会被反射,有多少能量会被折射,当入射角很小的时候(垂直照射物体),折射很多,反射很少,当入射角很大(平行照射物体)时,反射很多,折射很小
还有就是导体和绝缘体的菲涅耳项不太一样,导体的反射很强,即使入射角很小也会有很多能量反射,这也是为什么镜子用银镜、铜镜
那怎么算呢,有比较复杂的式子计算,这个S和P是两个极化方向,所谓极化就是光线只沿着某个方向震动,那不极化的就把Rs和Rp平均一下

但是呢还有一个简化的计算,那反射强度不都是在垂直的时候最小平行的时候最大么,那我先算出一个最小的R0,这个和两边的折射率有关系,然后我用一个式子去描述这个发射强度随入射角的变大而变大这么一种关系

微表面模型
对于一个物体的表面,我从远处或者是宏观上看到的是这个物体的材质,从微观上看到的是这个物体表面的几何信息

对于物体表面的微小平面可以认为是完全镜面反射的,如果这些微小平面的法线方向比较集中的话,就是glossy材质

如果这些微小平面的法线方向比较分散的话,就是漫反射

所以这个微表面模型可以通过法线方向的集中程度来描述物体表面的粗糙程度,那这个微表面的BRDF怎么算呢,可以看到有这三项F、G和D,这个F就是菲涅耳项,D呢是描述微表面的法线的分布,还记得blinn-phone模型里面计算高光的时候用到的半程向量h,那只有这个法线方向和半程向量方向一致的时候才能反射出来,还有这个G是为了解决这个微表面相互遮挡的问题,就是当光线平行照射微表面的时候,这个入射角叫grazing angle,如果没有G修正那么边界就会很亮

各向同性与各向异性
Isotropic(各向同性)的微表面法线分别比较均匀,而Anisotropic(各向异性)的微表面法线分布具有一定的方向性

反映在BRDF上,就是入射方向和反射方向沿着水平旋转不会改变BRDF的话那就是各向同性的,否则就是各向异性的,即各向同性的BRDF只和相对的水平角有关系

BRDF的性质
非负

线性可加

可逆相同

能量守恒

各向同性的BRDF只和相对的水平角有关系

测量BRDF
BRDF描述的是入射方向和出射方向的关系,那怎么去测量它呢,对于一个特定的物体,先用一个光源去照射它,然后记录每个方向的反射,再改变光源照射的方向,继续记录每个方向的反射

这里是不是有两层循环,但是实际上每个方向是空间角,是用二维向量(,
)表示的,所以实际上是四层循环,如果是各项同性的,因为入射的
和出射的
的差值是固定的,所以可以降到三层循环,如果再考虑BRDF的可逆性,就可以减少一半测量
相关文章:
【GAMES101】Lecture 17 材质
目录 材质 漫反射 镜面反射 折射-Snell’s Law Fresnel Reflection / Term(菲涅耳项) 微表面模型 各向同性与各向异性 BRDF的性质 测量BRDF 材质 渲染方程中的BRDF描述了物体是如何与光线作用的,而物体的材质决定了它看起来是怎么样…...
数模.matlab画图
一、mesh函数 上图是平常用到的方式 例题: 上图的meshgrid函数相当于上上图的前三个指令(temp,x,y) mash函数: mashc函数: mashz函数: 上图subplot函数的作用是将下标为index的图片放到对应的x&…...
[word] word表格表头怎么取消重复出现? #媒体#笔记#职场发展
word表格表头怎么取消重复出现? word表格表头怎么取消重复出现?在Word中的表格如果过长的话,会跨行显示在另一页,如果想要在其它页面上也显示表头,更直观的查看数据。难道要一个个复制表头吗?当然不是&…...
vue项目开发vscode配置
配置代码片段 步骤如下: 文件->首选项->配置用户代码片段新增全局代码片段起全局代码片段文件名“xxx.code-snippets” 这里以配置vue2初始代码片段为例,配置具体代码片段 {"name": "vue-sph","version": "…...
BUUCTF-Real-[Tomcat]CVE-2017-12615
目录 漏洞描述 一、漏洞编号:CVE-2017-12615 二、漏洞复现 get flag 漏洞描述 CVE-2017-12615:远程代码执行漏洞 影响范围:Apache Tomcat 7.0.0 - 7.0.79 (windows环境) 当 Tomcat 运行在 Windows 操作系统时,且启用了 HTTP P…...
Qt应用软件【协议篇】http协议get、post示例
文章目录 QT Http的APIHTTP GET 请求示例HTTP POST 请求示例伪装chrome浏览器get请求QT Http的API QNetworkAccessManager 作用:管理所有的网络请求,是发送请求和接收响应的中心点。主要功能: 发送HTTP请求(GET, POST, PUT, DELETE等)。处理网络请求的异步回调。管理网络…...
如何选择Centos的替代者
开篇废话:许久许久没有更新博客了。寒假回到故土,大雪虽然没有封路,还是增加了不出门的决心,虽然年岁已高,但是不学习还是不踏实,那就借着写作再继续前行。 背景:信息化部门,掌管着…...
【Java数据结构】ArrayList和LinkedList的遍历
一:ArrayList的遍历 import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** ArrayList的遍历*/ public class Test {public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(5);list…...
springboot163美食推荐商城的设计与实现
简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...
[机器学习]K-means——聚类算法
一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成(n_samples:样本点,centers&…...
并发编程 java锁机制
1、什么是锁,为什么需要锁? 并发环境下,会存在多个线程对同一个资源进行争抢的情况,假设线程A对资源正在进行修改,此时线程B又对同一资源进行了修改,就会导致数据不一致的问题。为了解决这个问题ÿ…...
Onerugged三防平板厂家丨三年质保承诺丨三防平板PAD
行业领先产品——Onerugged三防平板。凭借着十年的经验,我们深知终端设备在各个行业中的重要性,因此致力于为用户提供高可靠性的解决方案。 Onerugged三防平板以其卓越的性能和全方位的保护功能,在市场上脱颖而出。首先,它拥有IP…...
Android 系统启动流程
一.Android系统启动流程基本框架 Android系统完整的启动过程,从系统层次角度可分为 Linux 系统层、Android 系统服务层、Zygote进程模型三个阶段;从开机到启动 Home Launcher 完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读 And…...
鸿蒙学习-app.json5配置文件
官网文档参考:https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/app-configuration-file-0000001427584584-V3 位于AppScope下的app.json5配置文件 一、基础属性 {"app": {/*包名*/"bundleName": "com.example.dem…...
华为OD机试 - 智能成绩表( Python C C++ JavaGo JS PHP)
题目描述 小明是一名新老师,他需要将学生按考试总分或单科分数进行排名。学生的信息包括姓名、科目和对应的分数。帮助小明完成这个任务吧! 输入描述 第一行包含两个整数 n 和 m,分别代表学生人数和科目数量。 0 < n < 1000 < m &…...
训练集,验证集,测试集比例
三者的区别 训练集(train set) —— 用于模型拟合的数据样本。验证集(validation set)—— 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 通常用来在模型迭代训练时…...
Altium Designer(AD)加载常用元器件库到工程图文教程及视频演示
🏡《专栏目录》 目录 视频演示1,概述2,加载方法3,总结视频演示 Altium Designer(AD)加载常用元器件库到工程 欢迎点击浏览更多高清视频演示 1,概述...
Java学习笔记2024/2/8
面向对象 //面向对象介绍 //面向: 拿、找 //对象: 能干活的东西 //面向对象编程: 拿东西过来做对应的事情 //01-如何设计对象并使用 //1.类和对象 //2.类的几个不错注意事项 1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 ,所以我们也常常说万物皆对…...
【安防】三个问题:IPC和ITC主要的差异点和相同点 、影响图像成像效果的因素有哪些、摩尔纹如何产生的和消除方法
问题一、IPC和ITC主要的差异点和相同点 差异点 1、应用场景:IPC主要应用于普通安防监控领域,如广场、商场、公园、写字楼等。它们通常被用于监控室内或有限区域的安全,例如,监控办公室、仓库、门口等。而ITC则主要应用于交通领…...
Windows 安装 MySQL 最新最简教程
Windows 安装 MySQL 最新最简教程 官网地址 https://dev.mysql.com/downloads/mysql/下载 MySQL zip 文件 配置 MySQL1、解压文件 2、进入 bin 目录 搜索栏输入 cmd 回车进入命令行 C:\Users\zhong\Desktop\MySQL\mysql-8.3.0-winx64\mysql-8.3.0-winx64\bin 注意这里是你自己…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
