首页 > 系统相关 >OpenGL3.3_C++_Windows(32)

OpenGL3.3_C++_Windows(32)

时间:2024-07-29 23:54:20浏览次数:13  
标签:OpenGL3.3 环境光 片段 Windows C++ 因子 遮蔽 SSAO 深度

demo

SSAO

SSAO

  • 环境光照(Ambient Lighting):光的散射,我们通过一个固定的常量作为环境光的模拟,
  • 但是这种固定的环境光并不能很好模拟散射,因为环境光不是一成不变的,
  • 环境光遮蔽:让(褶皱、孔洞)等变暗的方法近似模拟出间接光照,但是这一技术会带来很大的性能开销,因为它还需要考虑周围的几何体。
  • 屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO):这一技术使用了屏幕空间场景的深度而不是真实的几何体数据来确定遮蔽量。
  • 原理:对于铺屏四边形(Screen-filled Quad)上的每一个片段,我们都会根据周边深度值计算一个遮蔽因子(Occlusion Factor)。这个遮蔽因子之后会被用来减少或者抵消片段的环境光照分量。
  • 遮蔽因子是通过采集片段周围球型核心(Kernel)(球的立体空间内)的多个深度样本,并和当前片段深度值对比而得到的。高于片段深度值样本的个数就是我们想要的遮蔽因子。几何体内样本个数越多,遮蔽因子就越多,片段获得的环境光照也就越少。
  • 优化性能:如果样本数量太低,渲染的精度会急剧减少,我们会得到一种叫做波纹(Banding)的效果;如果它太高了,反而会影响性能。我们可以通过引入随机性到采样核心(Sample Kernel)的采样中从而减少样本的数目。
  • 但是:使用球体采样,导致平整的墙面也会显得灰蒙蒙的,因为球心的一半都在墙的底部,片段的深度会高于当前的深度值,从而遮蔽因子越多,我们通过在法向半球体(Normal-oriented Hemisphere)周围采样,从而不会考虑墙面底部

计算:

  • G缓冲?
  • 将法向半球对准片段的观察空间表面法线。所有法线都是从相机到片段的方向向量,
  • 我们对铺屏2D四边形上每一个片段计算遮蔽因子,但是我们没有场景的几何信息,可以利用G缓冲,让它包含片段的线性深度,通过利用gl_FragCoord.z以及非线性深度值转线性深度值的公式,
  • 法向半球采样器 & 切线空间:
  • 法向半球采样器 :在切线空间内(也就是物体的局部空间下)生成采样核心,通过指定具体的采样点数量,在切线空间中以-1.0到1.0为范围变换x和y方向,并以0.0和1.0为范围变换样本的z方向(如果以-1.0到1.0为范围,取样核心就变成球型了)
  • 优化:将核心样本靠近原点分布。用一个加速插值函数实现它:近似于x^2,
  • 随机采样器:
  • 噪声:随机旋转向量
  • SSAO GLSL:
  • 利用G缓冲的数据
  • 在2D的铺屏四边形上运行,对于每一个生成的片段计算遮蔽值,由于我们需要存储SSAO阶段的结果,我们还需要在创建一个帧缓冲对象:
  • 环境遮蔽模糊:
  • 我们又创建了一个帧缓冲对象来储存模糊结果
  • 光照 GLSL:
  • 利用SSAO的遮蔽数据,只需要改变原来的环境光照分量*遮蔽因子

标签:OpenGL3.3,环境光,片段,Windows,C++,因子,遮蔽,SSAO,深度
From: https://blog.csdn.net/sengyongan/article/details/140782381

相关文章

  • C++(指针悬挂)
    目录1.指针悬挂的成因2.防止指针悬挂的方法3.例子与实践4.总结指针悬挂(DanglingPointer)是C++编程中常见的一个问题,它指的是一个指针指向了已经被释放或者无效的内存区域。当对悬挂指针进行解引用操作时,程序行为将是未定义的,可能会导致崩溃、数据损坏或其他意外行为。1.......
  • C++ 文件操作
    文件操作程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件操作可以将数据持久化C++中对文件操作需要包含头文件"fstream" 文件类型分为两种:文本文件:文件以文本的ASCII码的形式存储在计算机中二进制文件:文件以文本的二进制形式存储在计算机中,用户......
  • 安装 jar包为windows服务
    下载安装JavaServiceWrapper下载https://www.krenger.ch/blog/category/windows/ 安装下载后在D盘找个位置解压: 在同级目录建一个新的文件夹,就命名JavaServiceWrapper吧:在文件夹JavaServiceWrapper下新建bin、conf、lib、logs、jre文件夹: 给下载解压的src/bin......
  • 2024年华为OD机试真题-找出作弊的人-(C++/Java/python)-OD统一考试(C卷D卷)
    2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】  题目描述公司组织了一次考试,现在考试结果出来了,想看一下有没人存在作弊行为,但是员工太多了,需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。过滤的规则为:找到分差最小的员工ID对(p1,p2)列表,......
  • C++命名空间、标准输入输出、引用
    1、简述C++中命名空间的作用。答:避免重复定义全局变量的问题。2、定义两个命名空间A和B分别在A中和B中定义变量value。在main函数中将两个空间的value打印出来。#include"iostream"usingnamespacestd;namespaceA{intvalue=100;}namespaceB{intvalu......
  • Windows11安装MySQL8.4.2版本详细过程记录
    下载地址:https://dev.mysql.com/downloads/mysql/8.0.html我选择下载zip版本:点击下载需要登录:于是我登录:接着点下载:被迅雷拦截了,直接使用迅雷下载:下载好了:复制到C盘的dev目录:安装解压:这个看上去需要一些基础命令才能操作:于是我重新下载了这个msi版本......
  • c++修炼之路之二叉搜索树
    目录前言一:二叉搜索树的介绍 二:二叉搜索树的实现 1.查找2.insert(插入)3.erase(删除)4.析构函数5.拷贝构造 6.赋值重载7.插入,删除,查找的递归版本 三:二叉搜索树的应用四:二叉搜索树的性能接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 前言对......
  • C++提高编程—2、STL—基础知识以及Vector容器的数据插入和遍历
    2.1STL的诞生2.2STL的基本概念2.3STL的六大组件2.4STL中容器、算法、迭代器2.5容器算法迭代器初识2.5.1vector存放内置数据类型#include<iostream>usingnamespacestd;#include<vector>#include<algorithm>//标志算法头文件//vector容器存放内置......
  • windows hbase连接工具 hbase连接数过多, yarn job HBase hdfs zookeper
    windowshbase连接工具hbase连接数过多##1.ZK连接过多1)查看ip连接数前十  登录后复制netstat-na|grep2181|awk'{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-rn|head-n101.##2.补数操作登录后复制hbaseorg.apache.hadoop.hbase.mapreduce.Co......
  • 【C++11】C++11新纪元:深入探索右值引用与移动语义
    ......