本文简单介绍一下Percentage Closer Soft Shadow的原理,由于本人对于这个东西理解很浅,所以有些想法可能是不成熟的。
谈到PCSS,首先我们要介绍一下PCF(Percentage Closer Filtering),最早在1987年就被人提出的一种过虑算法,当时作者的初衷是用这种算法来改变Shadow Map的走样问题。
我把SDK中的Shadow Map简单改了一下,生成了上面两幅图片。左边的渲染图是经过PCF处理的,而右边是最普通的shadow map算法(注意:sdk中的shadow map也是有PCF的,不过只有4个采样点,效果不是很好,而右图中是去除了PCF的效果图)。我们把红框中的像素放大来看,得到下面结果:
可以看到,经过PCF处理的Shadow边缘会被模糊,不会有很严重的锯齿。所以PCF可以用来为shadow map做抗锯齿,而且效果还可以接受。
其实PCF的原理并不复杂,无非就是一种采样方式而已,大致原理如下:
点采样会根据uv值,找到最近的整数坐标,用该位置的texel作为采样结果。而线性采样则对附近的四个texel进行一定的插值运算。而在Shadow map采样,如果利用点采样或者线性采样得到一个深度值,然后在于即将渲染的pixel的深度进行比较的话,最终结果是二值化的。就是说即将渲染的pixel只有两种情况,在阴影内部或者外部。这种二值化的特性直接导致shadow map是没有半影现象了,加上shadow map的分辨率有限,当其被放大的时候,经常会有精度不足的情况出现,所以会导致出现严重的锯齿。这也是shadow map算法最致命的一个问题了。
PCF的工作方式大致如下,把即将渲染的pixel的深度值与shadow map中的周围像素一一对比,然后shadow map的一个局部会出现一个二值化的空间。根据1与0数量比例,就可以判断出当前像素与阴影的关系。这种采样方式的一个很重要的优点就是结果不是二值化的,而是从0到1的浮点型数值。换个角度理解,就是说这种采样的结果可以描述当前像素被阴影覆盖的程度,而不是简单的是否被阴影覆盖。从理论上讲,就赋予了shadow map渲染半影的能力了,至少可以简单解决shadow map算法中的边缘走样问题。
在把目标点变换到Light Space之后,我们需要确定都读取shadow map中的哪些像素。最简单的办法就是按照规律均匀读取一定的采样点,不过这种办法可能会产生一些规律性的东西,所以用泊松分布来读取周围的采样点更靠谱一些。而周围的采样点的范围,我们可以用一个参数kernel_size来线性变换。这个值可以控制半影的大小,当然,半影越大,需要的采样点也越多一些,否则会有明显的走样问题。
上面简单描述了下PCF的算法原理。那么PCSS相对于PCF多做了些什么工作呢?实际上,如果PCF能够动态适应半影的大小,那么就可以直接做成soft shadow了,PCSS也正是这样工作的。
PCSS的算法分成三个步骤:
首先,把目标点变换到Light space,然后找到周围点中的遮挡该目标点的点,记录其与光源的距离。在搜索了一定的遮挡点之后,我们会根据这些遮挡点计算出一个平均遮挡距离。如果目标点不在阴影中,平均遮挡距离为0,PCSS算法直接返回1.0。
然后,我们假设光源、遮挡物和目标接受点所在平面都是平行的,通过相似三角形的原理,计算出半影的大小。
最后,根据半影的大小,我们可以动态的调节PCF中的搜索范围,从而改变半影的大小。
上面的步骤没有详细说明,想深入了解的朋友建议还是看看paper里面的描述吧。
上图是我根据sample里面的代码,加入了PCSS算法所生成的结果。我们看到,飞机距离墙面比较远,所以阴影的很模糊。而距离墙面最近物体投射的阴影都是很清晰的,不过也没有明显的锯齿。
PCSS可以动态生成软阴影,而且不需要额外处理。只要引擎里面有shadow map算法,更改成PCSS算法并不复杂。
当然,这个算法也是有一定问题的,在光源距离遮挡物很近的时候,我们看到的shadow会有严重的重影现象(这个问题我没有深入调查,不过可能是用一些插值手段去除其走样吧)。好在许多游戏中,光源被很近的物体遮挡住的现象非常少,该算法应该还有很多用武之地的。
相关推荐
Games202,作业1(QT下实现PCSS)
但噪点在当前并不是一个很大的问题,因为在之后会接触时序降噪,空间降噪等,早申不会是很大的问题。由于我们的采样方式使用了矩形区域采样,因此当阴影重叠较大时,会出现如下情况。在PCSS中计算中,第一步计算平均遮挡物深度也需要用到低通采样。该shader只计算了平行光的阴影,对于点光源并未处理阴影。可以看出在脚附近的阴影为硬阴影,而头部附近的阴影为软阴影。当滤波为20时,当光线处于一定角度,地面出现黑色线条。该泊松采样方式如下,初始弧度为随机数,⚪半径为1.20x20采样数20(还好)20采样数(有噪点)....
Vulkan_PCSS软阴影
本文简述实现,具体步骤原理可查看闫大神高质量实时渲染。 一、PCSS简介 1.1 PCF 百分比渐近过滤(PCF)是一个简单,常见的进行阴影边缘反走的技术。它通过在片段周围进行采样,然后计算样本比片段的更接近光源的比例,使用这个比例对散射光和镜面光成分进行缩放,然后对片段进行着色。使用这一技术后,阴影边缘看上去进行了模糊一样。 但对于较大物体的内部的采样是一个较大的浪费,我们并无法只针对物体边界进行采样,所以在性能是具有很大的瓶颈。 1.2 PCSS pcss是距离相关的, 它通过搜索阴影贴图上的附近区域
博途WinCC多语言项目配置指南
在博途(TIA Portal)中为WinCC项目配置多语言功能,需通过系统化步骤实现界面文本的动态切换。
计算机图形学--阴影1--PCSS算法
阴影是怎么产生的,如何渲染出阴影 Shadow Mapping 假设要渲染以下场景 渲染场景2次: 1.第一次,产生一个shadow map,shadow map描述光源能照到的着色点. 2.从眼睛出发,使用第一次渲染shadow map,看某个点是否在阴影里. 第二个pass中,我们渲染一个结果,比较深度。 好处:不再需要知道场景的几何信息 坏处:走样和锯齿 Shadow Mapping 的问题 问题一:渲染结果自遮挡 原因:我们对每一个场景的像素的深度,这个值是固定的。Shadow Map记录
Office 365部分安装及同时安装Visio的方法
From MWeb Win版本的Office 365安装包默认安装所有组件,没有选择的页面,在安装Office 365后再安装下载的Visio 2016专业版时,会显示计算机上已经安装了即插即用Office,Visio不可安装,因此可以考虑使用Office部署工具来解决这两个问题。 下载安装Office365和Visio 下载Office部署工具 修改配置 部署工具使用方法...
全本地AI代理实战:零数据外泄的本地化Agent工作流搭建
全本地AI代理是一种将大语言模型推理、长期记忆与工具调用完全运行于用户本地设备的智能体架构,其核心原理在于通过进程隔离与标准化协议实现模型层、记忆层和工具层的解耦协同。相比依赖云端API的传统方案,它在数据主权、响应确定性与环境复现性上具备不可替代的技术价值。典型应用场景包括法务合规文档处理、离线工业现场辅助决策、以及高敏感度企业知识管理。本文聚焦Qwen2+Ollama+SurrealDB+Agno技术栈,详解如何构建可落地的全本地AI代理系统,覆盖从硬件适配、向量记忆建模到多模态插件协同的完整链路。
Unity SOFT SHADOWS WITH PCSS
这里是引用 https://blog.youkuaiyun.com/kevin_dust/article/details/51903101 http://developer.download.nvidia.com/whitepapers/2008/PCSS_Integration.pdf 相当于抄的第二个引用
pytorchDataLoader中调整数据长度不一致问题(lstm等)
数据长度不一致 用pytorch做rnn的时候,如果输入数据不一样长,可以用两种方式解决。 一种是自定义collate方法, #自定义collate_fn dataloader.DataLoader(dataset,4,True,collate_fn=my_collate) 然后里面写数据和标签载入方式即可 def my_collate(batch): data = [item[0] for item in batch] target = [item[1] for item in batc
GAMES202 PCSS软阴影算法细节解析
在LearnOpenGL框架的基础上实现了一遍GAMES202的PCF+PCSS软阴影,之前学习GAMES202时一些没弄清楚的问题顺便搞清楚了。注:本文中代码和shader均在笔者中实现,因此有一些细节可能和GAMES202作业框架不一致,且对202框架中的一些错误进行了修正。
Jetson AGX ORIN硬件初始化和环境部署
orin预安装了ubuntu20.04,只需开机,像重装系统一样设置用户信息即可,可以参考官网的教程[https://developer.nvidia.com/embedded/learn/get-started-jetson-agx-orin-devkit],官网提供了两种方式:一种是orin + 显示器,orin有提供DP接口,你需要准备一台显示器,最好也是有DP口的,因为我用DP转HDMI的连的,分辨率会受影响。确认安装的路径,一般直接回车安装在默认的 /home/你的名字/anaconda3。
【Docker】掌握 Docker魔法:Windows 11 平台上的完美容器部署终极指南
【Docker】掌握 Docker魔法:Windows 11 平台上的完美容器部署终极指南 一文搞懂什么是 Docker?分析容器的工作原理、容器的架构、Docker的优势、使用 Docker的原因。 全程手把手教你Docker的安装与使用,配置阿里云镜像加速、容器常用命令!
webgl通过PCSS生成软阴影
PCSS(Percentage-Closer Soft Shadows)则通过模拟阴影边缘的模糊效果,生成更加逼真的软阴影,与PCF不同之处是:PCF(Percentage-Closer Filtering)通过对深度比较结果进行平均处理。PCSS是在PCF的基础上做进一步改进了阴影边缘的柔和度,使得阴影效果更加逼真。我们看到,尽管PCSS产生的阴影的效果更加真实,但是片元着色器中又增加找遮挡物的操作,这进一步增加了性能的开销,不过现在的GPU的性能都比较强,牺牲一点性能,增加真实感还是比较可行的。
《open3D+pyqt》点云读取、显示与保存
《open3D+pyqt》第一章:点云读取与显示一、效果展示二、环境配置三、代码3.1 qt designer设置3.2 生成ui,qrc的py文件3.3 py文件代码 一、效果展示 二、环境配置 环境配置:Anconda+pycharm+pyqt+open3d+pyqtgraph 显示界面:这里选择pyqtgraph 参考网上教程 三、代码 3.1 qt designer设置 界面布局参照《PCL+QT》教程,界面设置:布局如下: 布局参数参考: 3.2 生成ui,qrc的py文件 3.3 py
算法复现:OpenGL-ShadowMap/PCSS/CSM
前记:这篇文章将会实现普通的ShadowMap --- PCSS(Percentage-Closer Soft Shadows) --- CSM (Cascaded Shadow Maps) 学不可以已-----------------------------博主:MX 常规ShadowMap实现: 问题: Shadow Acne(自重叠):
【QGIS入门实战精品教程】4.2:QGIS矢量数据采集(地图数字化)案例教程
本文基于上一个实验栅格数据地理配准,讲述在QGIS中创建shp格式矢量数据(点、线、面)并进行矢量数据的采集与编辑。 文章目录一、实验数据及任务二、创建Shapefile图层三、数字化超详细步骤 一、实验数据及任务 1. 实验数据:为了保证实验的连贯性,本次实验采用的数据为上一个实验地理配准的结果数据,为配准后的甘肃省地图。 参考阅读:【QGIS入门实战精品教程】4.1:QGIS栅格数据地理配准完整操作流程 添加实验数据: 2. 实验任务:本实验任务为以配准后的甘肃省地图为底图,创建点状(地级市.
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
33岁从0开始学习CSS_runoob.com_2
P CSS--Cascading Style Sheets层叠样式表 D Cascading 英 [kæs'keɪdɪŋ] 级联/串联/流注 Sheet 英 [ʃi:t] 纸/被单/表格 C 理解中文翻译 A 继续学习
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
GAMES202——作业1 实时阴影(ShadowMap,PCF,PCSS)
获取对周围的随机采样方向,乘以采样半径大小再除以贴图大小即可求得采样点在贴图中的位置。方法,第一次先以光源为视点位置,将光源能看见的所有物体进行光栅化,并将以深度值进行绘制的结果保存到帧缓冲区,帧缓冲区的内容写入纹理。第二次绘制,根据纹理和一个将世界坐标下的点转化到以光源为视点的坐标系的矩阵,判断是否被遮挡,从而实现硬阴影。因为是计算遮挡物的平均深度,所以没有遮挡物的话,返回-1处理,有遮挡物返回遮挡物的平均深度,而不是返回整个采样区域的平均深度。如果查到的深度比现在的点的深度小,说明现在的点被遮挡。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
OpenGLRender开发记录(二): 阴影(shadowMap,PCF,PCSS)
结果如下,经典的自阴影现象,主要原因就是shadowMap的分辨率不足,一些不在同一高度的位置被记录了相同高度,在主摄像机渲染时,某个位置在shadowMap存储的高度比自己本来还要高,就会被认为是阴影(但是这种情况下很好分辨光源摄像机的覆盖范围,方便调试🙂)下一步就是在光源视角下渲染,首先得找到摄像机的位置,其实就是MVP矩阵的VP用光源而不是用摄像机,下面是对于平行光的shadowMap渲染。并且添加了一个PBR材质的地板。阴影问题解决了,下面就是提升效果,当前的阴影是硬阴影,锯齿很严重。
GAMES202 PCF PCSS 环境光渲染
软阴影 Percentage closer soft shadows PCSS Shadow Mapping 两次渲染场景 第一次从光源看向场景,输出一个深度 shadow_map (每个方向/物体 记录一个最浅的深度) 第二次从相机看向场景,配合第一次的结果 坏处:自遮挡,走样 数值精度造成了自阴影:ShadowMap有分辨率,看到的是离散的像素组成的场景 当光线与地面夹角grazing angle时,自阴影影响最大 解决地面自阴影方法:有一个bias区间,可以容忍。但是引发了新的问题,原本应该遮挡的
高质量实时渲染课程笔记(三)— 实时阴影渲染1(Shadow Mapping、PCF、PCSS)
文章目录1 Shadow Mapping 阴影映射1.1 概览1.1.1 Shadow Mapping 是一个 2-Pass Algorithm(需要渲染两趟)1.1.2 Shadow Mapping is an image-space algorithm 图像空间的算法1.2 Shadow Mapping 实现过程1.2.1 Render from Light1.2.2 Render From Eye1.3 Shadow Mapping存在的问题1.3.1 Self occlusion 自遮挡解决自遮挡问
games202:二,实时阴影Shadow Mapping、软阴影PCF、PCSS、VSSM、MSM、SDF + 作业1
games202:实时阴影Real-Time Shadows一,Shadow MappingShadow Mapping的问题自遮挡自遮挡解决办法锯齿化走样二,Shadow Mapping Math三,软阴影3.1 PCF(Percentage Closer Filtering)3.2 PCSS(Percentage closer soft shadows)四,VSSM(Variance Soft Shadow Mapping)4.1 加速PCSS-step34.1.1 SAT-Summed Area Ta
【游戏图形开发必看】:深度理解Shadow Mapping与PCSS的实战对比
掌握真实光影效果的秘诀,深入解析渲染的阴影实现技术。对比Shadow Mapping与PCSS在游戏图形中的应用,涵盖原理、适用场景与性能优化策略,提升画面真实感与效率。实战导向,值得收藏。
【GAMES-202实时渲染】1、软阴影01(Shadow Mapping、Peter Panning、PCSS原理超详细)
Lecture3~41、Shadow mapping的回顾2、Shadow mapping的数学基础3、PCSS和PCF B站课程链接 1、Shadow mapping的回顾 2、Shadow mapping的数学基础 3、PCSS和PCF i - > Shadow Mapping 要渲染一个点光源在场景中投射出的阴影,我们要用shadow mapping技术,在101中我们介绍过shadow mapping,它是一个2-pass的算法,也就是我们会对场景渲染两次,1-pass我们从Light处看向场
csm pssm +pcf pcss sdsm
这几个shadow算法 pcf是sample时候用的 按照一个mode采样几个位置 根据采样结果 决定0-1 可以是0.234 这样就不是 0或者1 就是soft了 主要讲下pcss 是啥 因为我之前对此比较模糊 pcss就是在 pssm+pcf的基础上 动态调整pcf的kernal根据物体到light的距离 给个伴影搜索区域 sdsm就是 取cascade的时候...
1710



被折叠的 条评论
为什么被折叠?



