GPU Gems1 - 14 透视阴影贴图(Perspective Shadow Maps: Care and Feeding)

开篇先说,这文章好难懂啊,到现在也没完全弄明白,有大佬的话欢迎指点。这篇大体意思是对Perspective Shadow Maps进行部分优化。GEMS这书这点是真挺蛋疼,很多文章都是对某项技术的优化,那先介绍介绍原来技术嘛,我都不知道原来技术为啥有毛病(当然是咱自己菜鸡)上来就给我整优化,完全看不懂。先贴上Perspective Shadow Maps技术的最原始论文链接

 http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.449.9505&rep=rep1&type=pdf

一个关于shadow map技术非常好的链接,之后有时间得详细写一篇关于这个文章的积累

http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping

本文开篇上来又来介绍阴影渲染的两大流派。

  • 阴影体(shadow volumes)/模板阴影(stencil shadows)
  • 阴影贴图(Shadow Maps)

之前文章已经介绍过这俩技术流派了,这里就略过了。透视阴影贴图(Perspective Shadow Maps, PSMs)是由Stamminger和Drettakis 在SIGGRAPH 2002上提出的一种阴影贴图(Shadow Maps)流派的方法,通过使用在投射后空间(post-projective space)中的阴影贴图来去除其中的走样。

The most significant problems of the presented PSM algorithm are these three(PSM算法三个问题):

  • To hold all potential shadow casters inside the virtual camera frustum, "virtual cameras" are used when the light source is behind the camera. This results in poor shadow quality.(虚拟相机技术带来阴影质量降低)
  • The shadow quality depends heavily on the light position in camera space.(阴影质量很依赖于光源对相机的位置)
  • Biasing problems weren't discussed in the original paper. Bias is a problem with PSMs because the texel area is distributed in a nonuniform way, which means that bias cannot be a constant anymore and should depend on the texel position.(bias问题)

虚拟相机

如以下两个图所示,这玩意粗俗来讲,意思就是树木1不在摄像机范围内,但是光照到这个树木1投射出来的阴影投到地面后确在摄像机范围内,这可咋整呢,那就像图2似的,把摄像机虚拟的往后挪点,把树木1囊括在摄像机范围内来解决这个问题。虚拟摄像机这种技术带来的问题就是阴影质量会降低,因为本来贴近摄像机的物体,比如树木2,会因为相机向后挪动后在视野中变小,自然会影响其阴影质量。

解决虚拟摄像机的问题可以采用以下办法:对光源矩阵使用特别的投射变换。如下图所示,它由一个原始的(非后移过的虚拟相机)摄像机,一个“”逆向“”光源和摄像机后面的物体组成。

 我个人非常粗俗的理解是,该方法构造了一个很特别的矩阵,使得光源经过点1向负无穷发射,之后又转回来经过234点直至正无穷大。(这块理解不太好,望大佬指导)

 对虚拟摄像机技术还可以改进的一点是,当后移时,同时使得camera 近平面一同后移。如下图所示。

 

当光源离unit cube非常近的时候,如果我们仅使用一个shadow map texture,阴影质量会非常低。因为为了保证光源视域要囊括整个unit cube,光源视域的角度会非常大,如下图所示。因此离光源很近的区域采样值就会非常少,阴影质量就会降低。有两个办法,每个办法仅解决问题的一部分:单位立方体裁剪法,把光源摄像机对准单位立方体的必要部分;立方体映射法,使用多个纹理来存储深度信息。

最初的文章没有讨论过偏置(bias)问题。偏置是随透视阴影贴图而带来的问题,因为纹素的面积以不均匀方式分布,这意味着偏置不再是常量,而是与纹素的位置有关。

解决方案:使用在世界空间中的偏置(而且不再分析双投射矩阵的结果),然后把这个世界空间偏置转换到投射后空间。(这部分没怎么理解,望大佬指导)

最后,该方案又提到了紧邻百分比过滤(percentage-closer filtering ,PCF)优化,之前文章已经详细记录过,这里就略过了

【关键词提炼】

 

阴影渲染(Shadow Rendering)

阴影贴图(Shadow Maps)

透视阴影映射(Perspective Shadow Maps,PSMs)

紧邻百分比过滤(percentage-closer filtering ,PCF)

单位立方体裁剪法(Unit Cube Clipping)

 

 

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

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

相关文章

C++——lambda表达式

介绍 lambda表达式是一种局部类类型&#xff0c;它含有一个构造函数&#xff0c;和一个const成员函数operator()()。 lambda表达式除了能做参数外&#xff0c;还能用于初始化一个声明为auto或者std::function<R(LA)>的变量。R是lambda的返回类型&#xff0c;LA是它的类…

GPU Gems1 - 15 逐像素光照的可见性管理

这章讲到了可见性在逐像素渲染光照场景中的作用&#xff0c;也考虑如何使用可见性减少必须渲染的批次数量&#xff0c;从而改善性能。 假设一个非常简单的场景&#xff0c;一个房间&#xff0c;因为房间的不同部位是不同的材质&#xff0c;所以将其分为8个batch&#xff0c;另…

重建世界坐标

1.概论 在屏幕空间做一些操作的时候往往需要从屏幕坐标和深度纹理中重建出相应的世界坐标。 本文会讨论两种重建世界坐标的方法&#xff0c;并详细讲解第二种方法。 使用VP逆矩阵CameraPosInWorld linearDepth * Direction 2.使用VP逆矩阵法 我们知道屏幕坐标是通过Object…

GPU Gems1 - 16 次表面散射的实时近似(Real-Time Approximations to Subsurface Scattering)

这一章&#xff0c;浅墨这篇文章介绍的非常详细&#xff0c;我照扒一遍再稍加一些内容&#xff0c;增加记忆。https://zhuanlan.zhihu.com/p/36499291 【章节概览】 次表面散射&#xff08;Subsurface Scattering&#xff09;&#xff0c;简称SSS&#xff0c;或3S&#xff0c…

Unity HDRP渲染管线基础指南

HDRP和LWRP简介 Unity2018中引入了可编程渲染管线&#xff08;Scriptable Render Pipeline&#xff0c;简称SRP&#xff09;&#xff0c;是一种在Unity中通过C#脚本配置和执行渲染的方式。至2018.1版本&#xff0c;Unity中除了默认渲染管线&#xff0c;还提供了轻量级渲染管线…

SSDO AO 图像空间的动态全局光照

本文仅记述SSDO学习笔记&#xff01; 概述 SSDO Screen-space Direction Occlusion 是对AO的扩充&#xff0c;在AO的基础上&#xff0c;假设没有遮蔽的方向有直接入射光&#xff0c;有遮蔽的方向&#xff0c;可能有间接光的反射。 SSAO理论分析 AO&#xff1a;在计算点的周围…

对于C++的思考

前言 本文是Bjarne Stroustrup的HOPL4论文 笔记及拓展(目录) 的起始篇。 C的理念 C被设计出来到底是为了回答什么样的问题呢&#xff1f; 如何直接操纵硬件&#xff1f;同时支持高效&#xff0c;高级的抽象&#xff1f; C在1980年代仅仅是一个基于C和Simula语言功能的组合…

GPU Gems1 - 17 环境遮挡

环境光遮蔽&#xff08;Ambient Occlusion&#xff09;“AO”为Amblent Occlusion的缩写&#xff0c;中文译为环境光遮蔽。在DirectX 10.1 API推出后&#xff0c;Amblent Occlusion升级为SSAO&#xff08;Screen-Space Ambient Occlusion:屏幕空间环境光遮蔽&#xff09;&#…

C++ 模板浅谈

引言与概述 C模板机制允许在定义类&#xff0c;函数&#xff0c;类型别名的时候将类型或值当作参数&#xff0c;这样定义的类和函数在运行时间和空间效率上并不逊色于手工打造的非通用的代码。 模板提供的代码是类型安全的。 模板是一种编译时期的机制&#xff0c;与手工编写…

GPU Gems1 - 18 空间BRDF(Spatial BRDFs)

这章主要介绍了空间双向反射分布函数&#xff08;SBRDF&#xff09;&#xff0c;接着文章讨论了压缩SBRDF表达式&#xff0c;以及由离散光或环境贴图所照明的SBRDF的渲染方法。关于BRDF请参考大佬浅墨的这篇文章https://blog.csdn.net/poem_qianmo/article/details/75943714 S…

浅谈表面反射——波动光学篇

Radiometric Definitions 首先让我们来回忆一下辐射度量学中关于irradiance和radiance的定义&#xff1a; 我们在这里定义光源(source)在x-z平面&#xff0c;因此入射光就可以只用θi\theta_{i}θi​来描述。dAs\mathrm{d}A_{s}dAs​是表面积。定义dΦi\mathrm{d}\Phi_{i}dΦ…

GPU Gems1 - 19 基于图像的光照(Image-Based Lighting)

这篇文章打破了当时立方体贴图环境&#xff08;Cube-Map Environment&#xff09;用法的桎梏&#xff0c;深入研究了更多可能的逼真光照效果。文章主要研究了基于图像的光照&#xff08;Image-Based Lighting&#xff0c;IBL&#xff09;&#xff0c;包括局部化的立方体映射&am…

Polygonal-Light Shading with LTC

概述 如果我们有一个上半球的余弦分布函数(Do)(D_{o})(Do​)&#xff0c;并对这个余弦分布函数进行一个矩阵(M)(M)(M)变换&#xff0c;变换为一个新的分布函数(D)(D)(D)。 DMDoD M D_{o}DMDo​ 这就是基本思想&#xff1a;用一个余弦分布函数来拟合出不同的分布函数&#xff…

GPU Gems1 - 20 纹理爆炸(Texture Bombing)

【章节概览】 这章介绍了纹理爆炸&#xff08;Texture Bombing&#xff09;和相关的细胞技术&#xff0c;它们能在Shader中增加视觉的丰富性&#xff0c;图像的多样性&#xff0c;并减少大块纹理图案的重复性。 【核心要点】 纹理爆炸&#xff08;Texture bombing&#xff0…

Catlike Coding网站文章解析 -- 1.Procedural Grid

原文英文版链接https://catlikecoding.com/unity/tutorials/procedural-grid/&#xff0c;里面有每一部分的untiy工程链接&#xff0c;文章内容也更详实。 本章内容&#xff1a; 创建一系列点使用协程实现他们的摆放位置定义一个由三角形组成的平面自动生成法线添加纹理坐标和…

GPU Gems1 - 21 实时辉光(Real-Time Glow)

这章浅墨的文章讲的很细了&#xff0c;这里基本照扒一遍加深印象&#xff0c;原文链接&#xff1a;https://zhuanlan.zhihu.com/p/36499291 【章节概览】 这章讲到2D光照效果中的辉光&#xff08;Glow&#xff09;和光晕&#xff08;Halo&#xff09;&#xff0c;展示了如何通…

Catlike Coding网站文章解析 -- 2.Procedural Grid

本章内容 创建一个闭合的cube mesh给cube添加带弧度平滑的边缘定义法线使用sub-meshes&#xff08;子mesh&#xff09;创建一个常规shader合并碰撞体1.合成一个cube 上一章https://mp.csdn.net/postedit/89474068我们已经实现了一个平面mesh。一个cube由6个平面组成&#xff…

GPU Gems1 - 23 景深技术综述

本章主要介绍如何使用GPU创建实时的景深&#xff08;Depth of Field&#xff09;效果。参考浅墨总结文章的链接https://zhuanlan.zhihu.com/p/36499291 聚焦在枪上&#xff0c;背景模糊【核心要点】 物体在距离镜头的一个范围之内能够清晰成像&#xff08;经过聚焦&#xff09…

GPU Gems1 - 22 颜色控制(Color Controls)

这章将在游戏中图像处理的讨论&#xff0c;扩展到技术和艺术上控制颜色的方法和应用&#xff0c;包括将图像从一些的色彩空间中移入移出&#xff0c;以及快速地给任何2D或3D场景加上精美的色调。 色彩校正&#xff08;Color Correction&#xff09;是几乎所有印刷和胶片成像应…

GPU Gems1 - 25 用纹理贴图进行快速过滤宽度的计算

这章介绍在片元shader中计算导数近似值的技术。这个技术把特别的值载入纹理mipmap的每个级别&#xff0c;以特殊的方式使用纹理映射硬件&#xff0c;计算出导数的结果&#xff0c;给出在屏幕上的像素间某个量的变化率。 Cg标准程序库提供ddx和ddy函数&#xff0c;计算任意关于…