【TA100】4.2 SSAO算法 屏幕空间环境光遮蔽

news2024/10/6 4:06:05

1 SSAO介绍

1.1 环境光遮蔽(AO)

全称Ambient Occlusion,是计算机图形学中一种着色和渲染技术,模拟光线达到物体的能力的粗略的全局方法,描述光线到达物体表面的能力。
在这里插入图片描述
这个场景看起来没有表示颜色的贴图,但是场景的阴影效果和AO效果还是存在的,这让场景的层次细节在即使没有颜色的情况下也可以展现出来,形成了一种特殊的风格。
在这里插入图片描述
环境光遮蔽对效果的提升有多重要,看一下顽皮狗在《Uncharted 2: HDR Lighting》的一个对比图,可以看到,左侧的车底遮挡了大部分光线,形成了阴影看起来很自然,而右侧的车感觉就像飘在上面一样,看起来比较假:

计算
在这里插入图片描述

np代表样本位置p的法线,w表示点p切平面正方向的任意向量,V(p,w)是可见函数,如果点p在w方向被遮挡则为1,否则为0.max(np*w,0)就是两个向量的余弦值。可以看出计算AO系数是一个非常昂贵的操作,**一般离线渲染器都会采用Ray-Tracing(光线追踪)或者是Ray-Marching(光线步进)算法,模拟若干条射线以计算遮蔽百分比,**但是很明显这种计算方式不能用在实时计算领域。

AO是来描绘物体和物体相交或靠近的时候遮挡周围漫反射光线的效果
AO全称 ambient occlusion.环境光遮挡。基本的原理。
AO的是光照无关的。光从哪里来。有几个和AO没关系。
AO是一个物体当时形变下所具有的属性。
AO特效在直观上给我们玩家的感受主要体现在画面的明暗度上,未开启AO特效的画面光照稍亮一些;而开启AO特效之后,局部的细节画面尤其是暗部阴影会更加明显一些

环境光遮蔽和阴影遮蔽的区别

环境光可以理解为天光,而阴影是由光源(太阳,灯光等直接光照光源)产生的。

这是直接光源照射环境产生的效果,可以看到阴影区域是很生硬的,因为所有的光只进行了一次计算

在这里插入图片描述

这是添加了环境光遮蔽产生的效果,场景光影细节更加真实细腻。

在这里插入图片描述

产生这样的区别原因:
1 直接光照不计算光源到达平面后二次反射,阴影是一个平面颜色,而环境光会计算照射到不同物体上反射会的光源
2 环境光每经过一次反射就会产生出衰减,因此环境光是非常弱的,能够在阴影看到环境光的影响,但环境光反射后不是到达所有平面,在死角/角度很小的区域反射光无法到达就会产生很重的阴影,这个区域就会产生环境光遮蔽。

在这里插入图片描述

直接光照产生的阴影

在这里插入图片描述

首先物体受到直接光照产生阴影,其次也受到间接光照产生的环境光(天光)遮蔽,球体与地面交界部分产生了遮蔽(角度非常小),阴影部分受到环境光影响,产生了细腻过渡的环境光效果。
在这里插入图片描述
在这里插入图片描述

有直接光照光源:当物体没有与其他物体产生狭窄的交界时,就不会产生环境光遮蔽。

在这里插入图片描述
在这里插入图片描述

移除直接光照的光源,只保留环境光(天光),物体就会像在阴天一样。这时保留的就是环境光遮蔽(环境光照射的地方),并非阴影(直接光到达不了的地方),

在这里插入图片描述
在这里插入图片描述

SSAO

SSAO:屏幕空间环境光遮蔽,全称Screen Space Ambient Occlusion,一种用于计算机图形中实时实现近似环境光遮蔽效果的渲染技术。它不是场景的预处理,而是一种屏幕后处理技术,通过在屏幕像素的位置布置随机个采样点,然后通过采样点遮蔽项所占的百分比来计算阴影遮蔽强度。

在这里插入图片描述
计算AO的核心问题在于如何取采样点并判断这些采样点是否被遮蔽. 我们首先解决第一个问题. 在此我们使用一种指向法线方向的半球形采样块(Sample Kernel), 并在采样块中生成采样点. 距离原点越远的点, AO贡献越小. 采样块如下图所示:
在这里插入图片描述
那么我们转入第二个问题: 如何判断下图中的采样点遮蔽情况呢
在这里插入图片描述

(涂黑的点处在几何体表面内部, 因此判定为被遮蔽)
一种方法是将采样点全部投影到View Plane上, 相当于获取采样点的UV坐标, 并同时获取Depth Buffer中该UV坐标处的深度值. 随后比较采样点的深度和场景中该点的深度. 如果采样点的深度更大, 说明其被场景遮蔽. 最终将所有采样点的AO贡献求和, 即是该点的AO值. 计算公式如下:
在这里插入图片描述
其中, 函数V前面已经介绍过. 函数D是一个[0, 1]之间的单调递减函数, 距离原点越近的采样点对AO的贡献越大. 一般使用指数函数.
在这里插入图片描述

涉及到的相关概念

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

SC5103接口可pin对pin兼容TLK1501

SC5103 用于超高速双向点对点数据传输系统。SC5103 支持 0.6Gbps 至 1.5Gbps 的有效串行接口速度,提供高达 1.2Gbps 的有效数据带宽。可pin对pin兼容TLK1501。 SC5103 可替代并行传输数据结构从而减少传输路径数、连接端子数、发送/接收端子数。并行数据被发送链路转…

求职贴 | 多源融合定位方向24届硕士秋招求职

求职方向 多源融合定位 / LIO / VIO 基本情况 现就读于华中区某985,研究方向为多源融合定位,主要内容是LiDAR / IMU融合两篇期刊论文在投,论文内容即项目经历;具有丰富的电子设计类竞赛经历自我认为学习能力强,爱动…

JavaSE-15 【异常】

文章目录 JavaSE-15 【异常】第一章 什么是异常1.1 异常的概念1.2 异常的体系1.3 异常的分类1.4 异常产生的过程 第二章 异常的处理2.1 抛出异常throw2.2 声明异常throws2.3 捕获异常try...catch2.4 finally 代码块2.5 异常注意事项 第三章 自定义异常3.1 自定义异常概述3.2 自…

工业物联网解决方案:远程组态监控管理系统

如何高效的采集和集中工业设备PLC运行数据、工艺参数、产品质量等生产数据,通过数据分析反馈在制造工艺、生产流程、质量管理、设备维护和能耗管理的智能应用,这是工业远程组态监控管理系统可以解决的问题,也是众多工厂企业关注的重点。 工…

动态规划--输出路径06.25

https://www.cnblogs.com/jbelial/articles/2116074.html 博客参考 https://www.cnblogs.com/jbelial/articles/2116074.html 12. 背包问题求具体方案 - AcWing题库 由于需要求解最小字典序,尝试输入数据时逆序输入,其他不改变,状态含义不变…

奇安信浏览器调用JM9硬件解码操作教程

本文讲述如何通过奇安信浏览器调用景嘉微JM9系列显卡的硬件解码。 判断硬件解码是否打开方法 1.检查奇安信浏览器版本。dpkg -l | grep qaxbrowser,我这里是1.0.45209.2-1版本。要大于等于这个版本的奇安信浏览器才支持硬件解码。 2.打开奇安信浏览器&#xff…

海思平台OSD的实现

目录 1.海思平台OSD理论学习 1.1、OSD概述 1.2、海思OSD的4种类型 1.3、海思OSD的几个重要概念 1.4、海思平台OSD使用方法 1.5、海思平台OSD的API和关键数据结构 2.使用海思接口实现OSD---代码框架 2.1、函数调用层次 2.2、前\背景透明度、背景颜色 3.使用字库字符实现…

Jmeter远程服务模式运行时引用csv文件的路径配置

目录 前言: 问题 解决方法 前言: 在JMeter远程服务模式下运行时,你可以通过配置CSV文件的路径来引用该文件。CSV文件经常用于存储测试数据,可以在测试中进行参数化。 问题 在使用jmeter过程中,本机的内存等配置不…

掌握GDB调试工具,轻松排除bug!

一、什么是GDB gdb是GNU debugger的缩写,是编程调试工具。 GDB官网: https://www.gnu.org/software/gdb/GDB适用的编程语言: Ada / C / C / objective-c / Pascal 等。GDB的工作方式: 本地调试和远程调试。 目前release的最新版…

RRT* 算法研究(附 MATLAB 和 Python 实现)

RRT* 算法研究 参考 机器人路径规划、轨迹优化课程-第六讲-RRT*算法原理和代码讲解 路径规划 | 随机采样算法:PRM、RRT、RRT-Connect、RRT* 基于采样的运动规划算法-RRT(Rapidly-exploring Random Trees) 《改进RRT算法在移动机器人路径规划中的应用研究》 理论基础…

全网超全,pytest自动化测试框架pytest.ini配置文件详细(实战)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 pytest配置文件可…

Java 实现word、excel、ppt、txt等办公文件在线预览功能!

如何用 Java 实现word、excel、ppt、txt等办公文件在线预览功能?本文告诉你答案! java 实现办公文件在线预览功能是一个大家在工作中也许会遇到的需求,网上些公司专门提供这样的服务,不过需要收费。 如果想要免费的,…

【ISO26262】汽车功能安全:以汽车安全完整性等级为导向和以安全为导向的分析

关于 ASIL剪裁的要求分解 表 A.1 以汽车安全完整性等级为导向和以安全为导向的分析的概览

Android Binder通信原理(五):Java 端的service 注册和获取

源码基于:Android R 0. 前言 在阐述相关的知识点,先整理个框架图,后面带着框架图来分析过程: Java 端对于binder 使用大致分为: Java client Java serviceJava client native service Java 端service 的注册使用 Se…

前端如何进行页面优化_如何优化前端页面

优化前端页面 1 .前期准备 1.1 首页命名为index.html / index.htm / index.php等。 1.2 需要制作404页面。 1.3 文件夹结构合理。 1.4 命名使用英文且有语义性的单词,并提供参考文档。 2 .结构 2.1 文件头部分 2.1.1 需要提供文档声明 2.1.2 设置utf-8的编…

虚拟机创建linux系统并使用SSH工具连接

安装VMware Workstation 创建新的虚拟机或从别人那里拷贝虚拟机文件,下面是我从别人那里拷贝的 虚拟机存在后,点击播放按钮启动虚拟机 启动成功后,长这个样子 虚拟机启动成功后,不想用linux指令操作,而是用windows的可…

报错:Information:java: javacTask: 源发行版 8 需要目标发行版 1.8

1.背景 编译项目或启动项目报错 2.解决方法 设置为对应的版本 3.完美

DOM编程实现动态时钟

文章目录 第一种&#xff1a;第二种&#xff1a;第三种&#xff1a; 以下是一个使用 JavaScript 和 DOM 编程实现的动态实时的时钟应用&#xff1a; 第一种&#xff1a; HTML&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"…

想知道PDF转高清图片软件哪个好?

张琳是一名设计师&#xff0c;她经常需要将自己的设计作品整理成PDF文档&#xff0c;以便向客户展示和交付。然而&#xff0c;有时客户需要对设计进行更详细的审查&#xff0c;而PDF格式的文件并不方便进行缩放和查看细节。这一问题让张琳感到非常困扰&#xff0c;她希望能够找…