OpenGL3.3_C++_Windows(25)

  • 阴影失真:阴影的不真实感

条纹样式:

  • 首先理解采样原理:同光的视角下,渲染一张深度图,每个像素,存储同一射线下的深度值(不断更新深度缓冲的结果),即最近片段的深度。
  • 接着,每个片段,T变换到光的视角下,从对应的深度贴图采样,比较自身的深度值,和深度贴图的深度值,、这便是阴影计算的过程
  • 但是,深度贴图受限于分辨率,在距离光源比较远的情况下,多个片段可能从深度贴图的同一个值中去采样,
  • 由于每个像素的深度值,为映射到同一像素范围内片段的中心点,那么映射到同一像素范围内的,某些Fragment.z > 中心点的z,就会被判断为阴影中,而某些Fragment.z < 中心点的z,判断为非阴影,所以,同一个映射范围的片段,有暗有亮,产生不合理的效果
  • 解决:偏移:可以让 表面的深度 / 深度贴图 应用一个偏移量(0.005f),这样同一范围的z深度,计算比较后的结果都是一致的,
  • 但是,这仅针对大部分情况,有些表面坡度很大,仍然会产生阴影失真
  • 原因:当光线和片段的法线 角度比较大,Fragment.z的值也会比较大,我们将z值偏移0.005f,并不能使它的z>中心点的z,
  • 解决:应用更大的偏移量:float bias = max(0.005 * (1.0 - dot(normal, lightDir)), 0.005);
  • 这行代码根据光线和片段的法线 角度,决定具体的偏移值

???悬浮Peter panning:

悬浮
  • 当使用阴影偏移,我们会发现阴影处于不正确的位置显示(虽然没有了条纹),对于原本应处于阴影的区域,却被判定为非阴影,不再计算阴影,
  • 原因:应用了偏移bias,虽然几乎可以保证同一映射范围的,片段判定一致,但是假如原本应处于阴影中,也就是深度贴图有更近的深度值,bias后片段的z深度,其实有一定可能比这个深度贴图的z深度还要小了,所以判定为非阴影
  • 书中的解决方案:当渲染深度图时候使用正面剔除(front face culling):也就是对深度贴图的深度值做了偏移(更远,值更大)
  • ???深度贴图深度值更大,不是越容易z - bias 小于<深度值(更高了)
  • 我认为这不是正确的解决方案,在我应用了面剔除,真的几乎没有阴影渲染了,并且源码中也没有用glCullFace(GL_FRONT);
  • 限制:只对内部不会对外开口 / 非单独平面  的实体物体有效,因为仅一个平面,剔除会完全移除它

采样过多

  • 我们发现地面上有一大块的阴影,超出光的视锥的投影坐标比1.0大,这样采样的深度纹理就会超出他默认的0到1的范围
  • 这是因为:超出光的视锥(和相机视锥不同)的片段一律被认为是处于阴影中,不管它真的处于阴影之中
  • 解决:让所有超出深度贴图的坐标的深度值是1.0,储存一个边框颜色,纹理环绕方式设置GL_CLAMP_TO_BORDER(当纹理坐标的值超出[0, 1]范围时,OpenGL会使用边框颜色作为纹理的颜色。)
  • 仍有一部分是黑暗区域,那里的坐标超出了光的正交视锥的远平面
  • 解决:强制将shadow的值强制设为0.0非阴影

PCF

  • 放大看阴影,会看到明显的锯齿状
  • 原因:深度贴图有一个固定的分辨率,多个片段对应于一个纹理像素,那么这几个片段便得到的是同一个阴影,而非各自的阴影,这就会产生锯齿边。
  • 方案:增加深度贴图的分辨率 / 尝试尽可能的让光的视锥接近场景(像素从一定范围的片段映射,当越接近,可映射范围就小,所以原本的某部分片段,产生了更多的采样坐标) / PCF
  • PCF(percentage-closer filtering):深度贴图中多次采样,所有的次生结果接着结合在一起,进行平均化,我们就得到了柔和阴影。
  • 根据textureSize(纹理对象,mipmap级别)(0:具有最高的分辨率和最多的细节),返回给定采样器纹理的mipmap级别的宽和高,再用1除以它返回一个单独纹理像素的大小

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

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

相关文章

hadoop词频统计

1 Hadoop 安装与伪分布的搭建 2 Hadoop词频统计 此文章基于搭建好hadoop之后做的词频统计实验&#xff0c;以上是链接为搭建hadoop的教程 目录 1 HDFS 文件系统常用命令 2 词频统计实验准备工作 2.1 启动hadoop 关闭防火墙 2.2 查看图形化界面 2.3 文件上传 3 词频统计…

isspace()方法——判断字符串是否只由空格组成

自学python如何成为大佬(目录): https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isspace()方法用于判断字符串是否只由空格组成。isspace()方法的语法格式如下&#xff1a; str.isspace() 如果字符串中只包含空格&…

【Unity设计模式】✨使用 MVC 和 MVP 编程模式

前言 最近在学习Unity游戏设计模式&#xff0c;看到两本比较适合入门的书&#xff0c;一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式&#xff0c;因此很值得学习 本…

【算法】5分钟了解如何使用PCA主成份分析

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、什么是PCA1.1.PCA的思想1.2.PCA的数学表示 二、什么是PCA的主成份与方差2.1.主成份的方差2.2.主成份的命名 三、如何使用PCA3.1.主成份的代码实现 主成份分析全称为PCA Principle Component Analysis ,它的主…

Linux虚拟串口设置

VSPD虚拟串口软件安装及使用 一、软件安装 1、Configure Virtual Serial Port Driver(VSPD) 1.1 首先下载 Configure Virtual Serial Port Driver(VSPD) 软件 链接&#xff1a;https://pan.baidu.com/s/11aGc2aHGUew5QZ0XhaWXJw 提取码&#xff1a;rmd7 1.2 安装时注意将…

计算机基础之汇编语言学习笔记

学习来源&#xff1a;b站各种学习资料 前置知识&#xff1a;计算机组成原理等知识 学习参考的资源 汇编语言编程的速成指南[上]~从零开始的期末抢救计划 &#xff08;8086汇编&#xff09;_哔哩哔哩_bilibili 链接: https://pan.baidu.com/s/1tg_ZW7VD3TS_s1v_EjS89w?pwdak6…

2029年AI服务器出货量将突破450万台,AI推理服务器即将爆发式增长

在2020年&#xff0c;新冠疫情与远程办公模式的兴起推动了所有类型服务器的出货量达到峰值&#xff0c;随后几年里&#xff0c;除了AI服务器之外的所有类别都回归到了正常水平。 根据Omdia的研究数据&#xff0c;AI服务器的出货量在2020年急剧上升&#xff0c;并且至今未显示出…

运筹系列93:VRP精确算法

1. 基础版本 定义 x i j k x_{ijk} xijk​为边 i j ij ij是否由车辆 k k k去运输。如果有时间窗约束的话&#xff0c;再加上一个变量 c i k c_{ik} cik​即可&#xff0c;表示第k辆车到达节点i时的时间点。 第一类客户流量约束&#xff0c;要求每个点都有1个入度和1个出度&…

ios13多窗口(UIWindowScene)学习笔记

ios13引入了UIWindowScene类、UIWindowSceneDelegate协议以便支持多窗口功能&#xff0c;但其适用于ipad&#xff0c;不适用于iphone&#xff0c;因为iphone不支持多窗口功能。注意&#xff0c;这里说的窗口不是UIWindow&#xff0c;而是UIWindowScene。 ios13前后的app的UI架…

AI陪伴产品的情感设计:从孤独感到恋爱感评分:9/10

本文主要阐述三个话题&#xff1a; 1. 市面上有哪些AI陪伴产品&#xff1f; 2. 我们团队要怎么做&#xff1f; 3. 为什么要做&#xff1f; 市面上有哪些陪伴类产品&#xff1f; Role-play&#xff08;角色扮演&#xff09; 在当前市场上&#xff0c;有不少以角色扮演为核心的…

Wails 安装初体验

文章目录 Wails 安装说明1. 系统要求2. 安装步骤3. 构建应用 结论 Wails 安装说明 Wails 是一个用于构建桌面应用的 Go 框架&#xff0c;结合了现代前端技术。以下是安装步骤&#xff1a; 1. 系统要求 Go 1.16 或更高版本Node.js 和 npm可选&#xff1a;适用于 Windows、mac…

iconfont-阿里巴巴矢量图标库 在vue项目使用记录

官网地址&#xff1a;https://www.iconfont.cn/manage/index?manage_typemyprojects&projectId4539761 第一步&#xff1a; 下载资源 ->解压到项目文件夹 第二步 在项目中main.ts 或者main.js 引入资源 import //assets/iconfont/font/iconfont.js; import //assets…

java基础知识点全集

JAVA的所有知识点 一、基础的数组、数据类型、输入输出二、类与对象1. 三大特征&#xff08;1&#xff09; 封装&#xff08;2&#xff09;继承&#xff08;3&#xff09;多态 2. 类的实例化&#xff08;1&#xff09; 类通过NEW来创建&#xff08;2&#xff09; 类的继承&…

python解锁图片相似度的神奇力量

在这个信息爆炸的时代,图片成为了我们传递信息、表达情感和记录生活的重要方式。然而,面对海量的图片资源,如何快速准确地找到相似的图片,成为了一个亟待解决的问题。现在,让我们为您揭开图片相似度的神秘面纱,带您领略这一创新技术的魅力! 图片相似度技术,就像是一位…

【多媒体】Java实现MP4视频播放器【JavaFX】【音视频播放】

在Java中播放视频可以使用多种方案&#xff0c;最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过&#xff0c;JMF已经不再被推荐使用&#xff0c;而Xuggler是基于DirectX的&#xff0c;不适用于跨平台。而且上述方案都需要使用第三方库。…

医院管理系统带万字文档医院预约挂号管理系统基于spingboot和vue的前后端分离java项目java课程设计java毕业设计

文章目录 仓库管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 仓库管理系统 一、项目演示 医院管理系统 二、项目介绍 基于springbootvue的前后端分离医院管…

QListView自定义item(结合QSqlQueryModel)

QListView:绘制自定义List&#xff08;一&#xff09;——设置ItemDelegate_qt_繁星执着-开放原子开发者工作坊 (csdn.net) QListView自定义Item_qlistview 自定义item-CSDN博客 结合我写的上一篇文章&#xff1a; QTableView与QSqlQueryModel的简单使用-CSDN博客 这次尝试…

webStorm debug vue项目的两种方案

一、前言 本文将介绍通过webstorm对vue项目进行debugger调试的两种方案。 但是&#xff0c;不管通过那种方案&#xff0c;都无法达到类似后端idea调试的体验&#xff0c;感觉十分难受&#xff0c;不过&#xff0c;比起用console.log还是好一些。如果各位有更好的方案&#xf…

扩展阅读:什么是中断

如果用一句话概括操作系统的原理,那就是:整个操作系统就是一个中断驱动的死循环,用最简单的代码解释如下: while(true){doNothing(); } 其他所有事情都是由操作系统提前注册的中断机制和其对应的中断处理函数完成的。我们点击一下鼠标,敲击一下键盘,执行一个程序,…

马斯克的SpaceX发展历史:从濒临破产到全球领先

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 Space Exploration Technologies Corp.&#xff0c;简称SpaceX&#xff0c;是由埃隆马斯克&#xff08;Elon Musk&#xff09;于2002年创办的一…