Lecture 03 Real-time Shadows 1

news/2024/11/16 8:13:23/文章来源:https://www.cnblogs.com/Tellulu/p/18391221

Real-time Shadows 1

Recap: shadow mapping

Shadow Mapping

  • 2-Pass Algorithm
    • The light pass generates the shadow map
    • the camera pass uses the shadow map
  • An image-space algorithm
    • 好处:无需场景中的几何信息
    • 坏处:导致自遮挡和走样问题

Pass

  • Pass 1: Render from light

    • 从光源输出深度图
  • Pass 2: Render from Eye

    • 从相机出发渲染

    • 将实际相机看到的像素投影回光源看到的深度图(逆变换)记录的像素上,如果该点深度与光源记录的深度图中对应像素深度一致,则说明是同一个点,可以被看到,否则说明这个点是光源看不到的点,说明在阴影中

      使用Z值或者离相机的实际距离都可以,但两次Pass要比较同一种值

Shadow Mapping中的问题

Self occlusion 自遮挡

  • 解决方法:

    • 增加一个bias减轻自遮挡

      bias过大,出现Peter Pan现象(detached shadow)

      工业界几乎没有方法解决,只能找一个比较合适的bias

    • Second-depth shadow mapping
      • Shadow Map中存最小深度和第二小深度

      • 使用最小深度和最二小深度的中值来做后续阴影比较

      • 这样无需设定bias(相当于自适应bias)

      • 工业界用的少

        原因:

        • 要求所有物体是watertight,即必须有正面反面,就算是一张纸,也得是很薄的一个物体

          比如说“地板”不是一个watertight(解决方法,记录次浅深度为无限大)

        • 输入的fragment是无序的,要始终保持最小和次小,要涉及到Swap,虽然时间复杂度仍然是\(O(n)\),能够实现,但是实时渲染不相信复杂度,只相信绝对的速度,因为实时渲染要求速度很苛刻,\(n\)\(2n\)差异很大

Aliasing 走样

The math behind shadow mapping

微积分中的不等式

  • Schwaz施瓦茨不等式

    \[[\int_a^bf(x)g(x)dx]^2\le\int_a^bf^2(x)dx\cdot\int_a^bg^2(x)dx \]

  • Minkowski明可夫斯基不等式

    \[\{\int_a^b[f(x)+g(x)]^2dx\}^{\frac{1}{2}} \le \{\int_a^b f^2(x)dx\}^{\frac{1}{2}} + \{\int_a^b g^2(x)dx\}^{\frac{1}{2}} \]

实时渲染中的重要约等式

\[\int_{\Omega}f(x)g(x)dx \approx \frac{\int_{\Omega}f(x)dx}{\int_{\Omega}dx} \cdot \int_{\Omega}g(x)dx \]

这里将两个乘积的积分转化成了两个积分的乘积,右侧分母\(\int_{\Omega}dx(=\int_{\Omega}1dx)\)是归一化常数

以下条件满足任一可认为约等式成立

  • Small support(当积分域很小时)

    • point/directional lighting

      点光源或方向光时,只有一个点有光照

  • Smooth integrand,g(x)在积分域内比较光滑

    • (diffuse bsdf / constant radiance area lighting)

      如有一个面光源,面光源内部给出radiance不变,这样L就完完全全smooth了

      在BRDF中,当BRDF是diffuse时,认为其变化非常小,当是glosssing,则不行

  • 即使两项都不满足,也能强行用,如Ambient Occultation环境光遮蔽中

在Shadow Mapping中

\[L_o(p,\omega_o)=\int_{\Omega^+}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)\cos\theta_iV(p,\omega_i)d\omega_i\\ 通过上面的约等式,可以转化成\\ L_0(p,\omega_o) \approx \frac{\int_{\Omega^+}V(p,\omega_i)d\omega_i}{\int_{\Omega^+d\omega_i}}\cdot\int_{\Omega^+}L_i(p,\omega_i)f_r(p,\omega_i,\omega_o)\cos\theta_id\omega_i\\ 左式是Visibility(上式的V),右式是shading,这样就把shading和visibility分开了 \]

于是在BRDF中,对于面光源或环境光照(环境光照可以理解为一个超大的面光源),Shadow Mapping是不准的

Percentage closer soft shadows (PCSS)

Soft shadows 软阴影:本影到没有阴影处的过渡

Percentage Closer Filtering (PCF)

PCF最早用于反走样(抗锯齿)

PCF的两点注意

  • 不是对最后已经有阴影的地方进行Filter
  • 如果是对Shadow Map做模糊,那阴影处和阴影外之间模糊的一圈毫无物理意义,且第二趟Pass和模糊了的Shadow Map做深度测试,得到的结果还是非0即1

PCF的工作原理:

普通Shadow Map是比较shading point变换到Shadow Map上对应点的深度,而PCF比较对应点周围一圈的深度(比如说\(7\times 7\)),将做完比较的结果平均(每次比较结果非0即1),得到一个visibility

PCF Filter的是任意一个shading point,做很多次阴影比较的结果

Filter size:

Filter size越大阴影越软。越小阴影越硬,那么是否各个不同的位置都要给一个相同大小的Filter size呢?

如图这里笔尖阴影非常锐利,几乎没有软阴影,而远处的阴影有软阴影

远近取决于shading point离投射阴影的point的距离(与遮挡物距离有关,与光源距离无关)

关键结论

Filter size取决于遮挡物距离,更精确的说,与投射阴影的遮挡物的平均深度有关

根据相似三角形,可以得到半影范围与遮挡物距离的关系\(w_{Penumbra}=(d_{Receiver}-d_{Blocker})\cdot w_{Light}/d_{Blocker}\),这里\(w_{Penumbra}\)一定程度就可以表示阴影软的程度

*对于面光源,原本是无法生成Shadow Map的,一般做法是将其当成点光源处理,将相机放在面光源中心生成Shadow Map

PCSS

  • step 1: Blocker search

    在特定范围内获得average blocker depth

    取周围区域,判断在不在阴影里,将所有Blocker的深度取平均记录(不是Blocker不管)

  • step 2: Penumbra estimation

    使用average blocker depth确定filter size

    知道各处filter size多大,后续就跟PCF做法一样了

  • step 3: Pencertage Closer Filtering

要获得average blocker depth时,需确定在多大范围内比较

  • 设为常量(如\(5\times5\)
    • 取决于光源大小
    • 以及shading point离光源的距离

Filter导致的开销问题?

多光源场景下如果使用Shadow Map,只能逐光源处理(延迟渲染不能解决阴影,延迟渲染解决光照)

点光源和平行光源本身就应该产生硬阴影

PCSS核心就是一个适应性的Filter size

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

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

相关文章

[转]高斯-牛顿算法

Gauss-Newton算法是解决非线性最优问题的常见算法之一,最近研读开源项目代码,又碰到了,索性深入看下。本次讲解内容如下:基本数学名词识记 牛顿法推导、算法步骤、计算实例 高斯牛顿法推导(如何从牛顿法派生)、算法步骤、编程实例 高斯牛顿法优劣总结 一、基本概念定义 1.非…

USB TCPM

USB TCPM(Type-C Port Manager)的主要作用是管理 USB Type-C 端口的连接和电源传输协议(USB Power Delivery, PD),确保设备正确识别、协商和切换数据传输和电源供应的角色。TCPM 在 USB Type-C 连接中起到关键管理作用,主要职责包括:管理 USB Type-C 插拔检测:检测设备…

ZBook14灵耀

[cpu]13900H:3000 [LPDDR5 4800]4*8G:550 [IPS 140GF-2L01-14 ] :300 [WD]SN560 1T:400 [板3402]:900

[转]OpenCV4.8 GPU版本CMake编译详细步骤 与CUDA代码演示

导 读 本文将详细介绍如何使用CMake编译OpenCV4.8 CUDA版本并给出Demo演示,方便大家学习使用。 CMake编译详细步骤废话不多说,直接进入正题!【1】我使用的工具版本VS2017 + CMake3.18.2 + OpenCV4.8.0 + CUDA11.2一般情况下VS版本≥VS2017均可,CMake版本≥3.18.2,OpenC…

[图文直播]搭建Zfile私有网盘

特别提醒 部署好后,发现还需要借助外部存储源,而且暂时还没有增加对FTP的支持,那就意味着即便我搭建私有FTP,也暂时无法实现真正的私有网盘。暂时不符合我的要求,仅记录。 前言 以下是ZFile的官网,上面也涉及到了搭建方法 https://docs.zfile.vip/install/os-windows 此次…

gcc/g++编译

gcc编译编译工具链我们写程序的时候用的都是集成开发环境 (IDE: Integrated Development Environment),集成开发环境可以极大地方便我们程序员编写程序,但是配置起来也相对麻烦。在 Linux 环境下,我们用的是编译工具链,又叫软件开发工具包(SDK:Software Development Kit)。…

islide使用教程

1. 主题下载,点击“主题库”,可选择各种主题版本PPT模板下载 以上仅供参考,如有疑问,留言联系

对偶单纯形法算法精要

单纯形法是线性规划中最经典且广泛应用的求解方法,通过在可行解的边界上移动,逐步逼近最优解。它从一个初始基本可行解开始,不断优化目标函数值,直到找到最优解。对偶单纯形法则是单纯形法的一种变形,尤其适用于特定类型的线性规划问题。不同于标准的单纯形法,对偶单纯形…

ppt或wps安装islide

windows安装包下载: 官网:https://www.islide.cc/2. 一路下一步,可选择自定义安装路径,安装后点击体验,打开这个文件 3.能看到里面自动多了islide插件,内容可使用 以上仅供参考,如有疑问,留言联系

一键下载微博美图,‌这款浏览器插件让你轻松拥有!‌

偶尔在逛微博的时候,会遇到一些不错的照片,会想要保存下。但逐个保存太麻烦了,因此在 Chrome 插件商店搜了下,还真有一个能一键下载的插件,来分享一波。300.一键下载微博图片和视频 偶尔在逛微博的时候,会遇到一些不错的照片,会想要保存下。但逐个保存太麻烦了,因此在 …

使用 nuxi clean 命令清理 Nuxt 项目

title: 使用 nuxi clean 命令清理 Nuxt 项目 date: 2024/9/1 updated: 2024/9/1 author: cmdragon excerpt: nuxi clean 命令是管理和维护 Nuxt 项目的重要工具,它帮助你快速清理生成的文件和缓存,确保开发环境的干净。通过定期使用这个命令,你可以避免由于缓存或生成文件…

Dify大语言模型应用开发平台新手必备:安装注册与私有服务器部署全步骤

Dify简介 Dify是一个开源的大语言模型(Large Language Model, LLM)应用开发平台。它融合了后端即服务(Backend as a Service, BaaS)和LLMOps的理念,旨在帮助开发者,甚至是非技术人员,能够快速搭建和部署生成式AI应用程序。 Dify的主要特点包括:简化开发流程:通过提供一…