图形学笔记(十一)光线追踪——Shadow Mapping、光线追踪、光线投射、软硬阴影、光线与物体交点、AABB包围盒

图形学笔记(十)几何2 —— 曲面细分(Loop细分、Catmull-Clark细分)、曲面简化(边坍缩、二次度量误差)、曲面正则化
图形学笔记(十二)光线追踪2——使用AABB包围盒加速光线追踪、空间划分(八叉树、KD树、BSP树)、物体划分(BVH加速结构)、光线与物体求交

1 Shadow Mapping与光线追踪

1.1 Shadow Mapping

1.1.1 概览

Shadow Mapping本质是一种图像空间的算法。

关键思想
不在阴影中的点必须可以同时被摄像机光源看到。

1.1.2 Shadow Mapping步骤

1> 从光源渲染

从光源看场景,获得深度图(z-buffer)。
在这里插入图片描述

2> 从摄像机渲染

从摄像机看场景,对于每一个看到的点,将其映射回光源渲染的深度图上, 比较从光源到这个看到的点的深度和其在深度图上对应的深度,若深度一致,说明这个点可以同时被光源和摄像机看到。
在这里插入图片描述

1.1.3 Shadow Mapping结果

如下图非绿色的是阴影应该在的地方。
在这里插入图片描述

1.1.4 Shadow Mapping的问题

  • 生成的是硬阴影(只对点光源)。
  • 阴影的效果取决于shadow map的分辨率。
  • 涉及浮点精度比较的问题。

1.2 软阴影和硬阴影

1.2.1 概览

如下图,左边是硬阴影(界限比较清晰),右边是软阴影。
在这里插入图片描述

1.2.2 软阴影的原理

由于点光源有大小,会形成如图所示的(Umbra)本影区域和半影(Penumbra)区域。所以会形成阴影的过渡。
在这里插入图片描述

1.3 进行光线追踪(Ray Tracing)的原因

光栅化不能很好的处理全局效果(如下图所示)。

  • 难以做软阴影。

  • 难以表现光线多次弹射,比如间接光照。
    在这里插入图片描述

  • 光栅化很快但是质量较低

  • 光线追踪很准确,但是很慢
    光栅化:实时(游戏),光线追踪:离线(动画)。
    光线追踪一帧就要花10K个计算机小时

2 光线追踪算法

2.1 光线(图形学角度做的假设)

  1. 光线沿直线传播。
  2. 光线和光线不会发生碰撞。
  3. 光线会从光源发出,打到场景中,经过反射折射等最终进入人眼(光线具有可逆性)。

2.2 光线投射(Ray Casting)

光线投射是光线追踪中用于生成初始光线的第一步。

  1. 通过从每一个像素发射光线来生成图像。
  2. 通过从光源发射光线来检测阴影。

从视点开始经过像素获得与场景中物体最近的交点。
在这里插入图片描述
和光源连线,判断是否对光源可见从而确定该点是否在阴影中。
在这里插入图片描述
然后计算着色,写回像素结果。

2.3 Recursive(Whitted- Style) Ray Tracing

此算法在79年渲染1帧用了74min、06年PC需要6s、12年的GPU需要1/30s。

此算法要考虑反射和折射的光线,如下图所示。
在这里插入图片描述
每一个弹射点都要计算着色的值,然后把所有着色的值都加到像素的值里面去。
在这里插入图片描述
光线有不同的分类:primary ray、secondary ray、shadow ray。
在这里插入图片描述

3 光线与物体的交点 Ray-Object intersections

3.1 基本概念

3.1.1 光线

光线在数学上是有起点和方向的射线,表达式如下,t代表时间。
在这里插入图片描述

3.1.2 平面

通过一个法向量和一个平面上的点来进行定义。
在这里插入图片描述
平面的表达式 平面是满足下面条件所有p点的集合。
p : ( p − p ′ ) ⋅ N = 0 p:(p-p')·N=0 p:(pp)N=0

3.2 光线与球求交

光线与球的交点p,必须要满足p既在光线上也在上。
在这里插入图片描述
球的表达式如下:
在这里插入图片描述
将光线方程代入,获得如下等式:
在这里插入图片描述
最后求得(解的的t代入参数方程就是交点):
在这里插入图片描述

3.3 光线和隐式表面求交

如果隐式表面的表达式
P : f ( p ) = 0 P:f(p)=0 P:f(p)=0
则把这个式子代入光线等式,得到 f ( o + t d ) = 0 f(o+td)=0 f(o+td)=0

解出来结果t,即可得到交点(t必须是实数,也要是正数)。

3.4 光线和三角形面求交

3.4.1 原因

光线和三角形求交有如下作用:

  • 渲染:可见性、阴影、光照…
  • 几何:可以判断点是再物体内还是物体外。
    对任何一个封闭的曲面,在内部找一个点,如果点在形状内,那么从这个点发出的任意方向的射线与此物体的交点数量一定是奇数。

3.4.2 算法(与平面求交再判断是否在三角形内)

简单的办法是让场景中的每个三角形与光线进行求交计算,但是有如下严重问题。

  • 简单但是运算量大。
  • 可以有0或1个交点。

如果想要计算光线和三角形面的交点,因为三角形在平面内,所以可以把光线和三角形求交拆成两个问题:

  1. 让光线与平面求交(目前与平面求交比与三角形求交容易)。
  2. 判断与平面的交点是否在三角形内。

在这里插入图片描述
让光线与平面求交 p = r ( t ) p=r(t) p=r(t)代入平面的表达式(t是正实数),结果如下。
t = ( p ′ − o ) ⋅ N d ⋅

阴影和软阴影阴影的两种不同类型。硬阴影是由理想中的点光源造成的,只有本影区,边缘清晰。而软阴影是由现实中的光源造成的,有半影区,边缘模糊。\[1\] 硬阴影是指当光线物体完全遮挡时,形成的清晰的阴影边缘。这种阴影通常由点光源产生,例如太阳或灯泡。硬阴影的边缘非常锐利,没有模糊或渐变的效果。\[1\] 软阴影是指当光线物体部分遮挡时,形成的模糊的阴影边缘。这种阴影通常由光源的体积和光线的散射效果产生。软阴影的边缘不那么清晰,有一定的模糊和渐变效果。\[1\] 软阴影的模糊效果取决于光源和接受者之间的距离。当光源和接受者之间的距离越近,软阴影的边缘就越清晰,软度降低。这是因为光线经过较短的距离后,被物体遮挡的程度更大,形成的半影区更明显。\[1\] 总结来说,硬阴影是由理想的点光源产生的,只有本影区,边缘清晰。而软阴影是由现实中的光源产生的,有半影区,边缘模糊。软阴影的模糊程度取决于光源和接受者之间的距离。\[1\] #### 引用[.reference_title] - *1* *3* [软阴影阴影](https://blog.csdn.net/wodownload2/article/details/103888380)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [图形学笔记十一光线追踪——Shadow Mapping光线追踪光线投射软硬阴影光线物体交点AABB包围...](https://blog.csdn.net/weixin_43399489/article/details/121470682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值