[OpenGL] PCF 柔和阴影

目录

一 为什么要使用PCF技术?

二 算法

三 效果


本章节源码点击此处

一 为什么要使用PCF技术?

  • 在阴影改善这篇文章最后我们发现阴影的边缘锯齿化很严重,对于这种问题主要是因为采样精度的问题
  • 对于不同片段有可能从深度纹理中采样到了同一个纹理像素,这就导致形成了明显的边缘,看起来就像是锯齿或阶梯状的过渡,即所谓的“锯齿边”
  • 可以这样理解,所有这些相邻的屏幕像素在计算阴影时,实际上查看的是深度贴图上的同一个深度值。
  • 比如现在有一个片段,假象把他分为两部分:第一部分采样和第二部分从纹理中采样获取到的深度值是一样的,但是它的当前实际深度值不一样,这就导致一部分不能通过阴影计算而一部分可以通过阴影计算公式。

原理

  • PCF通过在每个像素周围进行多次样本采样,并对这些样本进行平均来实现阴影边界的模糊效果,从而平滑阴影的边缘,避免了由于阴影贴图分辨率限制导致的硬阴影边缘。所有的周围像素的结果结合在一起,进行平均化,我们就得到了柔和阴影。

作用

  • 能够较号的改善阴影贴图的边缘锯齿问题
  • 主要是软化阴影边缘,让阴影边缘开起来不是那么的生硬,而是变得比较柔和、

二 算法

  • 首先我们要进行对每个取样点的像素的多个像素点进行平均取样,那么就需要先获取像素点的大小
vec2 texelSize = 1.0 / textureSize(shadowMap, 0);
  • 然后我们需要获取每一个采样点的阴影结果,并对其进行累加后求平均值
  • 比如这样如果这个像素周围的8个点包括自己都是阴影那它取平均值后就还是阴影,如果这9个采样点中只有2个点是阴影,那么它的阴影结果就是2/9阴影。这样阴影的效果就会变得比较柔和。
    float shadow = 0.0;vec2 texelSize = 1.0 / textureSize(depthMap,0);for(int x = -1; x <= 1; ++x){for(int y = -1; y <= 1; ++y){float pcfDepth = texture2D(depthMap,projCoords.xy + vec2(x,y) * texelSize).r;shadow += curDepth - bias > pcfDepth ? 1.0f : 0.0f;}}shadow /= 9.0;

三 效果

  • 这样我们看到的阴影效果就比较柔和了而不是和最开始一样生硬。
  • 当然这个效果可以根据采样点的多少来进行调整,也可以适当调整采样纹理时的分辨率,但这个损失的性能会更大,最好是使用PCF技术来进行调整采样点。

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

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

相关文章

python 批量webp格式转换成jpg

首先&#xff0c;你需要安装Pillow库。如果还未安装&#xff0c;可以通过pip安装&#xff1a; pip install Pillow 创建一个Python脚本来读取webp文件&#xff0c;并将其转换为jpg格式。 只需修改source_folder和dest_folder变量为你的实际文件夹路径即可使用这个脚本。 fro…

InstantStyle —— 文本到图像生成中的风格保持新突破

在人工智能领域&#xff0c;文本到图像生成&#xff08;Text-to-Image Generation&#xff09;技术正迅速发展&#xff0c;其应用范围从娱乐到专业设计不断扩展。然而&#xff0c;风格一致性生成一直是该领域的一个技术难题。最近&#xff0c;InstantX团队提出了一种名为Instan…

MathType7.4破解版补丁包下载安装无需激活秘钥许可证

MathType是一个强大的数学公式编辑器&#xff0c;它为教育工作者、学生和科研人员提供了一种高效、便捷的数学公式编辑方法。无论是在撰写学术论文、制作教学课件还是进行科研报告&#xff0c;MathType都能满足您的需求。 MathType具有丰富的符号库和模板。它包含了几乎所有常用…

Docker安装、使用及常用命令

一、Docker是什么&#xff1f; Docker是一种开源的容器化技术&#xff0c;允许开发者将应用及其运行环境打包在一个轻量级、可移植的容器中。这样&#xff0c;不论在开发、测试还是生产环境中&#xff0c;应用都能在任何Docker支持的平台上无缝运行。Docker使用Dockerfile来自…

Linux 多进程开发

0、程序和进程 程序 是包含一系列信息的文件&#xff0c;这些信息描述了如何在运行时创建一个进程。 进程 是正在运行的程序的实例。是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。 1、区别 程序是静态的&#xff0c;进程是动态的&#xff0c;程序是存储在某…

1689 ssm社区老人危机干预系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm社区老人危机干预系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主…

常见加解密算法03 - RC4逆向认识

各位聪明绝顶&#xff0c;才高八斗的读者们你们好&#xff01;今天我们主要讨论编译之后的RC4算法识别。 题外话&#xff0c;之前看到一个蛋疼的小知识&#xff0c;说“势”这个字最好不好查词典释义。我是很好奇的&#xff0c;果然后来无法直视势不可挡这个成语。 言归正传&am…

【MySQL】常见的数据类型

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;MySQL 目录 &#x1f449;&#x1f3fb;常见的数据类型bit类型enumset集合查询函数find_ in_ set &#x1f449;&#x1f3fb;浮点类型float类型decimal &am…

Ansys Zemax|HUD 设计实例

说明 本文介绍了HUD设计实例。 实例说明 规格如下&#xff1a; 显示器尺寸&#xff1a;24*8mm 眼盒尺寸&#xff1a;100*40mm 放大倍率&#xff1a;5 &#xff08;虚像尺寸 120*40mm&#xff09; 虚像距离&#xff1a;1.8m 最终光学系统的整体布局如下图所示。 从HUD发出的…

官宣!招商工作全面启动“2024南京智博会”众多企业踊跃报名

2024南京智博会&#xff0c;作为一场盛大的科技盛宴&#xff0c;经过多年的发展与沉淀&#xff0c;已经成功跻身国内顶尖的高新技术产品及解决方案的展示平台之列&#xff0c;成为了引领行业趋势的风向标。本届智博会不仅汇聚了众多知名科技企业&#xff0c;更展现了国内外最前…

中北大学软件学院javaweb实验三JSP+JDBC综合实训(一)__数据库记录的增加、查询

目录 1.实验名称2.实验目的3.实验内容4.实验原理或流程图5.实验过程或源代码&#xff08;一&#xff09;编程实现用户的登录与注册功能【步骤1】建立数据库db_news2024和用户表(笔者使用的数据库软件是navicat)【步骤2】实现用户注册登录功能(与上一实验报告不同的是&#xff0…

哪个品牌led灯好?五大好用护眼台灯推荐

哪个品牌led灯好&#xff1f;目前LED护眼台灯当中做得比较好的有明基、松下、书客等品牌。在如今LED灯市场的海洋中&#xff0c;选择一款可靠的护眼台灯变得愈发重要。然而&#xff0c;众多品牌和产品的涌现也让消费者面临着选择困难。为了帮助大家找到最合适的LED台灯&#xf…

Chromium 调试指南2024 Windows11篇-使用日志来辅助调试(八)

1. 日志&#xff1a;你的第一个调试工具 日志是开发者最简单也是最常用的调试工具之一&#xff0c;它能够提供程序运行时的详细记录。通过合理的日志记录策略&#xff0c;开发者可以快速定位问题发生的上下文&#xff0c;理解程序的运行流程和状态。 2. 如何在Chromium中使用…

百度云防护自定义访问策略URI使用说明

百度云防护的创建防御模板里的自定义访问策略功能是一个不错自定义拦截功能。 其中URI拦截策略是一种非常不错的拦截手段&#xff0c;今天我们来说明下如何使用URI。 首先什么是URI&#xff1f;关于什么是URI百度上写了很多&#xff0c;不过对于小白来说&#xff0c;是非常难…

中国平安发布“绿美广东·平安古树守护行动” 为广东古树名木提供超2600万风险保障

为响应国家关于生态文明建设的号召&#xff0c;发展绿色金融&#xff0c;助力构建“绿美广东”生态建设新格局&#xff0c;5月11日&#xff0c;中国平安在广东省韶关市南华寺成功举办“绿美广东平安古树守护行动”活动&#xff0c;并发布“我为古树上保险”计划&#xff0c;将为…

Qt实现水平方向流式布局FlowLayout简单又实用!

Qt中常见的布局管理器有&#xff1a; QHBoxLayout&#xff1a;水平布局&#xff08;常用&#xff09; QVBoxLayout&#xff1a;垂直布局&#xff08;常用&#xff09; QGridLayout&#xff1a;表格布局&#xff08;常用&#xff09; QFormLayout&#xff1a;表单布局&#…

4.分支与循环

逻辑控制分为三部分&#xff1a; 1.顺序结构---》顺序执行代码 2.分支结构---》if语句和switch语句 3.循环执行---》for语句 while语句 和do while语句 顺序结构比较简单&#xff0c;按照代码书写的顺序一行一行执行 分支结构&#xff08;if、switch语句&#xff09; 也就是…

StarCloud开源行动:激发算力调度的创新潜力

01 关于StarCloud OpenCSG StarCloud 是一个集开源系统(Kubernetes ,K8S)与高性能计算(High Performance Computing,HPC)一体的混合算力调度平台。它专注于大模型训练和推理&#xff0c;并提供一站式服务&#xff0c;包括从训练到部署&#xff0c;以及多模型比较等。除了在人…

【OpenVINO™】在 C# 中使用OpenVINO™ 部署PP-YOLOE实现物体检测

前言 OpenVINO™ C# API 是一个 OpenVINO™ 的 .Net wrapper&#xff0c;应用最新的 OpenVINO™ 库开发&#xff0c;通过 OpenVINO™ C API 实现 .Net 对 OpenVINO™ Runtime 调用&#xff0c;使用习惯与 OpenVINO™ C API 一致。OpenVINO™ C# API 由于是基于 OpenVINO™ 开发…

DevOps 温故知新

【引】伴随着微服务架构以及云技术的广泛使用&#xff0c;DevOps相应地引起了人们的关注&#xff0c;尤其在互联网企业展开了大量的探索和实践。去年赋闲在家的时候&#xff0c; 有幸精读了三本书&#xff0c;分别是《持续架构实践——敏捷和DevOps时代下的软件架构》&#xff…