OpenGL3.3_C++_Windows(33)

news2024/9/29 15:33:03

PBR渲染管线

  • Physically Based Rendering渲染管线 :使用一种更符合物理学规律的算法模型来模拟光线,由于它与物理性质非常接近,可以直接以物理参数为依据来编写表面材质
  • 判断是否基于物理的渲染,有三个数学模型:微平面,能量守恒,BRDF

微平面理论:

  • 在微观尺度下,没有任何平面是完全光滑的。可以看作由不同的微小平面组成,
  • 由于这些微平面已经微小到无法逐像素地继续对其进行区分,因此我们假设一个粗糙度(Roughness)参数a,
  • 半程向量:(入射光线 + 视线 ) /  |(入射光线 + 视线 )|   正规化,计算半程与顶点法线的点乘
  • 当微平面与半程越一致,光线大体上会更趋向于向同一个方向反射,造成更小更锐利的反射
  • 粗糙度a:0--1越大,镜面光范围越大,反之越锐利

能量守恒:

  • 出射光线的能量永远不能超过入射光线的能量。
  • 所以当反射范围越大,亮度越小,反之越亮
  • 为了遵守能量守恒定律,我们需要对光模型,分离成一个折射KD(漫反射)部分和一个反射KS(镜面)部分:能量总和 = KD + KS
  • 漫反射颜色::折射光是不会立即就被吸收的,是通过碰撞的方式来消耗能量。和分子碰撞直至能量完全耗尽或者再次离开这个表面
  • 反射光与折射光它们二者之间是互斥的关系:所反射的能量将无法再被材质吸收。
  • 简化模型中:假设对平面上的每一点所有的折射光都会被完全吸收而不会散开
  • 次表面散射(Subsurface Scattering):描述了光线在穿透透明或半透明物体表面后,在物体内部发生散射,然后从物体表面的其他位置出射的现象。模拟诸如皮肤,大理石或者蜡质这样材质
  • 金属(Metallic):金属表面会吸收所有折射光线而没有漫反射,
  • SSAO:环境光遮蔽(Ambient Occlusion)贴图:为表面和周围潜在的几何图形指定了一个额外的阴影因子

辐射

  • 辐射度量学:图表概括数据的形式
  • 辐射通量Φ:光源所输出的总能量,以瓦特为单位。能量可以被视作这个光源包含的所有各种波长(颜色)的一个函数的总面积,但是,我们通常使用简化的表示RGB
  • 立体角ω:投射到单位球体上的一个截面的大小或者面积,
  • 辐射强度I一个单位面积(立体角)内的能量大小:辐射通量Φ / 单位立体角ω
  • //
  • 辐射率(Radiance)Li:一个区域平面上光线总量,辐射通量Φ的光源在单位面积A,单位立体角ω上的辐射出的总能量:公式:Φ / A(对于一个平面的影响) Wcosx(光线&平面法线)
  • 可以把AW看作无穷小,为一个方向向量wi 的光线,对片段p的影响
  • 辐射照度或者辐照度:辐射率的和,所有投射到点p上的光线的总和,是一个以点p为圆心的半球Ω,也可以说为平面法线n为轴的半球Ω

反射率方程(PBR遵守的方程)

  • 反射率方程LO(p,wo)  = 积分 ∫Ω(半球)(BRDFfr(p,ωi,ωo)  * 辐射率Li(p,ωi)  * 转为反射率n⋅ ωi * 对每个离散步长进行缩放dwi) 
  • 反射率L0公式:点p,在w0的观察方向,反射出来的辐射率L的总和,也可以说反射的辐照度
  • 从等式左边看,也可以说:Lo表示了从ωo方向上观察,光线投射到点p上反射出来的辐照度。
  • 离散求积分:黎曼和(Riemann sum) :所有方向的反射率,在半球Ω按照一定步长,将公式分散求解,再求和并平均化,这样可以计算结果的近似值

BRDF

  • (Bidirectional Reflective Distribution Function双向反射分布函数) :
  • 基于表面材质属性来对入射辐射率进行缩放或者加权,每束光线对一个给定了材质属性的平面上最终反射出来的光线所作出的贡献程度。
  • 根据:入射光wi,观察方向ωo,半程向量h,平面法线n,粗糙度a,基础反射率FO等作为参数,影响算法结果
  • //
  • 几乎所有实时渲染管线使用的都是Cook-Torrance BRDF模型:
  • Lambertian漫反射模型(相对其他漫反射模型,开销不算昂贵):flambert)漫反射:c(漫反射纹理:表面颜色)/ π(标准化)* kd(被折射部分的比率)
  • 折射部分将使用UE4的3个函数:f(cook−torrance)(  法线分布函数D菲涅尔方程F几何函数G)  /  4(ωo⋅n)(ωi⋅n)   )  ks(被反射部分的比率)
  • 法线分布函数 | DNF
    • GGX函数:遵守微平面理论,和能量守恒,受到法线n,半程h,粗糙度a影响
      • 粗造度越高,朝向一致性越高
    • 函数结果:根据a的值近似计算了法线n与半程h,朝向一致的比率,0---1
    • 效果:影响镜面的范围,即亮度
  • 菲涅尔方程
    • 被反射的光线对比光线被折射的部分所占的比率
    • Fresnel-Schlick函数:受到半程h,视线,F0基础反射率
      • F0基础反射率:通过折射指数计算,当垂直法线观察,只有最基本的反射率,当接近90度观察,反光就会明显
      • 金属度(Metalness):金属度用来描述一个材质表面是金属还是非金属的
    • 对于金属,没有折射指数,使用它们的折射指数计算基础折射率并不能得出正确的结果
    • 所以另一种思路时预计算F0 的值,在用Fresnel Schlick对这个值插值(计算基础反射率),从而就能对金属和非金属材质使用同一个公式了。
    • 反照率(Albedo):对于大多数电解质使用0.4的F0(线性),对于金属导体使用表面纹理颜色F0(RGB)
  • 几何函数
    • 描述了微平面自成阴影的属性。当一个平面相对比较粗糙的时候,平面表面上的微平面有可能挡住其他的微平面从而减少表面所反射的光线。
    • 用Schlick-GGX函数:遵守微平面理论,接受法线n,视线v,粗糙度a的重映射k
      • 当平面越粗糙时,遮蔽比率会高
      • 当视线与法线越相近,遮蔽比率越低
    • 重映射k:
      • 直接光照:(a+1)^2
      • LBL辐照:a^2 / 2
    • 函数结果:返回微平面相互遮蔽的概率

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go语言实现支持泛型的二分查找算法

二分查找基本原理图: 参考代码: 泛型的定义: package v2024type Integer interface {int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 }type Float interface {float32 | float64 }type Number interface …

无需变更环境变量,一键管理和运行不同JDK版本的jar包

前言 之前公司的项目一直用的都是JDK8,然后前段时间,公司要求以后的新项目必须要用JDK17及以上的版本。但是以前的旧项目还有很多都在维护。 这样子的话,电脑上就至少有两个版本的JDK了。我想在不变动环境变量的情况下(环境变量…

可穿戴设备与健康科技:迈向个性化医疗的未来

在数字化和智能化浪潮的推动下,可穿戴设备与健康科技正迅速改变我们的健康管理方式。这些设备不仅使我们能够实时监测健康指标,还为个性化医疗提供了宝贵的数据支持。本文将详细探讨可穿戴设备的作用、健康监测技术的发展、个性化医疗的趋势,…

代码随想录——买卖股票的最佳时机含冷冻期(Leetcode 309)

题目链接 动态规划 class Solution {public int maxProfit(int[] prices) {if(prices.length 0 || prices.length 1){return 0;}// 初始化int[][] dp new int[prices.length 1][2];dp[1][0] -prices[0];for(int i 2; i < prices.length; i){dp[i][0] Math.max(dp[…

Arduino PID库 (5):开启或关闭 PID 控制的影响

Arduino PID库 &#xff08;5&#xff09;&#xff1a;开启或关闭 PID 控制的影响 Arduino PID库 &#xff08;4&#xff09;&#xff1a;Reset Windup 问题 尽管拥有一个PID控制器很好&#xff0c;但有时你并不关心它要说什么。 PID On - User Overwritting Output&#x…

安全测试:保护系统免受攻击和数据泄露

目录 前言1. 安全测试的概念2. 安全测试的主要作用2.1 发现安全漏洞2.2 评估风险2.3 确保合规性2.4 提高安全意识 3. 安全测试在整个测试中的地位4. 常用的安全测试工具4.1 渗透测试工具4.1.1 Metasploit4.1.2 Burp Suite 4.2 漏洞扫描工具4.2.1 Nessus4.2.2 OpenVAS 5. 安全测…

通道加密机的定义与功能

通道加密机是一种用于保护数据传输过程中安全性的硬件设备&#xff0c;它通过加密技术确保数据在通道中传输时不被非法截获或篡改。以下是对通道加密机的详细解析&#xff1a; 一、定义与功能 通道加密机是一种专门设计用于加密和解密在特定通信通道上传输的数据的设备。它能够…

【网络安全】|pgp的安装和使用

1、pgp的安装&#xff1a; 参考&#xff1a; https://jingyan.baidu.com/article/86fae346c289173c49121a11.html 实际操作&#xff1a; 在第六步中有不同&#xff0c; 第5步重启后&#xff0c;打开pgp desktop, 可以看到如图&#xff1a; 此时需要做两件事&#xff1a; 1、将…

第35讲:Manager可视化组件管理Ceph集群

Manager可视化组件管理Ceph集群 1.Mgr组件的基本概念 Mgr组件的官方文档&#xff1a;https://docs.ceph.com/en/latest/mgr/ Ceph Manager守护进程 (ceph-mgr) 与Monitor守护进程一起运行&#xff0c;为外部监控和管理系统提供额外的监控和接口。 ceph luminous版本中新增加…

配置阿里云 Maven 仓库地址

阿里云 Maven 仓库地址&#xff1a; maven {// 阿里云 Maven 仓库地址url https://maven.aliyun.com/repository/public} 执行结果&#xff1a;

决策曲线DCA的绘制

今天被要求画一下决策曲线&#xff0c;用Python试了半天也没画出来&#xff0c;最后参考了资料还是用R语言绘制了出来。 数据的格式 将四条曲线画在一张表中 library(rmda) library(readxl)# 读取Excel文件 data <- read_excel("C:/Users/Administrator/Desktop/肺动脉…

09 同步原语 sync包让你对并发控制得心应手

上节课留了一个思考题&#xff1a;channel 为什么是并发安全的呢&#xff1f;是因为 channel 内部使用了互斥锁来保证并发的安全&#xff0c;这节课&#xff0c;我将为你介绍互斥锁的使用。 在 Go 语言中&#xff0c;不仅有 channel 这类比较易用且高级的同步机制&#xff0c;…

MES系统如何精准采集与对接设备数据,全面优化设备管理

一、MES系统如何采集和对接设备数据 MES系统&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;采集和对接设备数据主要通过以下几种方式实现&#xff1a; 手工录入&#xff1a; 这是最基础的数据采集方式&#xff0c;通过操作人员在MES系统界…

C++基础知识(入门章)

绪论 历经千辛万苦&#xff0c;我们终于来到了一个全新的板块---C。本期的内容主要是关于C的一些基础知识的初步了解。让我们一起努力&#xff0c;克服编程路上的艰难险阻&#xff0c;迎接属于自己成功的彼岸~ C的发展历史 1979年 C的起源可以追溯到1979年&#xff0c;当时B…

从根儿上学习spring 四 之run方法启动第一段

图1 由上图我们可以看到&#xff0c;我把run方法分成了5个小段&#xff0c;每小段使用红框圈了起来&#xff0c;这一篇我们先开始讲第一段。大家需要关注下行号&#xff0c;我讲的时候可能会使用行号对应具体某行代码。 图1-289-290行&#xff1a; 没啥好说的定义了两个变量&…

【VMware】如何演示使用U盘在VMware虚拟机上安装Windows11

一、前置准备 在开始使用U盘演示在VMware虚拟机上装Windows11前&#xff0c;我们需要做以下前置的准备&#xff1a; 已制作好的Windows引导盘&#xff1b;WMware软件 如何制作Windows引导盘&#xff1f; 推荐参考&#xff1a; 【建议收藏】2024年最新Windows系统重装教程&…

SpringBoot中整合ElasticSearch快速入门

文章目录 Elasticsearch 是什么使用MySQL和ES对比SpringBoot中整合ElasticSearch快速入门Springboot中操作ES测试效果说明 Elasticsearch 是什么 Elasticsearch是一个基于 Apache Lucene 构建的分布式搜索和分析引擎&#xff0c;能够处理大规模数据并提供实时搜索和分析功能。…

简单的docker学习 第8章 docker常用服务安装

第8章 常用服务安装 本章主要学习最常用的&#xff0c;也是安装起来稍有些麻烦的 MySQL 与 Redis 两种服务器的Docker 安装。至于其它服务器的 Docker 安装&#xff0c;大家可自行查找资料。只要 MySQL 与 Redis这两类服务器学会了安装&#xff0c;其它服务器的安装基本也不会…

C#编写多导联扫描式的波形图Demo

本代码调用ZedGraph绘图框架&#xff0c;自己先安装好ZedGraph环境&#xff0c;然后拖一个zedGraphControl控件就行了&#xff0c;直接黏贴下面代码 基本代码显示 using System; using System.Windows.Forms; using ZedGraph; using System.Timers;namespace ECGPlot {public…

Ubuntu24.04编译FFmpeg6.1(支持x264、x265、fdk-acc)

FFmpeg是一个开源的多媒体处理工具集&#xff0c;可以用于处理音频、视频和图片等多种媒体格式。由于其强大的功能和灵活性&#xff0c;FFmpeg被广泛应用在多媒体处理领域&#xff0c;包括音视频编解码、流媒体服务器、视频转码等。FFmpeg7.0 版本移除了 6.0 之前已弃用的 API&…