[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技术来进行调整采样点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

采用java+B/S开发的全套医院绩效考核系统源码springboot+mybaits 医院绩效考核系统优势

采用java开发的全套医院绩效考核系统源码springbootmybaits 医院绩效考核系统优势 医院绩效管理系统解决方案紧扣新医改形势下医院绩效管理的要求&#xff0c;以“工作量为基础的考核方案”为核心思想&#xff0c;结合患者满意度、服务质量、技术难度、工作效率、医德医风等管…

Weblogic WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)

1 漏洞概述 CVE-2018-2628 是 Oracle WebLogic Server&#xff08;WLS&#xff09;核心组件中的一个反序列化命令执行漏洞。此漏洞允许未授权的用户通过 T3 协议在远程服务器上执行任意命令&#xff0c;从而可能完全控制受影响的服务器。 2 影响版本 该漏洞影响了以下版本的…

宁夏银川最牛起名大师的老师颜廷利:宝与饱,饿跟恶

对于中国优秀传统文化之根-汉语而言&#xff0c; 恶&#xff0c;对应着‘饿’&#xff1b; 宝&#xff0c;对应着‘饱’… 由此可见&#xff0c;无论是‘饿’&#xff08;与‘恶’同音&#xff09;&#xff0c;还是‘饱’&#xff08;与‘宝’通音&#xff09;&#xff0c;实际…

粒子群算法(Particle Swarm Optimization)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法背景 粒子群优化算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;的灵感来源于鸟群或鱼群的觅食行为。想象一下&a…

python怎么遍历字符串

python怎么遍历字符串&#xff1f;下面给大家介绍四种方法&#xff1a; 1、第一种方式&#xff0c;使用for in遍历字符串。 girl_str "love You" for everyChar in girl_str:print everyChar 2、第二种方式&#xff0c;使用range()或xrange()&#xff0c;把字符串…

iOS MRC那句话

混编时使用MRC文件需要使用这句话 -fno-objc-arc在下图中显示的位置添加

vue:网页icon无法显示

logo文件放在public文件夹下&#xff0c;在html里设置icon。 本地源码运行后发现网页icon无法显示我们设置的logo&#xff0c;而是显示了浏览器默认icon。 这个问题不需要解决&#xff0c;部署后网页icon显示就正常了。

【软考网络工程师】每日练题学知识

1.在EIGRP协议中&#xff0c;某个路由器收到了两条路径到达目标网络&#xff0c;路径1的带宽为100Mbps&#xff0c;延迟2ms&#xff0c;路径2的带宽为50Mbps&#xff0c;迟为4ms&#xff0c;如果EIGRP使用带宽和延迟的综合度量标准&#xff0c;那么该路由器选择的最佳路径是&am…

【MySQL的内外连接】

文章目录 一、内连接二、外连接1.左外连接2.右外连接 一、内连接 基本语法&#xff1a; select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件&#xff1b;&#xff08;这里的and&#xff0c;也可以修改成where&#xff0c;并且建议使用where&#xff0c;逻辑更清晰…

GEE案例分析——利用多时 Sentinel-1/2 和 Landsat-8/9 遥感数据在GEE中使用机器学习方法进行作物类时序分类

摘要 准确绘制作物类型图对于确保粮食安全至关重要。遥感(RS)卫星数据空间覆盖面广,时间频率高,是这一领域前景广阔的工具。然而,由于作物的类内和类间变异性很高,利用 RS 数据进行准确的作物类型分类方法的需求仍在不断增长。为此,本研究提出了一种新颖的并行级联集合…

《Video Mamba Suite》论文笔记(3)Mamba作为时序适配器的作用

原文翻译 4.3 Mamba as Video Temporal Adapter&#xff08;时序自适应建模&#xff09; Tasks and datasets.除了评估 Mamba 在后时间建模中的性能外&#xff0c;我们还评估了它作为视频时间适配器的有效性。通过对自我中心数据[29,49]进行视频-文本对比学习&#xff0c;对双…

免费的集成组件有哪些?

集成组件是指将多个软件或系统进行整合&#xff0c;以实现更高效、更可靠的数据处理和管理。在数据管理和分析领域&#xff0c;集成组件是不可或缺的工具之一。 在当今高度信息化的时代&#xff0c;集成组件在各行各业的应用中扮演着举足轻重的角色。集成组件能够将不同来源的…

翻天娃时光列车于地铁1号线闪耀启程,五一站厅活动再掀品牌热潮

四月下旬&#xff0c;备受瞩目的翻天娃食品品牌地铁广告震撼亮相长沙地铁1号线&#xff0c;翻天娃时光列车闪耀启程。五月中旬&#xff0c;翻天娃又在五一广场地铁站举办了一场别出心裁的站厅活动&#xff0c;将市民乘客们带入了一场穿越时光的奇妙旅程。 作为一家专注于休闲食…

【opencv】图像处理(一)

实验环境&#xff1a;anaconda、jupyter notebook 实验用到的包&#xff1a;numpy,matplotlib,opencv 一、opencv安装 最好使用python3.6&#xff08;我之前用的3.9安装opencv3.4.1.15会失败&#xff09; conda create -n cv python3.6安装opencv3.4.1.15&#xff08;3.4.2版…

美国加州正测试ChatGPT等生成式AI,在4大部门应用

5月11日&#xff0c;美联社消息&#xff0c;美国加州政府正在测试ChatGPT等生成式AI&#xff0c;应用在税收和收费管理部、交通部、公共卫生部以及卫生与公众服务部4大部门。 测试时间6个月&#xff0c;为其提供技术支持的一共有5家公司&#xff0c;分别是OpenAI、Anthropic、…

笨方法自学python(九)-读写文件

读取文件 前面已经学过了 input 和 argv&#xff0c;这些是你开始学习读取文件的必备基础。你可能需要多多实验才能明白它的工作原理&#xff0c;这节练习涉及到写两个文件。一个正常的 ex15.py 文件&#xff0c;另外一个是 ex15_sample.txt&#xff0c;第二个文件并不是脚本&…

电子杂志制作攻略,轻松打造高质量数字出版物

随着数字科技的飞速发展&#xff0c;电子杂志作为一种新型的数字出版物&#xff0c;已经越来越受到人们的青睐。它不仅具有丰富的内容、多样的形式&#xff0c;还具有便捷的传播和阅读方式。如今&#xff0c;电子杂志已经逐渐成为企业、媒体和个人展示自身品牌、传播信息的重要…

IDEA项目代码修改后不自动生效需要执行mvn clean install才生效

背景 IDEA代码修改之后&#xff0c;启动测试发现不生效&#xff0c;只有重新mvn clean install之后才能加载到改动的代码 解决方法 严重怀疑是idea的配置问题导致的&#xff0c;没有什么特别好的办法&#xff0c;只能删配置重新导入 1、删除 .idea文件夹 以及 所有.iml文件 …

一个基于servlet的MVC项目-登录验证

一、MVC的概念 MVC是Model、View、Controller的缩写&#xff0c;分别代表 Web 应用程序中的3种职责1 模型:用于存储数据以及处理用户请求的业务逻辑。 2视图:向控制器提交数据&#xff0c;显示模型中的数据。 3控制器:根据视图提出的请求&#xff0c;判断将请求和数据交给哪个…

身份证实名认证API接口如何对接

身份证实名认证API接口又叫身份证核验API接口、身份证二要素验证API接口&#xff0c;指的是输入姓名和身份证号通过官方权威核查&#xff0c;实时校验此二要素是否一致。那么身份证实名认证API接口如何对接呢&#xff1f; 首先我们找到一家有这个接口的服务商数脉API,然后注册…